UNPKG

@lobehub/editor

Version:

A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.

91 lines (89 loc) 4.88 kB
function _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); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable no-redeclare */ /* eslint-disable @typescript-eslint/no-redeclare */ import Fuse from 'fuse.js'; import { genServiceId } from "../../../editor-kernel"; import { createDebugLogger } from "../../../utils/debug"; import { getBasicTypeaheadTriggerMatch } from "../utils/utils"; export var ISlashService = genServiceId('SlashService'); export var SlashService = /*#__PURE__*/function () { function SlashService(kernel) { _classCallCheck(this, SlashService); _defineProperty(this, "triggerMap", new Map()); _defineProperty(this, "triggerFnMap", new Map()); _defineProperty(this, "triggerFuseMap", new Map()); _defineProperty(this, "logger", createDebugLogger('service', 'slash')); this.kernel = kernel; } // Specific service methods can be added here _createClass(SlashService, [{ key: "registerSlash", value: function registerSlash(options) { var update = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (this.triggerMap.has(options.trigger) && !update) { if (this.kernel.isHotReloadMode()) { this.logger.warn("\uD83D\uDD04 Overriding slash trigger \"".concat(options.trigger, "\"")); } else { throw new Error("Slash trigger \"".concat(options.trigger, "\" is already registered.")); } } this.triggerMap.set(options.trigger, options); this.triggerFnMap.set(options.trigger, getBasicTypeaheadTriggerMatch(options.trigger, { allowWhitespace: options.allowWhitespace, maxLength: options.maxLength, minLength: options.minLength, punctuation: options.punctuation })); this.logger.debug("\u26A1 Slash trigger: ".concat(options.trigger)); if (Array.isArray(options.items)) { // Filter out divider items for search functionality var searchableItems = options.items.filter(function (item) { return !('type' in item) || item.type !== 'divider'; }); // Use fuseOptions if provided, otherwise fallback to searchKeys or default var fuseConfig = options.fuseOptions || { keys: options.searchKeys || ['key'] }; this.triggerFuseMap.set(options.trigger, new Fuse(searchableItems, fuseConfig)); } } }, { key: "removeAllOptions", value: function removeAllOptions() { this.triggerMap.clear(); this.triggerFnMap.clear(); this.triggerFuseMap.clear(); } }, { key: "updateOptions", value: function updateOptions(options) { var _this = this; this.removeAllOptions(); options.forEach(function (option) { _this.registerSlash(option); }); } }, { key: "getSlashOptions", value: function getSlashOptions(trigger) { return this.triggerMap.get(trigger); } }, { key: "getSlashTriggerFn", value: function getSlashTriggerFn(trigger) { return this.triggerFnMap.get(trigger); } }, { key: "getSlashFuse", value: function getSlashFuse(trigger) { return this.triggerFuseMap.get(trigger); } }]); return SlashService; }();