UNPKG

@dialpad/dialtone-vue

Version:

Vue component library for Dialpad's design system Dialtone

634 lines (633 loc) 18.7 kB
import { BubbleMenuPlugin as J } from "@tiptap/extension-bubble-menu"; import { Editor as Q, NodeView as X } from "@tiptap/core"; export * from "@tiptap/core"; import { FloatingMenuPlugin as Y } from "@tiptap/extension-floating-menu"; import v from "vue"; var L = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, l = {}, h = {}, o = {}, p = {}, m = {}; Object.defineProperty(m, "__esModule", { value: !0 }); m.isInstanceOf = void 0; const Z = (e) => (t) => { if (!(t instanceof e)) return `value should be an instance of ${e.name}`; }; m.isInstanceOf = Z; var g = {}; Object.defineProperty(g, "__esModule", { value: !0 }); g.isInteger = void 0; const x = (e) => { if (typeof e != "number" || !Number.isInteger(e)) return "value should be an integer"; }; g.isInteger = x; var _ = {}; Object.defineProperty(_, "__esModule", { value: !0 }); _.isOneOf = void 0; const ee = (e) => (t) => { if (!e.includes(t)) return `value should be one of "${e.join('", "')}"`; }; _.isOneOf = ee; var j = {}; Object.defineProperty(j, "__esModule", { value: !0 }); j.isSymbol = void 0; const te = (e) => { if (typeof e != "symbol") return "value should be a symbol"; }; j.isSymbol = te; (function(e) { var t = L && L.__importDefault || function(u) { return u && u.__esModule ? u : { default: u }; }; Object.defineProperty(e, "__esModule", { value: !0 }), e.isSymbol = e.isOneOf = e.isInteger = e.isInstanceOf = e.vuePropValidator = void 0; const n = t(v); function r(u, ...P) { const y = u ? [...P, u] : P; if (y.length !== 0) return (c) => { for (const U of y) { const f = U(c); if (f) return typeof n.default == "object" && "util" in n.default ? n.default.util.warn(`${f} (received: '${String(c)}')`) : console.warn(`${f} (received: '${String(c)}')`), !1; } return !0; }; } e.vuePropValidator = r; var i = m; Object.defineProperty(e, "isInstanceOf", { enumerable: !0, get: function() { return i.isInstanceOf; } }); var s = g; Object.defineProperty(e, "isInteger", { enumerable: !0, get: function() { return s.isInteger; } }); var a = _; Object.defineProperty(e, "isOneOf", { enumerable: !0, get: function() { return a.isOneOf; } }); var d = j; Object.defineProperty(e, "isSymbol", { enumerable: !0, get: function() { return d.isSymbol; } }); })(p); Object.defineProperty(o, "__esModule", { value: !0 }); o.propOptionsGenerator = void 0; const O = p, ne = (e, t, ...n) => ({ optional: { type: e, required: !1, default: void 0, validator: (0, O.vuePropValidator)(t, ...n) }, nullable: { type: e, required: !1, default: null, validator: (0, O.vuePropValidator)(t, ...n) }, withDefault: (r) => ({ type: e, required: !1, default: r, validator: (0, O.vuePropValidator)(t, ...n) }), required: { type: e, required: !0, validator: (0, O.vuePropValidator)(t, ...n) } }); o.propOptionsGenerator = ne; Object.defineProperty(h, "__esModule", { value: !0 }); h.stringProp = void 0; const re = o, oe = (e) => (0, re.propOptionsGenerator)(String, e); h.stringProp = oe; var N = {}; Object.defineProperty(N, "__esModule", { value: !0 }); N.booleanProp = void 0; const ie = o, se = (e) => (0, ie.propOptionsGenerator)(Boolean, e); N.booleanProp = se; var $ = {}; Object.defineProperty($, "__esModule", { value: !0 }); $.numberProp = void 0; const ue = o, ae = (e) => (0, ue.propOptionsGenerator)(Number, e); $.numberProp = ae; var w = {}; Object.defineProperty(w, "__esModule", { value: !0 }); w.integerProp = void 0; const de = o, le = p, pe = (e) => (0, de.propOptionsGenerator)(Number, e, le.isInteger); w.integerProp = pe; var M = {}; Object.defineProperty(M, "__esModule", { value: !0 }); M.symbolProp = void 0; const ce = o, fe = p, ve = (e) => (0, ce.propOptionsGenerator)(void 0, e, fe.isSymbol); M.symbolProp = ve; var S = {}; Object.defineProperty(S, "__esModule", { value: !0 }); S.vueComponentProp = void 0; const be = o, Pe = (e) => (0, be.propOptionsGenerator)([Object, String], e); S.vueComponentProp = Pe; var C = {}; Object.defineProperty(C, "__esModule", { value: !0 }); C.anyProp = void 0; const ye = o, Oe = (e) => (0, ye.propOptionsGenerator)(void 0, e); C.anyProp = Oe; var D = {}; Object.defineProperty(D, "__esModule", { value: !0 }); D.arrayProp = void 0; const he = o, me = (e) => (0, he.propOptionsGenerator)(Array, e); D.arrayProp = me; var q = {}; Object.defineProperty(q, "__esModule", { value: !0 }); q.objectProp = void 0; const ge = o, _e = (e) => (0, ge.propOptionsGenerator)(Object, e); q.objectProp = _e; var I = {}; Object.defineProperty(I, "__esModule", { value: !0 }); I.functionProp = void 0; const k = p, je = (e) => ({ optional: { type: Function, required: !1, default: void 0, validator: (0, k.vuePropValidator)(e) }, nullable: { type: Function, required: !1, default: null, validator: (0, k.vuePropValidator)(e) }, required: { type: Function, required: !0, validator: (0, k.vuePropValidator)(e) } }); I.functionProp = je; var b = {}; Object.defineProperty(b, "__esModule", { value: !0 }); b.oneOfProp = void 0; const Ne = o, $e = p, we = (e) => { const t = [ ...new Set(e.flatMap((n) => { var r; return n == null ? [] : ( // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (r = n.constructor) !== null && r !== void 0 ? r : [] ); })) ]; if (t.length !== 0) return t.length === 1 ? t[0] : t; }, Me = (e, t) => (0, Ne.propOptionsGenerator)(we(e), t, (0, $e.isOneOf)(e)); b.oneOfProp = Me; var T = {}; Object.defineProperty(T, "__esModule", { value: !0 }); T.oneOfObjectKeysProp = void 0; const Se = b, Ce = (e, t) => (0, Se.oneOfProp)(Object.keys(e), t); T.oneOfObjectKeysProp = Ce; var G = {}; Object.defineProperty(G, "__esModule", { value: !0 }); G.oneOfTypesProp = void 0; const De = o, qe = (e, t) => (0, De.propOptionsGenerator)(e, t); G.oneOfTypesProp = qe; var K = {}; Object.defineProperty(K, "__esModule", { value: !0 }); K.instanceOfProp = void 0; const Ie = o, Te = p, Ge = (e, t) => (0, Ie.propOptionsGenerator)(e, t, (0, Te.isInstanceOf)(e)); K.instanceOfProp = Ge; var V = {}; Object.defineProperty(V, "__esModule", { value: !0 }); V.isNegative = void 0; const Ke = (e) => { if (typeof e != "number" || e >= 0 || Number.isNaN(e)) return "value should be a negative number"; }; V.isNegative = Ke; var E = {}; Object.defineProperty(E, "__esModule", { value: !0 }); E.isPositive = void 0; const Ve = (e) => { if (typeof e != "number" || e <= 0 || Number.isNaN(e)) return "value should be a positive number"; }; E.isPositive = Ve; var F = {}; Object.defineProperty(F, "__esModule", { value: !0 }); F.isNonNegative = void 0; const Ee = (e) => { if (typeof e != "number" || e < 0 || Number.isNaN(e)) return "value should be a non-negative number"; }; F.isNonNegative = Ee; var A = {}; Object.defineProperty(A, "__esModule", { value: !0 }); A.isNonPositive = void 0; const Fe = (e) => { if (typeof e != "number" || e > 0 || Number.isNaN(e)) return "value should be a non-positive number"; }; A.isNonPositive = Fe; (function(e) { Object.defineProperty(e, "__esModule", { value: !0 }), e.isNonPositive = e.isNonNegative = e.isPositive = e.isNegative = e.instanceOfProp = e.oneOfTypesProp = e.oneOfObjectKeysProp = e.oneOfProp = e.functionProp = e.objectProp = e.arrayProp = e.anyProp = e.vueComponentProp = e.symbolProp = e.integerProp = e.numberProp = e.booleanProp = e.stringProp = void 0; var t = h; Object.defineProperty(e, "stringProp", { enumerable: !0, get: function() { return t.stringProp; } }); var n = N; Object.defineProperty(e, "booleanProp", { enumerable: !0, get: function() { return n.booleanProp; } }); var r = $; Object.defineProperty(e, "numberProp", { enumerable: !0, get: function() { return r.numberProp; } }); var i = w; Object.defineProperty(e, "integerProp", { enumerable: !0, get: function() { return i.integerProp; } }); var s = M; Object.defineProperty(e, "symbolProp", { enumerable: !0, get: function() { return s.symbolProp; } }); var a = S; Object.defineProperty(e, "vueComponentProp", { enumerable: !0, get: function() { return a.vueComponentProp; } }); var d = C; Object.defineProperty(e, "anyProp", { enumerable: !0, get: function() { return d.anyProp; } }); var u = D; Object.defineProperty(e, "arrayProp", { enumerable: !0, get: function() { return u.arrayProp; } }); var P = q; Object.defineProperty(e, "objectProp", { enumerable: !0, get: function() { return P.objectProp; } }); var y = I; Object.defineProperty(e, "functionProp", { enumerable: !0, get: function() { return y.functionProp; } }); var c = b; Object.defineProperty(e, "oneOfProp", { enumerable: !0, get: function() { return c.oneOfProp; } }); var U = T; Object.defineProperty(e, "oneOfObjectKeysProp", { enumerable: !0, get: function() { return U.oneOfObjectKeysProp; } }); var f = G; Object.defineProperty(e, "oneOfTypesProp", { enumerable: !0, get: function() { return f.oneOfTypesProp; } }); var B = K; Object.defineProperty(e, "instanceOfProp", { enumerable: !0, get: function() { return B.instanceOfProp; } }); var H = V; Object.defineProperty(e, "isNegative", { enumerable: !0, get: function() { return H.isNegative; } }); var R = E; Object.defineProperty(e, "isPositive", { enumerable: !0, get: function() { return R.isPositive; } }); var W = F; Object.defineProperty(e, "isNonNegative", { enumerable: !0, get: function() { return W.isNonNegative; } }); var z = A; Object.defineProperty(e, "isNonPositive", { enumerable: !0, get: function() { return z.isNonPositive; } }); })(l); const Re = { name: "BubbleMenu", props: { pluginKey: { type: [String, Object], default: "bubbleMenu" }, editor: { type: Object, required: !0 }, updateDelay: { type: Number }, tippyOptions: { type: Object, default: () => ({}) }, shouldShow: { type: Function, default: null } }, watch: { editor: { immediate: !0, handler(e) { e && this.$nextTick(() => { e.registerPlugin(J({ updateDelay: this.updateDelay, editor: e, element: this.$el, pluginKey: this.pluginKey, shouldShow: this.shouldShow, tippyOptions: this.tippyOptions })); }); } } }, render(e) { return e("div", { style: { visibility: "hidden" } }, this.$slots.default); }, beforeDestroy() { this.editor.unregisterPlugin(this.pluginKey); } }; class We extends Q { constructor() { super(...arguments), this.contentComponent = null; } } const ze = { name: "EditorContent", props: { editor: { default: null, type: Object } }, watch: { editor: { immediate: !0, handler(e) { e && e.options.element && this.$nextTick(() => { const t = this.$el; !t || !e.options.element.firstChild || (t.append(...e.options.element.childNodes), e.contentComponent = this, e.setOptions({ element: t }), e.createNodeViews()); }); } } }, render(e) { return e("div"); }, beforeDestroy() { const { editor: e } = this; if (!e || (e.isDestroyed || e.view.setProps({ nodeViews: {} }), e.contentComponent = null, !e.options.element.firstChild)) return; const t = document.createElement("div"); t.append(...e.options.element.childNodes), e.setOptions({ element: t }); } }, Je = { name: "FloatingMenu", props: { pluginKey: { type: [String, Object], default: "floatingMenu" }, editor: { type: Object, required: !0 }, tippyOptions: { type: Object, default: () => ({}) }, shouldShow: { type: Function, default: null } }, watch: { editor: { immediate: !0, handler(e) { e && this.$nextTick(() => { e.registerPlugin(Y({ pluginKey: this.pluginKey, editor: e, element: this.$el, tippyOptions: this.tippyOptions, shouldShow: this.shouldShow })); }); } } }, render(e) { return e("div", { style: { visibility: "hidden" } }, this.$slots.default); }, beforeDestroy() { this.editor.unregisterPlugin(this.pluginKey); } }, Qe = { props: { as: { type: String, default: "div" } }, render(e) { return e(this.as, { style: { whiteSpace: "pre-wrap" }, attrs: { "data-node-view-content": "" } }); } }, Xe = { props: { as: { type: String, default: "div" } }, inject: ["onDragStart", "decorationClasses"], render(e) { return e(this.as, { class: this.decorationClasses.value, style: { whiteSpace: "normal" }, attrs: { "data-node-view-wrapper": "" }, on: { dragstart: this.onDragStart } }, this.$slots.default); } }; class Ae { constructor(t, n) { const r = typeof t == "function" ? t : v.extend(t); this.ref = new r(n).$mount(); } get element() { return this.ref.$el; } updateProps(t = {}) { var n, r, i; if (!this.ref.$props) return; const s = (i = (r = (n = this.ref.$props.editor) === null || n === void 0 ? void 0 : n.contentComponent) === null || r === void 0 ? void 0 : r.$options._base) !== null && i !== void 0 ? i : v, a = s.config.silent; s.config.silent = !0, Object.entries(t).forEach(([d, u]) => { this.ref.$props[d] = u; }), s.config.silent = a; } destroy() { this.ref.$destroy(); } } const Ye = { editor: l.objectProp().required, node: l.objectProp().required, decorations: l.objectProp().required, selected: l.booleanProp().required, extension: l.objectProp().required, getPos: l.functionProp().required, updateAttributes: l.functionProp().required, deleteNode: l.functionProp().required }; class Ue extends X { mount() { var t, n; const r = { editor: this.editor, node: this.node, decorations: this.decorations, innerDecorations: this.innerDecorations, view: this.view, selected: !1, extension: this.extension, HTMLAttributes: this.HTMLAttributes, getPos: () => this.getPos(), updateAttributes: (d = {}) => this.updateAttributes(d), deleteNode: () => this.deleteNode() }, i = this.onDragStart.bind(this); this.decorationClasses = v.observable({ value: this.getDecorationClasses() }); const a = ((n = (t = this.editor.contentComponent) === null || t === void 0 ? void 0 : t.$options._base) !== null && n !== void 0 ? n : v).extend(this.component).extend({ props: Object.keys(r), provide: () => ({ onDragStart: i, decorationClasses: this.decorationClasses }) }); this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this), this.editor.on("selectionUpdate", this.handleSelectionUpdate), this.renderer = new Ae(a, { parent: this.editor.contentComponent, propsData: r }); } /** * Return the DOM element. * This is the element that will be used to display the node view. */ get dom() { if (!this.renderer.element.hasAttribute("data-node-view-wrapper")) throw Error("Please use the NodeViewWrapper component for your node view."); return this.renderer.element; } /** * Return the content DOM element. * This is the element that will be used to display the rich-text content of the node. */ get contentDOM() { return this.node.isLeaf ? null : this.dom.querySelector("[data-node-view-content]") || this.dom; } /** * On editor selection update, check if the node is selected. * If it is, call `selectNode`, otherwise call `deselectNode`. */ handleSelectionUpdate() { const { from: t, to: n } = this.editor.state.selection, r = this.getPos(); if (typeof r == "number") if (t <= r && n >= r + this.node.nodeSize) { if (this.renderer.ref.$props.selected) return; this.selectNode(); } else { if (!this.renderer.ref.$props.selected) return; this.deselectNode(); } } /** * On update, update the React component. * To prevent unnecessary updates, the `update` option can be used. */ update(t, n, r) { const i = (s) => { this.decorationClasses.value = this.getDecorationClasses(), this.renderer.updateProps(s); }; if (typeof this.options.update == "function") { const s = this.node, a = this.decorations, d = this.innerDecorations; return this.node = t, this.decorations = n, this.innerDecorations = r, this.options.update({ oldNode: s, oldDecorations: a, newNode: t, newDecorations: n, oldInnerDecorations: d, innerDecorations: r, updateProps: () => i({ node: t, decorations: n, innerDecorations: r }) }); } return t.type !== this.node.type ? !1 : (t === this.node && this.decorations === n && this.innerDecorations === r || (this.node = t, this.decorations = n, this.innerDecorations = r, i({ node: t, decorations: n, innerDecorations: r })), !0); } /** * Select the node. * Add the `selected` prop and the `ProseMirror-selectednode` class. */ selectNode() { this.renderer.updateProps({ selected: !0 }), this.renderer.element.classList.add("ProseMirror-selectednode"); } /** * Deselect the node. * Remove the `selected` prop and the `ProseMirror-selectednode` class. */ deselectNode() { this.renderer.updateProps({ selected: !1 }), this.renderer.element.classList.remove("ProseMirror-selectednode"); } getDecorationClasses() { return this.decorations.map((t) => t.type.attrs.class).flat().join(" "); } destroy() { this.renderer.destroy(), this.editor.off("selectionUpdate", this.handleSelectionUpdate); } } function Ze(e, t) { return (n) => n.editor.contentComponent ? new Ue(e, n, t) : {}; } export { Re as BubbleMenu, We as Editor, ze as EditorContent, Je as FloatingMenu, Qe as NodeViewContent, Xe as NodeViewWrapper, Ze as VueNodeViewRenderer, Ae as VueRenderer, Ye as nodeViewProps }; //# sourceMappingURL=vue-2.js.map