@yoopta/editor 6.0.0-beta.12 → 6.0.0-beta.14

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../node_modules/validator/lib/util/assertString.js","../../../../node_modules/validator/lib/util/checkHost.js","../../../../node_modules/validator/lib/util/includesString.js","../../../../node_modules/validator/lib/util/merge.js","../../../../node_modules/validator/lib/isFQDN.js","../../../../node_modules/validator/lib/isIP.js","../../../../node_modules/validator/lib/isURL.js","../src/plugins/extenstions/with-inlines.ts","../src/utils/generateId.ts","../src/editor/blocks/buildBlockData.ts","../src/editor/blocks/getBlock.ts","../src/editor/blocks/decreaseBlockDepth.ts","../src/editor/paths/getBlockOrder.ts","../src/editor/paths/getNextBlockOrder.ts","../src/editor/paths/getPreviousBlockOrder.ts","../src/editor/paths/getSelectedPaths.ts","../src/editor/paths/isBlockSelected.ts","../src/editor/paths/isPathEmpty.ts","../src/editor/paths/setPath.ts","../src/utils/get-node-points.ts","../src/utils/findSlateBySelectionPath.tsx","../src/editor/selection/getFirstPoint.ts","../src/editor/paths/index.ts","../src/editor/blocks/getBlockSlate.ts","../src/editor/blocks/deleteBlock.ts","../../../../node_modules/lodash.clonedeep/index.js","../src/editor/blocks/duplicateBlock.ts","../src/utils/weakMaps.ts","../src/editor/blocks/focusBlock.ts","../src/editor/blocks/increaseBlockDepth.ts","../src/utils/get-block-plugins.ts","../src/components/Editor/utils.ts","../src/utils/block-elements.ts","../src/editor/blocks/insertBlock.ts","../src/editor/elements/deleteElement.ts","../src/editor/elements/getElement.ts","../src/editor/elements/getElementChildren.ts","../src/editor/elements/getElementEntry.ts","../src/editor/elements/getElementPath.ts","../src/editor/elements/getElementRect.ts","../src/editor/elements/getElements.ts","../src/editor/elements/getParentElementPath.ts","../src/editor/elements/insertElement.ts","../src/editor/elements/isElementEmpty.ts","../src/editor/elements/updateElement.ts","../src/editor/elements/index.ts","../src/editor/blocks/mergeBlock.ts","../src/editor/blocks/moveBlock.ts","../src/editor/blocks/splitBlock.ts","../src/editor/elements/create-element-structure.ts","../src/editor/blocks/toggleBlock.ts","../src/editor/blocks/updateBlock.ts","../src/editor/blocks/index.ts","../../../../node_modules/is-hotkey/lib/index.js","../src/utils/hotkeys.ts","../src/plugins/hooks.ts","../src/components/text-leaf/text-leaf.tsx","../../../../node_modules/eventemitter3/index.js","../../../../node_modules/immer/src/utils/env.ts","../../../../node_modules/immer/src/utils/errors.ts","../../../../node_modules/immer/src/utils/common.ts","../../../../node_modules/immer/src/utils/plugins.ts","../../../../node_modules/immer/src/core/scope.ts","../../../../node_modules/immer/src/core/finalize.ts","../../../../node_modules/immer/src/core/proxy.ts","../../../../node_modules/immer/src/core/immerClass.ts","../../../../node_modules/immer/src/core/current.ts","../../../../node_modules/immer/src/immer.ts","../src/extensions/shortcuts.ts","../src/utils/build-slate.ts","../src/editor/core/applyTransforms.ts","../src/editor/core/batchOperations.ts","../src/editor/core/blur.ts","../src/editor/core/focus.ts","../src/editor/core/getEditorValue.ts","../src/editor/core/history.ts","../src/editor/core/isFocused.ts","../src/utils/validations.ts","../src/editor/core/setEditorValue.ts","../src/parsers/serializeTextNodes.ts","../src/parsers/getEmail.ts","../src/parsers/getYooptaJSON.ts","../src/parsers/getHTML.ts","../src/parsers/getMarkdown.ts","../src/parsers/getPlainText.ts","../src/editor/core/isEmpty.ts","../src/editor/textFormats/getValue.ts","../src/editor/textFormats/isActive.ts","../src/editor/textFormats/toggle.ts","../src/editor/textFormats/update.ts","../src/utils/editor-builders.ts","../src/editor/index.tsx","../src/contexts/YooptaContext/YooptaContext.tsx","../src/utils/enter-action.ts","../src/utils/execute-backspace-action.ts","../src/utils/get-next-hierarchical-selection.ts","../src/handlers/onKeyDown.ts","../src/handlers/index.ts","../src/parsers/deserializeHTML.ts","../src/parsers/deserializeYooptaJSON.ts","../src/plugins/slate-editor-component.tsx","../src/components/Block/Block.tsx","../src/components/Editor/render-blocks.tsx","../src/components/Editor/selection.ts","../src/components/Editor/render-editor.tsx","../src/yoopta-editor.tsx","../src/plugins/build-plugin-elements.ts","../src/plugins/create-yoopta-plugin.tsx","../src/parsers/deserializeTextNodes.ts","../src/marks/index.ts","../src/editor/textFormats/addMark.ts","../src/editor/textFormats/clearMarks.ts","../src/editor/textFormats/getMarks.ts","../src/editor/textFormats/removeMark.ts","../src/editor/textFormats/index.ts","../src/editor/selection/getAnchor.ts","../src/editor/selection/getCurrent.ts","../src/editor/selection/getEnd.ts","../src/editor/selection/getFocus.ts","../src/editor/selection/getLastPoint.ts","../src/editor/selection/getNext.ts","../src/editor/selection/getPrevious.ts","../src/editor/selection/getRange.ts","../src/editor/selection/getSelected.ts","../src/editor/selection/getSlateSelection.ts","../src/editor/selection/getStart.ts","../src/editor/selection/isBlockSelected.ts","../src/editor/selection/isCollapsed.ts","../src/editor/selection/isEmpty.ts","../src/editor/selection/isExpanded.ts","../src/editor/selection/setCurrent.ts","../src/editor/selection/setSelected.ts","../src/editor/selection/setSlateSelection.ts","../src/editor/selection/index.ts","../src/index.ts"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = assertString;\nfunction assertString(input) {\n if (input === undefined || input === null) throw new TypeError(\"Expected a string but received a \".concat(input));\n if (input.constructor.name !== 'String') throw new TypeError(\"Expected a string but received a \".concat(input.constructor.name));\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = checkHost;\nfunction isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nfunction checkHost(host, matches) {\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n if (host === match || isRegExp(match) && match.test(host)) {\n return true;\n }\n }\n return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar includes = function includes(str, val) {\n return str.indexOf(val) !== -1;\n};\nvar _default = exports.default = includes;\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = merge;\nfunction merge() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var defaults = arguments.length > 1 ? arguments[1] : undefined;\n for (var key in defaults) {\n if (typeof obj[key] === 'undefined') {\n obj[key] = defaults[key];\n }\n }\n return obj;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isFQDN;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nvar default_fqdn_options = {\n require_tld: true,\n allow_underscores: false,\n allow_trailing_dot: false,\n allow_numeric_tld: false,\n allow_wildcard: false,\n ignore_max_length: false\n};\nfunction isFQDN(str, options) {\n (0, _assertString.default)(str);\n options = (0, _merge.default)(options, default_fqdn_options);\n\n /* Remove the optional trailing dot before checking validity */\n if (options.allow_trailing_dot && str[str.length - 1] === '.') {\n str = str.substring(0, str.length - 1);\n }\n\n /* Remove the optional wildcard before checking validity */\n if (options.allow_wildcard === true && str.indexOf('*.') === 0) {\n str = str.substring(2);\n }\n var parts = str.split('.');\n var tld = parts[parts.length - 1];\n if (options.require_tld) {\n // disallow fqdns without tld\n if (parts.length < 2) {\n return false;\n }\n if (!options.allow_numeric_tld && !/^([a-z\\u00A1-\\u00A8\\u00AA-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {\n return false;\n }\n\n // disallow spaces\n if (/\\s/.test(tld)) {\n return false;\n }\n }\n\n // reject numeric TLDs\n if (!options.allow_numeric_tld && /^\\d+$/.test(tld)) {\n return false;\n }\n return parts.every(function (part) {\n if (part.length > 63 && !options.ignore_max_length) {\n return false;\n }\n if (!/^[a-z_\\u00a1-\\uffff0-9-]+$/i.test(part)) {\n return false;\n }\n\n // disallow full-width chars\n if (/[\\uff01-\\uff5e]/.test(part)) {\n return false;\n }\n\n // disallow parts starting or ending with hyphen\n if (/^-|-$/.test(part)) {\n return false;\n }\n if (!options.allow_underscores && /_/.test(part)) {\n return false;\n }\n return true;\n });\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isIP;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n11.3. Examples\n\n The following addresses\n\n fe80::1234 (on the 1st link of the node)\n ff02::5678 (on the 5th link of the node)\n ff08::9abc (on the 10th organization of the node)\n\n would be represented as follows:\n\n fe80::1234%1\n ff02::5678%5\n ff08::9abc%10\n\n (Here we assume a natural translation from a zone index to the\n <zone_id> part, where the Nth zone of any scope is translated into\n \"N\".)\n\n If we use interface names as <zone_id>, those addresses could also be\n represented as follows:\n\n fe80::1234%ne0\n ff02::5678%pvc1.3\n ff08::9abc%interface10\n\n where the interface \"ne0\" belongs to the 1st link, \"pvc1.3\" belongs\n to the 5th link, and \"interface10\" belongs to the 10th organization.\n * * */\nvar IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\nvar IPv4AddressFormat = \"(\".concat(IPv4SegmentFormat, \"[.]){3}\").concat(IPv4SegmentFormat);\nvar IPv4AddressRegExp = new RegExp(\"^\".concat(IPv4AddressFormat, \"$\"));\nvar IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';\nvar IPv6AddressRegExp = new RegExp('^(' + \"(?:\".concat(IPv6SegmentFormat, \":){7}(?:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){6}(?:\").concat(IPv4AddressFormat, \"|:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){5}(?::\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,2}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){4}(?:(:\").concat(IPv6SegmentFormat, \"){0,1}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,3}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){3}(?:(:\").concat(IPv6SegmentFormat, \"){0,2}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,4}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){2}(?:(:\").concat(IPv6SegmentFormat, \"){0,3}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,5}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){1}(?:(:\").concat(IPv6SegmentFormat, \"){0,4}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,6}|:)|\") + \"(?::((?::\".concat(IPv6SegmentFormat, \"){0,5}:\").concat(IPv4AddressFormat, \"|(?::\").concat(IPv6SegmentFormat, \"){1,7}|:))\") + ')(%[0-9a-zA-Z.]{1,})?$');\nfunction isIP(ipAddress) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0, _assertString.default)(ipAddress);\n\n // accessing 'arguments' for backwards compatibility: isIP(ipAddress [, version])\n // eslint-disable-next-line prefer-rest-params\n var version = (_typeof(options) === 'object' ? options.version : arguments[1]) || '';\n if (!version) {\n return isIP(ipAddress, {\n version: 4\n }) || isIP(ipAddress, {\n version: 6\n });\n }\n if (version.toString() === '4') {\n return IPv4AddressRegExp.test(ipAddress);\n }\n if (version.toString() === '6') {\n return IPv6AddressRegExp.test(ipAddress);\n }\n return false;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isURL;\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\nvar _checkHost = _interopRequireDefault(require(\"./util/checkHost\"));\nvar _includesString = _interopRequireDefault(require(\"./util/includesString\"));\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/*\noptions for isURL method\n\nprotocols - valid protocols can be modified with this option.\nrequire_tld - If set to false isURL will not check if the URL's host includes a top-level domain.\nrequire_protocol - if set to true isURL will return false if protocol is not present in the URL.\nrequire_host - if set to false isURL will not check if host is present in the URL.\nrequire_port - if set to true isURL will check if port is present in the URL.\nrequire_valid_protocol - isURL will check if the URL's protocol is present in the protocols option.\nallow_underscores - if set to true, the validator will allow underscores in the URL.\nhost_whitelist - if set to an array of strings or regexp, and the domain matches none of the strings\n defined in it, the validation fails.\nhost_blacklist - if set to an array of strings or regexp, and the domain matches any of the strings\n defined in it, the validation fails.\nallow_trailing_dot - if set to true, the validator will allow the domain to end with\n a `.` character.\nallow_protocol_relative_urls - if set to true protocol relative URLs will be allowed.\nallow_fragments - if set to false isURL will return false if fragments are present.\nallow_query_components - if set to false isURL will return false if query components are present.\ndisallow_auth - if set to true, the validator will fail if the URL contains an authentication\n component, e.g. `http://username:password@example.com`\nvalidate_length - if set to false isURL will skip string length validation. `max_allowed_length`\n will be ignored if this is set as `false`.\nmax_allowed_length - if set, isURL will not allow URLs longer than the specified value (default is\n 2084 that IE maximum URL length).\n\n*/\n\nvar default_url_options = {\n protocols: ['http', 'https', 'ftp'],\n require_tld: true,\n require_protocol: false,\n require_host: true,\n require_port: false,\n require_valid_protocol: true,\n allow_underscores: false,\n allow_trailing_dot: false,\n allow_protocol_relative_urls: false,\n allow_fragments: true,\n allow_query_components: true,\n validate_length: true,\n max_allowed_length: 2084\n};\nvar wrapped_ipv6 = /^\\[([^\\]]+)\\](?::([0-9]+))?$/;\nfunction isURL(url, options) {\n (0, _assertString.default)(url);\n if (!url || /[\\s<>]/.test(url)) {\n return false;\n }\n if (url.indexOf('mailto:') === 0) {\n return false;\n }\n options = (0, _merge.default)(options, default_url_options);\n if (options.validate_length && url.length > options.max_allowed_length) {\n return false;\n }\n if (!options.allow_fragments && (0, _includesString.default)(url, '#')) {\n return false;\n }\n if (!options.allow_query_components && ((0, _includesString.default)(url, '?') || (0, _includesString.default)(url, '&'))) {\n return false;\n }\n var protocol, auth, host, hostname, port, port_str, split, ipv6;\n split = url.split('#');\n url = split.shift();\n split = url.split('?');\n url = split.shift();\n\n // Replaced the 'split(\"://\")' logic with a regex to match the protocol.\n // This correctly identifies schemes like `javascript:` which don't use `//`.\n // However, we need to be careful not to confuse authentication credentials (user:password@host)\n // with protocols. A colon before an @ symbol might be part of auth, not a protocol separator.\n var protocol_match = url.match(/^([a-z][a-z0-9+\\-.]*):/i);\n var had_explicit_protocol = false;\n var cleanUpProtocol = function cleanUpProtocol(potential_protocol) {\n had_explicit_protocol = true;\n protocol = potential_protocol.toLowerCase();\n if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {\n // The identified protocol is not in the allowed list.\n return false;\n }\n\n // Remove the protocol from the URL string.\n return url.substring(protocol_match[0].length);\n };\n if (protocol_match) {\n var potential_protocol = protocol_match[1];\n var after_colon = url.substring(protocol_match[0].length);\n\n // Check if what follows looks like authentication credentials (user:password@host)\n // rather than a protocol. This happens when:\n // 1. There's no `//` after the colon (protocols like `http://` have this)\n // 2. There's an `@` symbol before any `/`\n // 3. The part before `@` contains only valid auth characters (alphanumeric, -, _, ., %, :)\n var starts_with_slashes = after_colon.slice(0, 2) === '//';\n if (!starts_with_slashes) {\n var first_slash_position = after_colon.indexOf('/');\n var before_slash = first_slash_position === -1 ? after_colon : after_colon.substring(0, first_slash_position);\n var at_position = before_slash.indexOf('@');\n if (at_position !== -1) {\n var before_at = before_slash.substring(0, at_position);\n var valid_auth_regex = /^[a-zA-Z0-9\\-_.%:]*$/;\n var is_valid_auth = valid_auth_regex.test(before_at);\n\n // Check if this contains URL-encoded content that could be malicious\n // For example: javascript:%61%6c%65%72%74%28%31%29@example.com\n // The encoded part decodes to: alert(1)\n var has_encoded_content = /%[0-9a-fA-F]{2}/.test(before_at);\n if (is_valid_auth && !has_encoded_content) {\n // This looks like authentication (e.g., user:password@host), not a protocol\n if (options.require_protocol) {\n return false;\n }\n\n // Don't consume the colon; let the auth parsing handle it later\n } else {\n // This looks like a malicious protocol (e.g., javascript:alert();@host)\n // or URL-encoded protocol handler (e.g., javascript:%61%6c%65%72%74%28%31%29@host)\n url = cleanUpProtocol(potential_protocol);\n if (url === false) {\n return false;\n }\n }\n } else {\n // No @ symbol found. Check if this could be a port number instead of a protocol.\n // If what's after the colon is numeric (or starts with a digit and contains only\n // valid port characters until a path separator), it's likely hostname:port, not a protocol.\n var looks_like_port = /^[0-9]/.test(after_colon);\n if (looks_like_port) {\n // This looks like hostname:port, not a protocol\n if (options.require_protocol) {\n return false;\n }\n // Don't consume anything; let it be parsed as hostname:port\n } else {\n // This is definitely a protocol\n url = cleanUpProtocol(potential_protocol);\n if (url === false) {\n return false;\n }\n }\n }\n } else {\n // Starts with '//', this is definitely a protocol like http://\n url = cleanUpProtocol(potential_protocol);\n if (url === false) {\n return false;\n }\n }\n } else if (options.require_protocol) {\n return false;\n }\n\n // Handle leading '//' only as protocol-relative when there was NO explicit protocol.\n // If there was an explicit protocol, '//' is the normal separator\n // and should be stripped unconditionally.\n if (url.slice(0, 2) === '//') {\n if (!had_explicit_protocol && !options.allow_protocol_relative_urls) {\n return false;\n }\n url = url.slice(2);\n }\n if (url === '') {\n return false;\n }\n split = url.split('/');\n url = split.shift();\n if (url === '' && !options.require_host) {\n return true;\n }\n split = url.split('@');\n if (split.length > 1) {\n if (options.disallow_auth) {\n return false;\n }\n if (split[0] === '') {\n return false;\n }\n auth = split.shift();\n if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {\n return false;\n }\n var _auth$split = auth.split(':'),\n _auth$split2 = _slicedToArray(_auth$split, 2),\n user = _auth$split2[0],\n password = _auth$split2[1];\n if (user === '' && password === '') {\n return false;\n }\n }\n hostname = split.join('@');\n port_str = null;\n ipv6 = null;\n var ipv6_match = hostname.match(wrapped_ipv6);\n if (ipv6_match) {\n host = '';\n ipv6 = ipv6_match[1];\n port_str = ipv6_match[2] || null;\n } else {\n split = hostname.split(':');\n host = split.shift();\n if (split.length) {\n port_str = split.join(':');\n }\n }\n if (port_str !== null && port_str.length > 0) {\n port = parseInt(port_str, 10);\n if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {\n return false;\n }\n } else if (options.require_port) {\n return false;\n }\n if (options.host_whitelist) {\n return (0, _checkHost.default)(host, options.host_whitelist);\n }\n if (host === '' && !options.require_host) {\n return true;\n }\n if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) {\n return false;\n }\n host = host || ipv6;\n if (options.host_blacklist && (0, _checkHost.default)(host, options.host_blacklist)) {\n return false;\n }\n return true;\n}\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","import { Editor, Range, Element as SlateElement, Transforms } from 'slate';\nimport isURL from 'validator/lib/isURL';\n\nimport type { SlateEditor, YooEditor } from '../../editor/types';\n\nfunction isUrl(string: string): boolean {\n if (!string || string.length > 2048) return false;\n\n return isURL(string, {\n protocols: ['http', 'https'],\n require_protocol: true,\n require_valid_protocol: true,\n require_host: true,\n require_port: false,\n allow_protocol_relative_urls: false,\n allow_fragments: true,\n allow_query_components: true,\n allow_underscores: true,\n disallow_auth: false,\n });\n}\n\nconst isLinkActive = (slate) => {\n const [link] = Editor.nodes(slate, {\n match: (n) => !Editor.isEditor(n) && SlateElement.isElement(n) && n.type === 'link',\n });\n return !!link;\n};\n\nconst removeLink = (slate) => {\n Transforms.unwrapNodes(slate, {\n match: (n) => !Editor.isEditor(n) && SlateElement.isElement(n) && n.type === 'link',\n });\n};\n\nconst addLink = (editor: YooEditor, slate: SlateEditor, url: string) => {\n if (isLinkActive(slate)) {\n removeLink(slate);\n }\n\n const { selection } = slate;\n const isCollapsed = selection && Range.isCollapsed(selection);\n\n // Should be moved to the Link plugin\n const defaultLinkProps: Record<string, unknown> | undefined =\n editor.plugins?.Link?.elements?.link?.props;\n\n const link = {\n type: 'link',\n children: isCollapsed ? [{ text: url }] : [],\n props: {\n url,\n target: defaultLinkProps?.target || '_self',\n rel: defaultLinkProps?.rel || 'noopener noreferrer',\n },\n } as SlateElement;\n\n if (isCollapsed) {\n Transforms.insertNodes(slate, link);\n } else {\n Transforms.wrapNodes(slate, link, { split: true });\n Transforms.collapse(slate, { edge: 'end' });\n }\n};\n\nexport const withInlines = (editor: YooEditor, slate: SlateEditor) => {\n const { insertData, insertText } = slate;\n\n slate.insertText = (text) => {\n if (text && isUrl(text)) {\n addLink(editor, slate, text);\n } else {\n insertText(text);\n }\n };\n\n slate.insertData = (data) => {\n const text = data.getData('text/plain');\n if (text && isUrl(text)) {\n addLink(editor, slate, text);\n } else {\n insertData(data);\n }\n };\n\n return slate;\n};\n","function getFallbackUUID() {\n const S4 = function () {\n // eslint-disable-next-line no-bitwise\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n return `${S4() + S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n}\n\nexport const generateId = (): string => {\n if (typeof window === 'undefined') return getFallbackUUID();\n if (typeof window.crypto?.randomUUID !== 'function') return getFallbackUUID();\n\n return window.crypto.randomUUID();\n};\n","import { generateId } from '../../utils/generateId';\nimport type { SlateElement, YooptaBlockBaseMeta, YooptaBlockData } from '../types';\n\nexport const buildBlockElement = (element?: Partial<SlateElement>): SlateElement => ({\n id: generateId(),\n type: element?.type || 'paragraph',\n children: element?.children || [{ text: '' }],\n props: {\n nodeType: 'block',\n ...element?.props,\n },\n});\n\ntype BuildBlockDataOptions = Partial<Omit<YooptaBlockData<SlateElement>, 'meta'>> & {\n value?: SlateElement[];\n meta?: Partial<YooptaBlockBaseMeta>;\n};\n\nexport function buildBlockData(block?: BuildBlockDataOptions): YooptaBlockData {\n return {\n id: block?.id || generateId(),\n value: block?.value || [buildBlockElement()],\n type: block?.type || 'Paragraph',\n meta: {\n order: block?.meta?.order || 0,\n depth: block?.meta?.depth || 0,\n ...block?.meta,\n },\n };\n}\n\nexport const buildDefaultChildren = () => {\n const blockId = generateId();\n\n return {\n [blockId]: buildBlockData({ id: blockId }),\n };\n};\n","import type { YooEditor, YooptaBlockData, YooptaPathIndex } from '../types';\n\nexport type GetBlockOptions = {\n at?: YooptaPathIndex;\n id?: string;\n};\n\nexport function getBlock(editor: YooEditor, options: GetBlockOptions): YooptaBlockData | null {\n if (!options?.id && typeof options?.at !== 'number') {\n return null;\n }\n\n if (options?.id) {\n return editor.children[options?.id] ?? null;\n }\n\n const childrenKeys = Object.keys(editor.children);\n\n const blockId = childrenKeys.find((childrenId) => {\n const plugin = editor.children[childrenId];\n return plugin.meta.order === options?.at;\n });\n\n if (!blockId) return null;\n return editor.children[blockId] ?? null;\n}\n","import type { BlockDepthOptions } from './increaseBlockDepth';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport type { YooEditor } from '../types';\nimport { getBlock } from './getBlock';\n\nexport function decreaseBlockDepth(editor: YooEditor, options: BlockDepthOptions = {}) {\n const { at = editor.path.current, blockId } = options;\n\n const block = blockId ? editor.children[blockId] : getBlock(editor, { at });\n if (!block) return;\n\n const newDepth = Math.max(0, block.meta.depth - 1);\n\n const operation: YooptaOperation = {\n type: 'set_block_meta',\n id: block.id,\n properties: { depth: newDepth },\n prevProperties: { depth: block.meta.depth },\n };\n\n editor.applyTransforms([operation]);\n}\n","import type { YooEditor, YooptaPath } from '../types';\n\nexport function getBlockOrder(editor: YooEditor): YooptaPath['current'] {\n return editor.path.current;\n}\n","import type { YooEditor, YooptaPath } from '../types';\n\nexport function getNextBlockOrder(editor: YooEditor, order?: number): YooptaPath['current'] {\n const path = order ?? editor.path.current;\n\n if (typeof path === 'number') return path + 1;\n return null;\n}\n","import type { YooEditor, YooptaPathIndex } from '../types';\n\nexport function getPreviousBlockOrder(editor: YooEditor, order?: number): YooptaPathIndex {\n const path = order ?? editor.path.current;\n\n if (typeof path === 'number' && path !== 0) return path - 1;\n return null;\n}\n","import type { YooEditor, YooptaPath } from '../types';\n\nexport function getSelectedPaths(editor: YooEditor): YooptaPath['selected'] {\n return editor.path.selected;\n}\n","import type { YooEditor, YooptaBlockData } from '../types';\n\nexport function isBlockSelected(editor: YooEditor, block: YooptaBlockData): boolean {\n const selected = editor.path.selected;\n\n if (Array.isArray(selected)) {\n return selected.includes(block.meta.order);\n }\n\n return false;\n}\n","import type { YooEditor } from '../types';\n\nexport function isPathEmpty(editor: YooEditor): boolean {\n return editor.path.current === null;\n}\n","import type { YooEditor, YooptaPath } from '../types';\n\nexport function setPath(editor: YooEditor, path: YooptaPath) {\n editor.applyTransforms([{ type: 'set_block_path', path }], { validatePaths: false });\n}\n","import type { Point } from 'slate';\nimport { Editor, Element, Text } from 'slate';\n\nimport type { SlateEditor } from '../editor/types';\n\nexport function getLastNodePoint(slate: SlateEditor): Point {\n try {\n let point;\n\n const [lastElement, lastPath] = Editor.last(slate, []);\n\n if (Element.isElement(lastElement) && !Editor.isEditor(lastElement)) {\n const [lastTextNode, lastTextPath] = Editor.last(slate, lastPath);\n\n if (Text.isText(lastTextNode)) {\n point = { path: lastTextPath, offset: lastTextNode.text.length };\n }\n } else if (Text.isText(lastElement)) {\n point = { path: lastPath, offset: lastElement.text.length };\n }\n\n return point;\n } catch (error) {\n return {\n path: [0, 0],\n offset: 0,\n };\n }\n}\n\nexport function getFirstNodePoint(slate: SlateEditor): Point {\n try {\n let point;\n\n const [firstElement, firstPath] = Editor.first(slate, []);\n\n if (Element.isElement(firstElement) && !Editor.isEditor(firstElement)) {\n const [firstTextNode, firstTextPath] = Editor.first(slate, firstPath);\n\n if (Text.isText(firstTextNode)) {\n point = { path: firstTextPath, offset: 0 };\n }\n } else if (Text.isText(firstElement)) {\n point = { path: firstPath, offset: 0 };\n }\n\n if (!point) {\n point = { path: [0, 0], offset: 0 };\n }\n\n return point;\n } catch (error) {\n return {\n path: [0, 0],\n offset: 0,\n };\n }\n}\n","import type { SlateEditor, YooEditor, YooptaPathIndex } from '../editor/types';\n\nexport function findSlateBySelectionPath(\n editor: YooEditor,\n options?: { at: YooptaPathIndex },\n): SlateEditor | undefined {\n const childrenKeys = Object.keys(editor.children);\n const { at = editor.path.current } = options || {};\n\n const blockId = childrenKeys.find((childrenId) => {\n const plugin = editor.children[childrenId];\n return plugin.meta.order === at;\n });\n\n if (!blockId) return undefined;\n return editor.blockEditorsMap[blockId];\n}\n","import { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport { getFirstNodePoint } from '../../utils/get-node-points';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get first point in block\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns First point in block\n *\n * @example\n * ```typescript\n * // Get first point in current block\n * const firstPoint = Selection.getFirstPoint(editor);\n *\n * // Get first point in specific block\n * const firstPoint = Selection.getFirstPoint(editor, { at: 0 });\n * ```\n */\nexport function getFirstPoint(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) {\n return { path: [0, 0], offset: 0 };\n }\n\n return getFirstNodePoint(slate);\n}\n\n","import { getBlockOrder } from './getBlockOrder';\nimport { getNextBlockOrder } from './getNextBlockOrder';\nimport { getPreviousBlockOrder } from './getPreviousBlockOrder';\nimport { getSelectedPaths } from './getSelectedPaths';\nimport { isBlockSelected } from './isBlockSelected';\nimport { isPathEmpty } from './isPathEmpty';\nimport { setPath } from './setPath';\nimport { getLastNodePoint } from '../../utils/get-node-points';\nimport { getFirstPoint } from '../selection/getFirstPoint';\nimport { getLastPoint } from '../selection/getLastPoint';\n\n// Re-export Selection API methods for backward compatibility\nexport const Paths = {\n getBlockOrder,\n getNextBlockOrder,\n getPreviousBlockOrder,\n isBlockSelected,\n getSelectedPaths,\n isPathEmpty,\n setPath,\n getLastNodePoint,\n // Add new Selection API methods\n getFirstNodePoint: getFirstPoint,\n};\n\nexport type Paths = typeof Paths;\n","import type { SlateEditor, YooEditor, YooptaPathIndex } from '../types';\n\nexport type GetBlockSlateOptions = {\n at?: YooptaPathIndex;\n id?: string;\n};\n\nexport function getBlockSlate(\n editor: YooEditor,\n options: GetBlockSlateOptions,\n): SlateEditor | null {\n if (!options?.id && typeof options?.at !== 'number') return null;\n\n const blockId =\n options?.id ??\n Object.keys(editor.children).find((childrenId) => {\n const plugin = editor.children[childrenId];\n return plugin.meta.order === options?.at;\n });\n\n const slate = editor.blockEditorsMap[blockId ?? ''];\n\n if (!slate) return null;\n\n return slate;\n}\n","import type { YooptaOperation } from '../core/applyTransforms';\nimport { Paths } from '../paths';\nimport type { YooEditor, YooptaPathIndex } from '../types';\nimport { getBlock } from './getBlock';\nimport { getBlockSlate } from './getBlockSlate';\n\nexport type DeleteBlockOptions = {\n /**\n * Block to delete (by path or id)\n * @default editor.path.current\n */\n at?: YooptaPathIndex;\n blockId?: string;\n\n /**\n * Focus after delete\n * @default true\n */\n focus?: boolean;\n\n /**\n * Focus target after delete\n * - 'previous': focus previous block (default)\n * - 'next': focus next block\n * - 'none': don't focus anything\n * @default 'previous'\n */\n focusTarget?: 'previous' | 'next' | 'none';\n};\n\n/**\n * Delete a block\n *\n * @param editor - YooEditor instance\n * @param options - Delete options\n *\n * @example\n * ```typescript\n * // Delete current block\n * editor.deleteBlock();\n *\n * // Delete specific block by path\n * editor.deleteBlock({ at: 3 });\n *\n * // Delete specific block by id\n * editor.deleteBlock({ blockId: 'block-123' });\n *\n * // Delete without focusing\n * editor.deleteBlock({ at: 3, focus: false });\n *\n * // Delete and focus next block instead of previous\n * editor.deleteBlock({ at: 3, focusTarget: 'next' });\n * ```\n */\nexport function deleteBlock(editor: YooEditor, options: DeleteBlockOptions = {}): void {\n const { at, blockId, focus = true, focusTarget = 'previous' } = options;\n\n // Determine which block to delete\n const blockPath = typeof at === 'number' ? at : editor.path.current;\n const block = getBlock(editor, { id: blockId, at: blockPath });\n\n if (!block) {\n return;\n }\n\n // Determine focus target block\n let targetBlock;\n let targetSlate;\n\n if (focus && focusTarget !== 'none') {\n if (focusTarget === 'previous') {\n const prevBlockPath = Paths.getPreviousBlockOrder(editor, block.meta.order);\n if (prevBlockPath !== null) {\n targetBlock = getBlock(editor, { at: prevBlockPath });\n targetSlate = targetBlock ? getBlockSlate(editor, { id: targetBlock.id }) : undefined;\n }\n } else if (focusTarget === 'next') {\n const nextBlockPath = Paths.getNextBlockOrder(editor, block.meta.order);\n if (nextBlockPath !== null) {\n targetBlock = getBlock(editor, { at: nextBlockPath });\n targetSlate = targetBlock ? getBlockSlate(editor, { id: targetBlock.id }) : undefined;\n }\n }\n }\n\n const blockToDelete = editor.children[block.id];\n const operations: YooptaOperation[] = [];\n\n // Call lifecycle hook\n const plugin = editor.plugins[blockToDelete.type];\n const { onDestroy } = plugin?.lifecycle ?? {};\n onDestroy?.(editor, blockToDelete.id);\n\n operations.push({\n type: 'delete_block',\n block: blockToDelete,\n path: editor.path,\n });\n\n editor.applyTransforms(operations, { validatePaths: false });\n\n // Focus target block if specified\n if (focus && focusTarget !== 'none' && targetBlock && targetSlate) {\n const lastNodePoint = Paths.getLastNodePoint(targetSlate);\n editor.focusBlock(targetBlock.id, { focusAt: lastNodePoint });\n }\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","import cloneDeep from 'lodash.clonedeep';\n\nimport { generateId } from '../../utils/generateId';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport type { SlateElement, YooEditor, YooptaBlockData, YooptaPathIndex } from '../types';\nimport { getBlock } from './getBlock';\n\nexport type DuplicateBlockOptions = {\n /**\n * Block to duplicate (by path or id)\n * @default editor.path.current\n */\n at?: YooptaPathIndex;\n blockId?: string;\n\n /**\n * Position to insert duplicate\n * If not provided, inserts after original block\n * @default original.meta.order + 1\n */\n insertAt?: YooptaPathIndex;\n\n /**\n * Focus after duplicate\n * @default true\n */\n focus?: boolean;\n\n /**\n * Custom element structure for duplicate\n * If provided, overrides default duplication\n */\n elements?: SlateElement;\n};\n\n/**\n * Duplicate a block\n *\n * @param editor - YooEditor instance\n * @param options - Duplicate options\n * @returns ID of the newly created block\n *\n * @example\n * ```typescript\n * // Duplicate current block\n * const newId = editor.duplicateBlock();\n *\n * // Duplicate specific block by path\n * const newId = editor.duplicateBlock({ at: 3 });\n *\n * // Duplicate specific block by id\n * const newId = editor.duplicateBlock({ blockId: 'block-123' });\n *\n * // Duplicate and insert at specific position\n * const newId = editor.duplicateBlock({ at: 3, insertAt: 0 });\n * ```\n */\nexport function duplicateBlock(\n editor: YooEditor,\n options: DuplicateBlockOptions = {},\n): string | undefined {\n const { at, blockId, insertAt, focus = true, elements } = options;\n\n // Determine which block to duplicate\n const blockPath = typeof at === 'number' ? at : editor.path.current;\n const originalBlock: YooptaBlockData | null = blockId\n ? editor.children[blockId]\n : getBlock(editor, { at: blockPath });\n\n if (!originalBlock) {\n return undefined;\n }\n\n const operations: YooptaOperation[] = [];\n\n const duplicatedBlock = cloneDeep(originalBlock);\n duplicatedBlock.id = generateId();\n\n // Determine insert position\n if (typeof insertAt === 'number') {\n duplicatedBlock.meta.order = insertAt;\n } else {\n duplicatedBlock.meta.order = originalBlock.meta.order + 1;\n }\n\n // Use custom elements if provided\n if (elements) {\n duplicatedBlock.value = [elements];\n }\n\n operations.push({\n type: 'insert_block',\n path: { current: duplicatedBlock.meta.order },\n block: duplicatedBlock,\n });\n\n editor.applyTransforms(operations);\n\n if (focus) {\n editor.focusBlock(duplicatedBlock.id, { waitExecution: true });\n }\n\n return duplicatedBlock.id;\n}\n","import type { YooEditor } from '../editor/types';\n\nexport const IS_FOCUSED_EDITOR = new WeakMap<YooEditor, boolean>();\n","import { Editor, Path, Point, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { IS_FOCUSED_EDITOR } from '../../utils/weakMaps';\nimport type { FocusAt, SlateEditor, YooEditor } from '../types';\n\nexport type FocusBlockOptions = {\n waitExecution?: boolean;\n waitExecutionMs?: number;\n shouldUpdateBlockPath?: boolean;\n focusAt?: FocusAt;\n slate?: SlateEditor;\n};\n\nfunction getSelectionPath(slate: SlateEditor, focusAt?: FocusAt): FocusAt {\n if (Point.isPoint(focusAt)) {\n return focusAt;\n }\n\n if (Path.isPath(focusAt)) {\n return { path: focusAt, offset: 0 };\n }\n\n const [, firstNodePath] = Editor.first(slate, [0]);\n const firstLeafPath = firstNodePath || [0, 0];\n\n return { path: firstLeafPath, offset: 0 };\n}\n\n// [TODO] - update editor.path after focus\nexport function focusBlock(editor: YooEditor, blockId: string, options: FocusBlockOptions = {}) {\n const {\n focusAt,\n waitExecution = true,\n waitExecutionMs = 0,\n shouldUpdateBlockPath = true,\n } = options;\n\n const focusBlockEditor = () => {\n const slate = options.slate || editor.blockEditorsMap[blockId];\n const block = editor.children[blockId];\n\n if (!slate || !block) return;\n\n try {\n const selectionPath = getSelectionPath(slate, focusAt);\n Transforms.select(slate, selectionPath);\n ReactEditor.focus(slate);\n } catch (error) {\n // Ignore focus errors\n }\n\n if (shouldUpdateBlockPath) {\n setTimeout(() => {\n editor.setPath({ current: block.meta.order });\n }, 0);\n }\n };\n\n if (waitExecution) {\n setTimeout(() => focusBlockEditor(), waitExecutionMs);\n } else {\n focusBlockEditor();\n }\n\n IS_FOCUSED_EDITOR.set(editor, true);\n}\n","import type { YooptaOperation } from '../core/applyTransforms';\nimport type { YooEditor, YooptaPathIndex } from '../types';\nimport { getBlock } from './getBlock';\n\nexport type BlockDepthOptions = {\n blockId?: string;\n at?: YooptaPathIndex;\n};\n\nexport function increaseBlockDepth(editor: YooEditor, options: BlockDepthOptions = {}) {\n const { at = editor.path.current, blockId } = options;\n\n const block = blockId ? editor.children[blockId] : getBlock(editor, { at });\n if (!block) return;\n\n const newDepth = block.meta.depth + 1;\n\n const operation: YooptaOperation = {\n type: 'set_block_meta',\n id: block.id,\n properties: { depth: newDepth },\n prevProperties: { depth: block.meta.depth },\n };\n\n editor.applyTransforms([operation]);\n}\n","import { getRootBlockElement } from './block-elements';\nimport type { SlateElement, YooEditor } from '../editor/types';\nimport type { Plugin } from '../plugins/types';\n\nexport function getBlockPlugins(\n editor: YooEditor,\n): Record<string, Plugin<Record<string, SlateElement>>> {\n const blockPlugins: Record<string, Plugin<Record<string, SlateElement>>> = {};\n\n Object.values(editor.plugins).forEach((plugin) => {\n const rootBlockElement = getRootBlockElement(plugin.elements);\n const nodeType = rootBlockElement?.props?.nodeType;\n const isInline = nodeType === 'inline' || nodeType === 'inlineVoid';\n\n if (!isInline) {\n blockPlugins[plugin.type] = plugin;\n }\n });\n\n return blockPlugins;\n}\n","import type { SlateElement, YooptaBlockBaseMeta, YooptaBlockData } from '../../editor/types';\nimport { generateId } from '../../utils/generateId';\n\nexport const buildBlockElement = (element?: Partial<SlateElement>): SlateElement => ({\n id: generateId(),\n type: element?.type || 'paragraph',\n children: element?.children || [{ text: '' }],\n props: {\n nodeType: 'block',\n ...element?.props,\n },\n});\n\ntype BuildBlockDataOptions = Partial<YooptaBlockData<SlateElement>> & {\n value?: SlateElement[];\n meta?: Partial<YooptaBlockBaseMeta>;\n};\n\nexport const buildBlockData = (block?: BuildBlockDataOptions): YooptaBlockData => ({\n id: block?.id || generateId(),\n value: block?.value || [buildBlockElement()],\n type: block?.type || 'Paragraph',\n meta: {\n order: 0,\n depth: 0,\n ...block?.meta,\n },\n});\n\nexport const getDefaultYooptaChildren = () => {\n const pId = generateId();\n\n return {\n [pId]: buildBlockData({ id: pId }),\n };\n};\n","import type { NodeEntry } from 'slate';\nimport { Editor, Element, Path } from 'slate';\n\nimport { generateId } from './generateId';\nimport { getBlockPlugins } from './get-block-plugins';\nimport { buildBlockElement } from '../components/Editor/utils';\n// import { Blocks } from '../editor/blocks';\nimport { getBlock } from '../editor/blocks/getBlock';\nimport type { SlateEditor, SlateElement, YooEditor } from '../editor/types';\nimport type {\n Plugin,\n PluginElement,\n PluginElementProps,\n PluginElementsMap,\n} from '../plugins/types';\n\nexport function getRootBlockElementType(\n elems: PluginElementsMap<string, unknown> | undefined,\n): string | undefined {\n if (!elems) return;\n\n const elements = Object.keys(elems);\n const rootElementType =\n elements.length === 1 ? elements[0] : elements.find((key) => elems[key].asRoot);\n\n return rootElementType;\n}\n\nexport function getRootBlockElement(\n elems: PluginElementsMap<string, unknown> | undefined,\n): PluginElement<string, unknown> | undefined {\n if (!elems) return;\n\n const rootElementType = getRootBlockElementType(elems);\n const rootElement = rootElementType ? elems[rootElementType] : undefined;\n\n return rootElement;\n}\n\nexport function isRootElementVoid(elems: PluginElementsMap<string, unknown> | undefined): boolean {\n const rootElement = getRootBlockElement(elems);\n return rootElement?.props?.nodeType === 'void';\n}\n\nexport type GetBlockElementNodeOptions = {\n at?: Path;\n elementType?: string;\n};\n\nexport function getBlockElementNode(\n slate: SlateEditor,\n options: GetBlockElementNodeOptions = {},\n): NodeEntry<SlateElement> | undefined {\n const { at, elementType } = options;\n\n const atPath = at ?? slate.selection?.anchor.path;\n if (!atPath) return;\n\n let match = (n) => !Editor.isEditor(n) && Element.isElement(n);\n\n if (elementType) {\n match = (n) => !Editor.isEditor(n) && Element.isElement(n) && n.type === elementType;\n }\n\n const parentPath = Path.parent(atPath);\n const nodes = Editor.nodes(slate, {\n at: parentPath,\n match,\n mode: 'lowest',\n });\n\n if (nodes) {\n const [nodeEntry] = nodes;\n return nodeEntry as NodeEntry<SlateElement>;\n }\n}\n\nexport function buildSlateNodeElement(\n type: string,\n props: PluginElementProps<unknown> = { nodeType: 'block' },\n): SlateElement<any> {\n return { id: generateId(), type, children: [{ text: '' }], props };\n}\n\nfunction recursivelyCollectElementChildren(\n blockElement: PluginElement<string, unknown>,\n blockElements: PluginElementsMap,\n elementsMapWithTextContent?: ElementsMapWithTextContent,\n): SlateElement[] {\n return (\n blockElement.children?.map((elementType) => {\n const childElement = blockElements[elementType];\n if (!childElement) {\n throw new Error(`Element definition for ${elementType} not found`);\n }\n\n const childNode: SlateElement = buildBlockElement({\n id: generateId(),\n type: elementType,\n props: childElement.props,\n children:\n childElement.children && childElement.children.length > 0\n ? recursivelyCollectElementChildren(\n childElement,\n blockElements,\n elementsMapWithTextContent,\n )\n : [{ text: elementsMapWithTextContent?.[elementType] || '' }],\n });\n\n return childNode;\n }) || []\n );\n}\n\ntype ElementsMapWithTextContent = Record<string, string>;\n\nexport function buildBlockElementsStructure(\n editor: YooEditor,\n blockType: string,\n elementsMapWithTextContent?: ElementsMapWithTextContent,\n): SlateElement {\n const blockPlugins = getBlockPlugins(editor);\n const block: Plugin<Record<string, SlateElement>> = blockPlugins[blockType];\n\n if (!block) {\n const availablePlugins = Object.keys(blockPlugins);\n throw new Error(\n `Plugin for block type \"${blockType}\" not found. Available plugins: ${availablePlugins.join(', ') || 'none'}`,\n );\n }\n\n const blockElements = block.elements;\n\n const rootBlockElementType = getRootBlockElementType(blockElements);\n if (!rootBlockElementType) {\n throw new Error(`Root element type not found for block type ${blockType}`);\n }\n const rootBlockElement = blockElements[rootBlockElementType];\n\n const rootElementNode: SlateElement = {\n id: generateId(),\n type: rootBlockElementType,\n props: rootBlockElement.props,\n children:\n rootBlockElement.children && rootBlockElement.children.length > 0\n ? recursivelyCollectElementChildren(\n rootBlockElement,\n blockElements,\n elementsMapWithTextContent,\n )\n : [{ text: '' }],\n };\n\n return rootElementNode;\n}\n\nexport function getPluginByInlineElement(\n plugins: YooEditor['plugins'],\n elementType: string,\n): Plugin<Record<string, SlateElement>, unknown> | undefined {\n const foundPlugin = Object.values(plugins).find(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (p) => p.type === (p.elements?.[elementType] as any)?.rootPlugin,\n );\n return foundPlugin;\n}\n\n/**\n * Checks if the current selection is inside an element with injectElementsFromPlugins\n * Returns injectElementsFromPlugins array if found, null otherwise\n */\n/**\n * Find injectElementsFromPlugins from current element OR nearest parent element with injectElementsFromPlugins\n * This is important for nested structures like Steps > blockquote,\n * where blockquote doesn't have injectElementsFromPlugins but its parent step-list-item-content does\n */\nexport function getAllowedPluginsFromElement(\n editor: YooEditor,\n slate: SlateEditor,\n): string[] | null {\n if (!slate.selection) return null;\n\n const block = getBlock(editor, { at: editor.path.current });\n if (!block) return null;\n\n const blockPlugin = editor.plugins[block.type];\n const blockElements = blockPlugin?.elements;\n if (!blockElements) return null;\n\n // Start from current element and traverse up to find injectElementsFromPlugins\n let currentPath = slate.selection.anchor.path;\n\n // Walk up the tree from the text node to find an element with injectElementsFromPlugins\n while (currentPath.length > 1) {\n const elementNode = getBlockElementNode(slate, { at: currentPath });\n\n if (elementNode) {\n const [element] = elementNode;\n\n // Check if element is a SlateElement with type property\n if (Element.isElement(element) && 'type' in element) {\n const elementType = (element as SlateElement).type;\n const elementConfig = blockElements[elementType];\n\n if (elementConfig?.injectElementsFromPlugins) {\n // Check if all injectElementsFromPlugins are defined in the editor's plugins\n const undefinedPlugins = elementConfig.injectElementsFromPlugins.filter(\n (plugin) => !editor.plugins?.[plugin],\n );\n\n if (undefinedPlugins.length > 0) {\n throw new Error(\n `Some \"injectElementsFromPlugins\" in ${block.type}->${element.type\n } are not defined in editor.plugins: ${undefinedPlugins.join(', ')}`,\n );\n }\n\n return elementConfig.injectElementsFromPlugins;\n }\n }\n }\n\n // Move up to parent element (remove last index from path)\n currentPath = currentPath.slice(0, -1);\n }\n\n return null;\n}\n","import { buildBlockElementsStructure } from '../../utils/block-elements';\nimport { generateId } from '../../utils/generateId';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport type { SlateElement, YooEditor, YooptaBlockData, YooptaPathIndex } from '../types';\n\nexport type InsertBlockOptions = {\n at?: YooptaPathIndex;\n focus?: boolean;\n blockData?: Omit<Partial<YooptaBlockData>, 'type'>;\n /**\n * Element structure created with editor.y()\n * If provided, this will be used as the block's value\n *\n * @example\n * ```typescript\n * editor.insertBlock('Accordion', {\n * elements: editor.y('accordion-list', {\n * children: [\n * editor.y('accordion-list-item', {\n * props: { isExpanded: false },\n * children: [\n * editor.y('accordion-list-item-heading'),\n * editor.y('accordion-list-item-content', {\n * children: [\n * editor.y('paragraph'),\n * editor.y('heading-one')\n * ]\n * })\n * ]\n * })\n * ]\n * })\n * });\n * ```\n */\n elements?: SlateElement;\n};\n\n// [TEST]\n// [TEST] - TEST EVENTS\nexport function insertBlock(editor: YooEditor, type: string, options: InsertBlockOptions = {}) {\n const { at = editor.path.current, focus = false, blockData, elements } = options;\n\n const plugin = editor.plugins[type];\n if (!plugin) {\n throw new Error(`Plugin \"${type}\" not defined in plugins`);\n }\n const { beforeCreate, onCreate } = plugin.lifecycle || {};\n\n let slateStructure;\n if (blockData && Array.isArray(blockData?.value)) {\n slateStructure = blockData.value[0];\n } else if (elements) {\n slateStructure = elements;\n } else {\n slateStructure = beforeCreate?.(editor) || buildBlockElementsStructure(editor, type);\n }\n\n const newBlock: YooptaBlockData = {\n id: blockData?.id || generateId(),\n type,\n value: [slateStructure],\n meta: {\n align: blockData?.meta?.align || 'left',\n depth: blockData?.meta?.depth || 0,\n order: typeof at === 'number' ? at : Object.keys(editor.children).length,\n },\n };\n\n const operations: YooptaOperation[] = [];\n\n operations.push({\n type: 'insert_block',\n path: { current: newBlock.meta.order },\n block: newBlock,\n });\n\n editor.applyTransforms(operations);\n onCreate?.(editor, newBlock.id);\n\n if (focus) {\n editor.focusBlock(newBlock.id);\n }\n\n return newBlock.id;\n}\n","import { Editor, Element, Path, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateEditor, YooEditor } from '../types';\nimport type { DeleteElementOptions, ElementMatcher } from './types';\n\n/**\n * Check if element type is inline based on nodeType prop\n */\nfunction isInlineElementType(editor: YooEditor, blockType: string, elementType: string): boolean {\n const plugin = editor.plugins[blockType];\n const elementConfig = plugin?.elements[elementType];\n\n if (!elementConfig) {\n return false;\n }\n\n const nodeType = elementConfig.props?.nodeType;\n return nodeType === 'inline' || nodeType === 'inlineVoid';\n}\n\n/**\n * Find element by type and matcher in current selection\n */\nfunction findElement(\n slate: SlateEditor,\n type: string,\n isInline: boolean,\n customMatcher?: ElementMatcher,\n): [Element, Path] | null {\n if (!slate.selection) {\n return null;\n }\n\n const matcher = customMatcher ?? ((n) => Element.isElement(n) && n.type === type);\n\n const [entry] = Editor.nodes(slate, {\n at: slate.selection,\n match: matcher,\n mode: isInline ? 'lowest' : 'highest',\n });\n\n if (entry) {\n return entry as [Element, Path];\n }\n\n return null;\n}\n\n/**\n * Delete inline element (unwrap or remove)\n */\nfunction deleteInlineElement(\n slate: SlateEditor,\n targetPath: Path,\n targetElement: Element,\n mode: 'unwrap' | 'remove',\n): void {\n if (mode === 'unwrap') {\n // Unwrap: keep children (text), remove wrapper\n // Example: <link>text</link> → text\n\n // Check if we're at the element\n if (!slate.selection) {\n // No selection - just unwrap at path\n Transforms.unwrapNodes(slate, {\n at: targetPath,\n match: (n) => n === targetElement,\n });\n } else {\n // Has selection - unwrap at selection\n Transforms.unwrapNodes(slate, {\n at: slate.selection,\n match: (n) => Element.isElement(n) && n.type === targetElement.type,\n split: true,\n });\n }\n } else {\n // Remove: delete entire element including children\n Transforms.removeNodes(slate, {\n at: targetPath,\n match: (n) => n === targetElement,\n });\n }\n}\n\n/**\n * Delete block element\n */\nfunction deleteBlockElement(slate: SlateEditor, targetPath: Path, targetElement: Element): void {\n // For block elements, always remove entirely\n Transforms.removeNodes(slate, {\n at: targetPath,\n match: (n) => n === targetElement,\n });\n}\n\n/**\n * Delete element from a block\n *\n * @param editor - YooEditor instance\n * @param options - Delete options\n *\n * @example Delete block element by path\n * ```typescript\n * editor.deleteElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * path: [0, 1]\n * });\n * ```\n *\n * @example Delete block element by type\n * ```typescript\n * // Deletes first accordion-list-item found in selection\n * editor.deleteElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item'\n * });\n * ```\n *\n * @example Delete inline element (remove link wrapper, keep text)\n * ```typescript\n * // Before: \"Hello <link>world</link>!\"\n * editor.deleteElement({\n * blockId: 'paragraph-1',\n * type: 'link',\n * mode: 'unwrap' // Keep \"world\", remove link\n * });\n * // After: \"Hello world!\"\n * ```\n *\n * @example Delete inline element (remove entirely)\n * ```typescript\n * // Before: \"Hello <mention>@John</mention>!\"\n * editor.deleteElement({\n * blockId: 'paragraph-1',\n * type: 'mention',\n * mode: 'remove' // Remove mention entirely\n * });\n * // After: \"Hello !\"\n * ```\n *\n * @example Delete with custom matcher\n * ```typescript\n * editor.deleteElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * match: (element) => element.props?.id === 'item-5'\n * });\n * ```\n *\n * @example Delete link at current selection\n * ```typescript\n * // User has cursor inside link, wants to remove link\n * editor.deleteElement({\n * blockId: 'paragraph-1',\n * type: 'link',\n * mode: 'unwrap'\n * });\n * ```\n *\n * @example Delete all links in selection with matcher\n * ```typescript\n * editor.deleteElement({\n * blockId: 'paragraph-1',\n * type: 'link',\n * match: (element) => element.props?.url.includes('old-domain.com'),\n * mode: 'unwrap'\n * });\n * ```\n */\nexport function deleteElement(editor: YooEditor, options: DeleteElementOptions): void {\n const { blockId, type, path, match, mode = 'remove' } = options;\n\n const block = editor.children[blockId];\n\n if (!block) {\n console.warn(`Block ${blockId} not found`);\n return;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n console.warn(`Slate editor not found for block ${blockId}`);\n return;\n }\n\n Editor.withoutNormalizing(slate, () => {\n const plugin = editor.plugins[block.type];\n if (!plugin) {\n console.warn(`Plugin ${block.type} not found`);\n return;\n }\n\n const elementConfig = plugin.elements[type];\n if (!elementConfig) {\n console.warn(`Element type ${type} not found in plugin ${block.type}`);\n return;\n }\n\n const isInline = isInlineElementType(editor, block.type, type);\n\n let targetPath: Path | null = null;\n let targetElement: Element | null = null;\n\n // Case 1: Direct path provided\n if (Path.isPath(path)) {\n targetPath = path;\n try {\n const node = Editor.node(slate, targetPath);\n if (node && Element.isElement(node[0])) {\n targetElement = node[0] as Element;\n }\n } catch (error) {\n console.warn(`Element not found at path ${path}`);\n return;\n }\n }\n // Case 2: Find by type and optional matcher\n else {\n const found = findElement(slate, type, isInline, match);\n if (found) {\n [targetElement, targetPath] = found;\n } else {\n console.warn(`Element of type ${type} not found in current selection`);\n return;\n }\n }\n\n if (!targetPath || !targetElement) {\n console.warn('Could not resolve target element');\n return;\n }\n\n // Delete based on element type\n if (isInline) {\n deleteInlineElement(slate, targetPath, targetElement, mode);\n } else {\n deleteBlockElement(slate, targetPath, targetElement);\n }\n });\n}\n","import { Editor, Element } from 'slate';\nimport type { Location, Node } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateEditor, SlateElement, YooEditor } from '../types';\nimport type { ElementPath, GetElementOptions } from './types';\n\n/**\n * Resolve element path based on various path options\n */\nfunction resolveElementPath(\n slate: SlateEditor,\n path: ElementPath | undefined,\n type: string | undefined,\n): Location {\n // No path specified - use selection or root\n if (!path) {\n return slate.selection ?? [0];\n }\n\n // Direct path array\n if (Array.isArray(path)) {\n return path;\n }\n\n // Selection path\n if (path === 'selection') {\n return slate.selection ?? [0];\n }\n\n // First element of type\n if (path === 'first' && type) {\n const [entry] = Editor.nodes(slate, {\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n });\n return entry?.[1] ?? [0];\n }\n\n // Last element of type\n if (path === 'last' && type) {\n const entries = Array.from(\n Editor.nodes(slate, {\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n }),\n );\n return entries[entries.length - 1]?.[1] ?? [0];\n }\n\n return [0];\n}\n\n/**\n * Get single element from a block\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Element or null if not found\n *\n * @example\n * ```typescript\n * // Get element by type and path\n * const element = editor.getElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * path: [0, 1]\n * });\n *\n * // Get element with custom matcher\n * const activeItem = editor.getElement({\n * blockId: 'accordion-1',\n * match: (el) => el.type === 'accordion-list-item' && el.props?.isExpanded\n * });\n * ```\n */\nexport function getElement(editor: YooEditor, options: GetElementOptions): SlateElement | null {\n const { blockId, type, path, match } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return null;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return null;\n }\n\n // Build matcher function - accepts Node to match Slate's API\n let matchFn: (node: Node) => boolean;\n\n if (match) {\n matchFn = (n): n is SlateElement => Element.isElement(n) && match(n as SlateElement);\n } else if (type) {\n matchFn = (n): n is SlateElement => Element.isElement(n) && n.type === type;\n } else {\n matchFn = (n): n is SlateElement => Element.isElement(n);\n }\n\n // Resolve path\n const atPath = resolveElementPath(slate, path, type);\n\n try {\n const [elementEntry] = Editor.nodes<SlateElement>(slate, {\n at: atPath,\n match: matchFn,\n mode: 'lowest',\n });\n\n return elementEntry ? elementEntry[0] : null;\n } catch (error) {\n return null;\n }\n}\n","import { getElement } from './getElement';\nimport type { SlateElement, YooEditor } from '../types';\nimport type { GetElementChildrenOptions } from './types';\n\n/**\n * Get children of an element\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Element children or null if element not found\n *\n * @example\n * ```typescript\n * // Get children of accordion item\n * const children = editor.getElementChildren({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * path: [0, 1]\n * });\n * ```\n */\nexport function getElementChildren(\n editor: YooEditor,\n options: GetElementChildrenOptions,\n): SlateElement['children'] | null {\n const element = getElement(editor, options);\n if (element && 'children' in element) {\n return element.children;\n }\n\n return null;\n}\n","import type { Location, NodeEntry, Path } from 'slate';\nimport { Editor, Element } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateEditor, SlateElement, YooEditor } from '../types';\nimport type { ElementPath, GetElementEntryOptions } from './types';\n\n/**\n * Resolve element path based on various path options\n */\nfunction resolveElementPath(\n slate: SlateEditor,\n path: ElementPath | undefined,\n type: string | undefined,\n): Location {\n // No path specified - use selection or root\n if (!path) {\n return slate.selection ?? [0];\n }\n\n // Direct path array\n if (Array.isArray(path)) {\n return path;\n }\n\n // Selection path\n if (path === 'selection') {\n return slate.selection ?? [0];\n }\n\n // First element of type\n if (path === 'first' && type) {\n const [entry] = Editor.nodes(slate, {\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n });\n return entry?.[1] ?? [0];\n }\n\n // Last element of type\n if (path === 'last' && type) {\n const entries = Array.from(\n Editor.nodes(slate, {\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n }),\n );\n return entries[entries.length - 1]?.[1] ?? [0];\n }\n\n return [0];\n}\n\n/**\n * Get element entry [element, path] from a block\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Element entry or null if not found\n *\n * @example\n * ```typescript\n * // Get entry by type and path\n * const entry = editor.getElementEntry({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * path: [0, 1]\n * });\n *\n * if (entry) {\n * const [element, path] = entry;\n * console.log('Element at path:', path);\n * }\n * ```\n */\nexport function getElementEntry(\n editor: YooEditor,\n options: GetElementEntryOptions,\n): NodeEntry<SlateElement> | null {\n const { blockId, type, path } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return null;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return null;\n }\n\n // Build matcher function\n const matchFn = type\n ? (n) => Element.isElement(n) && n.type === type\n : (n) => Element.isElement(n);\n\n // Resolve path\n const atPath = resolveElementPath(slate, path, type);\n\n try {\n const [elementEntry] = Editor.nodes<SlateElement>(slate, {\n at: atPath,\n match: matchFn,\n mode: 'lowest',\n });\n\n return elementEntry || null;\n } catch (error) {\n return null;\n }\n}\n","import type { Path } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { YooEditor } from '../types';\nimport type { GetElementPathOptions } from './types';\n\n/**\n * Get path of an element in the Slate tree\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Element path or null if not found\n *\n * @example\n * ```typescript\n * // Get path of element\n * const path = editor.getElementPath({\n * blockId: 'accordion-1',\n * element: accordionItemElement\n * });\n * ```\n */\nexport function getElementPath(editor: YooEditor, options: GetElementPathOptions): Path | null {\n const { blockId, element } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return null;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return null;\n }\n\n try {\n const path = ReactEditor.findPath(slate, element);\n return path;\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[getElementPath] Failed to find element path', error);\n }\n return null;\n }\n}\n","import { ReactEditor } from 'slate-react';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { YooEditor } from '../types';\nimport type { GetElementRectOptions } from './types';\n\n/**\n * Get the DOMRect of a Slate element\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns DOMRect of the element or null if not found\n *\n * @example\n * ```typescript\n * // Get rect of element for positioning UI\n * const rect = editor.getElementRect({\n * blockId: 'image-1',\n * element: imageElement\n * });\n *\n * if (rect) {\n * console.log('Element position:', rect.x, rect.y);\n * console.log('Element size:', rect.width, rect.height);\n * }\n * ```\n */\nexport function getElementRect(editor: YooEditor, options: GetElementRectOptions): { domRect: DOMRect; clientRects: DOMRectList } | null {\n const { blockId, element } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return null;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return null;\n }\n\n try {\n const domNode = ReactEditor.toDOMNode(slate, element);\n if (!domNode) {\n return null;\n }\n\n return {\n domRect: domNode.getBoundingClientRect(),\n clientRects: domNode.getClientRects(),\n };\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn('[getElementRect] Failed to get element rect', error);\n }\n return null;\n }\n}\n","import { Editor, Element } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateElement, YooEditor } from '../types';\nimport type { GetElementsOptions } from './types';\n\n/**\n * Get multiple elements from a block\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Array of elements (empty array if none found)\n *\n * @example\n * ```typescript\n * // Get all items\n * const items = editor.getElements({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item'\n * });\n *\n * // Get with custom matcher\n * const expandedItems = editor.getElements({\n * blockId: 'accordion-1',\n * match: (el) => el.type === 'accordion-list-item' && el.props?.isExpanded\n * });\n * ```\n */\nexport function getElements(editor: YooEditor, options: GetElementsOptions): SlateElement[] {\n const { blockId, type, match } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return [];\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return [];\n }\n\n // Build matcher function\n const matchFn = match || (type ? (n) => Element.isElement(n) && n.type === type : (n) => Element.isElement(n));\n\n try {\n const entries = Array.from(\n Editor.nodes<SlateElement>(slate, {\n at: [],\n match: matchFn,\n mode: 'all',\n }),\n );\n\n return entries.map(([node]) => node);\n } catch (error) {\n return [];\n }\n}\n\n","import type { Path } from 'slate';\nimport { Path as SlatePath } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateElement, YooEditor } from '../types';\nimport type { GetElementPathOptions } from './types';\n\n/**\n * Get parent path of an element in the Slate tree\n *\n * @param editor - YooEditor instance\n * @param options - Get options\n * @returns Parent path or null if not found\n *\n * @example\n * ```typescript\n * // Get parent path of element\n * const parentPath = editor.getParentElementPath({\n * blockId: 'accordion-1',\n * element: accordionContentElement\n * });\n * ```\n */\nexport function getParentElementPath(editor: YooEditor, options: GetElementPathOptions): Path | null {\n const { blockId, element } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return null;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return null;\n }\n\n try {\n const path = ReactEditor.findPath(slate, element);\n return SlatePath.parent(path);\n } catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[getParentElementPath] Failed to find parent path', error);\n }\n return null;\n }\n}\n","import type { Path } from 'slate';\nimport { Editor, Element, Path as SlatePath, Transforms } from 'slate';\n\nimport { buildBlockElement } from '../../components/Editor/utils';\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateEditor, SlateElement, YooEditor, YooptaBlockData } from '../types';\nimport type { InsertElementOptions } from './types';\n\n/**\n * Build new element with proper structure\n */\nfunction buildNewElement(\n editor: YooEditor,\n block: YooptaBlockData,\n type: string,\n props: Record<string, unknown> | undefined,\n children: SlateElement[] | undefined,\n elementConfig: { props?: Record<string, unknown>; children?: string[] },\n): SlateElement {\n const plugin = editor.plugins[block.type];\n\n // Build base element\n const baseElement = buildBlockElement({\n type,\n props: { ...elementConfig.props, ...props },\n });\n\n // Add children if provided\n if (children && children.length > 0) {\n baseElement.children = children;\n } else {\n // Build default children from plugin config\n const defaultChildren: SlateElement[] = [];\n\n if (Array.isArray(elementConfig.children) && elementConfig.children.length > 0) {\n elementConfig.children.forEach((childType: string) => {\n const childConfig = plugin.elements[childType];\n if (childConfig) {\n defaultChildren.push(\n buildBlockElement({\n type: childType,\n props: childConfig.props,\n }),\n );\n }\n });\n }\n\n if (defaultChildren.length > 0) {\n baseElement.children = defaultChildren;\n }\n }\n\n return baseElement;\n}\n\n/**\n * Resolve insert path based on 'at' option\n */\nfunction resolveInsertPath(\n slate: SlateEditor,\n at: InsertElementOptions['at'],\n type: string,\n): Path | undefined {\n // Default to selection or root\n if (!at) {\n if (slate.selection?.anchor.path) {\n return slate.selection.anchor.path;\n }\n return [0];\n }\n\n // Direct path\n if (Array.isArray(at)) {\n return at;\n }\n\n // Start of block\n if (at === 'start') {\n return [0];\n }\n\n // End of block\n if (at === 'end') {\n return [slate.children.length];\n }\n\n // Next/Prev require finding current element of same type\n if (at === 'next' || at === 'prev') {\n if (!slate.selection) {\n // No selection - fallback to end\n return [slate.children.length];\n }\n\n const [entry] = Editor.nodes(slate, {\n at: slate.selection,\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n });\n\n if (entry) {\n const [, path] = entry;\n return at === 'next' ? SlatePath.next(path) : SlatePath.previous(path);\n }\n\n // Fallback: insert at selection or end\n return slate.selection.anchor.path || [slate.children.length];\n }\n\n return undefined;\n}\n\n/**\n * Insert element into a block\n *\n * @param editor - YooEditor instance\n * @param options - Insert options\n *\n * @example\n * ```typescript\n * // Insert at next position\n * editor.insertElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * props: { isExpanded: true },\n * at: 'next',\n * focus: true\n * });\n * ```\n */\nexport function insertElement(editor: YooEditor, options: InsertElementOptions): void {\n const { blockId, type, props, children, at, focus = false, select = false } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return;\n }\n\n Editor.withoutNormalizing(slate, () => {\n const plugin = editor.plugins[block.type];\n if (!plugin) {\n return;\n }\n\n const elementConfig = plugin.elements[type];\n if (!elementConfig) {\n return;\n }\n\n // Build new element\n const newElement = buildNewElement(editor, block, type, props, children, elementConfig);\n\n // Resolve insert path\n const insertPath = resolveInsertPath(slate, at, type);\n\n if (!insertPath) {\n return;\n }\n\n // Insert the element\n const selectValue = select || focus || false;\n Transforms.insertNodes(slate, newElement, {\n at: insertPath,\n select: selectValue,\n });\n\n // Handle focus\n if (focus && !select) {\n // Focus first child if element has children\n const childElements = Array.isArray(newElement.children)\n ? newElement.children.filter((child) => Element.isElement(child))\n : [];\n\n if (childElements.length > 0) {\n const firstChildPath = [...insertPath, 0];\n try {\n Transforms.select(slate, firstChildPath);\n } catch (error) {\n // Selection might fail if path doesn't exist yet\n }\n }\n }\n });\n}\n","import { Editor, Element } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { YooEditor } from '../types';\nimport type { IsElementEmptyOptions } from './types';\n\n/**\n * Check if element is empty (has no text content)\n *\n * @param editor - YooEditor instance\n * @param options - Check options\n * @returns true if element is empty, false otherwise\n *\n * @example\n * ```typescript\n * // Check if content is empty\n * const isEmpty = editor.isElementEmpty({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item-content',\n * path: [0, 1, 1]\n * });\n * ```\n */\nexport function isElementEmpty(editor: YooEditor, options: IsElementEmptyOptions): boolean {\n const { blockId, type, path } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n return true;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n return true;\n }\n\n const atPath = path || slate.selection || [0];\n\n try {\n const [elementEntry] = Editor.nodes(slate, {\n at: atPath,\n match: (n) => Element.isElement(n) && n.type === type,\n mode: 'lowest',\n });\n\n if (elementEntry) {\n const [, nodePath] = elementEntry;\n const string = Editor.string(slate, nodePath);\n return string.trim().length === 0;\n }\n\n return true;\n } catch (error) {\n return true;\n }\n}\n","import type { Path } from 'slate';\nimport { Editor, Element, Text, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { SlateEditor, YooEditor } from '../types';\nimport type { ElementMatcher, UpdateElementOptions } from './types';\n\n/**\n * Check if element type is inline based on nodeType prop\n */\nfunction isInlineElementType(editor: YooEditor, blockType: string, elementType: string): boolean {\n const plugin = editor.plugins[blockType];\n const elementConfig = plugin?.elements[elementType];\n\n if (!elementConfig) {\n return false;\n }\n\n const nodeType = elementConfig.props?.nodeType;\n return nodeType === 'inline' || nodeType === 'inlineVoid';\n}\n\n/**\n * Find element by type and matcher in current selection\n */\nfunction findElement(\n slate: SlateEditor,\n type: string,\n isInline: boolean,\n customMatcher?: ElementMatcher,\n): [Element, Path] | null {\n if (!slate.selection) {\n return null;\n }\n\n const matcher = customMatcher || ((n: any) => Element.isElement(n) && n.type === type);\n\n const [entry] = Editor.nodes(slate, {\n at: slate.selection,\n match: matcher,\n mode: isInline ? 'lowest' : 'highest',\n });\n\n if (entry) {\n return entry as [Element, Path];\n }\n\n return null;\n}\n\n/**\n * Update text content of inline element\n */\nfunction updateInlineElementText(slate: SlateEditor, targetPath: Path, newText: string): void {\n // Get current element\n const [element] = Editor.node(slate, targetPath);\n\n if (!Element.isElement(element)) {\n return;\n }\n\n // Remove all current text children\n const textChildren = element.children.filter((child) => Text.isText(child));\n\n if (textChildren.length > 0) {\n // Replace first text node, remove others\n Transforms.insertText(slate, newText, {\n at: [...targetPath, 0],\n });\n\n // Remove extra text nodes if any\n for (let i = textChildren.length - 1; i > 0; i -= 1) {\n try {\n Transforms.removeNodes(slate, {\n at: [...targetPath, i],\n });\n } catch (error) {\n // Node might not exist\n }\n }\n } else {\n // No text children - insert new text node\n Transforms.insertNodes(slate, { text: newText }, { at: [...targetPath, 0] });\n }\n}\n\n/**\n * Update element properties\n *\n * @param editor - YooEditor instance\n * @param options - Update options\n *\n * @example Update block element by path\n * ```typescript\n * editor.updateElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * path: [0, 1],\n * props: { isExpanded: false }\n * });\n * ```\n *\n * @example Update block element by type\n * ```typescript\n * editor.updateElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * props: { isExpanded: false }\n * });\n * ```\n *\n * @example Update inline element (link)\n * ```typescript\n * // Update link at current selection\n * editor.updateElement({\n * blockId: 'paragraph-1',\n * type: 'link',\n * props: { url: 'https://new-url.com', target: '_self' }\n * });\n * ```\n *\n * @example Update inline element text and props\n * ```typescript\n * // Update both link URL and displayed text\n * editor.updateElement({\n * blockId: 'paragraph-1',\n * type: 'link',\n * props: { url: 'https://example.com' },\n * text: 'New link text'\n * });\n * ```\n *\n * @example Update with custom matcher\n * ```typescript\n * editor.updateElement({\n * blockId: 'accordion-1',\n * type: 'accordion-list-item',\n * match: (element) => element.props?.id === 'item-5',\n * props: { isExpanded: true }\n * });\n * ```\n *\n * @example Update mention user name\n * ```typescript\n * editor.updateElement({\n * blockId: 'paragraph-1',\n * type: 'mention',\n * props: { userName: 'Jane Doe' },\n * text: '@Jane Doe' // Update displayed text too\n * });\n * ```\n */\nexport function updateElement(editor: YooEditor, options: UpdateElementOptions): void {\n const { blockId, type, props, path, match, text } = options;\n\n const block = editor.children[blockId];\n if (!block) {\n console.warn(`Block ${blockId} not found`);\n return;\n }\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) {\n console.warn(`Slate editor not found for block ${blockId}`);\n return;\n }\n\n Editor.withoutNormalizing(slate, () => {\n const plugin = editor.plugins[block.type];\n if (!plugin) {\n console.warn(`Plugin ${block.type} not found`);\n return;\n }\n\n const elementConfig = plugin.elements[type];\n if (!elementConfig) {\n console.warn(`Element type ${type} not found in plugin ${block.type}`);\n return;\n }\n\n const isInline = isInlineElementType(editor, block.type, type);\n\n let targetPath: Path | null = null;\n let targetElement: Element | null = null;\n\n // Case 1: Direct path provided\n if (path) {\n targetPath = path;\n try {\n const node = Editor.node(slate, targetPath);\n if (node && Element.isElement(node[0])) {\n targetElement = node[0] as Element;\n }\n } catch (error) {\n console.warn(`Element not found at path ${path}`);\n return;\n }\n }\n // Case 2: Find by type and optional matcher\n else {\n const found = findElement(slate, type, isInline, match);\n if (found) {\n [targetElement, targetPath] = found;\n } else {\n console.warn(`Element of type ${type} not found in current selection`);\n return;\n }\n }\n\n if (!targetPath || !targetElement) {\n console.warn('Could not resolve target element');\n return;\n }\n\n // Update props if provided\n if (props) {\n // Merge new props with existing ones\n const currentProps = { ...targetElement.props };\n const newProps = { ...currentProps, ...props };\n\n Transforms.setNodes(slate, { props: newProps } as any, { at: targetPath });\n }\n\n // Update text if provided (only for inline elements)\n if (text !== undefined && isInline) {\n updateInlineElementText(slate, targetPath, text);\n } else if (text !== undefined && !isInline) {\n console.warn('Text option is only supported for inline elements');\n }\n });\n}\n","import { deleteElement } from './deleteElement';\nimport { getElement } from './getElement';\nimport { getElementChildren } from './getElementChildren';\nimport { getElementEntry } from './getElementEntry';\nimport { getElementPath } from './getElementPath';\nimport { getElementRect } from './getElementRect';\nimport { getElements } from './getElements';\nimport { getParentElementPath } from './getParentElementPath';\nimport { insertElement } from './insertElement';\nimport { isElementEmpty } from './isElementEmpty';\nimport { updateElement } from './updateElement';\n\n// Namespace export for backwards compatibility\nexport const Elements = {\n // New API methods\n insertElement,\n updateElement,\n deleteElement,\n getElement,\n getElements,\n getElementEntry,\n getElementPath,\n getElementRect,\n getParentElementPath,\n getElementChildren,\n isElementEmpty,\n};\n\n// Export new methods individually\nexport {\n deleteElement,\n getElement,\n getElementChildren,\n getElementEntry,\n getElementPath,\n getElementRect,\n getElements,\n getParentElementPath,\n insertElement,\n isElementEmpty,\n updateElement,\n};\n\n// Export types\nexport type {\n DeleteElementOptions,\n ElementMatcher,\n ElementPath,\n GetElementChildrenOptions,\n GetElementEntryOptions,\n GetElementOptions,\n GetElementPathOptions,\n GetElementRectOptions,\n GetElementsOptions,\n InsertElementOptions,\n IsElementEmptyOptions,\n UpdateElementOptions,\n} from './types';\n","import { Editor, Text, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { getLastNodePoint } from '../../utils/get-node-points';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport { Elements } from '../elements';\nimport { Paths } from '../paths';\nimport type { SlateElement, YooEditor, YooptaPathIndex } from '../types';\nimport { getBlock } from './getBlock';\nimport { getBlockSlate } from './getBlockSlate';\n\nexport type MergeBlockOptions = {\n /**\n * Source block to merge (the one that will be merged into target)\n * @default editor.path.current\n */\n at?: YooptaPathIndex;\n blockId?: string;\n\n /**\n * Target block to merge into (the one that will receive content)\n * If not provided, uses previous block\n * @default previous block\n */\n targetAt?: YooptaPathIndex;\n targetBlockId?: string;\n\n /**\n * Focus after merge\n * @default true\n */\n focus?: boolean;\n\n /**\n * Preserve content from source block\n * @default true\n */\n preserveContent?: boolean;\n};\n\nfunction mergeSlateChildren(target, source, preserveContent: boolean) {\n if (!preserveContent) {\n return target.children;\n }\n\n const targetChildren = JSON.parse(JSON.stringify(target.children));\n const sourceChildren = JSON.parse(JSON.stringify(source.children));\n\n const lastTargetChild = targetChildren[targetChildren.length - 1];\n const firstSourceChild = sourceChildren[0];\n\n if (Text.isText(lastTargetChild) && Text.isText(firstSourceChild)) {\n lastTargetChild.text += firstSourceChild.text;\n return [...targetChildren.slice(0, -1), lastTargetChild, ...sourceChildren.slice(1)];\n }\n return [...targetChildren, ...sourceChildren];\n}\n\n/**\n * Merge a block into another block\n *\n * @param editor - YooEditor instance\n * @param options - Merge options\n *\n * @example\n * ```typescript\n * // Merge current block into previous (default behavior)\n * editor.mergeBlock();\n *\n * // Merge specific block into previous\n * editor.mergeBlock({ at: 5 });\n *\n * // Merge block at index 5 into block at index 3\n * editor.mergeBlock({ at: 5, targetAt: 3 });\n *\n * // Merge without focusing\n * editor.mergeBlock({ focus: false });\n * ```\n */\nexport function mergeBlock(editor: YooEditor, options: MergeBlockOptions = {}): void {\n const { at, blockId, targetAt, targetBlockId, focus = true, preserveContent = true } = options;\n\n // Determine source block\n const sourceBlockPath = typeof at === 'number' ? at : editor.path.current;\n const sourceBlock = getBlock(editor, { id: blockId, at: sourceBlockPath });\n\n if (!sourceBlock) {\n return;\n }\n\n // Get source slate\n const sourceSlate = blockId\n ? getBlockSlate(editor, { id: blockId })\n : findSlateBySelectionPath(editor, { at: sourceBlock.meta.order });\n\n if (!sourceSlate) {\n return;\n }\n\n // Determine target block\n let targetBlock;\n let targetSlate;\n\n if (targetBlockId) {\n targetBlock = getBlock(editor, { id: targetBlockId });\n targetSlate = getBlockSlate(editor, { id: targetBlockId });\n } else if (typeof targetAt === 'number') {\n targetBlock = getBlock(editor, { at: targetAt });\n targetSlate = findSlateBySelectionPath(editor, { at: targetAt });\n } else {\n // Default: use previous block\n const prevBlockPath = Paths.getPreviousBlockOrder(editor, sourceBlock.meta.order);\n if (prevBlockPath === null) {\n return;\n }\n targetBlock = getBlock(editor, { at: prevBlockPath });\n targetSlate = findSlateBySelectionPath(editor, { at: prevBlockPath });\n }\n\n if (!targetBlock || !targetSlate) {\n return;\n }\n\n // Check if target block can accept merge\n const targetBlockEntity = editor.plugins[targetBlock.type];\n if (!targetBlockEntity) {\n return;\n }\n\n const targetBlockElementRoot = Elements.getElement(editor, targetBlock.id);\n if (targetBlockElementRoot?.props?.nodeType === 'void') {\n return;\n }\n\n // Position cursor at the end of target block\n try {\n const point = getLastNodePoint(targetSlate);\n Transforms.select(targetSlate, point);\n } catch (error) {\n Transforms.select(targetSlate, Editor.start(targetSlate, []));\n }\n\n Editor.withoutNormalizing(targetSlate, () => {\n const operations: YooptaOperation[] = [];\n const mergedChildren = mergeSlateChildren(\n targetSlate.children[0],\n sourceSlate.children[0],\n preserveContent,\n );\n const mergedSlateValue = [\n {\n ...targetSlate.children[0],\n children: mergedChildren,\n },\n ];\n\n const mergedBlock = {\n ...targetBlock,\n value: mergedSlateValue,\n };\n\n operations.push({\n type: 'merge_block',\n prevProperties: {\n sourceBlock,\n sourceSlateValue: sourceSlate.children as SlateElement[],\n targetBlock,\n targetSlateValue: targetSlate.children as SlateElement[],\n },\n properties: {\n mergedBlock,\n mergedSlateValue: mergedSlateValue as SlateElement[],\n },\n path: editor.path,\n });\n\n editor.applyTransforms(operations);\n editor.setPath({ current: targetBlock.meta.order });\n\n if (focus) {\n try {\n setTimeout(() => {\n ReactEditor.focus(targetSlate);\n }, 0);\n } catch (error) {\n // Ignore focus errors\n }\n }\n });\n}\n","import type { MoveBlockOperation, YooptaOperation } from '../core/applyTransforms';\nimport type { YooEditor, YooptaPathIndex } from '../types';\n\nexport function moveBlock(editor: YooEditor, draggedBlockId: string, newPath: YooptaPathIndex) {\n const updatedPosition = newPath;\n const draggedBlock = editor.children[draggedBlockId];\n const blockInNewPosition = Object.values(editor.children).find(\n (item) => item.meta.order === updatedPosition,\n );\n\n if (!draggedBlock || !blockInNewPosition) {\n return;\n }\n const operations: YooptaOperation[] = [];\n\n const moveOperation: MoveBlockOperation = {\n type: 'move_block',\n prevProperties: {\n id: draggedBlockId,\n order: draggedBlock.meta.order,\n },\n properties: {\n id: draggedBlockId,\n order: updatedPosition!,\n },\n };\n\n operations.push(moveOperation);\n\n editor.applyTransforms(operations);\n editor.setPath({ current: updatedPosition });\n}\n","import cloneDeep from 'lodash.clonedeep';\nimport type { Location } from 'slate';\nimport { Editor, Node, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { buildSlateNodeElement } from '../../utils/block-elements';\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { generateId } from '../../utils/generateId';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport type { SlateElement, YooEditor, YooptaBlockData, YooptaPathIndex } from '../types';\nimport { getBlock } from './getBlock';\nimport { getBlockSlate } from './getBlockSlate';\n\nexport type SplitBlockOptions = {\n /**\n * Block to split\n * @default editor.path.current\n */\n at?: YooptaPathIndex;\n blockId?: string;\n\n /**\n * Split position (selection point)\n * If not provided, uses current selection\n * @default slate.selection\n */\n splitAt?: Location;\n\n /**\n * Focus after split\n * @default true\n */\n focus?: boolean;\n\n /**\n * Focus target after split\n * - 'new': focus the new block (default)\n * - 'original': focus the original block\n * - 'none': don't focus anything\n * @default 'new'\n */\n focusTarget?: 'new' | 'original' | 'none';\n\n /**\n * Preserve content in both blocks\n * @default true\n */\n preserveContent?: boolean;\n};\n\nfunction splitSlate(slateChildren, slateSelection) {\n const { path, offset } = slateSelection.focus;\n const [, ...childPath] = path;\n\n const firstPart = JSON.parse(JSON.stringify(slateChildren[0]));\n\n function splitNode(node: any, remainingPath: number[], currentOffset: number): [any, any] {\n if (remainingPath.length === 0) {\n if (Node.string(node).length <= currentOffset) {\n return [node, null];\n }\n if ('text' in node) {\n return [\n { ...node, text: node.text.slice(0, currentOffset) },\n { ...node, text: node.text.slice(currentOffset) },\n ];\n }\n if (node.type === 'link') {\n const [leftChild, rightChild] = splitNode(node.children[0], [], currentOffset);\n return [\n { ...node, children: [leftChild] },\n { ...node, children: [rightChild] },\n ];\n }\n } else {\n const [childIndex, ...nextPath] = remainingPath;\n const [left, right] = splitNode(node.children[childIndex], nextPath, currentOffset);\n const leftChildren = node.children.slice(0, childIndex).concat(left ? [left] : []);\n const rightChildren = (right ? [right] : []).concat(node.children.slice(childIndex + 1));\n return [\n { ...node, children: leftChildren },\n { ...node, children: rightChildren },\n ];\n }\n return [node, null];\n }\n\n const [leftContent, rightContent] = splitNode(firstPart, childPath, offset);\n\n function cleanNode(node: any): any {\n if ('children' in node) {\n if (node.props?.nodeType === 'inlineVoid' || node.props?.nodeType === 'inline') {\n if (node.children.length === 0) {\n return { ...node, children: [{ text: '' }] };\n }\n return node;\n }\n\n const cleanedChildren = node.children\n .filter(\n (child: any) =>\n (child.text !== '' && child.text !== undefined) ||\n (child.children && child.children.length > 0),\n )\n .map(cleanNode);\n\n return { ...node, children: cleanedChildren };\n }\n return node;\n }\n\n return [cleanNode(leftContent), cleanNode(rightContent)]\n .map((part) => [part])\n .filter((part) => part[0].children.length > 0);\n}\n\n/**\n * Split a block at the selection point or specified position\n *\n * @param editor - YooEditor instance\n * @param options - Split options\n * @returns ID of the newly created block, or undefined if split failed\n *\n * @example\n * ```typescript\n * // Split current block at selection\n * const newBlockId = editor.splitBlock();\n *\n * // Split specific block\n * const newBlockId = editor.splitBlock({ at: 3 });\n *\n * // Split and focus original block\n * const newBlockId = editor.splitBlock({ focusTarget: 'original' });\n * ```\n */\nexport function splitBlock(editor: YooEditor, options: SplitBlockOptions = {}): string | undefined {\n const {\n at,\n blockId,\n splitAt,\n focus = true,\n focusTarget = 'new',\n preserveContent = true,\n } = options;\n\n // Determine which block to split\n const blockPath = typeof at === 'number' ? at : editor.path.current;\n const blockToSplit = getBlock(editor, { id: blockId, at: blockPath });\n\n if (!blockToSplit) {\n return undefined;\n }\n\n // Get slate editor for this block\n const slate = blockId\n ? getBlockSlate(editor, { id: blockId })\n : findSlateBySelectionPath(editor, { at: blockToSplit.meta.order });\n\n if (!slate) {\n return undefined;\n }\n\n // Determine split position\n const splitSelection = splitAt ?? slate.selection;\n\n if (!splitSelection) {\n return undefined;\n }\n\n // Temporarily set selection if splitAt was provided and different from current\n const originalSelection = slate.selection;\n const needsSelectionRestore = splitAt && splitAt !== slate.selection;\n\n if (needsSelectionRestore) {\n Transforms.select(slate, splitAt);\n }\n\n let newBlockId: string | undefined;\n\n try {\n Editor.withoutNormalizing(slate, () => {\n const originalSlateChildren = cloneDeep(slate.children);\n const operations: YooptaOperation[] = [];\n\n let splitValue;\n let nextSlateValue;\n\n if (preserveContent) {\n [splitValue, nextSlateValue] = splitSlate(slate.children, splitSelection);\n } else {\n // If not preserving content, create empty block\n splitValue = slate.children;\n nextSlateValue = undefined;\n }\n\n const nextBlock: YooptaBlockData = {\n id: generateId(),\n type: blockToSplit.type,\n meta: {\n order: blockToSplit.meta.order + 1,\n depth: blockToSplit.meta.depth,\n align: blockToSplit.meta.align,\n },\n value: [],\n };\n\n newBlockId = nextBlock.id;\n\n operations.push({\n type: 'split_block',\n prevProperties: {\n originalBlock: blockToSplit,\n originalValue: originalSlateChildren as SlateElement[],\n },\n properties: {\n nextBlock,\n nextSlateValue: !nextSlateValue ? [buildSlateNodeElement('paragraph')] : nextSlateValue,\n splitSlateValue: splitValue,\n },\n path: editor.path,\n });\n\n editor.applyTransforms(operations);\n\n // Handle focus based on focusTarget\n if (focus && focusTarget !== 'none') {\n if (focusTarget === 'new') {\n editor.focusBlock(nextBlock.id);\n } else if (focusTarget === 'original') {\n // Focus the original block\n const originalSlate = getBlockSlate(editor, { id: blockToSplit.id });\n if (originalSlate) {\n try {\n ReactEditor.focus(originalSlate);\n // Move cursor to end of original block\n Transforms.select(originalSlate, Editor.end(originalSlate, []));\n } catch (error) {\n // Ignore focus errors\n }\n }\n }\n }\n });\n } finally {\n // Restore original selection if we changed it\n if (needsSelectionRestore && originalSelection) {\n try {\n Transforms.select(slate, originalSelection);\n } catch (error) {\n // Selection might be invalid after split, ignore\n }\n }\n }\n\n return newBlockId;\n}\n","import type { Descendant } from 'slate';\n\nimport type { PluginElement } from '../../plugins/types';\nimport { generateId } from '../../utils/generateId';\nimport type { SlateElement, SlateElementTextNode, YooEditor } from '../types';\n\nexport type ElementStructureOptions = {\n id?: string;\n props?: Record<string, unknown>;\n children?: Descendant[]; // Can be SlateElement[] or Text nodes\n};\n\nexport type TextNodeOptions = {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n code?: boolean;\n strike?: boolean;\n highlight?: {\n color?: string;\n backgroundColor?: string;\n };\n};\n\n/**\n * Finds element configuration by element type across all plugins\n */\nfunction findElementConfig(\n editor: YooEditor,\n elementType: string,\n): PluginElement<string, unknown> | null {\n for (const pluginType of Object.keys(editor.plugins)) {\n const plugin = editor.plugins[pluginType];\n if (plugin.elements?.[elementType]) {\n return plugin.elements[elementType];\n }\n }\n return null;\n}\n\n// <y.element type=\"step-container\" render={StepContainer}> [0]\n// <y.element type=\"step-list\" render={StepList}> [0, 0]\n// <y.element type=\"step-list-item\" render={StepListItem} props={{ isCompleted: false }}> [0, 0, 0]\n// <y.element type=\"step-list-item-heading\" render={StepListItemHeading} /> [0, 0, 0, 0]\n// <y.element type=\"step-list-item-content\" render={StepListItemContent}> [0, 0, 0, 1]\n// <y.text>Hello</y.text> [0, 0, 0, 1, 0]\n// <y.text.mark type=\"bold\">World</y.text.mark> [0, 0, 0, 1, 1]\n// </y.element>\n// </y.element>\n// </y.element>\n// </y.element>\n\n/**\n * Creates a text node with optional marks (bold, italic, etc.)\n *\n * @param text - Text content\n * @param marks - Optional marks (bold, italic, underline, code, strike, highlight)\n *\n * @example\n * ```typescript\n * // Plain text\n * editor.y.text('Hello world')\n *\n * // Text with marks\n * editor.y.text('Bold text', { bold: true })\n * editor.y.text('Italic text', { italic: true })\n * editor.y.text('Bold and italic', { bold: true, italic: true })\n * ```\n */\nexport function yText(text: string, marks: TextNodeOptions = {}): SlateElementTextNode {\n return {\n text,\n ...marks,\n };\n}\n\n/**\n * Creates an inline element (e.g., link, mention)\n * Inline elements are embedded within text and can contain text nodes\n *\n * @param editor - YooEditor instance\n * @param type - Inline element type (e.g., 'link', 'mention')\n * @param options - Optional props and children (text nodes)\n *\n * @example\n * ```typescript\n * // Simple link\n * editor.y.inline('link', {\n * props: { url: 'https://example.com', target: '_blank' },\n * children: [editor.y.text('Click me')]\n * })\n *\n * // Link with formatted text\n * editor.y.inline('link', {\n * props: { url: 'https://example.com' },\n * children: [\n * editor.y.text('Bold ', { bold: true }),\n * editor.y.text('link')\n * ]\n * })\n *\n * // Inline element in paragraph\n * editor.y('paragraph', {\n * children: [\n * editor.y.text('Visit '),\n * editor.y.inline('link', {\n * props: { url: 'https://example.com' },\n * children: [editor.y.text('example.com')]\n * }),\n * editor.y.text(' for more info')\n * ]\n * })\n * ```\n */\nexport function yInline(\n editor: YooEditor,\n type: string,\n options: ElementStructureOptions = {},\n): SlateElement {\n const elementConfig = findElementConfig(editor, type);\n\n if (!elementConfig) {\n throw new Error(\n `Inline element type \"${type}\" not found in any plugin. ` +\n `Make sure the plugin is registered in editor.plugins`,\n );\n }\n\n const { id: customId, props: customProps, children: customChildren } = options;\n\n // Get nodeType from config (can be 'inline' or 'inlineVoid')\n const configNodeType = elementConfig.props?.nodeType;\n const isInlineVoid = configNodeType === 'inlineVoid';\n\n // Merge default props from config with custom props\n // Preserve nodeType from config if it's inlineVoid, otherwise default to 'inline'\n const props = {\n ...elementConfig.props,\n ...customProps,\n nodeType: (isInlineVoid ? 'inlineVoid' : 'inline') as 'inline' | 'inlineVoid',\n };\n\n // Determine children\n let children: Descendant[];\n\n if (isInlineVoid) {\n // For inlineVoid elements, always use empty text node (void elements don't contain editable text)\n children = [{ text: '' }];\n } else if (customChildren !== undefined) {\n // Use explicitly provided children (can be text nodes or other inline elements)\n children = customChildren.length > 0 ? customChildren : [{ text: '' }];\n } else {\n // Default to empty text node for inline elements\n children = [{ text: '' }];\n }\n\n return {\n id: customId ?? generateId(),\n type,\n children,\n props,\n };\n}\n\n/**\n * Creates a SlateElement structure for use in insertBlock or other operations\n *\n * @param editor - YooEditor instance\n * @param type - Element type (e.g., 'accordion-list', 'paragraph', etc.)\n * @param options - Optional props and children\n *\n * @example\n * ```typescript\n * // Simple element\n * editor.y('paragraph')\n *\n * // Element with custom props\n * editor.y('accordion-list-item', { props: { isExpanded: false } })\n *\n * // Nested structure\n * editor.y('accordion-list', {\n * children: [\n * editor.y('accordion-list-item', {\n * props: { isExpanded: false },\n * children: [\n * editor.y('accordion-list-item-heading'),\n * editor.y('accordion-list-item-content')\n * ]\n * })\n * ]\n * })\n *\n * // Element with text and marks\n * editor.y('paragraph', {\n * children: [\n * editor.y.text('Hello '),\n * editor.y.text('world', { bold: true }),\n * editor.y.text('!', { italic: true })\n * ]\n * })\n *\n * // Mixed: elements and text\n * editor.y('step-list-item-content', {\n * children: [\n * editor.y.text('Step 1: '),\n * editor.y('callout', { props: { theme: 'info' } }),\n * editor.y.text(' - completed', { strike: true })\n * ]\n * })\n * ```\n */\nexport function y(\n editor: YooEditor,\n type: string,\n options: ElementStructureOptions = {},\n): SlateElement {\n const elementConfig = findElementConfig(editor, type);\n\n if (!elementConfig) {\n throw new Error(\n `Element type \"${type}\" not found in any plugin. ` +\n `Make sure the plugin is registered in editor.plugins`,\n );\n }\n\n const { id: customId, props: customProps, children: customChildren } = options;\n\n // Merge default props from config with custom props\n const props = {\n ...elementConfig.props,\n ...customProps,\n };\n\n // Determine children\n let children: Descendant[];\n\n if (customChildren !== undefined) {\n // Use explicitly provided children (can be SlateElement[] or Text nodes)\n children = customChildren.length > 0 ? customChildren : [{ text: '' }];\n } else if (elementConfig.children && elementConfig.children.length > 0) {\n // Only build children from config if they are NOT from injectElementsFromPlugins\n // If element has injectElementsFromPlugins, default to text node unless explicitly specified\n if (\n elementConfig.injectElementsFromPlugins &&\n elementConfig.injectElementsFromPlugins.length > 0\n ) {\n // Element with injectElementsFromPlugins defaults to empty text node\n children = [{ text: '' }];\n } else {\n // Build standard children from element config\n children = elementConfig.children.map((childType) => y(editor, childType, {}));\n }\n } else {\n // Leaf element - add empty text node\n children = [{ text: '' }];\n }\n\n return {\n id: customId ?? generateId(),\n type,\n children,\n props,\n };\n}\n\n/**\n * Creates a JSX-compatible function bound to the editor\n * Use this for JSX pragma\n *\n * @example\n * ```typescript\n * import { createJSXFactory } from '@yoopta/editor';\n *\n * const y = createJSXFactory(editor);\n *\n * // Now you can use JSX:\n * // @jsx y\n * const structure = (\n * <accordion-list>\n * <accordion-list-item props={{ isExpanded: false }}>\n * <accordion-list-item-heading />\n * </accordion-list-item>\n * </accordion-list>\n * );\n *\n * editor.insertBlock('Accordion', {\n * blockData: { value: [structure] }\n * });\n * ```\n */\nexport function createJSXFactory(editor: YooEditor) {\n return function hFactory(\n type: string,\n props: Record<string, unknown> | null,\n ...children: unknown[]\n ): SlateElement {\n // Extract custom props (everything except 'children' and React-specific props)\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n children: UNUSED_CHILDREN,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n key: UNUSED_KEY,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ref: UNUSED_REF,\n ...customProps\n } = props ?? {};\n\n // Filter out null/undefined children and flatten arrays\n const validChildren = children\n .flat()\n .filter(\n (child) => child !== null && typeof child === 'object' && 'type' in child,\n ) as SlateElement[];\n\n return y(editor, type, {\n props: Object.keys(customProps).length > 0 ? customProps : undefined,\n children: validChildren.length > 0 ? validChildren : undefined,\n });\n };\n}\n","import type { Descendant } from 'slate';\nimport { Editor, Element, Text, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport {\n buildBlockElementsStructure,\n getAllowedPluginsFromElement,\n} from '../../utils/block-elements';\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { generateId } from '../../utils/generateId';\nimport type { YooptaOperation } from '../core/applyTransforms';\nimport type {\n SlateEditor,\n SlateElement,\n YooEditor,\n YooptaBlockData,\n YooptaPathIndex,\n} from '../types';\nimport { getBlock } from './getBlock';\nimport { y } from '../elements/create-element-structure';\n\nexport type ToggleBlockOptions = {\n /**\n * Position of the block to toggle\n * @default editor.path.current\n */\n at?: YooptaPathIndex;\n\n /**\n * Scope of the toggle operation:\n * - 'auto': automatically determine from context (default)\n * - 'block': transform the entire block (Paragraph → Heading)\n * - 'element': insert element in current leaf with injectElementsFromPlugins\n *\n * @default 'auto'\n */\n scope?: 'auto' | 'block' | 'element';\n\n /**\n * Whether to preserve existing content\n * - true: keep text and transfer to new block/element\n * - false: start with empty content\n * @default true\n */\n preserveContent?: boolean;\n\n /**\n * Focus after toggle\n * @default false\n */\n focus?: boolean;\n\n /**\n * Custom element structure created with editor.y()\n * If provided, this will be used instead of default structure\n */\n elements?: SlateElement;\n};\n\nconst DEFAULT_BLOCK_TYPE = 'Paragraph';\n\nfunction extractTextNodes(\n slate: SlateEditor,\n node: SlateElement | Descendant,\n blockData: YooptaBlockData,\n editor: YooEditor,\n): (Text | SlateElement)[] {\n if (Editor.isEditor(node))\n return node.children.flatMap((child) => extractTextNodes(slate, child, blockData, editor));\n if (!Element.isElement(node)) return [node];\n if (Editor.isInline(slate, node)) return [node];\n\n return node.children.flatMap((child) => extractTextNodes(slate, child, blockData, editor));\n}\n\nfunction findFirstLeaf(node: SlateElement, preserveContent: boolean): SlateElement | null {\n if (!Element.isElement(node)) {\n return null;\n }\n if (node.children.length === 0 || Text.isText(node.children[0])) {\n if (!preserveContent) {\n return { ...node, children: [{ text: '' }] };\n }\n\n return node;\n }\n return findFirstLeaf(node.children[0] as SlateElement, preserveContent);\n}\n\nfunction determineScope(\n editor: YooEditor,\n slate: SlateEditor,\n explicitScope?: 'auto' | 'block' | 'element',\n): 'block' | 'element' {\n // Always use block scope if explicitly requested\n if (explicitScope === 'block') return 'block';\n\n // Check if current element has injectElementsFromPlugins\n const injectElementsFromPlugins = getAllowedPluginsFromElement(editor, slate);\n const hasAllowedPlugins =\n Array.isArray(injectElementsFromPlugins) && injectElementsFromPlugins.length > 0;\n\n // If element scope is explicitly requested, verify that current element can contain other elements\n if (explicitScope === 'element') {\n // Fallback to block scope if current element doesn't have injectElementsFromPlugins\n return hasAllowedPlugins ? 'element' : 'block';\n }\n\n // Auto mode: use element scope only if injectElementsFromPlugins exist\n return hasAllowedPlugins ? 'element' : 'block';\n}\n\n/**\n * Toggle in 'block' scope: transform the entire block\n */\nfunction toggleBlockScope(\n editor: YooEditor,\n fromBlock: YooptaBlockData,\n slate: SlateEditor,\n toTypeArg: string,\n options: ToggleBlockOptions,\n): string {\n const { preserveContent = true, elements } = options;\n\n // If toggling to same type, toggle back to Paragraph\n const toType = fromBlock.type === toTypeArg ? DEFAULT_BLOCK_TYPE : toTypeArg;\n const plugin = editor.plugins[toType];\n\n if (!plugin) {\n throw new Error(`Plugin \"${toTypeArg}\" not found`);\n }\n\n const { beforeCreate } = plugin.lifecycle ?? {};\n\n // Build structure for the new block\n let toBlockSlateStructure: SlateElement;\n\n if (elements) {\n toBlockSlateStructure = elements;\n } else if (beforeCreate) {\n toBlockSlateStructure = beforeCreate(editor);\n } else {\n toBlockSlateStructure = buildBlockElementsStructure(editor, toType);\n }\n\n // Extract and transfer text nodes if preserving content\n if (preserveContent) {\n const textNodes = extractTextNodes(slate, slate.children[0], fromBlock, editor);\n const firstLeaf = findFirstLeaf(toBlockSlateStructure, preserveContent);\n\n if (firstLeaf) {\n firstLeaf.children = textNodes;\n }\n }\n\n const newBlock: YooptaBlockData = {\n id: generateId(),\n type: toType,\n meta: { ...fromBlock.meta, align: undefined },\n value: [toBlockSlateStructure],\n };\n\n const operations: YooptaOperation[] = [\n {\n type: 'toggle_block',\n prevProperties: {\n sourceBlock: fromBlock,\n sourceSlateValue: slate.children as SlateElement[],\n },\n properties: {\n toggledBlock: newBlock,\n toggledSlateValue: newBlock.value as SlateElement[],\n },\n },\n ];\n\n editor.applyTransforms(operations);\n\n if (options.focus) {\n editor.focusBlock(newBlock.id);\n }\n\n return newBlock.id;\n}\n\n/**\n * Toggle in 'element' scope: insert element in current leaf\n */\nfunction toggleBlockElementScope(\n editor: YooEditor,\n block: YooptaBlockData,\n slate: SlateEditor,\n type: string,\n options: ToggleBlockOptions,\n): string {\n const { preserveContent = true, elements } = options;\n\n if (!slate.selection) {\n throw new Error('No selection found');\n }\n\n // Get the plugin and its root element\n const selectedPlugin = editor.plugins[type];\n if (!selectedPlugin) {\n throw new Error(`Plugin \"${type}\" not found`);\n }\n\n const rootElementType =\n Object.keys(selectedPlugin.elements).find((key) => selectedPlugin.elements[key].asRoot) ??\n Object.keys(selectedPlugin.elements)[0];\n\n if (!rootElementType) {\n throw new Error(`No root element found for plugin \"${type}\"`);\n }\n\n // Build element structure\n let elementStructure: SlateElement;\n\n if (elements) {\n elementStructure = elements;\n } else {\n elementStructure = y(editor, rootElementType);\n }\n\n // Get the current element\n const blockElementEntry = Editor.above(slate, {\n match: (n) => Element.isElement(n) && Editor.isBlock(slate, n),\n mode: 'lowest',\n });\n\n if (!blockElementEntry) {\n throw new Error('No block element found at selection');\n }\n\n const [currentElement, currentNodePath] = blockElementEntry;\n\n // Check if current element has injectElementsFromPlugins (can contain other elements)\n const currentPlugin = editor.plugins[block.type];\n const currentElementType = (currentElement as SlateElement).type;\n const currentElementConfig = currentPlugin?.elements[currentElementType];\n const hasAllowedPlugins =\n Array.isArray(currentElementConfig?.injectElementsFromPlugins) &&\n currentElementConfig.injectElementsFromPlugins.length > 0;\n\n // Extract text nodes if preserving content\n if (preserveContent) {\n const textNodes = extractTextNodes(slate, currentElement as Descendant, block, editor);\n const firstLeaf = findFirstLeaf(elementStructure, preserveContent);\n\n if (firstLeaf) {\n firstLeaf.children = textNodes;\n }\n }\n\n if (hasAllowedPlugins) {\n // If current element has injectElementsFromPlugins (e.g., callout, accordion-list-item-heading)\n // Insert inside it, don't replace\n const childrenCount = (currentElement as SlateElement).children.length;\n for (let i = childrenCount - 1; i >= 0; i -= 1) {\n Transforms.removeNodes(slate, { at: [...currentNodePath, i] });\n }\n\n // Insert the new element as child\n Transforms.insertNodes(slate, elementStructure, {\n at: [...currentNodePath, 0],\n select: true,\n });\n } else {\n // If current element doesn't have injectElementsFromPlugins, replace it\n Transforms.removeNodes(slate, { at: currentNodePath });\n Transforms.insertNodes(slate, elementStructure, {\n at: currentNodePath,\n select: true,\n });\n }\n\n if (options.focus) {\n // when scope is element, we need to focus/select first leaf text node of the new element\n ReactEditor.focus(slate);\n // const pathToSelect =\n // currentNodePath.length > 1 ? [...currentNodePath, 0, 0] : [currentNodePath[0], 0];\n Transforms.select(slate, currentNodePath);\n }\n\n return block.id;\n}\n\n/**\n * Toggle block type or insert element in leaf with injectElementsFromPlugins\n *\n * Behavior depends on scope:\n * - scope: 'block' → transforms the block (Paragraph → Heading)\n * - scope: 'element' → inserts element in current leaf with injectElementsFromPlugins\n * - scope: 'auto' → automatically determines based on context\n *\n * @example\n * // Transform block\n * editor.toggleBlock('Heading', { preserveContent: true });\n *\n * // Insert element in leaf\n * editor.toggleBlock('Paragraph', { scope: 'element', preserveContent: false });\n *\n * // With custom structure\n * editor.toggleBlock('Accordion', {\n * elements: editor.y('accordion-list', { ... })\n * });\n */\nexport function toggleBlock(\n editor: YooEditor,\n type: string,\n options: ToggleBlockOptions = {},\n): string {\n const { scope = 'auto' } = options;\n\n const at = typeof options.at === 'number' ? options.at : editor.path.current;\n const block = getBlock(editor, { at });\n\n if (!block) throw new Error(`Block not found at current selection: ${at}`);\n\n const slate = findSlateBySelectionPath(editor, { at: block.meta.order });\n if (!slate) throw new Error(`Slate not found for block in position ${block.meta.order}`);\n\n const actualScope = determineScope(editor, slate, scope);\n\n if (actualScope === 'element') {\n return toggleBlockElementScope(editor, block, slate, type, options);\n }\n\n return toggleBlockScope(editor, block, slate, type, options);\n}\n","import type { YooptaOperation } from '../core/applyTransforms';\nimport type { SlateElement, YooEditor, YooptaBlockData } from '../types';\n\n// Maybe add source pararmeter to this function?\nexport function updateBlock(\n editor: YooEditor,\n blockId: string,\n newData: Omit<Partial<YooptaBlockData>, 'id' | 'type'>,\n): void {\n const block = editor.children[blockId];\n\n if (!block) {\n console.warn(`Block with id ${blockId} does not exist.`);\n return;\n }\n\n const updateBlockMetaOperation: YooptaOperation = {\n type: 'set_block_meta',\n id: blockId,\n properties: {},\n prevProperties: {},\n };\n\n const updateBlockValueOperation: YooptaOperation = {\n type: 'set_block_value',\n id: blockId,\n value: [],\n };\n\n if (newData.meta) {\n updateBlockMetaOperation.prevProperties = block.meta;\n updateBlockMetaOperation.properties = { ...block.meta, ...newData.meta };\n }\n\n if (newData.value) {\n updateBlockValueOperation.value = newData.value as SlateElement[];\n }\n\n const operations: YooptaOperation[] = [];\n\n if (Object.keys(updateBlockMetaOperation.properties).length) {\n operations.push(updateBlockMetaOperation);\n }\n\n if (updateBlockValueOperation.value.length) {\n operations.push(updateBlockValueOperation);\n }\n\n if (operations.length > 0) {\n editor.applyTransforms(operations, { validatePaths: false });\n }\n}\n","import { buildBlockData } from './buildBlockData';\nimport { decreaseBlockDepth } from './decreaseBlockDepth';\nimport { deleteBlock } from './deleteBlock';\nimport { duplicateBlock } from './duplicateBlock';\nimport { focusBlock } from './focusBlock';\nimport { getBlock } from './getBlock';\nimport { getBlockSlate } from './getBlockSlate';\nimport { increaseBlockDepth } from './increaseBlockDepth';\nimport { insertBlock } from './insertBlock';\nimport { mergeBlock } from './mergeBlock';\nimport { moveBlock } from './moveBlock';\nimport { splitBlock } from './splitBlock';\nimport { toggleBlock } from './toggleBlock';\nimport { updateBlock } from './updateBlock';\n\nexport const Blocks = {\n insertBlock,\n deleteBlock,\n moveBlock,\n focusBlock,\n splitBlock,\n increaseBlockDepth,\n decreaseBlockDepth,\n duplicateBlock,\n updateBlock,\n toggleBlock,\n getBlock,\n getBlockSlate,\n buildBlockData,\n mergeBlock,\n};\n\nexport type Blocks = typeof Blocks;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\n\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\n\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n\n/**\n * Is hotkey?\n */\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, { byKey: true }, event);\n}\n\n/**\n * Parse.\n */\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {};\n\n // Special case to handle the `+` key since we use it as a separator.\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length;\n\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n\n var optional = value.endsWith('?') && value.length > 1;\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (value.length > 1 && !modifier && !ALIASES[value] && !CODES[name]) {\n throw new TypeError('Unknown modifier: \"' + value + '\"');\n }\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n\n/**\n * Compare.\n */\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key' && event.key != null) {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Utils.\n */\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n\n/**\n * Export.\n */\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","import { isKeyHotkey } from 'is-hotkey';\n\nconst HOTKEYS_MAP = {\n bold: 'mod+b',\n italic: 'mod+i',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n arrowLeft: 'left',\n arrowUp: 'up',\n arrowDown: 'down',\n arrowRight: 'right',\n ctrlLeft: 'ctrl+left',\n escape: 'esc',\n ctrlRight: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n backspace: 'backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n shiftDelete: 'shift+delete',\n extendForward: 'shift+right',\n shiftEnter: 'shift+enter',\n enter: 'enter',\n space: 'space',\n undo: 'mod+z',\n select: 'mod+a',\n shiftTab: 'shift+tab',\n shiftArrowUp: 'shift+up',\n shiftArrowDown: 'shift+down',\n tab: 'tab',\n cmd: 'mod',\n cmdEnter: 'mod+enter',\n cmdShiftEnter: 'mod+shift+enter',\n slashCommand: '/',\n copy: 'mod+c',\n cut: 'mod+x',\n cmdShiftRight: 'mod+shift+right',\n cmdShiftLeft: 'mod+shift+left',\n cmdShiftDelete: 'mod+shift+backspace',\n cmdShiftD: 'mod+shift+d',\n cmdAltDelete: 'mod+alt+backspace',\n};\n\nconst APPLE_HOTKEYS = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n ctrlLeft: 'opt+left',\n ctrlRight: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t',\n};\n\nconst WINDOWS_HOTKEYS = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z'],\n};\n\nconst create = (key: string) => {\n const generic = HOTKEYS_MAP[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: React.KeyboardEvent | KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) return true;\n if (isApple && isApple(event)) return true;\n if (isWindows && isWindows(event)) return true;\n return false;\n };\n};\n\nexport const HOTKEYS = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isArrowLeft: create('arrowLeft'),\n isArrowRight: create('arrowRight'),\n isArrowUp: create('arrowUp'),\n isArrowDown: create('arrowDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isCtrlLeft: create('ctrlLeft'),\n isCtrlRight: create('ctrlRight'),\n isRedo: create('redo'),\n isShiftEnter: create('shiftEnter'),\n isEnter: create('enter'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo'),\n isSpace: create('space'),\n isSelect: create('select'),\n isTab: create('tab'),\n isShiftTab: create('shiftTab'),\n isBackspace: create('backspace'),\n isCmdEnter: create('cmdEnter'),\n isCmd: create('cmd'),\n isEscape: create('escape'),\n isSlashCommand: create('slashCommand'),\n isShiftArrowUp: create('shiftArrowUp'),\n isShiftArrowDown: create('shiftArrowDown'),\n isCopy: create('copy'),\n isCut: create('cut'),\n isShiftDelete: create('shiftDelete'),\n isCmdShiftEnter: create('cmdShiftEnter'),\n isCmdShiftRight: create('cmdShiftRight'),\n isCmdShiftLeft: create('cmdShiftLeft'),\n isCmdShiftDelete: create('cmdShiftDelete'),\n isCmdAltDelete: create('cmdAltDelete'),\n isCmdShiftD: create('cmdShiftD'),\n};\n\nexport type HOTKEYS_TYPE = {\n [key in keyof typeof HOTKEYS]: (event: React.KeyboardEvent | KeyboardEvent) => boolean;\n};\n","import { useMemo } from 'react';\nimport { Element, Node, Operation, Path, Range, Transforms } from 'slate';\n\nimport { withInlines } from './extenstions/with-inlines';\nimport type { PluginDOMEvents, PluginEventHandlerOptions } from './types';\nimport { Blocks } from '../editor/blocks';\nimport type { SetSlateOperation } from '../editor/core/applyTransforms';\nimport { Paths } from '../editor/paths';\nimport type { SlateEditor, YooEditor, YooptaBlockData } from '../editor/types';\nimport type { EditorEventHandlers } from '../types/eventHandlers';\nimport { getRootBlockElementType } from '../utils/block-elements';\nimport { generateId } from '../utils/generateId';\nimport { HOTKEYS } from '../utils/hotkeys';\n\n\nconst shouldSave = (op: Operation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nconst shouldMerge = (op: Operation, prev: Operation | undefined): boolean => {\n if (prev === op) return true;\n\n if (\n prev &&\n op.type === 'insert_text' &&\n prev.type === 'insert_text' &&\n op.offset === prev.offset + prev.text.length &&\n Path.equals(op.path, prev.path)\n ) {\n return true;\n }\n\n if (\n prev &&\n op.type === 'remove_text' &&\n prev.type === 'remove_text' &&\n op.offset + op.text.length === prev.offset &&\n Path.equals(op.path, prev.path)\n ) {\n return true;\n }\n\n return false;\n};\n\n\nexport const useSlateEditor = (\n id: string,\n editor: YooEditor,\n block: YooptaBlockData,\n elements: any,\n withExtensions: any,\n) =>\n useMemo(() => {\n let slate = editor.blockEditorsMap[id];\n\n const { normalizeNode, insertText, apply } = slate;\n const elementTypes = Object.keys(elements);\n\n elementTypes.forEach((elementType) => {\n const nodeType = elements[elementType].props?.nodeType;\n\n const isInline = nodeType === 'inline';\n const isVoid = nodeType === 'void';\n const isInlineVoid = nodeType === 'inlineVoid';\n\n const { markableVoid: prevMarkableVoid, isVoid: prevIsVoid, isInline: prevIsInline } = slate;\n if (isInlineVoid) {\n slate.markableVoid = (element) =>\n element.type === elementType ? true : prevMarkableVoid(element);\n }\n\n if (isVoid || isInlineVoid) {\n slate.isVoid = (element) => (element.type === elementType ? true : prevIsVoid(element));\n }\n\n if (isInline || isInlineVoid) {\n slate.isInline = (element) => (element.type === elementType ? true : prevIsInline(element));\n\n // [TODO] - Move it to Link plugin extension\n slate = withInlines(editor, slate);\n }\n });\n\n slate.insertText = (text) => {\n const selectedPaths = Paths.getSelectedPaths(editor);\n const path = Paths.getBlockOrder(editor);\n if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n editor.setPath({ current: path });\n }\n\n insertText(text);\n };\n\n // This normalization is needed to validate the elements structure\n slate.normalizeNode = (entry) => {\n const [node, path] = entry;\n const blockElements = editor.plugins[block.type].elements;\n\n // Normalize only `simple` block elements.\n // Simple elements are elements that have only one defined block element type.\n // [TODO] - handle validation for complex block elements\n if (Object.keys(blockElements).length > 1) {\n return normalizeNode(entry);\n }\n\n if (Element.isElement(node)) {\n const { type } = node;\n const rootElementType = getRootBlockElementType(blockElements);\n\n if (!elementTypes.includes(type)) {\n Transforms.setNodes(\n slate,\n { id: generateId(), type: rootElementType, props: { ...node.props } },\n { at: path },\n );\n return;\n }\n\n if (node.type === rootElementType) {\n for (const [child, childPath] of Node.children(slate, path)) {\n if (Element.isElement(child) && !slate.isInline(child)) {\n Transforms.unwrapNodes(slate, { at: childPath });\n return;\n }\n }\n }\n }\n\n normalizeNode(entry);\n };\n\n slate.apply = (op) => {\n if (Operation.isSelectionOperation(op)) {\n const selectedPaths = Paths.getSelectedPaths(editor);\n const path = Paths.getBlockOrder(editor);\n\n if (Array.isArray(selectedPaths) && slate.selection && Range.isExpanded(slate.selection)) {\n editor.setPath({ current: path });\n }\n }\n\n let save = editor.isSavingHistory();\n if (typeof save === 'undefined') {\n save = shouldSave(op);\n }\n\n if (save) {\n const lastEditorBatch = editor.historyStack.undos[editor.historyStack.undos.length - 1];\n if (!lastEditorBatch || lastEditorBatch?.operations[0]?.type !== 'set_slate') {\n const setSlateOperation: SetSlateOperation = {\n type: 'set_slate',\n properties: {\n slateOps: [op],\n selectionBefore: slate.selection,\n },\n blockId: id,\n slate,\n };\n\n editor.applyTransforms([setSlateOperation], { source: 'api', validatePaths: false });\n apply(op);\n return;\n }\n\n const lastSlateOps = (lastEditorBatch?.operations[0] as SetSlateOperation)?.properties\n ?.slateOps;\n const lastOp = lastSlateOps && lastSlateOps[lastSlateOps.length - 1];\n let merge = shouldMerge(op, lastOp);\n\n if (slate.operations.length !== 0) {\n merge = true;\n }\n\n if (merge) {\n if (lastOp !== op) {\n lastSlateOps.push(op);\n }\n } else {\n const batch = {\n operations: [op],\n selectionBefore: slate.selection,\n };\n\n const setSlateOperation: SetSlateOperation = {\n type: 'set_slate',\n properties: {\n slateOps: batch.operations,\n selectionBefore: batch.selectionBefore,\n },\n blockId: id,\n slate,\n };\n\n editor.applyTransforms([setSlateOperation], { source: 'api', validatePaths: false });\n }\n }\n\n apply(op);\n };\n\n if (withExtensions) {\n slate = withExtensions(slate, editor, id);\n }\n\n return slate;\n }, [id, block.type, editor, elements, withExtensions]);\n\nexport const useEventHandlers = (\n events: PluginDOMEvents | undefined,\n editor: YooEditor,\n block: YooptaBlockData,\n slate: SlateEditor,\n) =>\n useMemo<EditorEventHandlers>(() => {\n if (editor.readOnly) return {};\n\n const eventHandlersOptions: PluginEventHandlerOptions = {\n hotkeys: HOTKEYS,\n currentBlock: block,\n defaultBlock: Blocks.buildBlockData({ id: generateId() }),\n };\n const eventHandlersMap: EditorEventHandlers = {};\n\n // Get inline plugin event handlers\n const inlinePlugins = Object.values(editor.plugins).filter((plugin) => {\n const rootElement = Object.values(plugin.elements)[0];\n // Check both top-level nodeType and props.nodeType for inline elements\n const nodeType =\n (rootElement as { nodeType?: string })?.nodeType ?? rootElement?.props?.nodeType;\n return nodeType === 'inline' || nodeType === 'inlineVoid';\n });\n\n // Start with block's event handlers (or empty if block has none)\n const eventHandlers = events ?? {};\n\n // Merge block and inline plugin event handlers\n const allEventHandlers = { ...eventHandlers };\n\n inlinePlugins.forEach((plugin) => {\n if (plugin.events) {\n Object.keys(plugin.events).forEach((eventType) => {\n if (allEventHandlers[eventType]) {\n // If event handler already exists, wrap it to include inline plugin handler\n const existingHandler = allEventHandlers[eventType];\n const inlineHandler = plugin.events![eventType];\n\n allEventHandlers[eventType] = (yEditor, ySlate, options) => (event) => {\n // Call the block's event handler first\n const result = existingHandler(yEditor, ySlate, options)(event);\n // IMPORTANT: Always call inline handler, even if block handler returned early\n // This ensures inline plugins (like Mention) can handle events\n inlineHandler(yEditor, ySlate, options)(event);\n return result;\n };\n } else {\n // If no block handler exists, just use the inline handler\n allEventHandlers[eventType] = plugin.events![eventType];\n }\n });\n }\n });\n\n // Transform handlers to match EditorEventHandlers type\n Object.keys(allEventHandlers).forEach((eventType) => {\n const handler = allEventHandlers[eventType];\n if (handler) {\n eventHandlersMap[eventType] = (event) => {\n const eventHandler = handler(editor, slate, eventHandlersOptions);\n eventHandler(event);\n };\n }\n });\n\n return eventHandlersMap;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [events, block, slate]);\n","import type { HTMLAttributes } from 'react';\nimport type { RenderLeafProps } from 'slate-react';\nimport { useSelected } from 'slate-react';\n\nimport type { ExtendedLeafProps } from '../../plugins/types';\n\ntype Props = Pick<ExtendedLeafProps<any, any>, 'attributes' | 'children'> & {\n placeholder?: string;\n};\n\nconst TextLeaf = ({ children, attributes, placeholder }: Props) => {\n const selected = useSelected();\n\n const attrs: HTMLAttributes<HTMLSpanElement> & RenderLeafProps['attributes'] = {\n ...attributes,\n };\n\n if (selected && placeholder) {\n attrs['data-placeholder'] = placeholder;\n attrs.className = `yoopta-placeholder`;\n }\n\n return <span {...attrs}>{children}</span>;\n};\n\nexport { TextLeaf };\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\nconst cachedCtorStrings = new WeakMap()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = Object.getPrototypeOf(value)\n\tif (proto === null || proto === Object.prototype) return true\n\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\tif (Ctor === Object) return true\n\n\tif (typeof Ctor !== \"function\") return false\n\n\tlet ctorString = cachedCtorStrings.get(Ctor)\n\tif (ctorString === undefined) {\n\t\tctorString = Function.toString.call(Ctor)\n\t\tcachedCtorStrings.set(Ctor, ctorString)\n\t}\n\n\treturn ctorString === objectCtorString\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n *\n * @param obj The object to iterate over\n * @param iter The iterator function\n * @param strict When true (default), includes symbols and non-enumerable properties.\n * When false, uses looseiteration over only enumerable string properties.\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tstrict?: boolean\n): void\nexport function each(obj: any, iter: any, strict: boolean = true) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\t// If strict, we do a full iteration including symbols and non-enumerable properties\n\t\t// Otherwise, we only iterate enumerable string properties for performance\n\t\tconst keys = strict ? Reflect.ownKeys(obj) : Object.keys(obj)\n\t\tkeys.forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tObject.defineProperties(obj, {\n\t\t\tset: dontMutateMethodOverride,\n\t\t\tadd: dontMutateMethodOverride,\n\t\t\tclear: dontMutateMethodOverride,\n\t\t\tdelete: dontMutateMethodOverride\n\t\t})\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.values (only string-like, enumerables) instead of each()\n\t\tObject.values(obj).forEach(value => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nconst dontMutateMethodOverride = {\n\tvalue: dontMutateFrozenCollections\n}\n\nexport function isFrozen(obj: any): boolean {\n\t// Fast path: primitives and null/undefined are always \"frozen\"\n\tif (obj === null || typeof obj !== \"object\") return true\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen,\n\tisMap\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst useStrictIteration = rootScope.immer_.shouldUseStrictIteration()\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\tuseStrictIteration\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(\n\t\t\tresultEach,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(\n\t\t\t\t\trootScope,\n\t\t\t\t\tstate,\n\t\t\t\t\tresult,\n\t\t\t\t\tkey,\n\t\t\t\t\tchildValue,\n\t\t\t\t\tpath,\n\t\t\t\t\tisSet\n\t\t\t\t),\n\t\t\tuseStrictIteration\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (childValue == null) {\n\t\treturn\n\t}\n\n\tif (typeof childValue !== \"object\" && !targetIsSet) {\n\t\treturn\n\t}\n\tconst childIsFrozen = isFrozen(childValue)\n\tif (childIsFrozen && !targetIsSet) {\n\t\treturn\n\t}\n\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !childIsFrozen) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tif (\n\t\t\tparentState &&\n\t\t\tparentState.base_ &&\n\t\t\tparentState.base_[prop] === childValue &&\n\t\t\tchildIsFrozen\n\t\t) {\n\t\t\t// Object is unchanged from base - no need to process further\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\t(isMap(targetObject)\n\t\t\t\t? targetObject.has(prop)\n\t\t\t\t: Object.prototype.propertyIsEnumerable.call(targetObject, prop))\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\"\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\tuseStrictIteration_: boolean = true\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t\tuseStrictIteration?: boolean\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t\tif (typeof config?.useStrictIteration === \"boolean\")\n\t\t\tthis.setUseStrictIteration(config!.useStrictIteration)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\t/**\n\t * Pass false to use faster iteration that skips non-enumerable properties\n\t * but still handles symbols for compatibility.\n\t *\n\t * By default, strict iteration is enabled (includes all own properties).\n\t */\n\tsetUseStrictIteration(value: boolean) {\n\t\tthis.useStrictIteration_ = value\n\t}\n\n\tshouldUseStrictIteration(): boolean {\n\t\treturn this.useStrictIteration_\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tlet strict = true // Default to strict for compatibility\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t\tstrict = state.scope_.immer_.shouldUseStrictIteration()\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(\n\t\tcopy,\n\t\t(key, childValue) => {\n\t\t\tset(copy, key, currentImpl(childValue))\n\t\t},\n\t\tstrict\n\t)\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = /* @__PURE__ */ immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n\timmer\n)\n\n/**\n * Pass false to use loose iteration that only processes enumerable string properties.\n * This skips symbols and non-enumerable properties for maximum performance.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\nexport const setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n\timmer\n)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = /* @__PURE__ */ immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n","import type { NodeEntry } from 'slate';\nimport { Editor, Element, Range, Text, Transforms } from 'slate';\n\nimport { Blocks } from '../editor/blocks';\nimport type { SlateEditor, SlateElement, YooEditor } from '../editor/types';\n\ntype Shortcuts = Record<string, { type: string }>;\n\nexport const withShortcuts = (editor: YooEditor, slate: SlateEditor, shortcuts: Shortcuts) => {\n const { insertText } = slate;\n\n slate.insertText = (text: string) => {\n const { selection } = slate;\n\n if (text === ' ' && selection && Range.isCollapsed(selection)) {\n const { anchor } = selection;\n\n const blockEntry: NodeEntry<SlateElement> | undefined = Editor.above(slate, {\n match: (n) => Element.isElement(n) && Editor.isBlock(slate, n),\n mode: 'lowest',\n });\n\n if (!blockEntry) return;\n\n const [, currentNodePath] = blockEntry;\n const parentEntry = Editor.parent(slate, currentNodePath);\n const [parentNodeElement] = parentEntry;\n\n if (Element.isElement(parentNodeElement) && !Text.isText(parentNodeElement.children[0])) {\n return insertText(text);\n }\n\n const path = blockEntry ? currentNodePath : [];\n const start = Editor.start(slate, path);\n const range = { anchor, focus: start };\n const beforeText = Editor.string(slate, range);\n\n const matchedBlock = shortcuts[beforeText];\n const hasMatchedBlock = !!matchedBlock;\n\n // add isActive method to the matched block\n const isActive = (type: string) => {\n const block = Blocks.getBlock(editor, { at: editor.path.current });\n return block?.type === type;\n };\n\n if (hasMatchedBlock && !isActive(matchedBlock.type)) {\n Transforms.select(slate, range);\n Transforms.delete(slate);\n\n // [TEST]\n editor.toggleBlock(matchedBlock.type, {\n scope: 'block',\n preserveContent: false,\n focus: true,\n });\n return;\n }\n }\n\n insertText(text);\n };\n\n return slate;\n};\n","import { createEditor } from 'slate';\nimport { withReact } from 'slate-react';\n\nimport { getBlockPlugins } from './get-block-plugins';\nimport type { SlateEditor, YooEditor } from '../editor/types';\nimport { withShortcuts } from '../extensions/shortcuts';\n\nexport function buildShortcuts(editor: YooEditor) {\n const blocks = getBlockPlugins(editor);\n const shortcuts = {};\n\n Object.values(blocks).forEach((block) => {\n const hasShortcuts =\n block.options &&\n Array.isArray(block.options?.shortcuts) &&\n block.options?.shortcuts.length > 0;\n\n if (hasShortcuts) {\n block.options?.shortcuts?.forEach((shortcut) => {\n shortcuts[shortcut] = { type: block.type };\n });\n }\n });\n\n return shortcuts;\n}\n\n// [TODO] - add slate structure from block to add elements into slate.children\nexport function buildSlateEditor(editor: YooEditor): SlateEditor {\n const shortcuts = buildShortcuts(editor);\n const slate = withShortcuts(editor, withReact(createEditor()), shortcuts);\n return slate;\n}\n","/* eslint-disable no-param-reassign */\nimport { createDraft, finishDraft, isDraft, produce } from 'immer';\nimport type { Operation, Range } from 'slate';\nimport { Editor, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { buildSlateEditor } from '../../utils/build-slate';\nimport type {\n SlateEditor,\n SlateElement,\n YooEditor,\n YooptaBlockData,\n YooptaContentValue,\n YooptaPath,\n} from '../types';\n\nexport type ChangeSource = 'api' | 'user' | 'history';\n\nexport type SetSlateOperation = {\n type: 'set_slate';\n slate: SlateEditor;\n blockId: string;\n properties: {\n slateOps: Operation[];\n selectionBefore: Range | null;\n };\n};\n\nexport type MoveBlockOperation = {\n type: 'move_block';\n prevProperties: {\n id: string;\n order: number;\n };\n properties: {\n id: string;\n order: number;\n };\n};\n\nexport type InsertBlockOperation = {\n type: 'insert_block';\n path: YooptaPath;\n block: YooptaBlockData;\n};\n\nexport type SetBlockValueOperation = {\n type: 'set_block_value';\n id: string;\n value: SlateElement[];\n forceSlate?: boolean;\n};\n\nexport type SetBlockMetaOperation = {\n type: 'set_block_meta';\n id: string;\n properties: Omit<Partial<YooptaBlockData['meta']>, 'order'>;\n prevProperties: Omit<Partial<YooptaBlockData['meta']>, 'order'>;\n};\n\nexport type SplitBlockOperation = {\n type: 'split_block';\n properties: {\n nextBlock: YooptaBlockData;\n splitSlateValue: SlateElement[];\n nextSlateValue: SlateElement[];\n };\n prevProperties: {\n originalBlock: YooptaBlockData;\n originalValue: SlateElement[];\n };\n path: YooptaPath;\n};\n\nexport type ToogleBlockOperation = {\n type: 'toggle_block';\n properties: {\n toggledBlock: YooptaBlockData;\n toggledSlateValue: SlateElement[];\n };\n prevProperties: {\n sourceBlock: YooptaBlockData;\n sourceSlateValue: SlateElement[];\n };\n};\n\nexport type MergeBlockOperation = {\n type: 'merge_block';\n properties: {\n mergedBlock: YooptaBlockData;\n mergedSlateValue: SlateElement[];\n };\n prevProperties: {\n sourceBlock: YooptaBlockData;\n sourceSlateValue: SlateElement[];\n targetBlock: YooptaBlockData;\n targetSlateValue: SlateElement[];\n };\n path: YooptaPath;\n};\n\nexport type DeleteBlockOperation = {\n type: 'delete_block';\n path: YooptaPath;\n block: YooptaBlockData;\n};\n\nexport type SetSelectionBlockOperation = {\n type: 'set_block_path';\n path: YooptaPath;\n};\n\nexport type NormalizePathsBlockOperation = {\n type: 'validate_block_paths';\n};\n\nexport type SetEditorValueOperation = {\n type: 'set_editor_value';\n properties: {\n value: YooptaContentValue;\n };\n prevProperties: {\n value: YooptaContentValue;\n };\n};\n\nexport type YooptaOperation =\n | InsertBlockOperation\n | DeleteBlockOperation\n | NormalizePathsBlockOperation\n | SetSelectionBlockOperation\n | SplitBlockOperation\n | SetBlockValueOperation\n | SetBlockMetaOperation\n | MergeBlockOperation\n | ToogleBlockOperation\n | MoveBlockOperation\n | SetSlateOperation\n | SetEditorValueOperation;\n\nfunction applyOperation(editor: YooEditor, op: YooptaOperation): void {\n switch (op.type) {\n case 'set_slate': {\n const { properties, blockId } = op;\n\n const slate = editor.blockEditorsMap[blockId];\n\n if (slate) {\n const { slateOps, selectionBefore } = properties;\n\n Editor.withoutNormalizing(slate, () => {\n for (const slateOp of slateOps) {\n slate.apply(slateOp);\n }\n\n if (selectionBefore) {\n try {\n Transforms.select(slate, selectionBefore);\n ReactEditor.focus(slate);\n } catch (error) {\n console.error(error);\n }\n }\n });\n }\n\n break;\n }\n\n case 'insert_block': {\n editor.blockEditorsMap[op.block.id] = buildSlateEditor(editor);\n editor.children[op.block.id] = op.block;\n editor.blockEditorsMap[op.block.id].children = op.block.value;\n\n Object.keys(editor.children).forEach((blockId) => {\n const existingBlock = editor.children[blockId];\n if (existingBlock.meta.order >= op.block.meta.order && existingBlock.id !== op.block.id) {\n if (isDraft(editor.children[existingBlock.id])) {\n existingBlock.meta.order += 1;\n }\n }\n });\n\n break;\n }\n\n case 'delete_block': {\n delete editor.blockEditorsMap[op.block.id];\n delete editor.children[op.block.id];\n\n // if (Object.keys(editor.children).length === 0) {\n // const id = generateId();\n // const defaultBlock = buildBlockData({ id });\n // editor.children[id] = defaultBlock;\n // editor.blockEditorsMap[id] = buildSlateEditor(editor);\n // }\n\n const blocks = Object.values(editor.children);\n\n blocks.forEach((existingBlock) => {\n if (existingBlock.meta.order > op.block.meta.order) {\n if (isDraft(existingBlock)) {\n existingBlock.meta.order -= 1;\n } else {\n produce(existingBlock, (draft) => {\n draft.meta.order -= 1;\n });\n }\n }\n });\n\n blocks.sort((a, b) => a.meta.order - b.meta.order);\n blocks.forEach((block, index) => {\n if (!isDraft(block.meta)) {\n produce(block, (draft) => {\n draft.meta = { ...draft.meta, order: index };\n });\n } else {\n block.meta.order = index;\n }\n });\n\n break;\n }\n\n case 'set_block_value': {\n const { id, value, forceSlate } = op;\n const slate = editor.blockEditorsMap[id];\n\n if (forceSlate && slate) {\n slate.children = value;\n }\n\n if (Array.isArray(value)) {\n if (isDraft(editor.children[id])) {\n editor.children[id].value = value;\n } else {\n produce(editor.children[id], (draft) => {\n draft.value = value;\n });\n }\n }\n break;\n }\n\n case 'set_block_meta': {\n const { id, properties } = op;\n\n const block = editor.children[id];\n if (!block) break;\n\n if (isDraft(block)) {\n Object.keys(properties).forEach((key) => {\n block.meta[key] = properties[key];\n });\n } else {\n produce(block, (draft) => {\n draft.meta = { ...draft.meta, ...properties };\n });\n }\n\n break;\n }\n\n case 'split_block': {\n const { properties } = op;\n\n const nextSlate = buildSlateEditor(editor);\n nextSlate.children = properties.nextSlateValue;\n editor.children[properties.nextBlock.id] = {\n ...properties.nextBlock,\n value: nextSlate.children,\n };\n editor.blockEditorsMap[properties.nextBlock.id] = nextSlate;\n\n const splitSlate = editor.blockEditorsMap[op.prevProperties.originalBlock.id];\n splitSlate.children = properties.splitSlateValue;\n editor.children[op.prevProperties.originalBlock.id].value = splitSlate.children;\n\n Object.values(editor.children).forEach((block) => {\n if (\n block.meta.order >= properties.nextBlock.meta.order &&\n block.id !== properties.nextBlock.id\n ) {\n if (isDraft(block)) {\n block.meta.order += 1;\n } else {\n produce(block, (draft) => {\n draft.meta.order += 1;\n });\n }\n }\n });\n break;\n }\n\n case 'merge_block': {\n const { prevProperties, properties } = op;\n\n delete editor.blockEditorsMap[prevProperties.sourceBlock.id];\n delete editor.children[prevProperties.sourceBlock.id];\n\n editor.children[properties.mergedBlock.id] = properties.mergedBlock;\n editor.blockEditorsMap[properties.mergedBlock.id].children = properties.mergedSlateValue;\n\n Object.values(editor.children).forEach((block) => {\n if (block.meta.order > properties.mergedBlock.meta.order) {\n if (isDraft(block)) {\n block.meta.order -= 1;\n } else {\n produce(block, (draft) => {\n draft.meta.order -= 1;\n });\n }\n }\n });\n break;\n }\n\n case 'toggle_block': {\n const { properties, prevProperties } = op;\n delete editor.blockEditorsMap[prevProperties.sourceBlock.id];\n delete editor.children[prevProperties.sourceBlock.id];\n\n const newSlate = buildSlateEditor(editor);\n newSlate.children = properties.toggledSlateValue;\n\n editor.children[properties.toggledBlock.id] = properties.toggledBlock;\n editor.blockEditorsMap[properties.toggledBlock.id] = newSlate;\n\n break;\n }\n\n case 'move_block': {\n const { prevProperties, properties } = op;\n const block = editor.children[prevProperties.id];\n\n if (block) {\n block.meta.order = properties.order;\n\n Object.values(editor.children).forEach((otherBlock) => {\n if (otherBlock.id !== prevProperties.id) {\n if (prevProperties.order < properties.order) {\n if (\n otherBlock.meta.order > prevProperties.order &&\n otherBlock.meta.order <= properties.order\n ) {\n otherBlock.meta.order -= 1;\n }\n } else if (\n otherBlock.meta.order < prevProperties.order &&\n otherBlock.meta.order >= properties.order\n ) {\n otherBlock.meta.order += 1;\n }\n }\n });\n }\n\n break;\n }\n\n case 'set_block_path': {\n editor.path = op.path;\n break;\n }\n\n case 'set_editor_value': {\n editor.children = op.properties.value;\n\n const blockEditorsMap = {};\n\n Object.keys(editor.children).forEach((id) => {\n const block = editor.children[id];\n const slate = buildSlateEditor(editor);\n slate.children = block.value;\n\n blockEditorsMap[id] = slate;\n });\n\n editor.blockEditorsMap = blockEditorsMap;\n\n break;\n }\n\n case 'validate_block_paths': {\n const blocks = Object.values(editor.children);\n blocks.sort((a, b) => a.meta.order - b.meta.order);\n blocks.forEach((block, index) => {\n if (!isDraft(block.meta)) {\n produce(block, (draft) => {\n draft.meta = { ...draft.meta, order: index };\n });\n } else {\n block.meta.order = index;\n }\n });\n break;\n }\n\n default: {\n console.warn(`Unknown operation type, operation:`, op);\n break;\n }\n }\n}\n\nexport type ApplyTransformsOptions = {\n validatePaths?: boolean;\n source?: ChangeSource;\n};\n\nconst MAX_HISTORY_LENGTH = 100;\n\nfunction assertValidPaths(editor: YooEditor) {\n const blocks = [...Object.values(editor.children)];\n blocks.sort((a, b) => a.meta.order - b.meta.order);\n blocks.forEach((block, index) => {\n if (block.meta.order !== index) {\n console.warn(\n `Block path inconsistency detected: Block ${block.id} has order ${block.meta.order}, expected ${index}`,\n );\n }\n });\n}\n\nexport function applyTransforms(\n editor: YooEditor,\n ops: YooptaOperation[],\n options?: ApplyTransformsOptions,\n): void {\n editor.children = createDraft(editor.children);\n editor.path = createDraft(editor.path);\n\n const { validatePaths = true, source } = options || {};\n const operations = [...ops];\n\n if (validatePaths) {\n operations.push({ type: 'validate_block_paths' });\n }\n\n if (operations.length > 1) {\n // if type is insert_block, we need to sort these operations by order\n operations.sort((a, b) => {\n if (a.type === 'insert_block' && b.type === 'insert_block') {\n return a.block.meta.order - b.block.meta.order;\n }\n\n return 0;\n });\n }\n\n for (const operation of operations) {\n // run `set_slate` operation only if source is history\n if (operation.type === 'set_slate' && source === 'api') {\n continue;\n }\n\n applyOperation(editor, operation);\n }\n\n if (!isDraft(editor.children)) editor.children = createDraft(editor.children);\n editor.children = finishDraft(editor.children);\n\n if (isDraft(editor.path)) {\n editor.path = finishDraft(editor.path);\n }\n\n const saveHistory = editor.isSavingHistory() !== false;\n if (saveHistory) {\n const historyBatch = {\n operations: operations.filter(\n (op) =>\n op.type !== 'set_block_path' &&\n op.type !== 'set_block_value' &&\n op.type !== 'validate_block_paths',\n ),\n path: editor.path,\n };\n\n if (historyBatch.operations.length > 0 && source !== 'history') {\n editor.historyStack.undos.push(historyBatch);\n editor.historyStack.redos = [];\n }\n\n if (editor.historyStack.undos.length > MAX_HISTORY_LENGTH) {\n editor.historyStack.undos.shift();\n }\n }\n\n const changeOptions = { value: editor.children, operations };\n editor.emit('change', changeOptions);\n editor.emit('path-change', editor.path);\n\n if (process.env.NODE_ENV !== 'production') {\n assertValidPaths(editor);\n }\n}\n","import type { YooptaOperation } from './applyTransforms';\nimport type { YooEditor } from '../types';\n\nexport function batchOperations(editor: YooEditor, callback: () => void) {\n const operations: YooptaOperation[] = [];\n let options = {};\n const originalApplyTransforms = editor.applyTransforms;\n\n editor.applyTransforms = (ops: YooptaOperation[], applyOptions) => {\n if (applyOptions) options = applyOptions;\n operations.push(...ops);\n };\n\n callback();\n\n editor.applyTransforms = originalApplyTransforms;\n\n if (operations.length > 0) {\n editor.applyTransforms(operations, options);\n }\n}\n","import { Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { IS_FOCUSED_EDITOR } from '../../utils/weakMaps';\nimport type { SlateEditor, YooEditor } from '../types';\n\nexport type EditorBlurOptions = {\n waitExecution?: boolean;\n waitExecutionMs?: number;\n slate?: SlateEditor;\n};\n\nfunction blurFn(editor: YooEditor, slate: SlateEditor) {\n try {\n ReactEditor.blur(slate);\n ReactEditor.deselect(slate);\n Transforms.deselect(slate);\n } catch (error) {}\n\n editor.setPath({ current: null });\n}\n\nexport function blur(editor: YooEditor, options: EditorBlurOptions = {}) {\n const slate = options.slate ?? findSlateBySelectionPath(editor);\n\n if (!slate) return;\n\n const { waitExecution, waitExecutionMs } = options;\n\n if (waitExecution) {\n setTimeout(() => blurFn(editor, slate), waitExecutionMs);\n return;\n }\n\n IS_FOCUSED_EDITOR.set(editor, false);\n blurFn(editor, slate);\n editor.emit('blur', false);\n}\n","import { IS_FOCUSED_EDITOR } from '../../utils/weakMaps';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\n\nexport function focus(editor: YooEditor) {\n if (editor.readOnly) return;\n\n const firstBlock = Blocks.getBlock(editor, { at: 0 });\n if (firstBlock) {\n IS_FOCUSED_EDITOR.set(editor, true);\n\n editor.focusBlock(firstBlock.id, { waitExecution: true });\n editor.emit('focus', true);\n }\n}\n","import type { YooEditor } from '../types';\n\nexport function getEditorValue(editor: YooEditor) {\n return editor.children;\n}\n","import { Operation } from 'slate';\n\nimport type { YooptaOperation } from './applyTransforms';\nimport { Blocks } from '../blocks';\nimport type { SlateElement, YooEditor, YooptaPath } from '../types';\n\nexport type HistoryStack = {\n operations: YooptaOperation[];\n path: YooptaPath;\n};\n\nexport type HistoryStackName = 'undos' | 'redos';\n\nexport function inverseEditorOperation(\n editor: YooEditor,\n op: YooptaOperation,\n): YooptaOperation | YooptaOperation[] {\n switch (op.type) {\n case 'insert_block':\n return {\n type: 'delete_block',\n path: op.path,\n block: op.block,\n };\n\n case 'delete_block':\n return {\n type: 'insert_block',\n path: op.path,\n block: op.block,\n };\n\n case 'set_block_meta': {\n return {\n type: 'set_block_meta',\n id: op.id,\n properties: op.prevProperties,\n prevProperties: op.properties,\n };\n }\n\n case 'split_block': {\n return [\n {\n type: 'delete_block',\n block: op.properties.nextBlock,\n path: op.path,\n },\n {\n type: 'set_block_value',\n id: op.prevProperties.originalBlock.id,\n value: op.prevProperties.originalValue as SlateElement[],\n forceSlate: true,\n },\n ];\n }\n\n case 'toggle_block': {\n return {\n type: 'toggle_block',\n properties: {\n toggledBlock: op.prevProperties.sourceBlock,\n toggledSlateValue: op.prevProperties.sourceSlateValue,\n },\n prevProperties: {\n sourceBlock: op.properties.toggledBlock,\n sourceSlateValue: op.properties.toggledSlateValue,\n },\n };\n }\n\n case 'merge_block': {\n return [\n {\n type: 'split_block',\n properties: {\n nextBlock: op.prevProperties.sourceBlock,\n nextSlateValue: op.prevProperties.sourceSlateValue,\n splitSlateValue: op.prevProperties.targetSlateValue,\n },\n prevProperties: {\n originalBlock: op.properties.mergedBlock,\n originalValue: op.properties.mergedSlateValue,\n },\n path: op.path,\n },\n ];\n }\n\n case 'move_block': {\n return {\n type: 'move_block',\n properties: op.prevProperties,\n prevProperties: op.properties,\n };\n }\n\n case 'set_slate': {\n const inverseOps = op.properties.slateOps.map(Operation.inverse).reverse();\n return {\n type: 'set_slate',\n properties: {\n slateOps: inverseOps,\n selectionBefore: op.properties.selectionBefore,\n },\n slate: op.slate,\n blockId: op.blockId,\n };\n }\n\n case 'set_editor_value': {\n return {\n type: 'set_editor_value',\n properties: op.prevProperties,\n prevProperties: op.properties,\n };\n }\n\n default:\n return op;\n }\n}\n\nexport type UndoRedoOptions = {\n scroll?: boolean;\n};\n\nexport const SAVING = new WeakMap<YooEditor, boolean | undefined>();\nexport const MERGING = new WeakMap<YooEditor, boolean | undefined>();\n\nexport const YooptaHistory = {\n isMergingHistory(editor: YooEditor): boolean | undefined {\n return MERGING.get(editor);\n },\n\n isSavingHistory(editor: YooEditor): boolean | undefined {\n return SAVING.get(editor);\n },\n\n withMergingHistory(editor: YooEditor, fn: () => void): void {\n const prev = YooptaHistory.isMergingHistory(editor);\n MERGING.set(editor, true);\n fn();\n MERGING.set(editor, prev);\n },\n\n withSavingHistory(editor: YooEditor, fn: () => void): void {\n const prev = YooptaHistory.isSavingHistory(editor);\n SAVING.set(editor, true);\n fn();\n SAVING.set(editor, prev);\n },\n\n withoutMergingHistory(editor: YooEditor, fn: () => void): void {\n const prev = YooptaHistory.isMergingHistory(editor);\n MERGING.set(editor, false);\n fn();\n MERGING.set(editor, prev);\n },\n\n withoutSavingHistory(editor: YooEditor, fn: () => void): void {\n const prev = YooptaHistory.isSavingHistory(editor);\n SAVING.set(editor, false);\n fn();\n SAVING.set(editor, prev);\n },\n\n redo: (editor: YooEditor, options?: UndoRedoOptions) => {\n const { redos } = editor.historyStack;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n YooptaHistory.withoutSavingHistory(editor, () => {\n editor.applyTransforms(batch.operations, { source: 'history' });\n editor.setPath(batch.path);\n\n const { scroll = true } = options || {};\n if (scroll && typeof batch.path.current === 'number') {\n const block = Blocks.getBlock(editor, { at: batch.path.current });\n\n // [TODO] - not good place to scroll. View tasks should be separated from model tasks\n const blockElement = document.querySelector(`[data-yoopta-block-id=\"${block?.id}\"]`);\n if (blockElement && !isInViewport(blockElement)) {\n blockElement.scrollIntoView({ block: 'center', behavior: 'auto' });\n }\n }\n });\n\n editor.historyStack.redos.pop();\n editor.historyStack.undos.push(batch);\n }\n },\n undo: (editor: YooEditor, options?: UndoRedoOptions) => {\n const { undos } = editor.historyStack;\n\n if (undos.length > 0) {\n const batch = editor.historyStack.undos[editor.historyStack.undos.length - 1];\n\n YooptaHistory.withoutSavingHistory(editor, () => {\n // [TODO] - ask Christopher Nolan to help with this\n const inverseOps = batch.operations\n .flatMap((op) => inverseEditorOperation(editor, op))\n .reverse();\n editor.applyTransforms(inverseOps, { source: 'history' });\n editor.setPath(batch.path);\n\n const { scroll = true } = options || {};\n if (scroll && typeof batch.path.current === 'number') {\n const block = Blocks.getBlock(editor, { at: batch.path.current });\n\n // [TODO] - not good place to scroll. View tasks should be separated from model tasks\n const blockElement = document.querySelector(`[data-yoopta-block-id=\"${block?.id}\"]`);\n if (blockElement && !isInViewport(blockElement)) {\n blockElement.scrollIntoView({ block: 'center', behavior: 'auto' });\n }\n }\n });\n\n editor.historyStack.redos.push(batch);\n editor.historyStack.undos.pop();\n }\n },\n};\n\nfunction isInViewport(element) {\n const rect = element.getBoundingClientRect();\n const html = document.documentElement;\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || html.clientHeight) &&\n rect.right <= (window.innerWidth || html.clientWidth)\n );\n}\n","import { IS_FOCUSED_EDITOR } from '../../utils/weakMaps';\nimport type { YooEditor } from '../types';\n\nexport function isFocused(editor: YooEditor) {\n return !!IS_FOCUSED_EDITOR.get(editor);\n}\n","export function validateYooptaValue(value: any): boolean {\n if (!value) return false;\n if (typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n\n return true;\n}\n\nexport function isYooptaBlock(block: any): boolean {\n return !!block && !!block.id && !!block.type && !!block.value && !!block.meta;\n}\n","import type { SetEditorValueOperation } from './applyTransforms';\nimport { validateYooptaValue } from '../../utils/validations';\nimport { Blocks } from '../blocks';\nimport type { YooEditor, YooptaContentValue } from '../types';\n\nexport function setEditorValue(editor: YooEditor, value: YooptaContentValue | null) {\n let editorValue: YooptaContentValue;\n\n if (value === null || !validateYooptaValue(value)) {\n const defaultBlock = Blocks.buildBlockData();\n editorValue = { [defaultBlock.id]: defaultBlock };\n } else {\n editorValue = value;\n }\n\n const operation: SetEditorValueOperation = {\n type: 'set_editor_value',\n properties: {\n value: editorValue,\n },\n prevProperties: {\n value: editor.children,\n },\n };\n\n editor.applyTransforms([operation], { validatePaths: true });\n}\n","// [TODO] - Move to @yoopta/utils or @yoopta/editor/utils\n// helpers for serializing text nodes when you use custom parsers in your plugins\nexport function serializeTextNodes(nodes: any[]): string {\n return nodes\n .map((node) => {\n if ('text' in node) {\n let text = node.text;\n\n if (node.bold) {\n text = `<strong style=\"font-weight: bolder;\">${text}</strong>`;\n }\n if (node.italic) {\n text = `<i>${text}</i>`;\n }\n if (node.strike) {\n text = `<s>${text}</s>`;\n }\n if (node.underline) {\n text = `<u>${text}</u>`;\n }\n if (node.code) {\n text = `<code style=\"background-color: rgb(242 242 242); border-radius: .25rem; font-size: 75%; padding: 3px 6px;\">${text}</code>`;\n }\n if (node.highlight) {\n text = `<mark style=\"color: ${node.highlight?.color}; background-color: ${\n node.highlight?.backgroundColor || 'transparent'\n };\">${text}</mark>`;\n }\n\n return text;\n }\n\n if (node.type === 'link') {\n const { url, target, rel } = node.props;\n const children = serializeTextNodes(node.children);\n\n return `<a href=\"${url}\" target=\"${target}\" rel=\"${rel}\" style=\"color: rgb(0 122 255);\n cursor: pointer;\n position: relative;\n text-decoration-line: underline;\n text-underline-offset: 4px;\">${children}</a>`;\n }\n\n return '';\n })\n .join('');\n}\n\n// [TODO] - Move to @yoopta/utils or @yoopta/editor/utils\n// helpers for serializing text nodes into markdown style when you use custom parsers in your plugins\nexport function serializeTextNodesIntoMarkdown(nodes: any[]): string {\n return nodes\n .map((node) => {\n if ('text' in node) {\n let text = node.text;\n\n if (node.bold) {\n text = `**${text}**`;\n }\n if (node.italic) {\n text = `*${text}*`;\n }\n if (node.strike) {\n text = `~~${text}~~`;\n }\n if (node.underline) {\n text = `<u>${text}</u>`;\n }\n if (node.code) {\n text = `\\`${text}\\``;\n }\n\n return text;\n }\n\n if (node.type === 'link') {\n const { url, target, rel } = node.props;\n const children = serializeTextNodesIntoMarkdown(node.children);\n\n return `[${children}](${url})`;\n }\n\n return '';\n })\n .join('');\n}\n","import { serializeTextNodes } from './serializeTextNodes';\nimport { Paths } from '../editor/paths';\nimport type { SlateElement, YooEditor, YooptaContentValue } from '../editor/types';\n\ntype StyleElement = {\n id?: string;\n content: string;\n};\n\ntype MetaElement = {\n content?: string;\n name?: string;\n 'http-equiv'?: string;\n property?: string;\n charset?: string;\n};\n\ntype StyleAttribute = Record<string, string | number>;\n\ntype ElementAttributes = {\n style?: StyleAttribute;\n [key: string]: any;\n};\n\nexport type EmailTemplateOptions = {\n head?: {\n styles?: StyleElement[];\n meta?: MetaElement[];\n title?: string;\n };\n body?: {\n attrs?: ElementAttributes;\n };\n container?: {\n attrs?: ElementAttributes;\n };\n customTemplate?: (content: string) => string;\n};\n\nconst DEFAULT_OPTIONS: EmailTemplateOptions = {\n head: {\n meta: [\n { content: 'width=device-width', name: 'viewport' },\n { charset: 'UTF-8' },\n { content: 'IE=edge', 'http-equiv': 'X-UA-Compatible' },\n ],\n },\n body: {\n attrs: {\n style: {\n margin: '0 auto',\n padding: 0,\n width: '900px',\n },\n },\n },\n container: {\n attrs: {\n style: {\n margin: '0 auto',\n width: '600px',\n },\n },\n },\n};\n\nexport function getEmail(\n editor: YooEditor,\n content: YooptaContentValue,\n opts?: EmailTemplateOptions,\n): string {\n const options = deepMerge(DEFAULT_OPTIONS, opts || {});\n const blocks = Object.values(content)\n .filter((item) => {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n return selectedBlocks?.includes(item.meta.order);\n }\n\n return true;\n })\n .sort((a, b) => a.meta.order - b.meta.order);\n\n const email = blocks.map((blockData) => {\n const plugin = editor.plugins[blockData.type];\n\n if (plugin && plugin.parsers?.email?.serialize) {\n // @ts-ignore - fixme\n const innerContent = serializeTextNodes(blockData.value[0].children);\n return plugin.parsers.email.serialize(\n blockData.value[0] as SlateElement,\n innerContent,\n blockData.meta,\n );\n }\n\n return '';\n });\n\n const emailContent = email.join('');\n\n if (options.customTemplate) {\n return options.customTemplate(emailContent);\n }\n\n const bodyAttrs = attributesToString(options.body?.attrs);\n const containerAttrs = attributesToString(options.container?.attrs);\n\n return `\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html lang=\"en\">\n <head>\n <title>${options?.head?.title || 'Email-Builder'}</title>\n <meta http-equiv=\"Content-Type\" content=\"text/html charset=UTF-8\" />\n ${generateMetaTags(options.head?.meta)}\n ${generateStyles(options.head?.styles)}\n </head>\n <body id=\"yoopta-email\" ${bodyAttrs}>\n <table ${containerAttrs}>\n <tbody>\n <tr>\n <td>\n ${emailContent}\n </td>\n </tr>\n </tbody>\n </table>\n </body>\n </html>\n `;\n}\n\n// Email helpers\nfunction generateMetaTags(meta: MetaElement[] = []): string {\n return meta\n .map((tag) => {\n const attrs = Object.entries(tag)\n .filter(([_, value]) => value !== undefined)\n .map(([key, value]) => {\n if (value === '') return key;\n return `${key}=\"${value}\"`;\n })\n .join(' ');\n\n return `<meta ${attrs}>`;\n })\n .join('\\n');\n}\n\nfunction generateStyles(styles: StyleElement[] = []): string {\n return styles\n .map((style) => {\n const idAttr = style.id ? ` id=\"${style.id}\"` : '';\n return `<style${idAttr}>${style.content}</style>`;\n })\n .join('\\n');\n}\n\nfunction styleObjectToString(style?: StyleAttribute): string {\n if (!style) return '';\n\n return Object.entries(style)\n .map(([key, value]) => {\n const cssKey = key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n return `${cssKey}: ${value}${typeof value === 'number' ? 'px' : ''};`;\n })\n .join(' ');\n}\n\nfunction attributesToString(attrs?: ElementAttributes): string {\n if (!attrs) return '';\n\n return Object.entries(attrs)\n .map(([key, value]) => {\n if (key === 'style') {\n const styleString = styleObjectToString(value as StyleAttribute);\n return `style=\"${styleString}\"`;\n }\n\n return `${key}=\"${value}\"`;\n })\n .join(' ');\n}\n\nfunction deepMerge(target: any, source: any): any {\n if (Array.isArray(target) && Array.isArray(source)) {\n return target.concat(source);\n }\n\n if (typeof target === 'object' && typeof source === 'object') {\n return Object.keys({ ...target, ...source }).reduce((acc, key) => {\n acc[key] = deepMerge(target[key], source[key]);\n return acc;\n }, {});\n }\n\n return source;\n}\n","import { Paths } from '../editor/paths';\nimport type { YooEditor, YooptaBlockData, YooptaContentValue } from '../editor/types';\nimport { generateId } from '../utils/generateId';\n\nexport type YooptaClipboardData = {\n version: number;\n editorId: string;\n blocks: YooptaBlockData[];\n};\n\nconst CLIPBOARD_VERSION = 1;\n\n/**\n * Serializes Yoopta content to JSON format for clipboard.\n * This preserves all block data including complex props, marks, and metadata.\n *\n * @param editor - The Yoopta editor instance\n * @param content - The content to serialize\n * @returns JSON string with full block data\n */\nexport function getYooptaJSON(editor: YooEditor, content: YooptaContentValue): string {\n const blocks = Object.values(content)\n .filter((block) => {\n const selectedPaths = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n return selectedPaths.includes(block.meta.order);\n }\n return true;\n })\n .sort((a, b) => a.meta.order - b.meta.order)\n .map((block, index) => ({\n ...block,\n // Generate new IDs to avoid conflicts when pasting\n id: generateId(),\n meta: {\n ...block.meta,\n // Normalize order to start from 0\n order: index,\n },\n }));\n\n const clipboardData: YooptaClipboardData = {\n version: CLIPBOARD_VERSION,\n editorId: editor.id,\n blocks,\n };\n\n return JSON.stringify(clipboardData);\n}\n\n/**\n * The data attribute name used to store JSON in HTML clipboard\n */\nexport const YOOPTA_JSON_DATA_ATTR = 'data-yoopta-json';\n","import { Paths } from '../editor/paths';\nimport type { SlateElement, YooEditor, YooptaContentValue } from '../editor/types';\nimport { getPluginByInlineElement } from '../utils/block-elements';\nimport { getYooptaJSON } from './getYooptaJSON';\n\nconst MARKS_NODE_NAME_MATCHERS_MAP = {\n underline: { type: 'underline', tag: 'u' },\n strike: { type: 'strike', tag: 's' },\n code: { type: 'code', tag: 'code' },\n italic: { type: 'italic', tag: 'i' },\n bold: { type: 'bold', tag: 'strong' },\n strong: { type: 'bold', tag: 'strong' },\n};\n\nfunction serializeChildren(children, plugins, editor) {\n return children\n .map((child) => {\n let innerHtml = '';\n\n if (child.text) {\n innerHtml = Object.keys(MARKS_NODE_NAME_MATCHERS_MAP).reduce((acc, mark) => {\n if (child[mark]) {\n return `<${MARKS_NODE_NAME_MATCHERS_MAP[mark].tag}>${acc}</${MARKS_NODE_NAME_MATCHERS_MAP[mark].tag}>`;\n }\n return acc;\n }, child.text);\n\n return innerHtml;\n }\n if (child.type) {\n const childPlugin = getPluginByInlineElement(plugins, child.type);\n\n if (childPlugin && childPlugin.parsers?.html?.serialize) {\n // We don't pass block meta data to this because it's inline element inside block\n innerHtml = childPlugin.parsers.html.serialize(\n child,\n serializeChildren(child.children, plugins, editor),\n );\n return innerHtml;\n }\n }\n\n return innerHtml;\n })\n .join('');\n}\n\nexport function getHTML(editor: YooEditor, content: YooptaContentValue): string {\n const blocks = Object.values(content)\n .filter((block) => {\n const selectedPaths = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n return selectedPaths?.includes(block.meta.order);\n }\n\n return true;\n })\n .sort((a, b) => a.meta.order - b.meta.order);\n\n const html = blocks.map((blockData) => {\n const plugin = editor.plugins[blockData.type];\n\n if (plugin && plugin.parsers?.html?.serialize) {\n const htmlContent = serializeChildren(\n (blockData.value[0] as SlateElement).children,\n editor.plugins,\n editor,\n );\n return plugin.parsers.html.serialize(\n blockData.value[0] as SlateElement,\n htmlContent,\n blockData.meta,\n );\n }\n\n return '';\n });\n\n // Embed JSON data in HTML for lossless copy/paste within Yoopta\n const jsonData = getYooptaJSON(editor, content);\n const escapedJson = jsonData\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n return `<body id=\"yoopta-clipboard\" data-editor-id=\"${editor.id}\" data-yoopta-json=\"${escapedJson}\">${html.join('')}</body>`;\n}\n","import type {\n SlateElement,\n YooEditor,\n YooptaBlockBaseMeta,\n YooptaBlockData,\n YooptaContentValue,\n} from '../editor/types';\n\nexport function serialize(editor: YooEditor, blocksData: YooptaBlockData[]) {\n const blocks = blocksData.sort((a, b) => (a.meta.order > b.meta.order ? 1 : -1));\n\n const markdown = blocks.map((blockData) => {\n const plugin = editor.plugins[blockData.type];\n\n if (plugin) {\n const element = blockData.value[0] as SlateElement;\n\n if (plugin.parsers?.markdown?.serialize) {\n const serialized = plugin.parsers.markdown.serialize(\n element,\n // @ts-ignore - fixme\n element.children.map((child) => child.text).join(''),\n blockData.meta as YooptaBlockBaseMeta,\n );\n if (serialized) return serialized;\n }\n }\n\n return '';\n });\n\n return markdown.join('\\n');\n}\n\nexport function getMarkdown(editor: YooEditor, content: YooptaContentValue) {\n const selectedBlocks = Object.values(content);\n return serialize(editor, selectedBlocks);\n}\n","import { getHTML } from './getHTML';\nimport type { YooEditor, YooptaContentValue } from '../editor/types';\n\nexport function getPlainText(editor: YooEditor, content: YooptaContentValue) {\n const htmlString = getHTML(editor, content);\n\n const div = document.createElement('div');\n div.innerHTML = htmlString;\n return div.innerText;\n}\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport type { YooEditor } from '../types';\n\nexport function isEmpty(editor: YooEditor): boolean {\n const content = Object.values(editor.children);\n if (content.length > 1) return false;\n\n const blockData = content[0];\n if (!blockData) return true;\n\n if (blockData.type !== 'Paragraph') return false;\n\n const slate = findSlateBySelectionPath(editor, { at: blockData.meta.order });\n if (!slate) return true;\n\n try {\n const string = Editor.string(slate, [0]);\n if (string.length > 0) return false;\n\n return true;\n } catch (error) {\n return true;\n }\n}\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetMarkValueOptions } from './types';\n\n/**\n * Get mark value from current selection or specified block\n *\n * @param editor - YooEditor instance\n * @param options - Get mark value options\n * @returns Mark value or null if not found\n *\n * @example\n * ```typescript\n * // Get mark value from current selection\n * const boldValue = Marks.getValue(editor, { type: 'bold' });\n *\n * // Get mark value from specific block\n * const italicValue = Marks.getValue(editor, {\n * type: 'italic',\n * at: 0\n * });\n * ```\n */\nexport function getValue(editor: YooEditor, options: GetMarkValueOptions): unknown | null {\n const { type, at, blockId } = options;\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) return null;\n\n const marks = Editor.marks(slate);\n return marks?.[type] ?? null;\n}\n\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { IsMarkActiveOptions } from './types';\n\n/**\n * Check if mark is active in current selection or specified block\n *\n * @param editor - YooEditor instance\n * @param options - Check mark active options\n * @returns True if mark is active, false otherwise\n *\n * @example\n * ```typescript\n * // Check if bold is active in current selection\n * const isBold = Marks.isActive(editor, { type: 'bold' });\n *\n * // Check if italic is active in specific block\n * const isItalic = Marks.isActive(editor, {\n * type: 'italic',\n * at: 0\n * });\n * ```\n */\nexport function isActive(editor: YooEditor, options: IsMarkActiveOptions): boolean {\n const { type, at, blockId } = options;\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) return false;\n\n const marks = Editor.marks(slate);\n return !!marks?.[type];\n}\n\n","import { Editor, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { SlateEditor, YooEditor } from '../types';\nimport { isActive } from './isActive';\nimport type { ToggleMarkOptions } from './types';\n\ntype SelectedBlockEntity = {\n isActiveMark: boolean;\n slate: SlateEditor;\n};\n\n/**\n * Get array of block indices from options\n */\nfunction getBlockIndices(editor: YooEditor, options: ToggleMarkOptions): number[] | null {\n const { at, blockId, selection } = options;\n\n // If selection is provided, don't use block indices\n if (selection) {\n return null;\n }\n\n // Use selected blocks if available\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n return editor.path.selected;\n }\n\n // Use provided at or blockId\n if (Array.isArray(at)) {\n return at.filter((index): index is number => typeof index === 'number');\n }\n\n if (typeof at === 'number') {\n return [at];\n }\n\n if (Array.isArray(blockId)) {\n return blockId\n .map((id) => {\n const block = Blocks.getBlock(editor, { id });\n return block?.meta.order;\n })\n .filter((order): order is number => typeof order === 'number');\n }\n\n if (blockId) {\n const block = Blocks.getBlock(editor, { id: blockId });\n return block?.meta.order !== undefined ? [block.meta.order] : [];\n }\n\n return null;\n}\n\n/**\n * Toggle mark in specified selection or blocks\n *\n * @param editor - YooEditor instance\n * @param options - Toggle mark options\n *\n * @example\n * ```typescript\n * // Toggle bold in current text selection (slate.selection) or whole block\n * Marks.toggle(editor, { type: 'bold' });\n *\n * // Toggle mark in specific selection\n * Marks.toggle(editor, {\n * type: 'bold',\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Toggle italic in specific block\n * Marks.toggle(editor, {\n * type: 'italic',\n * at: 0\n * });\n *\n * // Toggle underline in multiple blocks\n * Marks.toggle(editor, {\n * type: 'underline',\n * at: [0, 1, 2]\n * });\n * ```\n */\nexport function toggle(editor: YooEditor, options: ToggleMarkOptions): void {\n const { type, selection } = options;\n const blockIndices = getBlockIndices(editor, options);\n\n // Handle specific selection\n if (selection) {\n const slate = findSlateBySelectionPath(editor);\n if (!slate) return;\n\n Transforms.select(slate, selection);\n const active = isActive(editor, { type, at: undefined, blockId: undefined });\n\n if (!active) {\n Editor.addMark(slate, type, true);\n } else {\n Editor.removeMark(slate, type);\n }\n return;\n }\n\n // Handle multiple selected blocks\n if (blockIndices && blockIndices.length > 0) {\n const selectedBlockEntities: SelectedBlockEntity[] = blockIndices\n .map((path) => {\n const blockSlate = Blocks.getBlockSlate(editor, { at: path });\n\n if (!blockSlate) return null;\n\n const [node] = Editor.node(blockSlate, []);\n if (!node) return null;\n\n const end = Editor.end(blockSlate, []);\n const start = Editor.start(blockSlate, []);\n Transforms.select(blockSlate, { anchor: start, focus: end });\n\n const marks = Editor.marks(blockSlate);\n\n return {\n slate: blockSlate,\n isActiveMark: !!marks?.[type],\n };\n })\n .filter((entity): entity is SelectedBlockEntity => entity !== null);\n\n const isAllActive = selectedBlockEntities.every((entity) => entity.isActiveMark);\n\n for (const blockEntity of selectedBlockEntities) {\n if (blockEntity.isActiveMark) {\n if (isAllActive) {\n Editor.removeMark(blockEntity.slate, type);\n }\n } else {\n Editor.addMark(blockEntity.slate, type, true);\n }\n }\n\n return;\n }\n\n // Handle current text selection (slate.selection)\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate?.selection) return;\n\n const active = isActive(editor, { type, at: undefined, blockId: undefined });\n\n // Toggle mark in selection\n if (!active) {\n Editor.addMark(slate, type, true);\n } else {\n Editor.removeMark(slate, type);\n }\n}\n\n","import { Editor, Range, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { UpdateMarkOptions } from './types';\n\n/**\n * Get array of block indices from options\n */\nfunction getBlockIndices(editor: YooEditor, options: UpdateMarkOptions): number[] | null {\n const { at, blockId, selection } = options;\n\n // If selection is provided, don't use block indices\n if (selection) {\n return null;\n }\n\n // Use selected blocks if available\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n return editor.path.selected;\n }\n\n // Use provided at or blockId\n if (Array.isArray(at)) {\n return at.filter((index): index is number => typeof index === 'number');\n }\n\n if (typeof at === 'number') {\n return [at];\n }\n\n if (Array.isArray(blockId)) {\n return blockId\n .map((id) => {\n const block = Blocks.getBlock(editor, { id });\n return block?.meta.order;\n })\n .filter((order): order is number => typeof order === 'number');\n }\n\n if (blockId) {\n const block = Blocks.getBlock(editor, { id: blockId });\n return block?.meta.order !== undefined ? [block.meta.order] : [];\n }\n\n return null;\n}\n\n/**\n * Update mark value in specified selection or blocks\n *\n * @param editor - YooEditor instance\n * @param options - Update mark options\n *\n * @example\n * ```typescript\n * // Update color mark in current text selection (slate.selection) or whole block\n * Marks.update(editor, {\n * type: 'color',\n * value: '#ff0000'\n * });\n *\n * // Update mark in specific selection\n * Marks.update(editor, {\n * type: 'color',\n * value: '#ff0000',\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Update font size in specific block\n * Marks.update(editor, {\n * type: 'fontSize',\n * value: 16,\n * at: 0\n * });\n * ```\n */\nexport function update(editor: YooEditor, options: UpdateMarkOptions): void {\n const { type, value, selection } = options;\n const blockIndices = getBlockIndices(editor, options);\n\n // Handle specific selection\n if (selection) {\n const slate = findSlateBySelectionPath(editor);\n if (!slate) return;\n\n Transforms.select(slate, selection);\n\n if (Range.isExpanded(selection)) {\n // For expanded selection: apply mark to selected text\n Editor.addMark(slate, type, value);\n } else {\n // For collapsed selection: toggle the mark (remove if active, add if not)\n const marks = Editor.marks(slate);\n const isActive = !!marks?.[type];\n\n if (isActive) {\n Editor.removeMark(slate, type);\n } else {\n Editor.addMark(slate, type, value);\n }\n }\n return;\n }\n\n // Handle multiple selected blocks\n if (blockIndices && blockIndices.length > 0) {\n for (const path of blockIndices) {\n const blockSlate = Blocks.getBlockSlate(editor, { at: path });\n\n if (!blockSlate) continue;\n\n const [node] = Editor.node(blockSlate, []);\n if (!node) continue;\n\n const end = Editor.end(blockSlate, []);\n const start = Editor.start(blockSlate, []);\n\n Transforms.select(blockSlate, { anchor: start, focus: end });\n\n const marks = Editor.marks(blockSlate);\n const isActive = !!marks?.[type];\n\n if (isActive) {\n Editor.removeMark(blockSlate, type);\n } else {\n Editor.addMark(blockSlate, type, value);\n }\n }\n\n return;\n }\n\n // Handle current text selection (slate.selection)\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate?.selection) return;\n\n // Update mark in selection\n if (Range.isExpanded(slate.selection)) {\n // For expanded selection: apply mark to selected text\n Editor.addMark(slate, type, value);\n } else {\n // For collapsed selection: toggle the mark (remove if active, add if not)\n const marks = Editor.marks(slate);\n const isActive = !!marks?.[type];\n\n if (isActive) {\n Editor.removeMark(slate, type);\n } else {\n Editor.addMark(slate, type, value);\n }\n }\n}\n\n","import { buildBlockElementsStructure } from './block-elements';\nimport { buildSlateEditor } from './build-slate';\nimport { getValue } from '../editor/textFormats/getValue';\nimport { isActive } from '../editor/textFormats/isActive';\nimport { toggle } from '../editor/textFormats/toggle';\nimport { update } from '../editor/textFormats/update';\nimport type { SlateElement, YooEditor } from '../editor/types';\nimport type { YooptaMark } from '../marks';\nimport type { Plugin, PluginElementsMap } from '../plugins/types';\n\nexport function buildMarks(editor, marks: YooptaMark<any>[]) {\n const formats: YooEditor['formats'] = {};\n\n marks.forEach((mark) => {\n const type = mark.type;\n formats[type] = {\n hotkey: mark.hotkey,\n type,\n getValue: () => getValue(editor, { type }),\n isActive: () => isActive(editor, { type }),\n toggle: () => toggle(editor, { type }),\n update: (props) => update(editor, { type, value: props }),\n };\n });\n\n return formats;\n}\n\nexport function buildBlockSlateEditors(editor: YooEditor) {\n const blockEditorsMap = {};\n\n Object.keys(editor.children).forEach((id) => {\n const slate = buildSlateEditor(editor);\n\n if (slate.children.length === 0) {\n const block = editor.children[id];\n if (block) {\n const slateStructure = buildBlockElementsStructure(editor, block.type);\n slate.children = [slateStructure];\n }\n }\n\n blockEditorsMap[id] = slate;\n });\n\n return blockEditorsMap;\n}\n\n// const DEFAULT_PLUGIN_OPTIONS: PluginOptions = {};\n\n/**\n * Checks if an element is inline or inlineVoid\n */\nfunction isInlineElement(element: PluginElementsMap<string, any>[string]): boolean {\n const nodeType = element.props?.nodeType;\n return nodeType === 'inline' || nodeType === 'inlineVoid';\n}\n\n/**\n * Checks if a plugin is an inline/inlineVoid plugin (all its elements are inline/inlineVoid)\n */\nfunction isInlinePlugin(plugin: Plugin<Record<string, SlateElement>>): boolean {\n if (!plugin.elements) return false;\n const elementKeys = Object.keys(plugin.elements);\n if (elementKeys.length === 0) return false;\n\n // Check if all elements are inline/inlineVoid\n return elementKeys.every((key) => {\n const element = plugin.elements[key];\n return isInlineElement(element);\n });\n}\n\n/**\n * Checks if a plugin is a root element plugin (has at least one root element)\n */\nfunction isRootElementPlugin(plugin: Plugin<Record<string, SlateElement>>): boolean {\n if (!plugin.elements) return false;\n const elementKeys = Object.keys(plugin.elements);\n\n // Check if any element is marked as root or has nodeType 'void' or 'block'\n return elementKeys.some((key) => {\n const element = plugin.elements[key];\n const nodeType = element.props?.nodeType;\n return element.asRoot || nodeType === 'void' || nodeType === 'block';\n });\n}\n\nexport function buildPlugins(\n plugins: Plugin<Record<string, SlateElement>>[],\n): Record<string, Plugin<Record<string, SlateElement>>> {\n const pluginsMap: Record<string, Plugin<Record<string, SlateElement>>> = {};\n const inlineTopLevelPlugins: PluginElementsMap<string, any> = {};\n\n // First pass: collect inline elements and set asRoot for single-element plugins\n plugins.forEach((plugin) => {\n if (plugin.elements) {\n const elementKeys = Object.keys(plugin.elements);\n const updatedElements = { ...plugin.elements };\n\n // If plugin has only one element, mark it as root\n if (elementKeys.length === 1) {\n const singleElementKey = elementKeys[0];\n const singleElement = plugin.elements[singleElementKey];\n const nodeType = singleElement.props?.nodeType;\n const isInline = nodeType === 'inline' || nodeType === 'inlineVoid';\n\n if (!singleElement.asRoot && !isInline) {\n updatedElements[singleElementKey] = { ...singleElement, asRoot: true };\n }\n }\n\n elementKeys.forEach((elementType) => {\n const element = updatedElements[elementType];\n const nodeType = element.props?.nodeType;\n\n if (nodeType === 'inline' || nodeType === 'inlineVoid') {\n inlineTopLevelPlugins[elementType] = { ...element, rootPlugin: plugin.type };\n }\n });\n\n pluginsMap[plugin.type] = { ...plugin, elements: updatedElements };\n } else {\n pluginsMap[plugin.type] = plugin;\n }\n });\n\n // Second pass: extend plugins with injectElementsFromPlugins elements\n Object.keys(pluginsMap).forEach((pluginType) => {\n const plugin = pluginsMap[pluginType];\n if (plugin.elements) {\n const extendedElements = { ...plugin.elements };\n const isCurrentPluginInline = isInlinePlugin(plugin);\n const isCurrentPluginRoot = isRootElementPlugin(plugin);\n\n // Find elements with injectElementsFromPlugins\n Object.keys(plugin.elements).forEach((elementKey) => {\n const element = plugin.elements[elementKey];\n if (\n Array.isArray(element.injectElementsFromPlugins) &&\n element.injectElementsFromPlugins.length > 0\n ) {\n // For each allowed plugin, add its elements to the plugin's elements map\n // Filter out self-references to prevent circular dependencies\n element.injectElementsFromPlugins\n .filter((allowedPluginType) => allowedPluginType !== pluginType)\n .forEach((allowedPluginType) => {\n const allowedPlugin = plugins.find((p) => p.type === allowedPluginType);\n\n if (allowedPlugin?.elements) {\n const isAllowedPluginInline = isInlinePlugin(allowedPlugin);\n const isAllowedPluginRoot = isRootElementPlugin(allowedPlugin);\n\n // Prevent inline/inlineVoid plugins from injecting into each other\n if (isCurrentPluginInline && isAllowedPluginInline) {\n return;\n }\n\n // Prevent root elements from being injected into inline/inlineVoid plugins\n if (isCurrentPluginInline && isAllowedPluginRoot) {\n return;\n }\n\n // Prevent inline/inlineVoid elements from being injected into root element plugins\n if (isCurrentPluginRoot && isAllowedPluginInline) {\n return;\n }\n\n // Find root element of the allowed plugin\n const rootElementType =\n Object.keys(allowedPlugin.elements).find(\n (key) => allowedPlugin.elements[key].asRoot,\n ) ?? Object.keys(allowedPlugin.elements)[0];\n\n if (rootElementType) {\n const rootElement = allowedPlugin.elements[rootElementType];\n const isRootElementInline = isInlineElement(rootElement);\n\n // Skip if trying to inject inline element into root plugin\n if (isCurrentPluginRoot && isRootElementInline) {\n return;\n }\n\n // Add root element WITHOUT asRoot (it's now nested, not root)\n if (!extendedElements[rootElementType]) {\n // Copy element without asRoot property\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { asRoot, ...elementWithoutAsRoot } = rootElement;\n extendedElements[rootElementType] = {\n ...elementWithoutAsRoot,\n rootPlugin: allowedPluginType,\n };\n }\n\n // Add children elements with render functions and rootPlugin\n if (rootElement?.children) {\n rootElement.children.forEach((childType) => {\n if (allowedPlugin.elements[childType] && !extendedElements[childType]) {\n const childElement = allowedPlugin.elements[childType];\n const isChildElementInline = isInlineElement(childElement);\n\n // Skip if trying to inject inline child element into root plugin\n if (isCurrentPluginRoot && isChildElementInline) {\n return;\n }\n\n extendedElements[childType] = {\n ...childElement,\n rootPlugin: allowedPluginType,\n };\n }\n });\n }\n }\n }\n });\n\n // Note: We don't add injectElementsFromPlugins elements to the children array\n // injectElementsFromPlugins elements are available for insertion but not automatically created\n }\n });\n\n // Add inline elements only to root element plugins (not to inline/inlineVoid plugins)\n const finalElements = isCurrentPluginInline\n ? extendedElements\n : ({ ...extendedElements, ...inlineTopLevelPlugins } as typeof extendedElements);\n pluginsMap[plugin.type] = { ...plugin, elements: finalElements };\n }\n });\n\n return pluginsMap;\n}\n","import EventEmitter from 'eventemitter3';\n\nimport type { YooptaMark } from '../marks';\nimport type { YooptaPlugin } from '../plugins';\nimport { decreaseBlockDepth } from './blocks/decreaseBlockDepth';\nimport { deleteBlock } from './blocks/deleteBlock';\nimport { duplicateBlock } from './blocks/duplicateBlock';\nimport { focusBlock } from './blocks/focusBlock';\nimport { getBlock } from './blocks/getBlock';\nimport { increaseBlockDepth } from './blocks/increaseBlockDepth';\nimport { insertBlock } from './blocks/insertBlock';\nimport { mergeBlock } from './blocks/mergeBlock';\nimport { moveBlock } from './blocks/moveBlock';\nimport { splitBlock } from './blocks/splitBlock';\nimport { toggleBlock } from './blocks/toggleBlock';\nimport { updateBlock } from './blocks/updateBlock';\nimport { applyTransforms } from './core/applyTransforms';\nimport { batchOperations } from './core/batchOperations';\nimport { blur } from './core/blur';\nimport { focus } from './core/focus';\nimport { getEditorValue } from './core/getEditorValue';\nimport type { UndoRedoOptions } from './core/history';\nimport { YooptaHistory } from './core/history';\nimport { isFocused } from './core/isFocused';\nimport { setEditorValue } from './core/setEditorValue';\nimport { setPath } from './paths/setPath';\nimport type { SlateElement, YooEditor, YooptaContentValue } from './types';\nimport type { EmailTemplateOptions } from '../parsers/getEmail';\nimport { getEmail } from '../parsers/getEmail';\nimport { getHTML } from '../parsers/getHTML';\nimport { getMarkdown } from '../parsers/getMarkdown';\nimport { getPlainText } from '../parsers/getPlainText';\nimport { getYooptaJSON } from '../parsers/getYooptaJSON';\nimport { isEmpty } from './core/isEmpty';\nimport { y, yInline, yText } from './elements/create-element-structure';\nimport type { ElementStructureOptions } from './elements/create-element-structure';\nimport { deleteElement } from './elements/deleteElement';\nimport { getElement } from './elements/getElement';\nimport { getElementChildren } from './elements/getElementChildren';\nimport { getElementEntry } from './elements/getElementEntry';\nimport { getElementPath } from './elements/getElementPath';\nimport { getElementRect } from './elements/getElementRect';\nimport { getElements } from './elements/getElements';\nimport { getParentElementPath } from './elements/getParentElementPath';\nimport { insertElement } from './elements/insertElement';\nimport { isElementEmpty } from './elements/isElementEmpty';\nimport { updateElement } from './elements/updateElement';\nimport type { Plugin } from '../plugins/types';\nimport {\n buildBlockSlateEditors,\n buildMarks,\n buildPlugins,\n} from '../utils/editor-builders';\nimport { generateId } from '../utils/generateId';\nimport { validateYooptaValue } from '../utils/validations';\n\nexport type CreateYooptaEditorOptions = {\n id?: string;\n plugins: readonly YooptaPlugin<Record<string, SlateElement>>[];\n marks?: YooptaMark<any>[];\n value?: YooptaContentValue;\n readOnly?: boolean;\n};\n\nexport function createYooptaEditor(opts: CreateYooptaEditorOptions): YooEditor {\n const { id, plugins: pluginsFromOptions, marks, value, readOnly } = opts;\n\n const plugins = pluginsFromOptions\n .filter((plugin) => !!plugin)\n .map((plugin) => plugin.getPlugin as Plugin<Record<string, SlateElement>>);\n // Create a unique event emitter for each editor instance\n const eventEmitter = new EventEmitter();\n\n const Events = {\n on: (event, fn) => eventEmitter.on(event, fn),\n once: (event, fn) => eventEmitter.once(event, fn),\n off: (event, fn) => eventEmitter.off(event, fn),\n emit: (event, payload) => eventEmitter.emit(event, payload),\n };\n\n const isValueValid = validateYooptaValue(value);\n if (!isValueValid && typeof value !== 'undefined') {\n // eslint-disable-next-line no-console\n console.error(\n `Initial value is not valid. Should be an object with blocks. You passed: ${JSON.stringify(value)}`,\n );\n }\n\n const editorId = id ?? generateId();\n const children = (isValueValid ? value : {}) as YooptaContentValue;\n\n const editor: YooEditor = {\n id: editorId,\n children,\n blockEditorsMap: {},\n path: { current: null },\n readOnly: readOnly ?? false,\n isEmpty: () => isEmpty(editor),\n getEditorValue: () => getEditorValue(editor),\n setEditorValue: (...args) => setEditorValue(editor, ...args),\n insertBlock: (...args) => insertBlock(editor, ...args),\n deleteBlock: (...args) => deleteBlock(editor, ...args),\n duplicateBlock: (...args) => duplicateBlock(editor, ...args),\n toggleBlock: (...args) => toggleBlock(editor, ...args),\n increaseBlockDepth: (...args) => increaseBlockDepth(editor, ...args),\n decreaseBlockDepth: (...args) => decreaseBlockDepth(editor, ...args),\n moveBlock: (...args) => moveBlock(editor, ...args),\n focusBlock: (...args) => focusBlock(editor, ...args),\n getBlock: (...args) => getBlock(editor, ...args),\n updateBlock: (...args) => updateBlock(editor, ...args),\n splitBlock: (...args) => splitBlock(editor, ...args),\n mergeBlock: (...args) => mergeBlock(editor, ...args),\n setPath: (...args) => setPath(editor, ...args),\n\n // New element methods\n insertElement: (options) => insertElement(editor, options),\n updateElement: (options) => updateElement(editor, options),\n deleteElement: (options) => deleteElement(editor, options),\n getElement: (options) => getElement(editor, options),\n getElements: (options) => getElements(editor, options),\n getElementEntry: (options) => getElementEntry(editor, options),\n getElementPath: (options) => getElementPath(editor, options),\n getElementRect: (options) => getElementRect(editor, options),\n getParentElementPath: (options) => getParentElementPath(editor, options),\n getElementChildren: (options) => getElementChildren(editor, options),\n isElementEmpty: (options) => isElementEmpty(editor, options),\n\n y: Object.assign(\n (type: string, options?: ElementStructureOptions) => y(editor, type, options),\n {\n text: yText,\n inline: (type: string, options?: ElementStructureOptions) => yInline(editor, type, options),\n },\n ),\n\n formats: {},\n marks: marks ?? [],\n plugins: {},\n\n applyTransforms: (operations, ...args) => applyTransforms(editor, operations, ...args),\n batchOperations: (callback) => batchOperations(editor, callback),\n\n on: (event, callback) => Events.on(event, callback),\n off: (event, callback) => Events.off(event, callback),\n emit: (event, ...args) => Events.emit(event, ...args),\n once: (event, callback) => Events.once(event, callback),\n\n isFocused: () => isFocused(editor),\n focus: () => focus(editor),\n blur: (...args) => blur(editor, ...args),\n\n getHTML: (content: YooptaContentValue) => getHTML(editor, content),\n getMarkdown: (content: YooptaContentValue) => getMarkdown(editor, content),\n getPlainText: (content: YooptaContentValue) => getPlainText(editor, content),\n getEmail: (content: YooptaContentValue, options?: Partial<EmailTemplateOptions>) =>\n getEmail(editor, content, options),\n getYooptaJSON: (content: YooptaContentValue) => getYooptaJSON(editor, content),\n\n refElement: null,\n\n historyStack: {\n undos: [],\n redos: [],\n },\n\n redo: (options?: UndoRedoOptions) => YooptaHistory.redo(editor, options),\n undo: (options?: UndoRedoOptions) => YooptaHistory.undo(editor, options),\n isSavingHistory: () => YooptaHistory.isSavingHistory(editor),\n isMergingHistory: () => YooptaHistory.isMergingHistory(editor),\n withoutSavingHistory: (fn) => YooptaHistory.withoutSavingHistory(editor, fn),\n withSavingHistory: (fn) => YooptaHistory.withSavingHistory(editor, fn),\n withoutMergingHistory: (fn) => YooptaHistory.withoutMergingHistory(editor, fn),\n withMergingHistory: (fn) => YooptaHistory.withMergingHistory(editor, fn),\n };\n\n editor.plugins = buildPlugins(plugins);\n editor.formats = marks ? buildMarks(editor, marks) : {};\n editor.blockEditorsMap = buildBlockSlateEditors(editor);\n\n return editor;\n}\n","import { createContext, useContext, useRef } from 'react';\n\nimport { createYooptaEditor } from '../../editor';\nimport { Blocks } from '../../editor/blocks';\nimport type { YooEditor, YooptaPathIndex } from '../../editor/types';\nimport type { PluginOptions } from '../../plugins/types';\n\nexport type YooptaEditorContext = {\n editor: YooEditor;\n};\n\nconst DEFAULT_HANDLERS: YooptaEditorContext = {\n editor: createYooptaEditor({ plugins: [] }),\n};\n\nexport const YooptaContext = createContext<YooptaEditorContext>(DEFAULT_HANDLERS);\n\n/**\n *\n */\nconst YooptaContextProvider = ({ children, editorState }) => {\n const contextValueRef = useRef<YooptaEditorContext>(DEFAULT_HANDLERS);\n\n contextValueRef.current = {\n editor: editorState.editor,\n };\n\n return (\n <YooptaContext.Provider value={contextValueRef.current}>{children}</YooptaContext.Provider>\n );\n};\n\nconst useYooptaEditor = (): YooEditor => {\n const context = useContext(YooptaContext);\n\n if (!context) {\n throw new Error('useYooptaEditor must be used within a YooptaEditorContext');\n }\n\n return context.editor;\n};\n\nconst useBlockData = (blockId: string) => useYooptaEditor().children[blockId];\nconst useYooptaFocused = () => useYooptaEditor().isFocused();\nconst useYooptaReadOnly = () => useYooptaEditor().readOnly;\nconst useYooptaPluginOptions = <TOptions,>(pluginType: string): PluginOptions<TOptions> =>\n useYooptaEditor().plugins[pluginType]?.options as PluginOptions<TOptions>;\n\ntype UseBlockSelectedProps =\n | { blockId: string; at?: YooptaPathIndex }\n | { at: YooptaPathIndex; blockId?: string };\n\nconst useBlockSelected = ({ blockId, at }: UseBlockSelectedProps) => {\n const editor = useYooptaEditor();\n\n if (!blockId && typeof at !== 'number') {\n throw new Error('useBlockSelected must receive either blockId or at');\n }\n\n let block;\n\n if (blockId) {\n block = editor.children[blockId];\n }\n\n if (at) {\n block = Blocks.getBlock(editor, { at });\n }\n\n return editor.path.current === block?.meta.order;\n};\n\nexport {\n useYooptaEditor,\n useBlockData,\n useYooptaPluginOptions,\n useBlockSelected,\n useYooptaReadOnly,\n useYooptaFocused,\n YooptaContextProvider,\n};\n","import type { Path } from 'slate';\nimport { Editor, Element, Range, Transforms } from 'slate';\n\nimport { getRootBlockElement } from './block-elements';\nimport { generateId } from './generateId';\nimport { Blocks } from '../editor/blocks';\nimport { Paths } from '../editor/paths';\nimport type { SlateElement, YooEditor } from '../editor/types';\n\ntype EnterResult =\n | { action: 'split-block' }\n | { action: 'insert-block-after' }\n | { action: 'insert-block-before' }\n | { action: 'insert-soft-break' }\n | { action: 'split-injected-element'; path: Path }\n | { action: 'exit-injected-element'; injectedPath: Path; parentLeafPath: Path }\n | { action: 'delete-empty-injected'; path: Path }\n | { action: 'reset-to-paragraph' }\n | { action: 'delegate-to-plugin' }\n | { action: 'default' }\n | { action: 'prevent' };\n\n/**\n * Checks if an element is injected\n */\nfunction isInjectedElement(editor: YooEditor, element: SlateElement): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const elementConfig = plugin.elements[element.type];\n\n return !!elementConfig?.rootPlugin && elementConfig.rootPlugin !== currentBlock.type;\n}\n\n/**\n * Checks if a block is simple\n */\nfunction isSimpleBlock(editor: YooEditor): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const hasComplexStructure = Object.values(plugin.elements).some((element) => {\n if (element.rootPlugin) return false;\n return element.children && element.children.length > 0;\n });\n\n return !hasComplexStructure;\n}\n\n/**\n * Checks if an element can contain injected elements\n */\nfunction canContainInjectedElements(editor: YooEditor, elementType: string): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const elementConfig = plugin.elements[elementType];\n\n return (\n Array.isArray(elementConfig?.injectElementsFromPlugins) &&\n elementConfig.injectElementsFromPlugins.length > 0\n );\n}\n\n/**\n * Finds the injected ancestor element\n */\nfunction findInjectedAncestor(\n editor: YooEditor,\n slate: Editor,\n path: Path,\n): { element: SlateElement; path: Path } | null {\n let currentPath = path;\n\n while (currentPath.length > 0) {\n try {\n const [node] = Editor.node(slate, currentPath);\n\n if (Element.isElement(node) && isInjectedElement(editor, node as SlateElement)) {\n return { element: node as SlateElement, path: currentPath };\n }\n } catch {\n // Ignore\n }\n\n currentPath = currentPath.slice(0, -1);\n }\n\n return null;\n}\n\n/**\n * Finds the parent leaf element of the plugin (which can contain injected elements)\n */\nfunction findParentLeafElement(\n editor: YooEditor,\n slate: Editor,\n path: Path,\n): { element: SlateElement; path: Path } | null {\n let currentPath = path;\n\n while (currentPath.length > 0) {\n try {\n const [node] = Editor.node(slate, currentPath);\n\n if (Element.isElement(node)) {\n const slateElement = node as SlateElement;\n\n if (canContainInjectedElements(editor, slateElement.type)) {\n return { element: slateElement, path: currentPath };\n }\n }\n } catch {\n // Ignore\n }\n\n currentPath = currentPath.slice(0, -1);\n }\n\n return null;\n}\n\n/**\n * Checks if an element is empty\n */\nfunction isElementEmpty(slate: Editor, path: Path): boolean {\n try {\n const text = Editor.string(slate, path);\n return text.trim().length === 0;\n } catch {\n return true;\n }\n}\n\n/**\n * Checks if an injected element can be split\n */\nfunction canSplitInjectedElement(editor: YooEditor, element: SlateElement): boolean {\n const splittableTypes = new Set([\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'blockquote',\n ]);\n\n return splittableTypes.has(element.type);\n}\n\n/**\n * Checks if the block type should be reset to Paragraph\n */\nfunction shouldResetToParagraph(editor: YooEditor): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const resetTypes = new Set<string>(Object.keys(editor.plugins).filter(type => {\n const plugin = editor.plugins[type];\n const rootElement = getRootBlockElement(plugin.elements);\n return rootElement?.props?.nodeType === 'block';\n }));\n\n return resetTypes.has(currentBlock.type);\n}\n\n/**\n * Main function to determine the action for Enter\n */\nexport function getEnterAction(editor: YooEditor, slate: Editor): EnterResult {\n if (!slate.selection) return { action: 'prevent' };\n\n const { anchor } = slate.selection;\n const isCollapsed = Range.isCollapsed(slate.selection);\n\n // If there's a selection — delete it first\n if (!isCollapsed) {\n Transforms.delete(slate, { at: slate.selection });\n }\n\n // Find the current element\n const currentElementEntry = Editor.above<SlateElement>(slate, {\n at: anchor,\n match: (n) => Element.isElement(n),\n });\n\n if (!currentElementEntry) return { action: 'default' };\n\n const [, currentPath] = currentElementEntry;\n\n // Check cursor position relative to the entire block\n const first = Editor.first(slate, []);\n const last = Editor.last(slate, []);\n const isAtBlockStart = Editor.isStart(slate, anchor, first[1]);\n const isAtBlockEnd = Editor.isEnd(slate, anchor, last[1]);\n const isBlockEmpty = isElementEmpty(slate, []);\n\n // === Case 3: Injected elements ===\n const injectedAncestor = findInjectedAncestor(editor, slate, anchor.path);\n\n if (injectedAncestor) {\n const isInjectedEmpty = isElementEmpty(slate, injectedAncestor.path);\n\n // Case 3c: Empty injected element — delete it\n if (isInjectedEmpty) {\n return { action: 'delete-empty-injected', path: injectedAncestor.path };\n }\n\n const isAtInjectedEnd = Editor.isEnd(slate, anchor, injectedAncestor.path);\n const isAtInjectedStart = Editor.isStart(slate, anchor, injectedAncestor.path);\n\n // Case 3a: Cursor at the end of injected element — exit from it\n if (isAtInjectedEnd) {\n // Find parent leaf element\n const parentLeaf = findParentLeafElement(editor, slate, injectedAncestor.path);\n\n if (parentLeaf) {\n return {\n action: 'exit-injected-element',\n injectedPath: injectedAncestor.path,\n parentLeafPath: parentLeaf.path,\n };\n }\n\n // Fallback: soft break\n return { action: 'insert-soft-break' };\n }\n\n // Case 3b: Cursor in the middle — try to split\n if (!isAtInjectedStart && canSplitInjectedElement(editor, injectedAncestor.element)) {\n return { action: 'split-injected-element', path: injectedAncestor.path };\n }\n\n // Insert soft break\n return { action: 'insert-soft-break' };\n }\n\n // === Case 1: Simple block ===\n if (isSimpleBlock(editor)) {\n // Case 1d: Empty block\n if (isBlockEmpty) {\n if (shouldResetToParagraph(editor)) {\n return { action: 'reset-to-paragraph' };\n }\n return { action: 'insert-block-after' };\n }\n\n // Case 1b: Cursor at the end\n if (isAtBlockEnd) {\n return { action: 'insert-block-after' };\n }\n\n // Case 1c: Cursor at the start of non-empty block\n if (isAtBlockStart) {\n return { action: 'insert-block-before' };\n }\n\n // Case 1a: Cursor in the middle\n return { action: 'split-block' };\n }\n\n // === Case 2: Complex plugin ===\n const parentLeaf = findParentLeafElement(editor, slate, currentPath);\n\n if (parentLeaf) {\n return { action: 'delegate-to-plugin' };\n }\n\n return { action: 'delegate-to-plugin' };\n}\n\n/**\n * Executes the Enter action\n */\nexport function executeEnterAction(editor: YooEditor, slate: Editor, result: EnterResult): void {\n switch (result.action) {\n case 'split-block': {\n editor.splitBlock({ focus: true });\n break;\n }\n\n case 'insert-block-after': {\n const defaultBlock = Blocks.buildBlockData({ id: generateId() });\n const nextPath = Paths.getNextBlockOrder(editor);\n\n editor.insertBlock(defaultBlock.type, {\n at: nextPath,\n focus: true,\n });\n break;\n }\n\n case 'insert-block-before': {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n const defaultBlock = Blocks.buildBlockData({ id: generateId() });\n\n editor.batchOperations(() => {\n editor.insertBlock(defaultBlock.type, {\n at: editor.path.current,\n focus: false,\n });\n\n if (currentBlock) {\n editor.focusBlock(currentBlock.id);\n }\n });\n break;\n }\n\n case 'insert-soft-break': {\n Transforms.insertText(slate, '\\n');\n break;\n }\n\n case 'split-injected-element': {\n Transforms.splitNodes(slate, {\n at: slate.selection!,\n match: (n) => {\n if (!Element.isElement(n)) return false;\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n const elementConfig = plugin.elements[(n as SlateElement).type];\n return !!elementConfig?.rootPlugin && elementConfig.rootPlugin !== currentBlock.type;\n },\n always: true,\n });\n break;\n }\n\n case 'exit-injected-element': {\n // Calculate path for new element INSIDE parentLeaf, after injected element\n // injectedPath relative to slate: e.g. [0, 0, 0, 1, 0]\n // we need to insert sibling after injected inside parentLeaf\n\n const { injectedPath, parentLeafPath } = result;\n\n // Path of injected element relative to parentLeaf\n // Example: injectedPath = [0, 0, 0, 1, 0], parentLeafPath = [0, 0, 0, 1]\n // Then injected inside parent is [0], and we insert [1]\n\n // Find index of injected element inside parentLeaf\n const injectedIndexInParent = injectedPath[parentLeafPath.length];\n\n // Path for new element (next sibling inside parentLeaf)\n const newElementPath = [...parentLeafPath, injectedIndexInParent + 1];\n\n // Create empty text node\n const textNode = { text: '' };\n\n Transforms.insertNodes(slate, textNode, {\n at: newElementPath,\n select: true,\n });\n break;\n }\n\n case 'delete-empty-injected': {\n Transforms.removeNodes(slate, { at: result.path });\n break;\n }\n\n case 'reset-to-paragraph': {\n editor.toggleBlock('Paragraph', { focus: true });\n break;\n }\n\n case 'delegate-to-plugin':\n case 'default':\n case 'prevent':\n break;\n\n default:\n break;\n }\n}\n","import { Editor, Element, Path, Range, Transforms } from 'slate';\n\nimport { getRootBlockElement } from './block-elements';\nimport { findSlateBySelectionPath } from './findSlateBySelectionPath';\nimport { getLastNodePoint } from './get-node-points';\nimport { Blocks } from '../editor/blocks';\nimport { Paths } from '../editor/paths';\nimport type { SlateElement, YooEditor } from '../editor/types';\n\ntype BackspaceResult =\n | { action: 'delete-injected-element'; path: Path }\n | { action: 'delete-block' }\n | { action: 'move-cursor'; targetPath: Path }\n | { action: 'move-to-previous-block' }\n | { action: 'merge-with-previous-block' }\n | { action: 'default' }\n | { action: 'prevent' };\n\n/**\n * Checks if an element is injected from another plugin\n */\nfunction isInjectedElement(editor: YooEditor, element: SlateElement): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const elementConfig = plugin.elements[element.type];\n\n return !!elementConfig?.rootPlugin && elementConfig.rootPlugin !== currentBlock.type;\n}\n\n/**\n * Checks if an element is a leaf element in the plugin configuration\n */\nfunction isPluginLeafElement(editor: YooEditor, elementType: string): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const elementConfig = plugin.elements[elementType];\n if (!elementConfig) return false;\n\n return !elementConfig.children || elementConfig.children.length === 0;\n}\n\n/**\n * Checks if an element can contain injected elements\n */\nfunction canContainInjectedElements(editor: YooEditor, elementType: string): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n const elementConfig = plugin.elements[elementType];\n\n return (\n Array.isArray(elementConfig?.injectElementsFromPlugins) &&\n elementConfig.injectElementsFromPlugins.length > 0\n );\n}\n\n/**\n * Checks if a block is \"simple\" — meaning it can be deleted entirely on Backspace\n * Simple block: all elements are leaf (no nested structure like tabs/steps)\n */\nfunction isSimpleBlock(editor: YooEditor): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n if (!currentBlock) return false;\n\n const plugin = editor.plugins[currentBlock.type];\n if (!plugin?.elements) return false;\n\n // Check if there are elements with children (complex structure)\n const hasComplexStructure = Object.values(plugin.elements).some((element) => {\n // Skip injected elements (they have rootPlugin)\n if (element.rootPlugin) return false;\n\n // If element has children — it's a complex structure\n return element.children && element.children.length > 0;\n });\n\n return !hasComplexStructure;\n}\n\n/**\n * Finds the nearest injected ancestor element\n */\nfunction findInjectedAncestor(\n editor: YooEditor,\n slate: Editor,\n path: Path,\n): { element: SlateElement; path: Path } | null {\n let currentPath = path;\n\n while (currentPath.length > 0) {\n try {\n const [node] = Editor.node(slate, currentPath);\n\n if (Element.isElement(node) && isInjectedElement(editor, node as SlateElement)) {\n return { element: node as SlateElement, path: currentPath };\n }\n } catch {\n // Path does not exist\n }\n\n currentPath = currentPath.slice(0, -1);\n }\n\n return null;\n}\n\n/**\n * Finds the parent leaf element of the plugin\n */\nfunction findParentLeafElement(\n editor: YooEditor,\n slate: Editor,\n path: Path,\n): { element: SlateElement; path: Path } | null {\n let currentPath = path;\n\n while (currentPath.length > 0) {\n try {\n const [node] = Editor.node(slate, currentPath);\n\n if (Element.isElement(node)) {\n const slateElement = node as SlateElement;\n\n if (\n isPluginLeafElement(editor, slateElement.type) &&\n canContainInjectedElements(editor, slateElement.type)\n ) {\n return { element: slateElement, path: currentPath };\n }\n }\n } catch {\n // Path does not exist\n }\n\n currentPath = currentPath.slice(0, -1);\n }\n\n return null;\n}\n\n/**\n * Finds the previous sibling element\n */\nfunction getPreviousSiblingEntry(\n slate: Editor,\n path: Path,\n): { element: SlateElement; path: Path } | null {\n if (path.length === 0) return null;\n\n const index = path[path.length - 1];\n if (index === 0) return null;\n\n const siblingPath = [...path.slice(0, -1), index - 1];\n\n try {\n const [node] = Editor.node(slate, siblingPath);\n if (Element.isElement(node)) {\n return { element: node as SlateElement, path: siblingPath };\n }\n } catch {\n return null;\n }\n\n return null;\n}\n\n/**\n * Finds the last editable position inside an element\n */\nfunction getLastEditablePoint(slate: Editor, path: Path): Path {\n try {\n const end = Editor.end(slate, path);\n return end.path;\n } catch {\n return path;\n }\n}\n\n/**\n * Checks if an element is empty\n */\nfunction isElementEmpty(slate: Editor, path: Path): boolean {\n try {\n const text = Editor.string(slate, path);\n return text.trim().length === 0;\n } catch {\n return true;\n }\n}\n\n/**\n * Checks if the current block can be merged with the previous one\n */\nfunction canMergeWithPrevious(editor: YooEditor): boolean {\n const currentBlock = Blocks.getBlock(editor, { at: editor.path.current });\n const prevBlockOrder = Paths.getPreviousBlockOrder(editor);\n\n if (typeof prevBlockOrder !== 'number') return false;\n\n const prevBlock = Blocks.getBlock(editor, { at: prevBlockOrder });\n\n if (!currentBlock || !prevBlock) return false;\n\n const mergeableTypes = new Set<string>(Object.keys(editor.plugins).filter(type => {\n const plugin = editor.plugins[type];\n const rootElement = getRootBlockElement(plugin.elements);\n return rootElement?.props?.nodeType === 'block';\n }));\n\n return mergeableTypes.has(currentBlock.type) && mergeableTypes.has(prevBlock.type);\n}\n\n/**\n * Main function to determine the action for Backspace\n */\nexport function getBackspaceAction(editor: YooEditor, slate: Editor): BackspaceResult {\n if (!slate.selection) return { action: 'prevent' };\n\n const isCollapsed = Range.isCollapsed(slate.selection);\n\n // If there's a selection — standard deletion\n if (!isCollapsed) {\n return { action: 'default' };\n }\n\n const { anchor } = slate.selection;\n\n // Find the current element\n const currentElementEntry = Editor.above<SlateElement>(slate, {\n at: anchor,\n match: (n) => Element.isElement(n),\n });\n\n if (!currentElementEntry) return { action: 'default' };\n\n const [, currentPath] = currentElementEntry;\n\n // Check if cursor is at the start of the current element\n const isAtStart = Editor.isStart(slate, anchor, currentPath);\n\n if (!isAtStart) {\n return { action: 'default' };\n }\n\n // === Cursor at the start of element ===\n\n // Case 1 & 3: Check if we're inside an injected element\n const injectedAncestor = findInjectedAncestor(editor, slate, anchor.path);\n\n if (injectedAncestor) {\n const isInjectedEmpty = isElementEmpty(slate, injectedAncestor.path);\n\n if (isInjectedEmpty) {\n return { action: 'delete-injected-element', path: injectedAncestor.path };\n }\n\n const prevSibling = getPreviousSiblingEntry(slate, injectedAncestor.path);\n\n if (prevSibling) {\n const targetPath = getLastEditablePoint(slate, prevSibling.path);\n return { action: 'move-cursor', targetPath };\n }\n\n return { action: 'prevent' };\n }\n\n // Check if this is a simple block (can be deleted entirely)\n const isSimple = isSimpleBlock(editor);\n const isBlockEmpty = isElementEmpty(slate, []);\n const prevBlockOrder = Paths.getPreviousBlockOrder(editor);\n const hasPrevBlock = typeof prevBlockOrder === 'number';\n\n // Case 5: Simple block (Paragraph, Heading, Callout, Blockquote, etc.)\n if (isSimple) {\n // Check if cursor is at the start of the entire block (not just current element)\n const isAtBlockStart = Editor.isStart(slate, anchor, []);\n\n if (isAtBlockStart) {\n if (isBlockEmpty) {\n // Empty block — delete it\n if (hasPrevBlock) {\n return { action: 'delete-block' };\n }\n // First block — do nothing\n return { action: 'prevent' };\n }\n\n // Block is not empty, but cursor is at the start\n if (hasPrevBlock) {\n if (canMergeWithPrevious(editor)) {\n return { action: 'merge-with-previous-block' };\n }\n return { action: 'move-to-previous-block' };\n }\n\n return { action: 'prevent' };\n }\n\n // Cursor is not at the start of block — standard behavior\n return { action: 'default' };\n }\n\n // Case 2 & 4: Complex plugin (Tabs, Steps, etc.)\n const parentLeaf = findParentLeafElement(editor, slate, currentPath);\n\n if (parentLeaf) {\n const isLeafEmpty = isElementEmpty(slate, parentLeaf.path);\n\n if (isLeafEmpty) {\n // Empty leaf — find where to move cursor\n const prevSibling = getPreviousSiblingEntry(slate, parentLeaf.path);\n\n if (prevSibling) {\n const targetPath = getLastEditablePoint(slate, prevSibling.path);\n return { action: 'move-cursor', targetPath };\n }\n\n // Try to go up\n let checkPath = Path.parent(parentLeaf.path);\n\n while (checkPath.length > 0) {\n const prevParentSibling = getPreviousSiblingEntry(slate, checkPath);\n\n if (prevParentSibling) {\n const targetPath = getLastEditablePoint(slate, prevParentSibling.path);\n return { action: 'move-cursor', targetPath };\n }\n\n checkPath = Path.parent(checkPath);\n }\n\n // We're at the very start of the complex plugin\n return { action: 'prevent' };\n }\n\n // Leaf is not empty — find previous sibling\n const prevSibling = getPreviousSiblingEntry(slate, currentPath);\n\n if (prevSibling && isInjectedElement(editor, prevSibling.element)) {\n const targetPath = getLastEditablePoint(slate, prevSibling.path);\n return { action: 'move-cursor', targetPath };\n }\n\n const prevLeafSibling = getPreviousSiblingEntry(slate, parentLeaf.path);\n\n if (prevLeafSibling) {\n const targetPath = getLastEditablePoint(slate, prevLeafSibling.path);\n return { action: 'move-cursor', targetPath };\n }\n\n return { action: 'prevent' };\n }\n\n // Fallback for complex plugins without parentLeaf\n // Check if cursor is at the start of the entire block\n const isAtBlockStart = Editor.isStart(slate, anchor, []);\n\n if (isAtBlockStart && isBlockEmpty && hasPrevBlock) {\n return { action: 'delete-block' };\n }\n\n return { action: 'prevent' };\n}\n\n/**\n * Executes the Backspace action\n */\nexport function executeBackspaceAction(\n editor: YooEditor,\n slate: Editor,\n result: BackspaceResult,\n): void {\n switch (result.action) {\n case 'delete-injected-element': {\n Transforms.removeNodes(slate, { at: result.path });\n break;\n }\n\n case 'delete-block': {\n editor.deleteBlock({ at: editor.path.current, focus: true });\n break;\n }\n\n case 'move-cursor': {\n const point = Editor.end(slate, result.targetPath);\n Transforms.select(slate, point);\n break;\n }\n\n case 'move-to-previous-block': {\n const prevBlockOrder = Paths.getPreviousBlockOrder(editor);\n if (typeof prevBlockOrder !== 'number') break;\n\n const prevBlock = Blocks.getBlock(editor, { at: prevBlockOrder });\n if (!prevBlock) break;\n\n const prevSlate = findSlateBySelectionPath(editor, { at: prevBlockOrder });\n if (!prevSlate) break;\n\n const lastPoint = getLastNodePoint(prevSlate);\n\n editor.focusBlock(prevBlock.id, {\n focusAt: lastPoint,\n waitExecution: false,\n shouldUpdateBlockPath: true,\n });\n break;\n }\n\n case 'merge-with-previous-block': {\n editor.mergeBlock();\n break;\n }\n\n case 'default':\n case 'prevent':\n break;\n\n default:\n break;\n }\n}\n","import { Editor, Element, Path, Point, Range } from 'slate';\n\nimport type { SlateElement, YooEditor } from '../editor/types';\n\ntype HierarchicalSelectResult =\n | { action: 'select-path'; path: Path }\n | { action: 'select-range'; range: Range }\n | { action: 'select-block'; blockOrder: number }\n | { action: 'select-all-blocks'; blockOrders: number[] }\n | { action: 'none' };\n\n/**\n * Checks if an element at the specified path is fully selected\n */\nfunction isPathFullySelected(slate: Editor, selection: Range, targetPath: Path): boolean {\n const targetRange = Editor.range(slate, targetPath);\n const [selStart, selEnd] = Range.edges(selection);\n const [targetStart, targetEnd] = Range.edges(targetRange);\n\n return Point.compare(selStart, targetStart) <= 0 && Point.compare(selEnd, targetEnd) >= 0;\n}\n\n/**\n * Finds the path to the current Element (not a text node)\n */\nfunction getCurrentElementPath(slate: Editor): Path | null {\n if (!slate.selection) return null;\n\n const entry = Editor.above<SlateElement>(slate, {\n at: slate.selection.anchor,\n match: (n) => Element.isElement(n),\n });\n\n return entry ? entry[1] : null;\n}\n\n/**\n * Checks if an element is a leaf (contains only text nodes)\n */\nfunction isLeafElement(slate: Editor, path: Path): boolean {\n try {\n const [node] = Editor.node(slate, path);\n if (!Element.isElement(node)) return false;\n\n // Leaf element if all children are text nodes\n return node.children.every((child) => !Element.isElement(child));\n } catch {\n return false;\n }\n}\n\nexport function getNextHierarchicalSelection(\n editor: YooEditor,\n slate: Editor,\n): HierarchicalSelectResult {\n if (!slate.selection) return { action: 'none' };\n\n // Case 1: Blocks are already selected at editor level\n const selectedPaths = editor.path.selected;\n if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n if (selectedPaths.length === 1) {\n const allBlockPaths = Array.from(\n { length: Object.keys(editor.children).length },\n (_, i) => i,\n );\n return { action: 'select-all-blocks', blockOrders: allBlockPaths };\n }\n return { action: 'none' };\n }\n\n const isExpanded = Range.isExpanded(slate.selection);\n const currentElementPath = getCurrentElementPath(slate);\n\n if (!currentElementPath) return { action: 'none' };\n\n // Case 2: Nothing is selected — select current element\n if (!isExpanded) {\n const currentText = Editor.string(slate, currentElementPath);\n\n // If element is empty — move up to parent immediately\n if (currentText.trim().length === 0) {\n if (currentElementPath.length <= 1) {\n return {\n action: 'select-block',\n blockOrder: editor.path.current as number,\n };\n }\n const parentPath = Path.parent(currentElementPath);\n return { action: 'select-path', path: parentPath };\n }\n\n // For leaf elements use range, for others use path\n if (isLeafElement(slate, currentElementPath)) {\n return { action: 'select-range', range: Editor.range(slate, currentElementPath) };\n }\n return { action: 'select-path', path: currentElementPath };\n }\n\n // Case 3: Something is selected — check current element and move up\n const isCurrentFullySelected = isPathFullySelected(slate, slate.selection, currentElementPath);\n\n if (!isCurrentFullySelected) {\n // Current element is not fully selected — select it\n if (isLeafElement(slate, currentElementPath)) {\n return { action: 'select-range', range: Editor.range(slate, currentElementPath) };\n }\n return { action: 'select-path', path: currentElementPath };\n }\n\n // Current element is fully selected — find nearest unselected parent\n let pathToCheck = currentElementPath;\n\n while (pathToCheck.length > 0) {\n const parentPath = Path.parent(pathToCheck);\n\n // Reached slate root\n if (parentPath.length === 0 || parentPath.length === 1) {\n // Check if entire slate is selected\n const isFullSlateSelected = isPathFullySelected(slate, slate.selection, []);\n\n if (isFullSlateSelected) {\n return {\n action: 'select-block',\n blockOrder: editor.path.current as number,\n };\n }\n // Select entire slate\n return { action: 'select-path', path: [] };\n }\n\n // Check if parent is selected\n const isParentFullySelected = isPathFullySelected(slate, slate.selection, parentPath);\n\n if (!isParentFullySelected) {\n // Parent is not selected — select it\n return { action: 'select-path', path: parentPath };\n }\n\n // Parent is already selected — move up\n pathToCheck = parentPath;\n }\n\n // Fallback\n return { action: 'none' };\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Path, Range, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { Blocks } from '../editor/blocks';\nimport { Paths } from '../editor/paths';\nimport type { YooEditor } from '../editor/types';\nimport { executeEnterAction, getEnterAction } from '../utils/enter-action';\nimport { executeBackspaceAction, getBackspaceAction } from '../utils/execute-backspace-action';\nimport { findSlateBySelectionPath } from '../utils/findSlateBySelectionPath';\nimport { getNextHierarchicalSelection } from '../utils/get-next-hierarchical-selection';\nimport { getFirstNodePoint, getLastNodePoint } from '../utils/get-node-points';\nimport { HOTKEYS } from '../utils/hotkeys';\n\nexport function onKeyDown(editor: YooEditor) {\n return (event: React.KeyboardEvent) => {\n const slate = findSlateBySelectionPath(editor, { at: editor.path.current });\n\n if (HOTKEYS.isShiftEnter(event)) {\n if (event.isDefaultPrevented()) return;\n\n if (!slate || !slate.selection) return;\n\n event.preventDefault();\n slate.insertText('\\n');\n\n return;\n }\n\n if (HOTKEYS.isUndo(event)) {\n event.preventDefault();\n return;\n }\n\n if (HOTKEYS.isRedo(event)) {\n event.preventDefault();\n return;\n }\n\n if (HOTKEYS.isEnter(event)) {\n if (event.isDefaultPrevented()) return;\n if (!slate || !slate.selection) return;\n\n const result = getEnterAction(editor, slate);\n\n switch (result.action) {\n case 'delegate-to-plugin':\n return;\n\n case 'default':\n return;\n\n case 'prevent':\n event.preventDefault();\n return;\n\n default:\n event.preventDefault();\n executeEnterAction(editor, slate, result);\n return;\n }\n }\n\n if (HOTKEYS.isBackspace(event)) {\n if (event.isDefaultPrevented()) return;\n if (!slate || !slate.selection) return;\n\n const result = getBackspaceAction(editor, slate);\n\n switch (result.action) {\n case 'default':\n // Allow Slate to handle it normally\n return;\n\n case 'prevent':\n // Block the action\n event.preventDefault();\n return;\n\n default:\n // Execute custom action\n event.preventDefault();\n executeBackspaceAction(editor, slate, result);\n return;\n }\n }\n\n if (HOTKEYS.isSelect(event)) {\n if (event.isDefaultPrevented()) return;\n if (!slate || !slate.selection) return;\n\n const result = getNextHierarchicalSelection(editor, slate);\n\n switch (result.action) {\n case 'select-path':\n event.preventDefault();\n Transforms.select(slate, result.path);\n break;\n\n case 'select-range':\n event.preventDefault();\n Transforms.select(slate, result.range);\n break;\n\n case 'select-block':\n event.preventDefault();\n ReactEditor.blur(slate);\n ReactEditor.deselect(slate);\n Transforms.deselect(slate);\n editor.setPath({\n current: null,\n selected: [result.blockOrder],\n source: 'keyboard',\n });\n break;\n\n case 'select-all-blocks':\n event.preventDefault();\n editor.setPath({\n current: null,\n selected: result.blockOrders,\n source: 'keyboard',\n });\n break;\n\n default:\n break;\n }\n }\n\n if (HOTKEYS.isShiftTab(event)) {\n if (event.isDefaultPrevented()) return;\n event.preventDefault();\n\n const selectedPaths = editor.path.selected;\n if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n editor.batchOperations(() => {\n selectedPaths.forEach((index) => {\n const block = Blocks.getBlock(editor, { at: index });\n if (block && block.meta.depth > 0) {\n editor.decreaseBlockDepth({ at: index });\n }\n });\n });\n\n return;\n }\n\n editor.decreaseBlockDepth();\n return;\n }\n\n // if (HOTKEYS.isTab(event)) {\n // if (event.isDefaultPrevented()) return;\n // event.preventDefault();\n\n // const selectedPaths = editor.path.selected;\n // if (Array.isArray(selectedPaths) && selectedPaths.length > 0) {\n // editor.batchOperations(() => {\n // selectedPaths.forEach((index) => {\n // editor.increaseBlockDepth({ at: index });\n // });\n // });\n\n // return;\n // }\n\n // editor.increaseBlockDepth();\n // return;\n // }\n\n if (HOTKEYS.isArrowUp(event)) {\n if (event.isDefaultPrevented()) return;\n if (!slate || !slate.selection) return;\n\n const prevPath = Paths.getPreviousBlockOrder(editor);\n if (typeof prevPath !== 'number') return;\n\n const prevBlock = Blocks.getBlock(editor, { at: prevPath });\n if (!prevBlock) return;\n\n const firstLeafPoint = getFirstNodePoint(slate);\n const isAtFirstLeafStart =\n Path.equals(slate.selection.anchor.path, firstLeafPoint.path) &&\n slate.selection.anchor.offset === 0;\n\n if (isAtFirstLeafStart) {\n const prevSlate = findSlateBySelectionPath(editor, { at: prevPath });\n if (!prevSlate) return;\n\n const prevLastLeafPoint = getLastNodePoint(prevSlate);\n\n event.preventDefault();\n editor.focusBlock(prevBlock.id, {\n focusAt: prevLastLeafPoint,\n waitExecution: false,\n shouldUpdateBlockPath: true,\n });\n return;\n }\n }\n\n if (HOTKEYS.isArrowDown(event)) {\n if (event.isDefaultPrevented()) return;\n if (!slate || !slate.selection) return;\n\n const nextPath = Paths.getNextBlockOrder(editor);\n if (typeof nextPath !== 'number') return;\n\n const nextBlock = Blocks.getBlock(editor, { at: nextPath });\n if (!nextBlock) return;\n\n const lastLeafPoint = getLastNodePoint(slate);\n const isAtLastLeafEnd =\n Path.equals(slate.selection.anchor.path, lastLeafPoint.path) &&\n slate.selection.anchor.offset === lastLeafPoint.offset;\n\n if (isAtLastLeafEnd) {\n const nextSlate = findSlateBySelectionPath(editor, { at: nextPath });\n if (!nextSlate) return;\n\n const nextFirstLeafPoint = getFirstNodePoint(nextSlate);\n\n event.preventDefault();\n editor.focusBlock(nextBlock.id, {\n focusAt: nextFirstLeafPoint,\n waitExecution: false,\n shouldUpdateBlockPath: true,\n });\n return;\n }\n }\n\n if (slate && slate.selection) {\n if (Range.isExpanded(slate.selection)) {\n const marks = Object.values(editor.formats);\n if (marks.length > 0) {\n for (const mark of Object.values(editor.formats)) {\n if (mark.hotkey && isKeyHotkey(mark.hotkey)(event)) {\n event.preventDefault();\n editor.formats[mark.type].toggle();\n break;\n }\n }\n }\n }\n }\n };\n}\n","import { onKeyDown } from './onKeyDown';\n\nexport const EDITOR_EVENT_HANDLERS = {\n onKeyDown,\n};\n","import { Element } from 'slate';\n\nimport { Blocks } from '../editor/blocks';\nimport type {\n SlateElement,\n YooEditor,\n YooptaBlockBaseMeta,\n YooptaBlockData,\n} from '../editor/types';\nimport type { PluginDeserializeParser } from '../plugins/types';\nimport { getRootBlockElementType } from '../utils/block-elements';\nimport { generateId } from '../utils/generateId';\nimport { isYooptaBlock } from '../utils/validations';\n\ntype MarkMatcher = {\n type: string;\n parse?: (el: HTMLElement) => Record<string, unknown>;\n};\n\nconst MARKS_NODE_NAME_MATCHERS_MAP: Record<string, MarkMatcher> = {\n B: { type: 'bold' },\n STRONG: { type: 'bold' },\n I: { type: 'italic' },\n U: { type: 'underline' },\n S: { type: 'strike' },\n CODE: { type: 'code' },\n EM: { type: 'italic' },\n MARK: {\n type: 'highlight',\n parse: (el) => {\n const color = el.style?.color;\n return color ? { color } : {};\n },\n },\n};\n\nconst VALID_TEXT_ALIGNS: (YooptaBlockBaseMeta['align'] | undefined)[] = [\n 'left',\n 'center',\n 'right',\n undefined,\n];\n\ntype PluginsMapByNode = {\n type: string;\n parse: PluginDeserializeParser['parse'];\n};\n\ntype PluginsMapByNodeNames = Record<string, PluginsMapByNode | PluginsMapByNode[]>;\n\n// Cache for plugins map to avoid rebuilding on every paste\nconst pluginsMapCache = new WeakMap<YooEditor, PluginsMapByNodeNames>();\n\ntype DeserializedChild =\n | { text: string;[mark: string]: unknown }\n | SlateElement\n | YooptaBlockData\n | null;\n\nfunction mapNodeChildren(child: unknown): DeserializedChild | DeserializedChild[] {\n if (typeof child === 'string') {\n return { text: child };\n }\n\n if (Element.isElement(child)) {\n return child as SlateElement;\n }\n\n if (Array.isArray(child)) {\n return child.map(mapNodeChildren).flat();\n }\n\n if (child && typeof child === 'object' && 'text' in child) {\n return child as { text: string };\n }\n\n if (isYooptaBlock(child)) {\n const block = child as YooptaBlockData;\n const firstElement = block.value[0] as SlateElement | undefined;\n if (firstElement?.children) {\n return firstElement.children.map(mapNodeChildren).flat();\n }\n return { text: '' };\n }\n\n return { text: '' };\n}\n\nfunction getMappedPluginByNodeNames(editor: YooEditor): PluginsMapByNodeNames {\n // Return cached map if available\n const cached = pluginsMapCache.get(editor);\n if (cached) return cached;\n\n const PLUGINS_NODE_NAME_MATCHERS_MAP: PluginsMapByNodeNames = {};\n\n Object.keys(editor.plugins).forEach((pluginType) => {\n const plugin = editor.plugins[pluginType];\n const { parsers } = plugin;\n const htmlParser = parsers?.html;\n const deserializeConfig = htmlParser?.deserialize;\n\n if (deserializeConfig?.nodeNames) {\n const { nodeNames } = deserializeConfig;\n\n nodeNames.forEach((nodeName) => {\n const nodeNameMap = PLUGINS_NODE_NAME_MATCHERS_MAP[nodeName];\n\n if (nodeNameMap) {\n const nodeNameItem = Array.isArray(nodeNameMap) ? nodeNameMap : [nodeNameMap];\n PLUGINS_NODE_NAME_MATCHERS_MAP[nodeName] = [\n ...nodeNameItem,\n { type: pluginType, parse: deserializeConfig.parse },\n ];\n } else {\n PLUGINS_NODE_NAME_MATCHERS_MAP[nodeName] = {\n type: pluginType,\n parse: deserializeConfig.parse,\n };\n }\n });\n }\n });\n\n // Cache the result\n pluginsMapCache.set(editor, PLUGINS_NODE_NAME_MATCHERS_MAP);\n\n return PLUGINS_NODE_NAME_MATCHERS_MAP;\n}\n\nfunction buildBlock(\n editor: YooEditor,\n plugin: PluginsMapByNode,\n el: HTMLElement,\n children: unknown[],\n): SlateElement | YooptaBlockData | YooptaBlockData[] | undefined {\n let nodeElementOrBlocks: SlateElement | YooptaBlockData[] | undefined;\n\n if (plugin.parse) {\n const parseResult = plugin.parse(el, editor);\n if (parseResult !== undefined) {\n nodeElementOrBlocks = parseResult;\n }\n\n const isInline =\n Element.isElement(nodeElementOrBlocks) && nodeElementOrBlocks.props?.nodeType === 'inline';\n if (isInline) return nodeElementOrBlocks;\n }\n\n const block = editor.plugins[plugin.type];\n if (!block) return undefined;\n\n const rootElementType = getRootBlockElementType(block.elements) ?? '';\n const rootElement = block.elements?.[rootElementType];\n if (!rootElement) return undefined;\n\n const isVoid = rootElement.props?.nodeType === 'void';\n\n const mappedChildren = isVoid\n ? [{ text: '' }]\n : (children.map(mapNodeChildren).flat().filter(Boolean) as SlateElement['children']);\n\n let rootNode: SlateElement = {\n id: generateId(),\n type: rootElementType,\n children: mappedChildren.length > 0 ? mappedChildren : [{ text: '' }],\n props: { nodeType: 'block', ...rootElement.props },\n };\n\n if (nodeElementOrBlocks) {\n if (Element.isElement(nodeElementOrBlocks)) {\n rootNode = nodeElementOrBlocks as SlateElement;\n } else if (Array.isArray(nodeElementOrBlocks)) {\n return nodeElementOrBlocks;\n }\n }\n\n // Ensure children is never empty\n if (!rootNode.children || rootNode.children.length === 0) {\n rootNode.children = [{ text: '' }];\n }\n\n // If plugin has parse but returned nothing, skip this node\n if (!nodeElementOrBlocks && plugin.parse) {\n return undefined;\n }\n\n const align = el.getAttribute('data-meta-align') as YooptaBlockBaseMeta['align'];\n const depth = parseInt(el.getAttribute('data-meta-depth') ?? '0', 10);\n\n const blockData = Blocks.buildBlockData({\n id: generateId(),\n type: plugin.type,\n value: [rootNode],\n meta: {\n order: 0,\n depth: Number.isNaN(depth) ? 0 : depth,\n align: VALID_TEXT_ALIGNS.includes(align) ? align : undefined,\n },\n });\n\n return blockData;\n}\n\nfunction deserialize(\n editor: YooEditor,\n pluginsMap: PluginsMapByNodeNames,\n el: HTMLElement | ChildNode,\n): DeserializedChild | DeserializedChild[] {\n // Text node\n if (el.nodeType === Node.TEXT_NODE) {\n const text = el.textContent?.replace(/[\\t\\n\\r\\f\\v]+/g, ' ') ?? '';\n return { text } as DeserializedChild;\n }\n\n // Not an element node\n if (el.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n\n // Line break\n if (el.nodeName === 'BR') {\n return { text: '\\n' };\n }\n\n const parent = el as HTMLElement;\n const children = Array.from(parent.childNodes)\n .map((node) => deserialize(editor, pluginsMap, node))\n .flat()\n .filter((child): child is NonNullable<DeserializedChild> => child !== null);\n\n // Handle marks (bold, italic, etc.)\n const markMatcher = MARKS_NODE_NAME_MATCHERS_MAP[parent.nodeName];\n if (markMatcher) {\n const markType = markMatcher.type;\n const markValue = markMatcher.parse ? markMatcher.parse(parent) : true;\n\n return children.map((child) => {\n if (typeof child === 'string') {\n return { [markType]: markValue, text: child };\n }\n if (child && typeof child === 'object' && 'text' in child) {\n return { ...child, [markType]: markValue };\n }\n return child;\n });\n }\n\n // Handle plugin blocks\n const plugin = pluginsMap[parent.nodeName];\n\n if (plugin) {\n if (Array.isArray(plugin)) {\n const blocks = plugin\n .map((p) => buildBlock(editor, p, parent, children))\n .filter(Boolean) as (SlateElement | YooptaBlockData | YooptaBlockData[])[];\n return blocks.flat();\n }\n\n const result = buildBlock(editor, plugin, parent, children);\n if (result) return result;\n }\n\n return children;\n}\n\n/**\n * Clears the cached plugins map for the editor.\n * Call this when plugins are modified.\n */\nexport function clearDeserializeCache(editor: YooEditor): void {\n pluginsMapCache.delete(editor);\n}\n\n/**\n * Deserializes HTML into Yoopta blocks.\n */\nexport function deserializeHTML(editor: YooEditor, html: HTMLElement): YooptaBlockData[] {\n // eslint-disable-next-line no-console\n console.log('pasted html', html);\n const PLUGINS_NODE_NAME_MATCHERS_MAP = getMappedPluginByNodeNames(editor);\n\n const result = deserialize(editor, PLUGINS_NODE_NAME_MATCHERS_MAP, html);\n const flatResult = Array.isArray(result) ? result.flat() : [result];\n\n return flatResult.filter(isYooptaBlock) as YooptaBlockData[];\n}\n","import type { YooptaClipboardData } from './getYooptaJSON';\nimport type { SlateElement, YooEditor, YooptaBlockData } from '../editor/types';\nimport { generateId } from '../utils/generateId';\n\ntype TextNode = { text: string; [key: string]: unknown };\ntype ChildNode = SlateElement | TextNode;\ntype IdMap = Map<string, string>;\n\n/**\n * First pass: collect all element IDs and generate new ones.\n * Returns a map of old ID -> new ID.\n */\nfunction collectAndMapIds(value: YooptaBlockData['value']): IdMap {\n const idMap: IdMap = new Map();\n\n function collectFromElement(element: SlateElement) {\n if (element.id) {\n idMap.set(element.id, generateId());\n }\n\n if (element.children) {\n for (const child of element.children) {\n if (!('text' in child)) {\n collectFromElement(child as SlateElement);\n }\n }\n }\n }\n\n for (const element of value) {\n collectFromElement(element as SlateElement);\n }\n\n return idMap;\n}\n\n/**\n * Second pass: apply new IDs and update referenceId props.\n */\nfunction applyNewIds(value: YooptaBlockData['value'], idMap: IdMap): YooptaBlockData['value'] {\n function processElement(element: SlateElement): SlateElement {\n const newId = element.id ? idMap.get(element.id) ?? generateId() : generateId();\n\n // Update referenceId if it exists and points to a mapped ID\n let newProps = element.props;\n if (element.props?.referenceId && typeof element.props.referenceId === 'string') {\n const newReferenceId = idMap.get(element.props.referenceId);\n if (newReferenceId) {\n newProps = { ...element.props, referenceId: newReferenceId };\n }\n }\n\n return {\n ...element,\n id: newId,\n props: newProps,\n children: element.children?.map((child: ChildNode) => {\n if ('text' in child) {\n return child;\n }\n return processElement(child as SlateElement);\n }),\n };\n }\n\n return value.map((element) => processElement(element as SlateElement));\n}\n\n/**\n * Recursively generates new IDs for all elements in a block's value.\n * Also updates referenceId props to maintain relationships (e.g., tabs, code-groups).\n * This prevents ID conflicts when pasting content.\n */\nfunction regenerateElementIds(value: YooptaBlockData['value']): YooptaBlockData['value'] {\n // First pass: collect all IDs and create mapping\n const idMap = collectAndMapIds(value);\n\n // Second pass: apply new IDs and update references\n return applyNewIds(value, idMap);\n}\n\n/**\n * Validates that a block has all required properties and matches a known plugin type.\n */\nfunction isValidBlock(editor: YooEditor, block: unknown): block is YooptaBlockData {\n if (!block || typeof block !== 'object') return false;\n\n const b = block as Record<string, unknown>;\n\n // Check required properties\n if (typeof b.id !== 'string') return false;\n if (typeof b.type !== 'string') return false;\n if (!Array.isArray(b.value)) return false;\n if (!b.meta || typeof b.meta !== 'object') return false;\n\n const meta = b.meta as Record<string, unknown>;\n if (typeof meta.order !== 'number') return false;\n if (typeof meta.depth !== 'number') return false;\n\n // Check if plugin exists for this block type\n if (!editor.plugins[b.type]) {\n // eslint-disable-next-line no-console\n console.warn(`[Yoopta] Unknown block type \"${b.type}\" in clipboard data. Block will be skipped.`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Deserializes Yoopta JSON clipboard data back to blocks.\n * This is the inverse of getYooptaJSON and preserves all block data exactly.\n *\n * @param editor - The Yoopta editor instance\n * @param jsonString - The JSON string from clipboard\n * @returns Array of YooptaBlockData ready to be inserted\n */\nexport function deserializeYooptaJSON(\n editor: YooEditor,\n jsonString: string,\n): YooptaBlockData[] | null {\n try {\n const data = JSON.parse(jsonString) as YooptaClipboardData;\n\n // Validate clipboard data structure\n if (!data || typeof data !== 'object') {\n return null;\n }\n\n if (typeof data.version !== 'number') {\n // eslint-disable-next-line no-console\n console.warn('[Yoopta] Invalid clipboard data: missing version');\n return null;\n }\n\n if (!Array.isArray(data.blocks)) {\n // eslint-disable-next-line no-console\n console.warn('[Yoopta] Invalid clipboard data: blocks is not an array');\n return null;\n }\n\n // Filter and regenerate IDs for valid blocks\n const blocks = data.blocks\n .filter((block) => isValidBlock(editor, block))\n .map((block, index) => ({\n ...block,\n // Generate completely new IDs to avoid conflicts\n id: generateId(),\n value: regenerateElementIds(block.value),\n meta: {\n ...block.meta,\n order: index,\n },\n }));\n\n return blocks.length > 0 ? blocks : null;\n } catch (error) {\n // Invalid JSON, not Yoopta format\n return null;\n }\n}\n\n/**\n * Check if a string looks like Yoopta clipboard data.\n * Quick validation before attempting full parse.\n */\nexport function isYooptaClipboardData(data: string): boolean {\n if (!data || typeof data !== 'string') return false;\n\n try {\n // Quick check for expected structure\n return data.includes('\"version\"') && data.includes('\"blocks\"');\n } catch {\n return false;\n }\n}\n","import type React from 'react';\nimport { memo, useCallback, useMemo, useRef } from 'react';\nimport type { NodeEntry, Selection } from 'slate';\nimport { Editor, Path, Range } from 'slate';\nimport { DefaultElement, Editable, ReactEditor, Slate } from 'slate-react';\n\nimport { useEventHandlers, useSlateEditor } from './hooks';\nimport type { ExtendedLeafProps, Plugin, PluginDOMEvents, RenderSlateElementProps } from './types';\nimport { TextLeaf } from '../components/text-leaf/text-leaf';\nimport { useBlockData, useYooptaEditor } from '../contexts/YooptaContext/YooptaContext';\nimport type { SlateElement } from '../editor/types';\nimport { EDITOR_EVENT_HANDLERS } from '../handlers';\nimport type { YooptaMark } from '../marks';\nimport { deserializeHTML } from '../parsers/deserializeHTML';\nimport {\n deserializeYooptaJSON,\n isYooptaClipboardData,\n} from '../parsers/deserializeYooptaJSON';\nimport type { EditorEventHandlers } from '../types/eventHandlers';\nimport { IS_FOCUSED_EDITOR } from '../utils/weakMaps';\n\ntype Props<TElementMap extends Record<string, SlateElement>, TOptions> = Plugin<\n TElementMap,\n TOptions\n> & {\n id: string;\n marks?: YooptaMark<any>[];\n placeholder?: string;\n events?: PluginDOMEvents;\n};\n\nconst getPluginElementsRender = (elements) => {\n const mappedElements = {};\n Object.keys(elements).forEach((type) => {\n mappedElements[type] = elements[type].render;\n });\n return mappedElements;\n};\n\nconst getMappedMarks = (marks?: YooptaMark<any>[]) => {\n const mappedMarks = {};\n if (!marks) return mappedMarks;\n\n marks.forEach((mark) => {\n mappedMarks[mark.type] = mark;\n });\n return mappedMarks;\n};\n\nconst SlateEditorComponent = <TElementMap extends Record<string, SlateElement>, TOptions>({\n id,\n elements,\n marks,\n events,\n extensions: withExtensions,\n}: Props<TElementMap, TOptions>) => {\n const editor = useYooptaEditor();\n const block = useBlockData(id);\n const initialValue = useRef(block.value).current;\n const ELEMENTS_RENDER_MAP = useMemo(() => getPluginElementsRender(elements), [elements]);\n const MARKS_MAP = useMemo(() => getMappedMarks(marks), [marks]);\n\n const slate = useSlateEditor(id, editor, block, elements, withExtensions);\n const eventHandlers = useEventHandlers(events, editor, block, slate);\n\n const onChange = useCallback(\n (value) => {\n if (editor.readOnly) return;\n // @ts-expect-error - fixme\n if (window.scheduler) {\n // @ts-expect-error - fixme\n window.scheduler.postTask(() => editor.updateBlock(id, { value }), {\n priority: 'background',\n });\n } else {\n editor.updateBlock(id, { value });\n }\n },\n [id, editor.readOnly],\n );\n\n const onSelectionChange = useCallback(\n (selection: Selection) => {\n if (editor.readOnly) return;\n if (editor.path.source === 'mousemove' || editor.path.source === 'keyboard') return;\n\n editor.setPath({\n current: editor.path.current,\n selected: editor.path.selected,\n selection,\n source: 'native-selection',\n });\n },\n [editor.path, editor.readOnly],\n );\n\n const renderElement = useCallback(\n (elementProps: RenderSlateElementProps) => {\n const ElementComponent = ELEMENTS_RENDER_MAP[elementProps.element.type];\n const { attributes, ...props } = elementProps;\n attributes['data-element-type'] = props.element.type;\n\n const pluginElementProps = elements[elementProps.element.type]?.props;\n\n if (!ElementComponent) return <DefaultElement {...props} attributes={attributes} />;\n\n return (\n <ElementComponent {...props} {...pluginElementProps} attributes={attributes} blockId={id} />\n );\n },\n [id, elements],\n );\n\n const renderLeaf = useCallback(\n (props: ExtendedLeafProps<any, any>) => {\n let { children } = props;\n const { leaf, attributes } = props;\n const { text, ...formats } = leaf;\n\n if (formats) {\n Object.keys(formats).forEach((format) => {\n const mark = MARKS_MAP[format];\n if (mark) children = mark.render({ children, leaf });\n });\n }\n\n return <TextLeaf attributes={attributes}>{children}</TextLeaf>;\n },\n [marks],\n );\n\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (editor.readOnly) return;\n\n eventHandlers.onKeyDown?.(event);\n if (event.isDefaultPrevented()) return;\n EDITOR_EVENT_HANDLERS.onKeyDown(editor)(event);\n },\n [eventHandlers.onKeyDown, editor.readOnly, editor.path.current, block.meta.order],\n );\n\n const onKeyUp = useCallback(\n (event: React.KeyboardEvent) => {\n if (editor.readOnly) return;\n\n eventHandlers?.onKeyUp?.(event);\n },\n [eventHandlers.onKeyUp, editor.readOnly],\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent) => {\n if (editor.readOnly) return;\n\n event.preventDefault();\n eventHandlers?.onBlur?.(event);\n },\n [eventHandlers.onBlur, editor.readOnly],\n );\n\n const onFocus = useCallback(\n (event: React.FocusEvent) => {\n if (editor.readOnly) return;\n\n if (!editor.isFocused()) {\n IS_FOCUSED_EDITOR.set(editor, true);\n // [TODO] - as test\n editor.emit('focus', true);\n }\n eventHandlers?.onFocus?.(event);\n },\n [eventHandlers.onFocus, editor.readOnly],\n );\n\n const onPaste = useCallback(\n (event: React.ClipboardEvent) => {\n if (editor.readOnly) return;\n eventHandlers?.onPaste?.(event);\n\n const data = event.clipboardData;\n const html = data.getData('text/html');\n const parsedHTML = new DOMParser().parseFromString(html, 'text/html');\n\n // First, try to get Yoopta JSON format embedded in HTML (lossless copy/paste)\n let blocks: ReturnType<typeof deserializeYooptaJSON> = null;\n\n // Check for embedded JSON data in the yoopta-clipboard body element\n const yooptaBody = parsedHTML.getElementById('yoopta-clipboard');\n const yooptaJson = yooptaBody?.getAttribute('data-yoopta-json');\n\n if (yooptaJson && isYooptaClipboardData(yooptaJson)) {\n blocks = deserializeYooptaJSON(editor, yooptaJson);\n if (blocks) {\n // eslint-disable-next-line no-console\n console.log('[Yoopta] Pasting from Yoopta JSON format (lossless)');\n }\n }\n\n // Fall back to HTML deserialization if no Yoopta JSON\n if (!blocks && parsedHTML.body.childNodes.length > 0) {\n blocks = deserializeHTML(editor, parsedHTML.body);\n }\n\n // If no blocks from either format, let Slate handle plain text\n if (!blocks || blocks.length === 0 || editor.path.current === null) {\n return;\n }\n\n event.preventDefault();\n\n let shouldInsertAfterSelection = false;\n let shouldDeleteCurrentBlock = false;\n\n if (slate && slate.selection) {\n const parentPath = Path.parent(slate.selection.anchor.path);\n const text = Editor.string(slate, parentPath).trim();\n const isStart = Editor.isStart(slate, slate.selection.anchor, parentPath);\n shouldDeleteCurrentBlock = text === '' && isStart;\n shouldInsertAfterSelection = !isStart || text.length > 0;\n\n ReactEditor.blur(slate);\n }\n\n const insertPathIndex = editor.path.current;\n if (insertPathIndex === null) return;\n\n editor.batchOperations(() => {\n const newPaths: number[] = [];\n\n if (shouldDeleteCurrentBlock) {\n editor.deleteBlock({ at: insertPathIndex });\n }\n\n blocks!.forEach((pastedBlock, idx) => {\n const insertBlockPath = shouldInsertAfterSelection\n ? insertPathIndex + idx + 1\n : insertPathIndex + idx;\n newPaths.push(insertBlockPath);\n\n const { id, value, meta } = pastedBlock;\n editor.insertBlock(pastedBlock.type, {\n at: insertBlockPath,\n focus: false,\n blockData: { id, value, meta },\n });\n });\n\n editor.setPath({ current: null, selected: newPaths, source: 'copy-paste' });\n });\n },\n [eventHandlers.onPaste, editor.readOnly],\n );\n\n const decorate = useCallback(\n (nodeEntry: NodeEntry) => {\n const ranges = [] as NodeEntry[] & { withPlaceholder?: boolean }[];\n if (editor.readOnly) return ranges;\n\n const [node, path] = nodeEntry;\n const isCurrent = editor.path.current === block.meta.order;\n\n if (slate.selection && isCurrent) {\n if (\n !Editor.isEditor(node) &&\n Editor.string(slate, [path[0]]) === '' &&\n Range.includes(slate.selection, path) &&\n Range.isCollapsed(slate.selection)\n ) {\n ranges.push({\n ...slate.selection,\n withPlaceholder: true,\n });\n }\n }\n\n return ranges;\n },\n [editor.readOnly, editor.path.current, block.meta.order],\n );\n\n return (\n <SlateEditorInstance\n id={id}\n slate={slate}\n initialValue={initialValue}\n onChange={onChange}\n onSelectionChange={onSelectionChange}\n decorate={decorate}\n renderLeaf={renderLeaf}\n renderElement={renderElement}\n eventHandlers={eventHandlers}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n readOnly={editor.readOnly}\n onPaste={onPaste}\n />\n );\n};\n\ntype SlateEditorInstanceProps = {\n id: string;\n slate: any;\n readOnly: boolean;\n initialValue: any;\n onChange: (value: any) => void;\n onSelectionChange: (selection: Selection) => void;\n renderLeaf: (props: ExtendedLeafProps<any, any>) => JSX.Element;\n renderElement: (props: RenderSlateElementProps) => JSX.Element;\n eventHandlers: EditorEventHandlers;\n onKeyDown: (event: React.KeyboardEvent) => void;\n onKeyUp: (event: React.KeyboardEvent) => void;\n onFocus: (event: React.FocusEvent) => void;\n onBlur: (event: React.FocusEvent) => void;\n onPaste: (event: React.ClipboardEvent) => void;\n decorate: (nodeEntry: NodeEntry) => any[];\n};\n\n// [TODO] - no need memo\nconst SlateEditorInstance = memo<SlateEditorInstanceProps>(\n ({\n id,\n slate,\n initialValue,\n onChange,\n renderLeaf,\n renderElement,\n eventHandlers,\n onKeyDown,\n onKeyUp,\n onFocus,\n onSelectionChange,\n onPaste,\n decorate,\n readOnly,\n }) => (\n <Slate\n key={`slate-${id}`}\n editor={slate}\n initialValue={initialValue}\n onValueChange={onChange}\n onSelectionChange={onSelectionChange}>\n <Editable\n key={`editable-${id}`}\n renderElement={renderElement as any}\n renderLeaf={renderLeaf}\n className=\"yoopta-slate\"\n spellCheck\n {...eventHandlers}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onFocus={onFocus}\n decorate={decorate}\n // [TODO] - carefully check onBlur, e.x. transforms using functions, e.x. highlight update\n // onBlur={onBlur}\n readOnly={readOnly}\n onPaste={onPaste}\n />\n </Slate>\n ),\n);\n\nSlateEditorInstance.displayName = 'SlateEditorInstance';\n\nexport { SlateEditorComponent };\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\nimport { memo } from 'react';\n\nimport { useYooptaEditor } from '../../contexts/YooptaContext/YooptaContext';\nimport { Paths } from '../../editor/paths';\nimport type { YooptaBlockData } from '../../editor/types';\n\ntype BlockProps = {\n children: React.ReactNode;\n block: YooptaBlockData;\n blockId: string;\n};\n\nconst perfStyles: CSSProperties = {\n contentVisibility: 'auto',\n};\n\nconst Block = memo(({ children, block, blockId }: BlockProps) => {\n const editor = useYooptaEditor();\n\n const align = block.meta.align || 'left';\n const className = `yoopta-block ${align === 'left' ? '' : `yoopta-align-${align}`}`;\n\n const isSelected = Paths.isBlockSelected(editor, block);\n\n return (\n <div\n className={className}\n data-yoopta-block\n data-yoopta-block-id={blockId}\n data-block-selected={isSelected}\n style={perfStyles}>\n {children}\n </div>\n );\n});\n\nBlock.displayName = 'Block';\n\nexport { Block };\n","import type { ReactElement, ReactNode } from 'react';\nimport React, { useMemo } from 'react';\n\nimport type { YooEditor } from '../../editor/types';\nimport type { YooptaMark } from '../../marks';\nimport { SlateEditorComponent } from '../../plugins/slate-editor-component';\nimport type { RenderBlockProps } from '../../yoopta-editor';\nimport { Block } from '../Block/Block';\n\nconst DEFAULT_EDITOR_KEYS: string[] = [];\n\ntype Props = {\n editor: YooEditor;\n marks?: YooptaMark<any>[];\n placeholder?: string;\n renderBlock?: (props: RenderBlockProps) => ReactNode;\n};\n\nconst RenderBlocks = ({ editor, marks, placeholder, renderBlock }: Props): ReactElement<any, any> => {\n const childrenUnorderedKeys = Object.keys(editor.children);\n const childrenKeys = useMemo(() => {\n if (childrenUnorderedKeys.length === 0) return DEFAULT_EDITOR_KEYS;\n\n return childrenUnorderedKeys.sort((a, b) => {\n const aOrder = editor.children[a].meta.order;\n const bOrder = editor.children[b].meta.order;\n\n return aOrder - bOrder;\n });\n\n // [TODO] - unnecesary\n }, [childrenUnorderedKeys, editor.children]);\n\n const blocks: JSX.Element[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < childrenKeys.length; i += 1) {\n const blockId = childrenKeys[i];\n const block = editor.children[blockId];\n const plugin = editor.plugins[block.type];\n\n if (!block || !plugin) {\n console.error(`Plugin ${block.type} not found`);\n continue;\n }\n\n const blockContent = (\n <Block key={blockId} block={block} blockId={blockId}>\n <SlateEditorComponent\n key={blockId}\n type={block.type}\n id={blockId}\n marks={marks}\n events={plugin.events}\n elements={plugin.elements}\n extensions={plugin.extensions}\n placeholder={placeholder}\n />\n </Block>\n );\n\n // If renderBlock is provided, wrap the block content\n if (renderBlock) {\n blocks.push(\n <React.Fragment key={blockId}>\n {renderBlock({\n block,\n children: blockContent,\n blockId,\n index: i,\n })}\n </React.Fragment>,\n );\n } else {\n blocks.push(blockContent);\n }\n }\n\n return blocks as ReactElement<any, any>[];\n};\n\nexport { RenderBlocks };\n","import { useRef } from 'react';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\n\nimport { Blocks } from '../../editor/blocks';\nimport { Paths } from '../../editor/paths';\nimport { getPreviousBlockOrder } from '../../editor/paths/getPreviousBlockOrder';\nimport type { YooEditor } from '../../editor/types';\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\n\ntype MultiSelectionOptions = {\n editor: YooEditor;\n};\n\ntype SelectionState = {\n selectionStarted: boolean;\n indexToSelect: null | number;\n startedIndexToSelect: null | number;\n};\n\nconst DEFAULT_SELECTION_STATE: SelectionState = {\n selectionStarted: false,\n indexToSelect: null,\n startedIndexToSelect: null,\n};\n\nexport function useMultiSelection({ editor }: MultiSelectionOptions) {\n const isMultiSelectingStarted = useRef(false);\n const isMultiSelectingInProgress = useRef(false);\n const startBlockPathRef = useRef<number | null>(null);\n const currentBlockPathRef = useRef<number | null>(null);\n\n const selectionState = useRef<SelectionState>(DEFAULT_SELECTION_STATE).current;\n\n const blurSlateSelection = () => {\n const path = editor.path.current;\n\n if (typeof path === 'number') {\n const slate = Blocks.getBlockSlate(editor, { at: path });\n if (!slate) return;\n\n try {\n Editor.withoutNormalizing(slate, () => {\n Transforms.select(slate, [0]);\n\n if (slate.selection && Range.isExpanded(slate.selection)) {\n ReactEditor.blur(slate);\n ReactEditor.deselect(slate);\n }\n });\n } catch (error) { }\n }\n };\n\n const onShiftKeyDown = (blockOrder: number) => {\n blurSlateSelection();\n\n const currentSelectionIndex = Paths.getBlockOrder(editor);\n if (typeof currentSelectionIndex !== 'number') return;\n\n const indexesBetween = Array.from({ length: Math.abs(blockOrder - currentSelectionIndex) }).map(\n (_, index) =>\n blockOrder > currentSelectionIndex\n ? currentSelectionIndex + index + 1\n : currentSelectionIndex - index - 1,\n );\n\n editor.setPath({\n current: blockOrder,\n selected: [...indexesBetween, currentSelectionIndex],\n source: 'keyboard',\n });\n };\n\n const onMouseDown = (e: React.MouseEvent) => {\n if (editor.readOnly) return;\n\n if (!editor.isFocused()) editor.focus();\n\n editor.batchOperations(() => {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n // [TEST]\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0 && !e.shiftKey && !e.altKey) {\n editor.setPath({ current: null });\n }\n\n const target = e.target as HTMLElement;\n const blockElement = target.closest('[data-yoopta-block]');\n\n if (blockElement && e.button === 0) {\n const blockId = blockElement.getAttribute('data-yoopta-block-id') || '';\n const blockOrder = editor.children[blockId]?.meta.order;\n\n if (typeof blockOrder === 'number') {\n isMultiSelectingStarted.current = true;\n startBlockPathRef.current = blockOrder;\n currentBlockPathRef.current = blockOrder;\n\n if (e.shiftKey && !Paths.isPathEmpty(editor) && blockOrder !== editor.path.current) {\n onShiftKeyDown(blockOrder);\n return;\n }\n\n if (blockOrder !== editor.path.current) {\n editor.setPath({ current: blockOrder });\n }\n\n editor.refElement?.addEventListener('mousemove', onMouseMove);\n editor.refElement?.addEventListener('mouseup', onMouseUp);\n document?.addEventListener('mouseup', onMouseUp);\n }\n }\n });\n };\n\n const onMouseMove = (e: MouseEvent) => {\n if (!isMultiSelectingStarted.current || editor.readOnly) return;\n\n const target = document.elementFromPoint(e.clientX, e.clientY);\n const blockElement = target?.closest('[data-yoopta-block]');\n\n if (blockElement) {\n editor.batchOperations(() => {\n const blockId = blockElement.getAttribute('data-yoopta-block-id') || '';\n const blockOrder = editor.children[blockId]?.meta.order;\n\n // When multi-selecting is started and the mouse is moving over the start block\n if (\n isMultiSelectingInProgress.current &&\n typeof blockOrder === 'number' &&\n blockOrder === startBlockPathRef.current\n ) {\n currentBlockPathRef.current = blockOrder;\n editor.setPath({ current: blockOrder, selected: [blockOrder], source: 'mousemove' });\n return;\n }\n\n // Multi-selecting started between blocks\n if (typeof blockOrder === 'number' && blockOrder !== currentBlockPathRef.current) {\n currentBlockPathRef.current = blockOrder;\n isMultiSelectingInProgress.current = true;\n\n const start = Math.min(startBlockPathRef.current!, blockOrder);\n const end = Math.max(startBlockPathRef.current!, blockOrder);\n\n blurSlateSelection();\n\n const selectedBlocks = Array.from({ length: end - start + 1 }, (_, i) => start + i);\n editor.setPath({ current: blockOrder, selected: selectedBlocks, source: 'mousemove' });\n }\n });\n }\n };\n\n const onMouseUp = () => {\n isMultiSelectingStarted.current = false;\n isMultiSelectingInProgress.current = false;\n startBlockPathRef.current = null;\n currentBlockPathRef.current = null;\n editor.refElement?.removeEventListener('mousemove', onMouseMove);\n editor.refElement?.removeEventListener('mouseup', onMouseUp);\n document?.removeEventListener('mouseup', onMouseUp);\n };\n\n const onShiftArrowUp = (event) => {\n if (typeof event.isDefaultPrevented === 'function' && event.isDefaultPrevented()) return;\n\n if (\n selectionState.selectionStarted &&\n selectionState.startedIndexToSelect !== null &&\n selectionState.indexToSelect !== null\n ) {\n const currentIndex = selectionState.indexToSelect;\n const nextTopIndex = currentIndex - 1;\n\n if (currentIndex === 0) return;\n // jump to next index if started selection from this index\n if (currentIndex === selectionState.startedIndexToSelect) {\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, nextTopIndex]\n : [nextTopIndex];\n editor.setPath({ current: nextTopIndex, selected: selectedPaths, source: 'keyboard' });\n selectionState.indexToSelect = nextTopIndex;\n return;\n }\n\n if (nextTopIndex < selectionState.startedIndexToSelect) {\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, nextTopIndex]\n : [nextTopIndex];\n\n editor.setPath({ current: nextTopIndex, selected: selectedPaths, source: 'keyboard' });\n selectionState.indexToSelect = nextTopIndex;\n return;\n }\n\n const selectedBlocks = Paths.getSelectedPaths(editor);\n\n if (\n selectedBlocks?.includes(currentIndex) &&\n currentIndex !== selectionState.startedIndexToSelect\n ) {\n const filteredIndexes = selectedBlocks.filter((index) => index !== currentIndex);\n editor.setPath({ current: nextTopIndex, selected: filteredIndexes, source: 'keyboard' });\n selectionState.indexToSelect = nextTopIndex;\n return;\n }\n\n return;\n }\n\n const block = Blocks.getBlock(editor, { at: editor.path.current });\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate || !slate.selection || !block) return;\n\n const parentPath = Path.parent(slate.selection.anchor.path);\n // [TODO] - handle cases for inline node elements\n const isStart = Editor.isStart(slate, slate.selection.focus, parentPath);\n\n if (Range.isExpanded(slate.selection) && isStart) {\n const prevPath = getPreviousBlockOrder(editor);\n if (typeof prevPath !== 'number') return;\n\n const prevBlock = Blocks.getBlock(editor, { at: prevPath });\n\n if (block && prevBlock) {\n event.preventDefault();\n\n ReactEditor.blur(slate);\n ReactEditor.deselect(slate);\n Transforms.deselect(slate);\n\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, block?.meta.order, block.meta.order - 1]\n : [block?.meta.order, block.meta.order - 1];\n\n editor.setPath({ current: null, selected: selectedPaths, source: 'keyboard' });\n\n selectionState.startedIndexToSelect = block.meta.order;\n selectionState.indexToSelect = block.meta.order - 1;\n selectionState.selectionStarted = true;\n }\n }\n };\n\n const onShiftArrowDown = (event) => {\n if (\n selectionState.selectionStarted &&\n selectionState.indexToSelect !== null &&\n selectionState.startedIndexToSelect !== null\n ) {\n const currentIndex = selectionState.indexToSelect;\n const nextIndex = currentIndex + 1;\n\n if (nextIndex === Object.keys(editor.children).length) return;\n\n // jump to next index if started selection from this index\n if (currentIndex === selectionState.startedIndexToSelect) {\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, nextIndex]\n : [nextIndex];\n editor.setPath({ current: nextIndex, selected: selectedPaths, source: 'keyboard' });\n selectionState.indexToSelect = nextIndex;\n return;\n }\n\n if (nextIndex > selectionState.startedIndexToSelect) {\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, nextIndex]\n : [nextIndex];\n editor.setPath({ current: nextIndex, selected: selectedPaths, source: 'keyboard' });\n selectionState.indexToSelect = nextIndex;\n return;\n }\n\n const selectedBlocks = Paths.getSelectedPaths(editor);\n if (\n selectedBlocks?.includes(currentIndex) &&\n currentIndex !== selectionState.startedIndexToSelect\n ) {\n const filteredIndexes = selectedBlocks.filter((index) => index !== currentIndex);\n editor.setPath({ current: nextIndex, selected: filteredIndexes, source: 'keyboard' });\n selectionState.indexToSelect = nextIndex;\n return;\n }\n\n return;\n }\n\n const block = Blocks.getBlock(editor, { at: editor.path.current });\n const slate = findSlateBySelectionPath(editor);\n if (!slate || !slate.selection || !block) return;\n\n const parentPath = Path.parent(slate.selection.anchor.path);\n // [TODO] - handle cases for inline node elements\n const isEnd = Editor.isEnd(slate, slate.selection.focus, parentPath);\n\n if (Range.isExpanded(slate.selection) && isEnd) {\n const nextPath = Paths.getNextBlockOrder(editor);\n const nextBlock = Blocks.getBlock(editor, { at: nextPath });\n\n if (block && nextBlock) {\n event.preventDefault();\n\n ReactEditor.blur(slate);\n ReactEditor.deselect(slate);\n Transforms.deselect(slate);\n\n const selectedPaths = editor.path.selected\n ? [...editor.path.selected, block?.meta.order, block?.meta.order + 1]\n : [block?.meta.order, block.meta.order + 1];\n\n editor.setPath({ current: null, selected: selectedPaths, source: 'keyboard' });\n\n selectionState.startedIndexToSelect = block.meta.order;\n selectionState.indexToSelect = block.meta.order + 1;\n selectionState.selectionStarted = true;\n }\n }\n };\n\n return { onMouseDown, onShiftArrowUp, onShiftArrowDown, selectionState };\n}\n","import type { CSSProperties, ClipboardEvent, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { Element, Path, Editor as SlateEditor } from 'slate';\n\nimport { RenderBlocks } from './render-blocks';\nimport { useMultiSelection } from './selection';\nimport { buildBlockData } from './utils';\nimport { useYooptaEditor, useYooptaReadOnly } from '../../contexts/YooptaContext/YooptaContext';\nimport { Blocks } from '../../editor/blocks';\nimport { Paths } from '../../editor/paths';\nimport type { YooptaContentValue } from '../../editor/types';\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { generateId } from '../../utils/generateId';\nimport { HOTKEYS } from '../../utils/hotkeys';\nimport type { RenderBlockProps } from '../../yoopta-editor';\n\ntype Props = {\n autoFocus?: boolean;\n className?: string;\n placeholder?: string;\n children: ReactNode;\n style?: CSSProperties;\n renderBlock?: (props: RenderBlockProps) => ReactNode;\n};\n\nconst Editor = ({\n placeholder,\n className,\n style,\n children,\n autoFocus = true,\n renderBlock,\n}: Props) => {\n const editor = useYooptaEditor();\n const { marks } = editor;\n const isReadOnly = useYooptaReadOnly();\n const multiSelection = useMultiSelection({ editor });\n\n useEffect(() => {\n if (!autoFocus || isReadOnly) return;\n editor.focus();\n }, [autoFocus, isReadOnly, editor]);\n\n useEffect(() => {\n if (isReadOnly) return;\n\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor.path, isReadOnly]);\n\n const handleEmptyZoneClick = (e: React.MouseEvent) => {\n const editorEl = editor.refElement;\n if (!editorEl) return;\n\n const { bottom } = editorEl.getBoundingClientRect();\n const paddingBottom = parseInt(getComputedStyle(editorEl).paddingBottom, 10);\n const paddingBottomAreaTop = bottom - paddingBottom;\n const defaultBlock = buildBlockData({ id: generateId() });\n\n if (e.clientY >= paddingBottomAreaTop) {\n const lastPath = Object.keys(editor.children).length - 1;\n const lastBlock = Blocks.getBlock(editor, { at: lastPath });\n const lastSlate = findSlateBySelectionPath(editor, { at: lastPath });\n\n if (lastBlock && lastSlate && lastSlate.selection) {\n const string = SlateEditor.string(lastSlate, lastSlate.selection.anchor.path);\n const parentPath = Path.parent(lastSlate.selection.anchor.path);\n const [lastNode] = SlateEditor.node(lastSlate, parentPath);\n\n if (\n lastBlock.type === defaultBlock.type &&\n Element.isElement(lastNode) &&\n lastNode.props?.nodeType !== 'void' &&\n string.trim().length === 0\n ) {\n editor.focusBlock(lastBlock.id, { slate: lastSlate });\n return;\n }\n }\n\n const nextPath = lastPath + 1;\n editor.insertBlock(defaultBlock.type, { at: nextPath, focus: true });\n }\n };\n\n const resetSelectionState = () => {\n multiSelection.selectionState.indexToSelect = null;\n multiSelection.selectionState.startedIndexToSelect = null;\n multiSelection.selectionState.selectionStarted = false;\n };\n\n const onMouseDown = (event: React.MouseEvent) => {\n if (isReadOnly) return;\n\n multiSelection.onMouseDown(event);\n resetSelectionState();\n handleEmptyZoneClick(event);\n };\n\n const onBlur = (event: React.FocusEvent) => {\n const isInsideEditor =\n editor.refElement?.contains(event.relatedTarget as Node) ||\n editor.refElement?.contains(event.target as Node);\n\n if (isInsideEditor || isReadOnly) return;\n\n resetSelectionState();\n\n const selectedBlocks = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n editor.setPath({ current: null, selected: null });\n }\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (isReadOnly) return;\n\n if (HOTKEYS.isRedo(event)) {\n event.preventDefault();\n editor.redo();\n return;\n }\n\n if (HOTKEYS.isUndo(event)) {\n event.preventDefault();\n editor.undo();\n return;\n }\n\n if (HOTKEYS.isSelect(event)) {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n const isAllBlocksSelected = selectedBlocks?.length === Object.keys(editor.children).length;\n\n if (isAllBlocksSelected) {\n event.preventDefault();\n return;\n }\n\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n event.preventDefault();\n const allBlockIndexes = Object.keys(editor.children).map((k, i) => i);\n editor.setPath({ current: null, selected: allBlockIndexes, source: 'keyboard' });\n return;\n }\n }\n\n if (HOTKEYS.isCopy(event) || HOTKEYS.isCut(event)) {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n event.preventDefault();\n\n const editorValue = editor.getEditorValue();\n // HTML now includes embedded JSON data for lossless copy/paste\n const htmlString = editor.getHTML(editorValue);\n const textString = editor.getPlainText(editorValue);\n\n const htmlBlob = new Blob([htmlString], { type: 'text/html' });\n const textBlob = new Blob([textString], { type: 'text/plain' });\n\n const clipboardItem = new ClipboardItem({\n 'text/html': htmlBlob,\n 'text/plain': textBlob,\n });\n\n navigator.clipboard.write([clipboardItem]).then(() => {\n // eslint-disable-next-line no-console\n console.log('[Yoopta] Content copied with embedded JSON for lossless paste');\n });\n\n if (HOTKEYS.isCut(event)) {\n // [TEST]\n editor.batchOperations(() => {\n const selectedBlocksPaths = Paths.getSelectedPaths(editor);\n\n if (Array.isArray(selectedBlocksPaths) && selectedBlocksPaths.length > 0) {\n const isAllBlocksSelected =\n selectedBlocksPaths.length === Object.keys(editor.children).length;\n\n selectedBlocksPaths.forEach((index) => {\n const blockId = Blocks.getBlock(editor, { at: index })?.id;\n if (blockId) editor.deleteBlock({ blockId });\n });\n\n if (isAllBlocksSelected) {\n const defaultBlock = buildBlockData({ id: generateId() });\n editor.insertBlock(defaultBlock.type, { at: 0, focus: true });\n }\n }\n });\n\n editor.setPath({ current: null, selected: null, source: 'copy-paste' });\n resetSelectionState();\n }\n return;\n }\n }\n\n if (HOTKEYS.isBackspace(event)) {\n event.stopPropagation();\n const selectedBlocks = Paths.getSelectedPaths(editor);\n const isAllBlocksSelected = selectedBlocks?.length === Object.keys(editor.children).length;\n\n if (isAllBlocksSelected) {\n event.preventDefault();\n\n // [TEST]\n editor.batchOperations(() => {\n const allBlocks = Object.keys(editor.children);\n allBlocks.forEach((blockId) => editor.deleteBlock({ blockId }));\n\n editor.setPath({ current: null, selected: null });\n resetSelectionState();\n });\n\n return;\n }\n\n // [TEST]\n editor.batchOperations(() => {\n const selectedBlocksPaths = Paths.getSelectedPaths(editor);\n\n if (Array.isArray(selectedBlocksPaths) && selectedBlocksPaths?.length > 0) {\n event.preventDefault();\n selectedBlocksPaths.forEach((index) => editor.deleteBlock({ at: index }));\n\n editor.setPath({ current: null, selected: null });\n resetSelectionState();\n }\n });\n\n return;\n }\n\n // [TODO] - handle sharing cursor between blocks\n if (HOTKEYS.isShiftArrowUp(event)) {\n multiSelection.onShiftArrowUp(event);\n }\n\n if (HOTKEYS.isShiftArrowDown(event)) {\n multiSelection.onShiftArrowDown(event);\n }\n\n if (HOTKEYS.isTab(event)) {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n event.preventDefault();\n\n editor.batchOperations(() => {\n selectedBlocks.forEach((index) => {\n const block = Blocks.getBlock(editor, { at: index });\n editor.increaseBlockDepth({ blockId: block?.id });\n });\n });\n }\n return;\n }\n\n if (HOTKEYS.isShiftTab(event)) {\n const selectedBlocks = Paths.getSelectedPaths(editor);\n if (Array.isArray(selectedBlocks) && selectedBlocks.length > 0) {\n event.preventDefault();\n\n editor.batchOperations(() => {\n selectedBlocks.forEach((index) => {\n const block = Blocks.getBlock(editor, { at: index });\n editor.decreaseBlockDepth({ blockId: block?.id });\n });\n });\n }\n }\n };\n\n // This event handler will be fired only in read-only mode\n const onCopy = (e: ClipboardEvent) => {\n if (!isReadOnly) return;\n const clipboardData: Pick<DataTransfer, 'getData' | 'setData'> = e.clipboardData;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n if (range.collapsed) return;\n\n const clonedContent = range.cloneContents();\n const blocksEl = clonedContent.querySelectorAll('[data-yoopta-block-id]');\n\n if (!blocksEl.length) return;\n\n const content: YooptaContentValue = Array.from(blocksEl).reduce((acc, blockEl) => {\n const blockId = blockEl.getAttribute('data-yoopta-block-id') ?? '';\n const block = editor.children[blockId];\n if (block) acc[blockId] = block;\n return acc;\n }, {});\n\n // HTML now includes embedded JSON data for lossless copy/paste\n const htmlString = editor.getHTML(content);\n const textString = editor.getPlainText(content);\n\n clipboardData.setData('text/html', htmlString);\n clipboardData.setData('text/plain', textString);\n }\n };\n\n // const editorStyles: CSSProperties = getEditorStyles({\n // ...style,\n // // userSelect: selectionBox.selection ? 'none' : 'auto',\n // // pointerEvents: selectionBox.selection ? 'none' : 'auto',\n // // width: width || style?.width,\n // // paddingBottom: style?.paddingBottom,\n // // paddingLeft: '2.5rem',\n // // paddingRight: '2.5rem',\n // });\n\n return (\n <div\n // eslint-disable-next-line no-return-assign\n ref={(ref) => (editor.refElement = ref)}\n className={className ? `yoopta-editor ${className}` : 'yoopta-editor'}\n style={style}\n onMouseDown={onMouseDown}\n onBlur={onBlur}\n onCopy={onCopy}\n onCut={onCopy}>\n <RenderBlocks editor={editor} marks={marks} placeholder={placeholder} renderBlock={renderBlock} />\n {children}\n </div>\n );\n};\n\nexport { Editor };\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { Editor } from './components/Editor/render-editor';\nimport { YooptaContextProvider } from './contexts/YooptaContext/YooptaContext';\nimport type { YooptaOperation } from './editor/core/applyTransforms';\nimport type { YooEditor, YooptaBlockData, YooptaContentValue, YooptaPath } from './editor/types';\n\nexport type YooptaOnChangeOptions = {\n operations: YooptaOperation[];\n};\n\nexport type RenderBlockProps = {\n block: YooptaBlockData;\n children: ReactNode;\n blockId: string;\n index: number;\n};\n\nexport type YooptaEditorProps = {\n editor: YooEditor;\n onChange?: (value: YooptaContentValue, options: YooptaOnChangeOptions) => void;\n onPathChange?: (path: YooptaPath) => void;\n autoFocus?: boolean;\n className?: string;\n children?: React.ReactNode;\n placeholder?: string;\n style?: CSSProperties;\n /** Custom render wrapper for each block. Useful for drag-and-drop integration. */\n renderBlock?: (props: RenderBlockProps) => ReactNode;\n};\n\ntype EditorState = {\n editor: YooEditor;\n version: number;\n};\n\nconst YooptaEditor = ({\n editor,\n autoFocus,\n className,\n children,\n placeholder,\n style,\n onChange,\n onPathChange,\n renderBlock,\n}: YooptaEditorProps) => {\n const [editorState, setEditorState] = useState<EditorState>({ editor, version: 0 });\n const [, setStatePath] = useState<YooptaPath | null>(null);\n\n useEffect(() => {\n const changeHandler = (options: { value: YooptaContentValue; operations: YooptaOperation[] }) => {\n setEditorState((prevState) => ({\n editor: prevState.editor,\n version: prevState.version + 1,\n }));\n\n if (typeof onChange === 'function' && Array.isArray(options.operations)) {\n const operations = options.operations.filter(\n (operation) =>\n operation.type !== 'validate_block_paths' &&\n operation.type !== 'set_block_path' &&\n operation.type !== 'set_slate',\n );\n\n if (operations.length > 0) onChange(options.value, { operations });\n }\n };\n\n const pathChangeHandler = (path: YooptaPath) => {\n setStatePath(path);\n onPathChange?.(path);\n };\n\n editor.on('change', changeHandler);\n editor.on('path-change', pathChangeHandler);\n\n return () => {\n editor.off('change', changeHandler);\n editor.off('path-change', pathChangeHandler);\n };\n }, [editor, onChange, onPathChange]);\n\n return (\n <YooptaContextProvider editorState={editorState}>\n <Editor\n placeholder={placeholder}\n autoFocus={autoFocus}\n className={className}\n style={style}\n renderBlock={renderBlock}>\n {children}\n </Editor>\n </YooptaContextProvider>\n );\n};\n\nexport { YooptaEditor };\n","import type { ReactElement } from 'react';\nimport { isValidElement } from 'react';\n\nimport type {\n PluginElement,\n PluginElementNodeType,\n PluginElementProps,\n PluginElementRenderProps,\n PluginElementsMap,\n} from './types';\n\nexport type PluginJSXElementProps = {\n render: (props: PluginElementRenderProps) => JSX.Element;\n props?: Record<string, unknown>;\n children?: ReactElement<PluginJSXElementProps> | ReactElement<PluginJSXElementProps>[];\n nodeType?: PluginElementNodeType;\n placeholder?: string;\n};\n\nexport type PluginJSXElement = ReactElement<PluginJSXElementProps, string>;\n\nfunction buildElementsMap<TKeys extends string = string>(\n jsxElement: PluginJSXElement,\n pluginType: string,\n): PluginElementsMap<TKeys> {\n const elementsMap: PluginElementsMap<TKeys> = {} as PluginElementsMap<TKeys>;\n\n function traverse(element: PluginJSXElement, isRoot = false): TKeys {\n const { type, props: elementProps } = element;\n const { render, props: defaultProps } = elementProps;\n\n if (typeof type !== 'string') {\n throw new Error(\n `[Incorrect type of element in plugin ${pluginType}] Element type must be a string, got: ${typeof type}`,\n );\n }\n\n if (!render || typeof render !== 'function') {\n throw new Error(`Missing render of element ${type} in ${pluginType} plugin`);\n }\n\n const elementConfig: PluginElement<TKeys, PluginElementProps<Record<string, unknown>>> = {\n render,\n };\n\n const isInline = element.props.nodeType === 'inline' || element.props.nodeType === 'inlineVoid';\n if (isRoot && !isInline) {\n elementConfig.asRoot = true;\n }\n\n const mergedProps: Record<string, unknown> = { ...defaultProps };\n mergedProps.nodeType = elementProps.nodeType ?? 'block';\n\n if (Object.keys(mergedProps).length > 0) {\n elementConfig.props = mergedProps as PluginElementProps<Record<string, unknown>>;\n }\n\n // Handle placeholder\n if (elementProps.placeholder) {\n elementConfig.placeholder = elementProps.placeholder;\n }\n\n // Process children - they can be in props.children or as React children\n const children = elementProps.children;\n if (children) {\n const childrenArray: PluginJSXElement[] = Array.isArray(children)\n ? children.filter(\n (child): child is PluginJSXElement =>\n typeof child === 'object' && child !== null && 'type' in child && 'props' in child,\n )\n : typeof children === 'object' &&\n children !== null &&\n 'type' in children &&\n 'props' in children\n ? [children as PluginJSXElement]\n : [];\n\n if (childrenArray.length > 0) {\n const childTypes = childrenArray.map((child) => traverse(child, false));\n elementConfig.children = childTypes as TKeys[];\n }\n }\n\n elementsMap[type as TKeys] = elementConfig;\n\n return type as TKeys;\n }\n\n traverse(jsxElement, true);\n return elementsMap;\n}\n\nexport function buildPluginElements<TKeys extends string = string>(\n jsxElement: PluginJSXElement,\n pluginType: string,\n): PluginElementsMap<TKeys> {\n const elementsMap = buildElementsMap<TKeys>(jsxElement, pluginType);\n return elementsMap;\n}\n\nexport function isReactElement(value: unknown): value is PluginJSXElement {\n return isValidElement(value);\n}\n","import { buildPluginElements, isReactElement } from './build-plugin-elements';\nimport type {\n Plugin,\n PluginDOMEvents,\n PluginElementRenderProps,\n PluginInputElements,\n PluginLifeCycleEvents,\n PluginOptions,\n} from './types';\nimport type { SlateElement } from '../editor/types';\n\nexport type ExtendPluginRender<TKeys extends string> = {\n [x in TKeys]: (props: PluginElementRenderProps) => JSX.Element;\n};\n\nexport type ExtendPluginElementConfig = {\n render?: (props: PluginElementRenderProps) => JSX.Element;\n props?: Record<string, unknown>;\n injectElementsFromPlugins?: YooptaPlugin<any, any>[];\n placeholder?: string;\n};\n\nexport type ExtendPlugin<TElementMap extends Record<string, SlateElement>, TOptions> = {\n options?: Partial<PluginOptions<TOptions>>;\n events?: Partial<PluginDOMEvents>;\n lifecycle?: Partial<PluginLifeCycleEvents>;\n injectElementsFromPlugins?: YooptaPlugin<any, any>[];\n elements?: {\n [K in keyof TElementMap]?: ExtendPluginElementConfig;\n };\n};\n\ntype PluginInput<TElementMap extends Record<string, SlateElement>, TOptions> = Omit<\n Plugin<TElementMap, TOptions>,\n 'elements'\n> & {\n elements: PluginInputElements<TElementMap> | Plugin<TElementMap, TOptions>['elements'];\n};\n\nexport class YooptaPlugin<\n TElementMap extends Record<string, SlateElement>,\n TOptions = Record<string, unknown>,\n> {\n private readonly plugin: Plugin<TElementMap, TOptions>;\n constructor(pluginInput: PluginInput<TElementMap, TOptions>) {\n let elements: Plugin<TElementMap, TOptions>['elements'];\n\n // Check if elements is a React element (JSX)\n if (isReactElement(pluginInput.elements)) {\n // Convert JSX to PluginElementsMap\n elements = buildPluginElements<keyof TElementMap & string>(\n pluginInput.elements,\n pluginInput.type,\n ) as Plugin<TElementMap, TOptions>['elements'];\n } else {\n // Use elements as is\n elements = pluginInput.elements as Plugin<TElementMap, TOptions>['elements'];\n }\n\n this.plugin = {\n ...pluginInput,\n elements,\n } as Plugin<TElementMap, TOptions>;\n }\n\n get getPlugin(): Plugin<TElementMap, TOptions> {\n return this.plugin;\n }\n\n // [TODO] - add validation\n // validatePlugin(): boolean {\n // return true\n // }\n\n extend(extendPlugin: ExtendPlugin<TElementMap, TOptions>): YooptaPlugin<TElementMap, TOptions> {\n const {\n options,\n events,\n lifecycle,\n injectElementsFromPlugins,\n elements: extendElements,\n } = extendPlugin;\n\n const extendedOptions = { ...this.plugin.options, ...options };\n const elements = { ...this.plugin.elements };\n\n if (lifecycle) {\n Object.keys(lifecycle).forEach((event) => {\n const eventHandler = lifecycle[event];\n\n if (eventHandler) {\n if (!this.plugin.lifecycle) this.plugin.lifecycle = {};\n this.plugin.lifecycle[event] = eventHandler;\n }\n });\n }\n\n if (events) {\n Object.keys(events).forEach((event) => {\n const eventHandler = events[event];\n\n if (eventHandler) {\n if (!this.plugin.events) this.plugin.events = {};\n this.plugin.events[event] = eventHandler;\n }\n });\n }\n\n // Handle plugin-level injectElementsFromPlugins: apply to ALL leaf elements\n if (injectElementsFromPlugins) {\n const injectedPluginTypes = injectElementsFromPlugins.map((plugin) => plugin.getPlugin.type);\n\n Object.keys(elements).forEach((elementType) => {\n const element = elements[elementType];\n\n // Apply to leaf elements only (no children or empty children)\n const isLeaf = !element.children || element.children.length === 0;\n\n if (isLeaf) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element as any).injectElementsFromPlugins = injectedPluginTypes;\n }\n });\n }\n\n // Handle elements extension\n if (extendElements) {\n Object.keys(extendElements).forEach((elementType) => {\n const element = elements[elementType];\n const extendElementConfig = extendElements[elementType];\n\n if (!element) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[extend] Element \"${elementType}\" not found in plugin \"${this.plugin.type}\"`,\n );\n }\n return;\n }\n\n if (!extendElementConfig) return;\n\n // Handle injectElementsFromPlugins\n if (extendElementConfig.injectElementsFromPlugins) {\n // Validate: element must be a leaf (no children or only text nodes)\n if (element.children && element.children.length > 0) {\n throw new Error(\n `[extend] Cannot set injectElementsFromPlugins on element \"${elementType}\" ` +\n `in plugin \"${this.plugin.type}\": element has children. ` +\n `injectElementsFromPlugins can only be set on leaf elements.`,\n );\n }\n\n // Convert plugin instances to plugin types\n const injectedPluginTypes = extendElementConfig.injectElementsFromPlugins.map(\n (plugin) => plugin.getPlugin.type,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (element as any).injectElementsFromPlugins = injectedPluginTypes;\n }\n\n // Handle custom render\n if (extendElementConfig.render) {\n const elementRender = extendElementConfig.render;\n\n if (typeof elementRender === 'function') {\n element.render = (props) => elementRender(props);\n }\n }\n\n // Handle props override\n if (extendElementConfig.props) {\n element.props = {\n ...element.props,\n ...extendElementConfig.props,\n };\n }\n\n // Handle placeholder override\n if (extendElementConfig.placeholder !== undefined) {\n element.placeholder = extendElementConfig.placeholder;\n }\n });\n }\n\n return new YooptaPlugin<TElementMap, TOptions>({\n ...this.plugin,\n elements,\n options: extendedOptions as PluginOptions<TOptions>,\n });\n }\n}\n","import type { Descendant } from 'slate';\n\nimport type { YooEditor } from '../editor/types';\nimport { generateId } from '../utils/generateId';\n\n// [TODO] - Move to @yoopta/utils or @yoopta/editor/utils\n// helpers for deserializing text nodes when you use custom parsers in your plugins\nexport function deserializeTextNodes(\n editor: YooEditor,\n nodes: NodeListOf<ChildNode>,\n): Descendant[] {\n const deserializedNodes: Descendant[] = [];\n\n nodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n deserializedNodes.push({\n text: node.textContent || '',\n });\n }\n\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n\n // [TODO] - Hmmmm\n if (element.nodeName === 'P' || element.nodeName === 'SPAN' || element.nodeName === 'DIV') {\n deserializedNodes.push({\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'B' || element.nodeName === 'STRONG') {\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n bold: true,\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'I' || element.nodeName === 'EM') {\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n italic: true,\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'S' || element.nodeName === 'STRIKE') {\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n strike: true,\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'U' || element.nodeName === 'INS') {\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n underline: true,\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'CODE') {\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n code: true,\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'MARK') {\n const color = element.style.color;\n const backgroundColor = element.style.backgroundColor || 'transparent';\n\n deserializedNodes.push({\n // @ts-ignore [FIXME] - Fix types\n highlight: { color, backgroundColor },\n ...deserializeTextNodes(editor, element.childNodes)[0],\n });\n }\n\n if (element.nodeName === 'A') {\n deserializedNodes.push({\n id: generateId(),\n type: 'link',\n props: {\n url: element.getAttribute('href') || '',\n target: element.getAttribute('target') || '',\n rel: element.getAttribute('rel') || '',\n },\n children: deserializeTextNodes(editor, element.childNodes),\n });\n }\n }\n });\n\n // @ts-ignore [FIXME] - Fix types\n if (deserializedNodes.length === 0 && !deserializedNodes[0]?.text) {\n deserializedNodes.push({ text: '' });\n }\n\n return deserializedNodes;\n}\n","export type YooptaMark<TProps> = {\n type: string;\n hotkey?: string;\n render: (props: TProps) => JSX.Element;\n};\n\nexport type YooptaMarkParams<TProps> = {\n type: string;\n hotkey?: string;\n render: (props: TProps) => JSX.Element;\n};\n\nexport function createYooptaMark<TProps>({\n type,\n hotkey,\n render,\n}: YooptaMarkParams<TProps>): YooptaMark<TProps> {\n return {\n type,\n hotkey,\n render,\n };\n}\n","import { Editor, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { AddMarkOptions } from './types';\n\n/**\n * Get array of block indices from options\n */\nfunction getBlockIndices(editor: YooEditor, options: AddMarkOptions): number[] | null {\n const { at, blockId, selection } = options;\n\n // If selection is provided, don't use block indices\n if (selection) {\n return null;\n }\n\n // Use selected blocks if available\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n return editor.path.selected;\n }\n\n // Use provided at or blockId\n if (Array.isArray(at)) {\n return at.filter((index): index is number => typeof index === 'number');\n }\n\n if (typeof at === 'number') {\n return [at];\n }\n\n if (Array.isArray(blockId)) {\n return blockId\n .map((id) => {\n const block = Blocks.getBlock(editor, { id });\n return block?.meta.order;\n })\n .filter((order): order is number => typeof order === 'number');\n }\n\n if (blockId) {\n const block = Blocks.getBlock(editor, { id: blockId });\n return block?.meta.order !== undefined ? [block.meta.order] : [];\n }\n\n return null;\n}\n\n/**\n * Add mark to specified selection or blocks\n *\n * @param editor - YooEditor instance\n * @param options - Add mark options\n *\n * @example\n * ```typescript\n * // Add bold mark to current text selection (slate.selection) or whole block\n * Marks.add(editor, {\n * type: 'bold',\n * value: true\n * });\n *\n * // Add mark to specific selection\n * Marks.add(editor, {\n * type: 'bold',\n * value: true,\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Add color mark to specific block (ignores text selection)\n * Marks.add(editor, {\n * type: 'color',\n * value: '#ff0000',\n * at: 0\n * });\n * ```\n */\nexport function addMark(editor: YooEditor, options: AddMarkOptions): void {\n const { type, value, selection } = options;\n const blockIndices = getBlockIndices(editor, options);\n\n // Handle specific selection\n if (selection) {\n const slate = findSlateBySelectionPath(editor);\n if (!slate) return;\n\n Transforms.select(slate, selection);\n Editor.addMark(slate, type, value);\n return;\n }\n\n // Handle multiple selected blocks\n if (blockIndices && blockIndices.length > 0) {\n for (const path of blockIndices) {\n const blockSlate = Blocks.getBlockSlate(editor, { at: path });\n\n if (!blockSlate) continue;\n\n const [node] = Editor.node(blockSlate, []);\n if (!node) continue;\n\n const end = Editor.end(blockSlate, []);\n const start = Editor.start(blockSlate, []);\n\n Transforms.select(blockSlate, { anchor: start, focus: end });\n Editor.addMark(blockSlate, type, value);\n }\n\n return;\n }\n\n // Handle current text selection (slate.selection)\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate?.selection) return;\n\n // Add mark to selection\n // For expanded selection: applies to selected text\n // For collapsed selection: applies to future typing\n Editor.addMark(slate, type, value);\n}\n\n","import { Editor, Range, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { ClearMarksOptions } from './types';\n\n/**\n * Get array of block indices from options\n */\nfunction getBlockIndices(editor: YooEditor, options: ClearMarksOptions): number[] | null {\n const { at, blockId, selection } = options;\n\n // If selection is provided, don't use block indices\n if (selection) {\n return null;\n }\n\n // Use selected blocks if available\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n return editor.path.selected;\n }\n\n // Use provided at or blockId\n if (Array.isArray(at)) {\n return at.filter((index): index is number => typeof index === 'number');\n }\n\n if (typeof at === 'number') {\n return [at];\n }\n\n if (Array.isArray(blockId)) {\n return blockId\n .map((id) => {\n const block = Blocks.getBlock(editor, { id });\n return block?.meta.order;\n })\n .filter((order): order is number => typeof order === 'number');\n }\n\n if (blockId) {\n const block = Blocks.getBlock(editor, { id: blockId });\n return block?.meta.order !== undefined ? [block.meta.order] : [];\n }\n\n return null;\n}\n\n/**\n * Clear all marks from specified selection or blocks\n *\n * @param editor - YooEditor instance\n * @param options - Clear marks options\n *\n * @example\n * ```typescript\n * // Clear all marks from current text selection (slate.selection) or whole block\n * Marks.clear(editor);\n *\n * // Clear all marks from specific selection\n * Marks.clear(editor, {\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Clear all marks from specific block\n * Marks.clear(editor, { at: 0 });\n *\n * // Clear all marks from multiple blocks\n * Marks.clear(editor, { at: [0, 1, 2] });\n * ```\n */\nexport function clearMarks(editor: YooEditor, options?: ClearMarksOptions): void {\n if (!options) {\n // No options - use current selection\n const slate = findSlateBySelectionPath(editor);\n if (!slate?.selection) return;\n\n const marks = Editor.marks(slate);\n if (marks) {\n Object.keys(marks).forEach((type) => {\n Editor.removeMark(slate, type);\n });\n }\n return;\n }\n\n const { selection } = options;\n const blockIndices = getBlockIndices(editor, options);\n\n // Handle specific selection\n if (selection) {\n const slate = findSlateBySelectionPath(editor);\n if (!slate) return;\n\n Transforms.select(slate, selection);\n const marks = Editor.marks(slate);\n if (marks) {\n Object.keys(marks).forEach((type) => {\n Editor.removeMark(slate, type);\n });\n }\n return;\n }\n\n // Handle multiple selected blocks\n if (blockIndices && blockIndices.length > 0) {\n for (const path of blockIndices) {\n const blockSlate = Blocks.getBlockSlate(editor, { at: path });\n\n if (!blockSlate) continue;\n\n const [node] = Editor.node(blockSlate, []);\n if (!node) continue;\n\n const end = Editor.end(blockSlate, []);\n const start = Editor.start(blockSlate, []);\n\n Transforms.select(blockSlate, { anchor: start, focus: end });\n\n // Remove all marks\n const marks = Editor.marks(blockSlate);\n if (marks) {\n Object.keys(marks).forEach((type) => {\n Editor.removeMark(blockSlate, type);\n });\n }\n }\n\n return;\n }\n\n // Handle current text selection (slate.selection)\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate?.selection) return;\n\n // Remove all marks from selection\n const marks = Editor.marks(slate);\n if (marks) {\n Object.keys(marks).forEach((type) => {\n Editor.removeMark(slate, type);\n });\n }\n}\n\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetMarksOptions } from './types';\n\n/**\n * Get all marks from current selection or specified block\n *\n * @param editor - YooEditor instance\n * @param options - Get marks options\n * @returns Object with all marks or null if no slate found\n *\n * @example\n * ```typescript\n * // Get all marks from current selection\n * const marks = Marks.getAll(editor);\n *\n * // Get all marks from specific block\n * const marks = Marks.getAll(editor, { at: 0 });\n * ```\n */\nexport function getMarks(\n editor: YooEditor,\n options?: GetMarksOptions,\n): Record<string, unknown> | null {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) return null;\n\n const marks = Editor.marks(slate);\n return marks ?? null;\n}\n\n","import { Editor, Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { RemoveMarkOptions } from './types';\n\n/**\n * Get array of block indices from options\n */\nfunction getBlockIndices(editor: YooEditor, options: RemoveMarkOptions): number[] | null {\n const { at, blockId, selection } = options;\n\n // If selection is provided, don't use block indices\n if (selection) {\n return null;\n }\n\n // Use selected blocks if available\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n return editor.path.selected;\n }\n\n // Use provided at or blockId\n if (Array.isArray(at)) {\n return at.filter((index): index is number => typeof index === 'number');\n }\n\n if (typeof at === 'number') {\n return [at];\n }\n\n if (Array.isArray(blockId)) {\n return blockId\n .map((id) => {\n const block = Blocks.getBlock(editor, { id });\n return block?.meta.order;\n })\n .filter((order): order is number => typeof order === 'number');\n }\n\n if (blockId) {\n const block = Blocks.getBlock(editor, { id: blockId });\n return block?.meta.order !== undefined ? [block.meta.order] : [];\n }\n\n return null;\n}\n\n/**\n * Remove mark from specified selection or blocks\n *\n * @param editor - YooEditor instance\n * @param options - Remove mark options\n *\n * @example\n * ```typescript\n * // Remove bold mark from current text selection (slate.selection) or whole block\n * Marks.remove(editor, { type: 'bold' });\n *\n * // Remove mark from specific selection\n * Marks.remove(editor, {\n * type: 'bold',\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Remove color mark from specific block\n * Marks.remove(editor, {\n * type: 'color',\n * at: 0\n * });\n * ```\n */\nexport function removeMark(editor: YooEditor, options: RemoveMarkOptions): void {\n const { type, selection } = options;\n const blockIndices = getBlockIndices(editor, options);\n\n // Handle specific selection\n if (selection) {\n const slate = findSlateBySelectionPath(editor);\n if (!slate) return;\n\n Transforms.select(slate, selection);\n Editor.removeMark(slate, type);\n return;\n }\n\n // Handle multiple selected blocks\n if (blockIndices && blockIndices.length > 0) {\n for (const path of blockIndices) {\n const blockSlate = Blocks.getBlockSlate(editor, { at: path });\n\n if (!blockSlate) continue;\n\n const [node] = Editor.node(blockSlate, []);\n if (!node) continue;\n\n const end = Editor.end(blockSlate, []);\n const start = Editor.start(blockSlate, []);\n\n Transforms.select(blockSlate, { anchor: start, focus: end });\n Editor.removeMark(blockSlate, type);\n }\n\n return;\n }\n\n // Handle current text selection (slate.selection)\n const slate = findSlateBySelectionPath(editor);\n\n if (!slate?.selection) return;\n\n // Remove mark from selection\n Editor.removeMark(slate, type);\n}\n\n","import { addMark } from './addMark';\nimport { clearMarks } from './clearMarks';\nimport { getMarks } from './getMarks';\nimport { getValue } from './getValue';\nimport { isActive } from './isActive';\nimport { removeMark } from './removeMark';\nimport { toggle } from './toggle';\nimport { update } from './update';\n\n// Namespace export for backwards compatibility\nexport const Marks = {\n // Core methods\n getValue,\n isActive,\n toggle,\n update,\n // Additional methods\n add: addMark,\n remove: removeMark,\n getAll: getMarks,\n clear: clearMarks,\n};\n\n// Export methods individually\nexport {\n addMark,\n clearMarks,\n getMarks,\n getValue,\n isActive,\n removeMark,\n toggle,\n update,\n};\n\n// Export types\nexport type {\n AddMarkOptions,\n ClearMarksOptions,\n GetMarkValueOptions,\n GetMarksOptions,\n IsMarkActiveOptions,\n RemoveMarkOptions,\n ToggleMarkOptions,\n UpdateMarkOptions,\n} from './types';\n\n","import { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get anchor point from Slate selection\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns Anchor point or null\n *\n * @example\n * ```typescript\n * // Get anchor point from current selection\n * const anchor = Selection.getAnchor(editor);\n *\n * // Get anchor point from specific block\n * const anchor = Selection.getAnchor(editor, { at: 0 });\n * ```\n */\nexport function getAnchor(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n return slate?.selection?.anchor ?? null;\n}\n\n","import type { YooEditor, YooptaPathIndex } from '../types';\nimport type { GetCurrentOptions } from './types';\n\n/**\n * Get current block order\n *\n * @param editor - YooEditor instance\n * @param options - Get current options\n * @returns Current block order or null\n *\n * @example\n * ```typescript\n * // Get current block order\n * const current = Selection.getCurrent(editor);\n *\n * // Get specific block order (same as editor.path.current)\n * const current = Selection.getCurrent(editor, { at: 0 });\n * ```\n */\nexport function getCurrent(editor: YooEditor, options?: GetCurrentOptions): YooptaPathIndex {\n if (options?.at !== undefined) {\n return options.at;\n }\n\n return editor.path.current;\n}\n\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get end point from Slate selection (later point)\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns End point or null\n *\n * @example\n * ```typescript\n * // Get end point from current selection\n * const end = Selection.getEnd(editor);\n *\n * // Get end point from specific block\n * const end = Selection.getEnd(editor, { at: 0 });\n * ```\n */\nexport function getEnd(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate?.selection) return null;\n\n return Editor.end(slate, slate.selection);\n}\n\n","import { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get focus point from Slate selection\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns Focus point or null\n *\n * @example\n * ```typescript\n * // Get focus point from current selection\n * const focus = Selection.getFocus(editor);\n *\n * // Get focus point from specific block\n * const focus = Selection.getFocus(editor, { at: 0 });\n * ```\n */\nexport function getFocus(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n return slate?.selection?.focus ?? null;\n}\n\n","import { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { getLastNodePoint } from '../../utils/get-node-points';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get last point in block\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns Last point in block\n *\n * @example\n * ```typescript\n * // Get last point in current block\n * const lastPoint = Selection.getLastPoint(editor);\n *\n * // Get last point in specific block\n * const lastPoint = Selection.getLastPoint(editor, { at: 0 });\n * ```\n */\nexport function getLastPoint(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) {\n return { path: [0, 0], offset: 0 };\n }\n\n return getLastNodePoint(slate);\n}\n\n","import type { YooEditor, YooptaPathIndex } from '../types';\nimport type { GetNextBlockOptions } from './types';\n\n/**\n * Get next block order\n *\n * @param editor - YooEditor instance\n * @param options - Get next options\n * @returns Next block order or null\n *\n * @example\n * ```typescript\n * // Get next block from current\n * const next = Selection.getNext(editor);\n *\n * // Get next block from specific order\n * const next = Selection.getNext(editor, { at: 0 });\n * ```\n */\nexport function getNext(editor: YooEditor, options?: GetNextBlockOptions): YooptaPathIndex {\n const current = options?.at ?? editor.path.current;\n\n if (typeof current === 'number') {\n return current + 1;\n }\n\n return null;\n}\n\n","import type { YooEditor, YooptaPathIndex } from '../types';\nimport type { GetNextBlockOptions } from './types';\n\n/**\n * Get previous block order\n *\n * @param editor - YooEditor instance\n * @param options - Get previous options\n * @returns Previous block order or null\n *\n * @example\n * ```typescript\n * // Get previous block from current\n * const previous = Selection.getPrevious(editor);\n *\n * // Get previous block from specific order\n * const previous = Selection.getPrevious(editor, { at: 1 });\n * ```\n */\nexport function getPrevious(editor: YooEditor, options?: GetNextBlockOptions): YooptaPathIndex {\n const current = options?.at ?? editor.path.current;\n\n if (typeof current === 'number' && current > 0) {\n return current - 1;\n }\n\n return null;\n}\n\n","import { Editor, Range } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetRangeOptions } from './types';\n\n/**\n * Get range from Slate selection\n *\n * @param editor - YooEditor instance\n * @param options - Get range options\n * @returns Range or null if no selection\n *\n * @example\n * ```typescript\n * // Get range from current block selection\n * const range = Selection.getRange(editor);\n *\n * // Get range from specific block\n * const range = Selection.getRange(editor, { at: 0 });\n * ```\n */\nexport function getRange(editor: YooEditor, options?: GetRangeOptions): Range | null {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate?.selection) return null;\n\n return Editor.range(slate, slate.selection);\n}\n\n","import type { YooEditor, YooptaPathIndex } from '../types';\nimport type { GetSelectedOptions } from './types';\n\n/**\n * Get selected block orders or check if specific block is selected\n *\n * @param editor - YooEditor instance\n * @param options - Get selected options\n * @returns Selected block orders array, or boolean if `at` is provided\n *\n * @example\n * ```typescript\n * // Get all selected block orders\n * const selected = Selection.getSelected(editor);\n *\n * // Check if specific block is selected\n * const isSelected = Selection.getSelected(editor, { at: 0 });\n * ```\n */\nexport function getSelected(\n editor: YooEditor,\n options?: GetSelectedOptions,\n): number[] | null | boolean {\n const selected = editor.path.selected;\n\n if (options?.at !== undefined) {\n if (Array.isArray(selected)) {\n return selected.includes(options.at);\n }\n return false;\n }\n\n return selected;\n}\n\n","import { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetSlateSelectionOptions } from './types';\n\n/**\n * Get Slate selection from block\n *\n * @param editor - YooEditor instance\n * @param options - Get selection options\n * @returns Slate selection (Range) or null\n *\n * @example\n * ```typescript\n * // Get selection from current block\n * const selection = Selection.getSlateSelection(editor);\n *\n * // Get selection from specific block\n * const selection = Selection.getSlateSelection(editor, { at: 0 });\n *\n * // Get selection from block by ID\n * const selection = Selection.getSlateSelection(editor, { blockId: 'block-1' });\n * ```\n */\nexport function getSlateSelection(\n editor: YooEditor,\n options?: GetSlateSelectionOptions,\n): Range | null {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n return slate?.selection ?? null;\n}\n\n","import { Editor } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetPointOptions } from './types';\n\n/**\n * Get start point from Slate selection (earlier point)\n *\n * @param editor - YooEditor instance\n * @param options - Get point options\n * @returns Start point or null\n *\n * @example\n * ```typescript\n * // Get start point from current selection\n * const start = Selection.getStart(editor);\n *\n * // Get start point from specific block\n * const start = Selection.getStart(editor, { at: 0 });\n * ```\n */\nexport function getStart(editor: YooEditor, options?: GetPointOptions) {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate?.selection) return null;\n\n return Editor.start(slate, slate.selection);\n}\n\n","import type { YooEditor, YooptaBlockData } from '../types';\nimport type { IsBlockSelectedOptions } from './types';\n\n/**\n * Check if block is selected\n *\n * @param editor - YooEditor instance\n * @param options - Check options\n * @returns True if block is selected, false otherwise\n *\n * @example\n * ```typescript\n * // Check if block at order 0 is selected\n * const isSelected = Selection.isBlockSelected(editor, { at: 0 });\n *\n * // Check if block is selected (by block data)\n * const block = Blocks.getBlock(editor, { at: 0 });\n * if (block) {\n * const isSelected = Selection.isBlockSelected(editor, { at: block.meta.order });\n * }\n * ```\n */\nexport function isBlockSelected(editor: YooEditor, options: IsBlockSelectedOptions): boolean {\n const { at } = options;\n const selected = editor.path.selected;\n\n if (Array.isArray(selected)) {\n return selected.includes(at);\n }\n\n return false;\n}\n\n","import { Range } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetSlateSelectionOptions } from './types';\n\n/**\n * Check if Slate selection is collapsed (cursor position)\n *\n * @param editor - YooEditor instance\n * @param options - Check options\n * @returns True if selection is collapsed, false otherwise\n *\n * @example\n * ```typescript\n * // Check if current selection is collapsed\n * const isCollapsed = Selection.isCollapsed(editor);\n *\n * // Check if selection in specific block is collapsed\n * const isCollapsed = Selection.isCollapsed(editor, { at: 0 });\n * ```\n */\nexport function isCollapsed(editor: YooEditor, options?: GetSlateSelectionOptions): boolean {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate?.selection) return true;\n\n return Range.isCollapsed(slate.selection);\n}\n\n","import type { YooEditor } from '../types';\n\n/**\n * Check if path is empty (no current block)\n *\n * @param editor - YooEditor instance\n * @returns True if path is empty, false otherwise\n *\n * @example\n * ```typescript\n * const isEmpty = Selection.isEmpty(editor);\n * ```\n */\nexport function isEmpty(editor: YooEditor): boolean {\n return editor.path.current === null;\n}\n\n","import { Range } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor } from '../types';\nimport type { GetSlateSelectionOptions } from './types';\n\n/**\n * Check if Slate selection is expanded (has selected text)\n *\n * @param editor - YooEditor instance\n * @param options - Check options\n * @returns True if selection is expanded, false otherwise\n *\n * @example\n * ```typescript\n * // Check if current selection is expanded\n * const isExpanded = Selection.isExpanded(editor);\n *\n * // Check if selection in specific block is expanded\n * const isExpanded = Selection.isExpanded(editor, { at: 0 });\n * ```\n */\nexport function isExpanded(editor: YooEditor, options?: GetSlateSelectionOptions): boolean {\n const { at, blockId } = options ?? {};\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate?.selection) return false;\n\n return Range.isExpanded(slate.selection);\n}\n\n","import type { YooEditor, YooptaPath } from '../types';\nimport type { SetCurrentOptions } from './types';\n\n/**\n * Set current block order\n *\n * @param editor - YooEditor instance\n * @param options - Set current options\n *\n * @example\n * ```typescript\n * // Set current block to order 0\n * Selection.setCurrent(editor, { at: 0 });\n *\n * // Set current block with source\n * Selection.setCurrent(editor, {\n * at: 1,\n * source: 'keyboard'\n * });\n * ```\n */\nexport function setCurrent(editor: YooEditor, options: SetCurrentOptions): void {\n const { at, source } = options;\n\n const path: YooptaPath = {\n current: at,\n selected: editor.path.selected,\n selection: editor.path.selection,\n source: source ?? editor.path.source ?? null,\n };\n\n editor.setPath(path);\n}\n\n","import type { YooEditor, YooptaPath } from '../types';\nimport type { SetSelectedOptions } from './types';\n\n/**\n * Set selected block orders\n *\n * @param editor - YooEditor instance\n * @param options - Set selected options\n *\n * @example\n * ```typescript\n * // Select single block\n * Selection.setSelected(editor, { at: 0 });\n *\n * // Select multiple blocks\n * Selection.setSelected(editor, { at: [0, 1, 2] });\n *\n * // Select with source\n * Selection.setSelected(editor, {\n * at: [0, 1],\n * source: 'selection-box'\n * });\n * ```\n */\nexport function setSelected(editor: YooEditor, options: SetSelectedOptions): void {\n const { at, source } = options;\n\n const selected = Array.isArray(at) ? at : [at];\n const filteredSelected = selected.filter((order): order is number => typeof order === 'number');\n\n const path: YooptaPath = {\n current: editor.path.current,\n selected: filteredSelected.length > 0 ? filteredSelected : null,\n selection: editor.path.selection,\n source: source ?? editor.path.source ?? null,\n };\n\n editor.setPath(path);\n}\n\n","import { Transforms } from 'slate';\n\nimport { findSlateBySelectionPath } from '../../utils/findSlateBySelectionPath';\nimport { Blocks } from '../blocks';\nimport type { YooEditor, YooptaPath } from '../types';\nimport type { SetSlateSelectionOptions } from './types';\n\n/**\n * Set Slate selection in block\n *\n * @param editor - YooEditor instance\n * @param options - Set selection options\n *\n * @example\n * ```typescript\n * // Set selection in current block\n * Selection.setSlateSelection(editor, {\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } }\n * });\n *\n * // Set selection in specific block\n * Selection.setSlateSelection(editor, {\n * selection: { anchor: { path: [0, 0], offset: 0 }, focus: { path: [0, 0], offset: 5 } },\n * at: 0\n * });\n * ```\n */\nexport function setSlateSelection(editor: YooEditor, options: SetSlateSelectionOptions): void {\n const { selection, at, blockId } = options;\n\n let slate;\n\n if (blockId) {\n slate = Blocks.getBlockSlate(editor, { id: blockId });\n } else if (typeof at === 'number') {\n slate = Blocks.getBlockSlate(editor, { at });\n } else {\n slate = findSlateBySelectionPath(editor);\n }\n\n if (!slate) return;\n\n Transforms.select(slate, selection);\n\n // Update editor.path.selection\n const path: YooptaPath = {\n current: editor.path.current,\n selected: editor.path.selected,\n selection,\n source: editor.path.source ?? null,\n };\n\n editor.setPath(path);\n}\n\n","import { getAnchor } from './getAnchor';\nimport { getCurrent } from './getCurrent';\nimport { getEnd } from './getEnd';\nimport { getFirstPoint } from './getFirstPoint';\nimport { getFocus } from './getFocus';\nimport { getLastPoint } from './getLastPoint';\nimport { getNext } from './getNext';\nimport { getPrevious } from './getPrevious';\nimport { getRange } from './getRange';\nimport { getSelected } from './getSelected';\nimport { getSlateSelection } from './getSlateSelection';\nimport { getStart } from './getStart';\nimport { isBlockSelected } from './isBlockSelected';\nimport { isCollapsed } from './isCollapsed';\nimport { isEmpty } from './isEmpty';\nimport { isExpanded } from './isExpanded';\nimport { setCurrent } from './setCurrent';\nimport { setSelected } from './setSelected';\nimport { setSlateSelection } from './setSlateSelection';\n\n// Namespace export\nexport const Selection = {\n // Block-level operations\n getCurrent,\n setCurrent,\n getSelected,\n setSelected,\n isBlockSelected,\n isEmpty,\n getNext,\n getPrevious,\n\n // Slate selection operations\n getSlateSelection,\n setSlateSelection,\n getRange,\n isExpanded,\n isCollapsed,\n\n // Point operations\n getAnchor,\n getFocus,\n getStart,\n getEnd,\n getFirstPoint,\n getLastPoint,\n};\n\n// Export methods individually\nexport {\n getAnchor,\n getCurrent,\n getEnd,\n getFirstPoint,\n getFocus,\n getLastPoint,\n getNext,\n getPrevious,\n getRange,\n getSelected,\n getSlateSelection,\n isBlockSelected,\n isCollapsed,\n isEmpty,\n isExpanded,\n setCurrent,\n setSelected,\n setSlateSelection,\n};\n\n// Export types\nexport type {\n GetCurrentOptions,\n GetNextBlockOptions,\n GetPointOptions,\n GetRangeOptions,\n GetSelectedOptions,\n GetSlateSelectionOptions,\n IsBlockSelectedOptions,\n SetCurrentOptions,\n SetSelectedOptions,\n SetSlateSelectionOptions,\n} from './types';\n\n","import { useFocused, useSelected } from 'slate-react';\n\nimport {\n type RenderBlockProps,\n YooptaEditor,\n type YooptaEditorProps,\n type YooptaOnChangeOptions,\n} from './yoopta-editor';\n\nexport { YooptaPlugin } from './plugins';\nexport {\n useBlockData,\n useYooptaEditor,\n useYooptaFocused,\n useBlockSelected,\n useYooptaReadOnly,\n useYooptaPluginOptions,\n} from './contexts/YooptaContext/YooptaContext';\nexport { deserializeHTML } from './parsers/deserializeHTML';\nexport { type EmailTemplateOptions } from './parsers/getEmail';\n\nexport { generateId } from './utils/generateId';\nexport { HOTKEYS } from './utils/hotkeys';\nexport {\n getRootBlockElementType,\n getRootBlockElement,\n getAllowedPluginsFromElement,\n} from './utils/block-elements';\n\n// to remove\nexport { findSlateBySelectionPath } from './utils/findSlateBySelectionPath';\nexport { deserializeTextNodes } from './parsers/deserializeTextNodes';\nexport { serializeTextNodes, serializeTextNodesIntoMarkdown } from './parsers/serializeTextNodes';\n\nexport { createYooptaEditor, CreateYooptaEditorOptions } from './editor';\nexport { createYooptaMark, YooptaMarkParams, YooptaMark } from './marks';\nexport {\n YooEditor,\n BaseYooEditor,\n SlateElement,\n YooptaBlockData,\n YooptaBlock,\n YooptaContentValue,\n SlateEditor,\n YooptaPath,\n YooptaPathIndex,\n YooptaEventChangePayload,\n YooptaEventsMap,\n YooptaEditorEventKeys,\n} from './editor/types';\nexport { buildBlockData, buildBlockElement } from './components/Editor/utils';\nexport { buildBlockElementsStructure } from './utils/block-elements';\nexport { buildSlateEditor } from './utils/build-slate';\n\nexport {\n Plugin,\n PluginElementRenderProps,\n PluginEventHandlerOptions,\n PluginCustomEditorRenderProps,\n PluginDeserializeParser,\n PluginSerializeParser,\n YooptaMarkProps,\n PluginOptions,\n} from './plugins/types';\nexport type { ExtendPlugin, ExtendPluginElementConfig } from './plugins/create-yoopta-plugin';\nexport type { ElementStructureOptions } from './editor/elements/create-element-structure';\n\nexport { Elements } from './editor/elements';\nexport { Blocks } from './editor/blocks';\nexport { Marks } from './editor/textFormats';\nexport { Selection } from './editor/selection';\nexport { Paths } from './editor/paths';\nexport {\n InsertBlockOperation,\n DeleteBlockOperation,\n NormalizePathsBlockOperation,\n SetSelectionBlockOperation,\n SplitBlockOperation,\n SetBlockValueOperation,\n SetBlockMetaOperation,\n MergeBlockOperation,\n MoveBlockOperation,\n SetSlateOperation,\n SetEditorValueOperation,\n YooptaOperation,\n} from './editor/core/applyTransforms';\n\n// eslint-disable-next-line import/no-default-export\nexport default YooptaEditor;\nexport { RenderBlockProps, YooptaEditorProps, YooptaOnChangeOptions };\n\n// [TODO] - move to hooks\nexport function useElementSelected() {\n const selected = useSelected();\n const focused = useFocused();\n\n return {\n isElementSelected: selected,\n isElementFocused: focused,\n };\n}\n"],"names":["require$$0","require$$1","require$$2","require$$3","require$$4","require$$5","Editor","SlateElement","buildBlockElement","buildBlockData","isBlockSelected","global","isInlineElementType","findElement","resolveElementPath","SlatePath","isElementEmpty","Node","isKeyHotkey","_jsx","immer","isSet","current","Immer","base","MARKS_NODE_NAME_MATCHERS_MAP","isEmpty","getBlockIndices","isInjectedElement","isSimpleBlock","canContainInjectedElements","findInjectedAncestor","findParentLeafElement","SlateEditor","_jsxs"],"mappings":"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AACxB,GAAE,IAAI,IAAI,IAAI,IAAI,EAAE;AACpB,KAAI,IAAI;AACR,OAAM,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,MAAK,CAAC,OAAO,CAAC,EAAE,EAAE;AAClB,KAAI,IAAI;AACR,OAAM,QAAQ,IAAI,GAAG,EAAE,EAAE;AACzB,MAAK,CAAC,OAAO,CAAC,EAAE,EAAE;IACf;GACD,OAAO,EAAE,CAAC;EACX;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,SAAS,CAAC,KAAK,EAAE;GACxB,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACrC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;AAC1B,GAAE,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC;EAChE;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B;AACA,GAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;AACzE,MAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;EAC1F;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,GAAE,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;EACtE;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;GAChC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;EAClD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,IAAI,QAAQ,GAAG,cAAc,IAAI,SAAS,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B;AACA;AACA,GAAE,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;GAC5D,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM,CAAC;EACxC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,GAAE,OAAO,OAAO,KAAK,IAAI,QAAQ;AACjC,KAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB,CAAC;EAC7D;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,GAAE,IAAI,IAAI,GAAG,OAAO,KAAK,CAAC;AAC1B,GAAE,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC,CAAC;EAC5D;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,YAAY,CAAC,KAAK,EAAE;GAC3B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,CAAC;EAC5C;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,IAAI,CAAC,MAAM,EAAE;AACtB,GAAE,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;EACvE;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,GAAG;GACnB,OAAO,EAAE,CAAC;EACX;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,SAAS,SAAS,GAAG;GACnB,OAAO,KAAK,CAAC;EACd;AACD;AACA,CAAA,MAAA,CAAA,OAAA,GAAiB,SAAS,CAAA;;;;;AChrD1B;;;;;;;;;;;;;;;;;;;;;AAqBG;SACa,cAAc,CAC5B,MAAiB,EAC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","x_google_ignoreList":[0,1,2,3,4,5,6,25,53,57,58,59,60,61,62,63,64,65,66,67]}