@harbour-enterprises/superdoc 0.7.5 → 0.7.7

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.
Files changed (24) hide show
  1. package/dist/chunks/{super-editor.es-BxTorkWW.js → super-editor.es-B0sctKd1.js} +9 -6
  2. package/dist/chunks/{super-editor.es-BxTorkWW.js.map → super-editor.es-B0sctKd1.js.map} +1 -1
  3. package/dist/super-editor/chunks/{converter-C9Qhiyrd.js → converter-B4rCQUY4.js} +3 -3
  4. package/dist/super-editor/chunks/{converter-C9Qhiyrd.js.map → converter-B4rCQUY4.js.map} +1 -1
  5. package/dist/super-editor/chunks/{docx-zipper-DGbAwdD-.js → docx-zipper-DclXHbwh.js} +2 -2
  6. package/dist/super-editor/chunks/{docx-zipper-DGbAwdD-.js.map → docx-zipper-DclXHbwh.js.map} +1 -1
  7. package/dist/super-editor/chunks/{editor-u6GeISqP.js → editor-D2JOdvo7.js} +7 -4
  8. package/dist/super-editor/chunks/editor-D2JOdvo7.js.map +1 -0
  9. package/dist/super-editor/chunks/{toolbar-RwBmRK55.js → toolbar-DlNZfIZm.js} +3 -3
  10. package/dist/super-editor/chunks/{toolbar-RwBmRK55.js.map → toolbar-DlNZfIZm.js.map} +1 -1
  11. package/dist/super-editor/converter.es.js +1 -1
  12. package/dist/super-editor/core/Editor.d.ts.map +1 -1
  13. package/dist/super-editor/docx-zipper.es.js +2 -2
  14. package/dist/super-editor/editor.es.js +3 -3
  15. package/dist/super-editor/file-zipper.es.js +1 -1
  16. package/dist/super-editor/super-editor.es.js +8 -8
  17. package/dist/super-editor/super-editor.es.js.map +1 -1
  18. package/dist/super-editor/toolbar.es.js +2 -2
  19. package/dist/super-editor.es.js +1 -1
  20. package/dist/superdoc.es.js +3 -3
  21. package/dist/superdoc.umd.js +9 -6
  22. package/dist/superdoc.umd.js.map +1 -1
  23. package/package.json +1 -1
  24. package/dist/super-editor/chunks/editor-u6GeISqP.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"super-editor.es.js","sources":["../../../node_modules/eventemitter3/index.js","../src/components/toolbar/scroll-helpers.js","../src/components/toolbar/use-toolbar-item.js","../src/components/toolbar/AlignmentButtons.vue","../src/components/toolbar/LinkInput.vue","../src/components/toolbar/DocumentMode.vue","../src/components/toolbar/LinkedStyle.vue","../src/components/toolbar/IconGridRow.vue","../src/components/toolbar/IconGrid.vue","../src/components/toolbar/color-dropdown-helpers.js","../src/components/toolbar/TableGrid.vue","../src/components/toolbar/TableActions.vue","../src/components/toolbar/defaultItems.js","../src/extensions/image/imageHelpers/getFileOpener.js","../src/extensions/image/imageHelpers/handleImageUpload.js","../src/extensions/image/imageHelpers/processUploadedImage.js","../src/extensions/image/imageHelpers/startImageUpload.js","../src/components/toolbar/super-toolbar.js","../src/components/pagination-helpers.js","../src/components/cursor-helpers.js","../src/components/rulers/Ruler.vue","../src/components/SuperEditor.vue","../src/dev/components/BasicUpload.vue","../src/components/SuperInput.vue","../src/index.js"],"sourcesContent":["'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","function getScrollableParent(element) {\n let currentElement = element;\n\n while (currentElement) {\n const overflowY = window.getComputedStyle(currentElement).overflowY;\n if (/(auto|scroll)/.test(overflowY) && currentElement.scrollHeight > currentElement.clientHeight) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n\n return document.scrollingElement || document.documentElement;\n}\n\nexport function scrollToElement(targetElement, options = { behavior: 'smooth', block: 'start' }) {\n if (!targetElement) return;\n\n const container = getScrollableParent(targetElement);\n\n const containerRect = container.getBoundingClientRect();\n const targetRect = targetElement.getBoundingClientRect();\n const offsetTop = targetRect.top - containerRect.top + container.scrollTop;\n\n container.scrollTo({\n top: options.block === 'start' ? offsetTop : offsetTop - container.clientHeight + targetElement.offsetHeight,\n behavior: options.behavior,\n });\n}\n","import { ref } from 'vue';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport const useToolbarItem = (options) => {\n const types = ['button', 'options', 'separator', 'dropdown', 'overflow'];\n if (!types.includes(options.type)) {\n throw new Error('Invalid toolbar item type - ' + options.type);\n }\n\n if (options.type === 'button' && !options.defaultLabel && !options.icon) {\n throw new Error('Toolbar button item needs either icon or label - ' + options.name);\n }\n\n if (!options.name) {\n throw new Error('Invalid toolbar item name - ' + options.name);\n }\n\n const id = ref(uuidv4());\n const type = options.type;\n const name = ref(options.name);\n const command = options.command;\n const icon = ref(options.icon);\n const group = ref(options.group || 'center');\n const allowWithoutEditor = ref(options.allowWithoutEditor);\n const attributes = ref(options.attributes || {});\n\n const initiallyDisabled = options.disabled || false;\n const disabled = ref(options.disabled);\n const active = ref(false);\n const expand = ref(false);\n\n // top-level style\n const style = ref(options.style);\n const isNarrow = ref(options.isNarrow);\n const isWide = ref(options.isWide);\n const minWidth = ref(options.minWidth);\n const suppressActiveHighlight = ref(options.suppressActiveHighlight || false);\n\n const argument = ref(options.argument);\n const childItem = ref(null);\n const parentItem = ref(null);\n\n // icon properties\n const iconColor = ref(options.iconColor);\n const hasCaret = ref(options.hasCaret);\n\n // tooltip properties\n const tooltip = ref(options.tooltip);\n const tooltipVisible = ref(options.tooltipVisible);\n const tooltipTimeout = ref(options.tooltipTimeout);\n\n // behavior\n const defaultLabel = ref(options.defaultLabel);\n const label = ref(options.label);\n const hideLabel = ref(options.hideLabel);\n const inlineTextInputVisible = ref(options.inlineTextInputVisible);\n const hasInlineTextInput = ref(options.hasInlineTextInput);\n\n const markName = ref(options.markName);\n const labelAttr = ref(options.labelAttr);\n\n const nestedOptions = ref([]);\n if (options.options) {\n if (!Array.isArray(options.options)) throw new Error('Invalid toolbar item options - ' + options.options);\n nestedOptions.value.push(...options.options);\n }\n\n // Activation & Deactivation\n const activate = (attrs) => {\n onActivate(attrs);\n\n if (suppressActiveHighlight.value) return;\n active.value = true;\n };\n\n const deactivate = () => {\n onDeactivate();\n active.value = false;\n };\n\n const setDisabled = (state) => {\n disabled.value = state;\n };\n\n const resetDisabled = () => {\n disabled.value = initiallyDisabled;\n };\n\n // User can override this behavior\n const onActivate = options.onActivate || (() => null);\n const onDeactivate = options.onDeactivate || (() => null);\n\n const unref = () => {\n const flattened = {};\n Object.keys(refs).forEach((key) => {\n if (refs[key].value !== undefined) {\n flattened[key] = refs[key].value;\n }\n });\n return flattened;\n };\n\n const refs = {\n id,\n name,\n type,\n command,\n icon,\n tooltip,\n group,\n attributes,\n disabled,\n active,\n expand,\n nestedOptions,\n\n style,\n isNarrow,\n isWide,\n minWidth,\n argument,\n parentItem,\n iconColor,\n hasCaret,\n tooltipVisible,\n tooltipTimeout,\n defaultLabel,\n label,\n hideLabel,\n inlineTextInputVisible,\n hasInlineTextInput,\n markName,\n labelAttr,\n childItem,\n\n allowWithoutEditor,\n };\n\n return {\n ...refs,\n unref,\n activate,\n deactivate,\n setDisabled,\n resetDisabled,\n onActivate,\n onDeactivate,\n };\n};\n","<script setup>\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['select']);\n\nconst select = (alignment) => {\n emit('select', alignment);\n};\n</script>\n\n<template>\n <div class=\"alignment-buttons\">\n <div class=\"button-icon\" @click=\"select('left')\" v-html=\"toolbarIcons.alignLeft\"></div>\n <div class=\"button-icon\" @click=\"select('center')\" v-html=\"toolbarIcons.alignCenter\"></div>\n <div class=\"button-icon\" @click=\"select('right')\" v-html=\"toolbarIcons.alignRight\"></div>\n <div class=\"button-icon\" @click=\"select('justify')\" v-html=\"toolbarIcons.alignJustify\"></div>\n </div>\n</template>\n\n<style scoped>\n.alignment-buttons {\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: 8px;\n box-sizing: border-box;\n}\n.button-icon {\n cursor: pointer;\n padding: 5px;\n font-size: 16px;\n width: 25px;\n height: 25px;\n border-radius: 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n}\n.button-icon:hover {\n background-color: #d8dee5;\n}\n\n.button-icon :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","<script setup>\nimport { ref, computed, watch, getCurrentInstance, onMounted } from \"vue\";\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['submit', 'cancel']);\nconst props = defineProps({\n initialText: {\n type: String,\n default: '',\n },\n href: {\n type: String,\n default: '',\n },\n showInput: {\n type: Boolean,\n default: true,\n },\n showLink: {\n type: Boolean,\n default: true,\n },\n goToAnchor: {\n type: Function,\n default: () => {},\n },\n});\n\nconst { proxy } = getCurrentInstance();\nconst handleSubmit = () => {\n if (proxy?.$submit instanceof Function) proxy.$submit();\n if (rawUrl.value && validUrl.value) {\n emit('submit', { text: text.value, href: url.value });\n return;\n } else if (!rawUrl.value) {\n emit('submit', { text: text.value, href: null });\n return;\n }\n console.debug('[LinkInput] Invalid URL in handleSubmit');\n urlError.value = true;\n};\n\nconst handleRemove = () => {\n emit('submit', { text: text.value, href: null });\n};\n\nconst urlError = ref(false);\nconst text = ref(props.initialText);\nconst rawUrl = ref(props.href);\nconst url = computed(() => {\n if (!rawUrl.value?.startsWith('http')) return 'http://' + rawUrl.value;\n return rawUrl.value;\n});\n\nconst validUrl = computed(() => {\n const urlSplit = url.value.split('.').filter(Boolean);\n return url.value.includes('.') && urlSplit.length > 1;\n});\n\nconst getApplyText = computed(() => (showApply.value ? 'Apply' : 'Remove'));\nconst isDisabled = computed(() => !validUrl.value);\nconst showApply = computed(() => !showRemove.value);\nconst showRemove = computed(() => props.href && !rawUrl.value);\nconst isAnchor = computed(() => props.href.startsWith('#'));\n\nconst openLink = () => {\n window.open(url.value, '_blank');\n};\n\nwatch(\n () => props.href,\n (newVal) => {\n rawUrl.value = newVal;\n },\n);\n\nconst focusInput = () => {\n const input = document.querySelector('.link-input-ctn input');\n if (!input) return;\n input.focus();\n};\n\nonMounted(() => {\n if (props.showInput) focusInput();\n});\n</script>\n\n<template>\n <div class=\"link-input-ctn\">\n <div class=\"link-title\" v-if=\"!href\">Add link</div>\n <div class=\"link-title\" v-else-if=\"isAnchor\">Page anchor</div>\n <div class=\"link-title\" v-else>Edit link</div>\n\n <div v-if=\"showInput && !isAnchor\">\n <div class=\"input-row\">\n <div class=\"input-icon\" v-html=\"toolbarIcons.linkInput\"></div>\n <input\n type=\"text\"\n placeholder=\"Type or paste a link\"\n :class=\"{ error: urlError }\"\n v-model=\"rawUrl\"\n @keydown.enter.stop.prevent=\"handleSubmit\"\n @keydown=\"urlError = false\"\n />\n\n <div \n class=\"open-link-icon\" \n :class=\"{ disabled: !validUrl }\" \n v-html=\"toolbarIcons.openLink\" \n @click=\"openLink\">\n </div>\n </div>\n <div class=\"input-row link-buttons\">\n <button class=\"remove-btn\" @click=\"handleRemove\" v-if=\"href\">\n <div class=\"remove-btn__icon\" v-html=\"toolbarIcons.removeLink\"></div>\n Remove\n </button>\n <button class=\"submit-btn\" v-if=\"showApply\" @click=\"handleSubmit\" :class=\"{ 'disable-btn': isDisabled }\">\n {{ getApplyText }}\n </button>\n </div>\n </div>\n\n <div v-else-if=\"isAnchor\" class=\"input-row go-to-anchor clickable\">\n <a @click.stop.prevent=\"goToAnchor\">Go to {{ href.startsWith('#_') ? href.substring(2) : href }}</a>\n </div>\n </div>\n</template>\n\n<style scoped>\n.link-input-ctn :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.open-link-icon {\n margin-left: 10px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n border: 1px solid transparent;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n transition: all 0.2s ease;\n cursor: pointer;\n}\n\n.open-link-icon:hover {\n color: #1355ff;\n background-color: white;\n border: 1px solid #dbdbdb;\n}\n\n.open-link-icon :deep(svg) {\n width: 15px;\n height: 15px;\n}\n\n.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n.link-buttons {\n display: flex;\n justify-content: flex-end;\n margin-top: 10px;\n}\n\n.remove-btn__icon {\n display: inline-flex;\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n margin-right: 4px;\n}\n\n.link-buttons button {\n margin-left: 5px;\n}\n.disable-btn {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n.go-to-anchor a {\n font-size: 14px;\n text-decoration: underline;\n}\n.clickable {\n cursor: pointer;\n}\n.link-title {\n font-size: 14px;\n font-weight: 600;\n margin-bottom: 10px;\n}\n\n.input-icon {\n position: absolute;\n transform: rotate(45deg);\n left: 25px;\n width: auto;\n height: 12px;\n color: #999;\n pointer-events: none;\n}\n\n.hasBottomMargin {\n margin-bottom: 1em;\n}\n\n.link-input-ctn {\n width: 320px;\n display: flex;\n flex-direction: column;\n padding: 1em;\n border-radius: 5px;\n background-color: #fff;\n box-sizing: border-box;\n}\n.remove-btn {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 10px 16px;\n border-radius: 8px;\n outline: none;\n background-color: white;\n color: black;\n font-weight: 400;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid #ebebeb;\n box-sizing: border-box;\n}\n.remove-btn:hover {\n background-color: #dbdbdb;\n}\n.submit-btn {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 10px 16px;\n border-radius: 8px;\n outline: none;\n border: none;\n background-color: #1355ff;\n color: white;\n font-weight: 400;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n box-sizing: border-box;\n}\n.submit-btn:hover {\n background-color: #0d47c1;\n}\n\n.input-row {\n align-content: baseline;\n display: flex;\n align-items: center;\n}\n\n.input-row input {\n font-size: 13px;\n flex-grow: 1;\n padding: 10px;\n border-radius: 8px;\n padding-left: 32px;\n box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.15);\n color: #666;\n border: 1px solid #ddd;\n box-sizing: border-box;\n}\n.input-row input:active,\n.input-row input:focus {\n outline: none;\n border: 1px solid #1355ff;\n}\n\n.input-row {\n font-size: 16px;\n}\n\n.error {\n border-color: red !important;\n background-color: #ff00001a;\n}\n\n.submit {\n cursor: pointer;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n options: {\n type: Array,\n },\n});\n\nconst handleClick = (item) => {\n emit('select', item);\n};\n</script>\n\n<template>\n <div class=\"document-mode\">\n <div\n class=\"option-item\"\n v-for=\"option in options\"\n @click=\"handleClick(option)\"\n :class=\"{ disabled: option.disabled }\"\n >\n <div class=\"document-mode-column icon-column\">\n <div class=\"icon-column__icon\" v-html=\"option.icon\"></div>\n </div>\n\n <div class=\"document-mode-column text-column\">\n <div class=\"document-mode-type\">\n {{ option.label }}\n </div>\n <div class=\"document-mode-description\">\n {{ option.description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.document-mode :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed !important;\n pointer-events: none;\n}\n.document-mode {\n display: flex;\n flex-direction: column;\n padding: 10px;\n box-sizing: border-box;\n}\n.option-item {\n display: flex;\n flex-direction: row;\n background-color: white;\n padding: 10px;\n border-radius: 4px;\n cursor: pointer;\n box-sizing: border-box;\n}\n.document-mode-column {\n display: flex;\n flex-direction: column;\n}\n.document-mode-type {\n font-weight: 400;\n font-size: 15px;\n color: #222;\n}\n\n.icon-column {\n margin-right: 5px;\n justify-content: flex-start;\n align-items: center;\n padding: 0 5px;\n color: black;\n height: 100%;\n box-sizing: border-box;\n}\n\n.icon-column__icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n height: 18px;\n color: #47484a;\n}\n\n.icon-column__icon :deep(svg) {\n width: auto; /* needed for safari */\n max-height: 18px;\n}\n\n.document-mode-description {\n font-size: 12px;\n color: #666;\n}\n.option-item:hover {\n background-color: #c8d0d8;\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { toolbarIcons } from './toolbarIcons.js';\nimport { generateLinkedStyleString, getQuickFormatList } from '@extensions/linked-styles/index.js';\n\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n editor: {\n type: Object,\n required: true,\n },\n});\n\nconst select = (style) => {\n emit('select', style);\n};\n\n</script>\n\n<template>\n <div class=\"linked-style-buttons\" v-if=\"props.editor\">\n <div\n v-for=\"style in getQuickFormatList(editor)\" class=\"style-item\" @click=\"select(style)\">\n <div class=\"style-name\" :style=\"generateLinkedStyleString(style, null, false)\">\n {{ style.definition.attrs.name }}\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.style-name {\n padding: 16px 10px;\n}\n.style-name:hover {\n background-color: #c8d0d8;\n}\n.linked-style-buttons {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n max-height: 400px;\n width: 200px;\n padding: 0;\n margin: 0;\n overflow: auto;\n}\n.button-icon {\n cursor: pointer;\n padding: 5px;\n font-size: 16px;\n width: 25px;\n height: 25px;\n border-radius: 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n}\n.button-icon:hover {\n background-color: #d8dee5;\n}\n\n.button-icon :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","<script setup>\nimport { computed, onMounted } from 'vue';\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n icons: {\n type: Array,\n required: true,\n },\n activeColor: {\n type: Object,\n required: false,\n },\n});\n\nconst isActive = computed(() => (option) => {\n if (!props.activeColor.value) return false;\n return props.activeColor.value.toUpperCase() === option.value;\n});\n\nconst getCheckStyle = (color, optionIndex) => {\n const lightColors = ['#FFFFFF', '#FAFF09'];\n if (optionIndex === 5 || lightColors.includes(color)) return { color: '#000' };\n return { color: '#FFF' };\n};\n\nconst handleClick = (option) => {\n emit('select', option.value);\n};\n\nonMounted(() => {\n const isMatrix = props.icons.every((row) => Array.isArray(row));\n if (!isMatrix) throw new Error('icon props must be 2d array');\n});\n</script>\n<template>\n <div class=\"option-row\" v-for=\"(row, rowIndex) in icons\" :key=\"rowIndex\">\n <div\n class=\"option\"\n v-for=\"(option, optionIndex) in row\"\n :key=\"optionIndex\"\n @click.stop.prevent=\"handleClick(option)\"\n >\n <div\n class=\"option__icon\"\n v-html=\"option.icon\"\n :style=\"option.style\">\n </div>\n\n <div\n v-if=\"isActive(option)\"\n class=\"option__check\"\n v-html=\"toolbarIcons.colorOptionCheck\"\n :style=\"getCheckStyle(option.value, optionIndex)\">\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.option-row {\n display: flex;\n flex-direction: row;\n}\n.option {\n border-radius: 50%;\n cursor: pointer;\n padding: 3px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n}\n\n.option:hover {\n background-color: #dbdbdb;\n}\n\n.option__icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n\n.option__check {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n position: absolute;\n}\n</style>\n","<script setup>\nimport IconGridRow from './IconGridRow.vue';\n\nconst emit = defineEmits(['select', 'clickoutside']);\nconst props = defineProps({\n icons: {\n type: Array,\n required: true,\n },\n customIcons: {\n type: Array,\n required: false,\n },\n activeColor: {\n type: Object,\n required: false,\n },\n});\n\nconst handleSelect = (option) => {\n emit('select', option);\n};\n\n</script>\n\n<template>\n <div class=\"option-grid-ctn\">\n <IconGridRow \n :icons=\"icons\"\n :active-color=\"activeColor\"\n @select=\"handleSelect\"\n />\n \n <template v-if=\"customIcons.flat().length\">\n <span class=\"option-grid-ctn__subtitle\">Custom colors</span>\n \n <IconGridRow\n :icons=\"customIcons\"\n :active-color=\"activeColor\"\n @select=\"handleSelect\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n.option-grid-ctn {\n display: flex;\n flex-direction: column;\n padding: 5px;\n border-radius: 5px;\n background-color: #fff;\n z-index: 3;\n box-sizing: border-box;\n &__subtitle {\n padding: 3px;\n font-size: 12px;\n font-weight: 600;\n\n }\n}\n\n.option-grid-ctn :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","import { h } from 'vue';\nimport IconGrid from './IconGrid.vue';\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst closeDropdown = (dropdown) => {\n dropdown.expand.value = false;\n};\n\n\nexport const makeColorOption = (color, label = null) => {\n return {\n label,\n icon: toolbarIcons.colorOption,\n value: color,\n style: {\n color,\n boxShadow: '0 0 5px 1px rgba(0, 0, 0, 0.1)',\n borderRadius: '50%',\n },\n };\n};\n\nexport const renderColorOptions = (superToolbar, button, customIcons = []) => {\n const handleSelect = (e) => {\n button.iconColor.value = e;\n superToolbar.emitCommand({ item: button, argument: e });\n closeDropdown(button);\n };\n\n return h('div', {}, [\n h(IconGrid, {\n icons,\n customIcons,\n activeColor: button.iconColor,\n onSelect: handleSelect,\n }),\n ]);\n}\n\nconst icons = [\n [\n makeColorOption('#111111'),\n makeColorOption('#333333'),\n makeColorOption('#5C5C5C'),\n makeColorOption('#858585'),\n makeColorOption('#ADADAD'),\n makeColorOption('#D6D6D6'),\n makeColorOption('#FFFFFF'),\n ],\n\n [\n makeColorOption('#860028'),\n makeColorOption('#D2003F'),\n makeColorOption('#DB3365'),\n makeColorOption('#E4668C'),\n makeColorOption('#ED99B2'),\n makeColorOption('#F6CCD9'),\n makeColorOption('#FF004D'),\n ],\n\n [\n makeColorOption('#83015E'),\n makeColorOption('#CD0194'),\n makeColorOption('#D734A9'),\n makeColorOption('#E167BF'),\n makeColorOption('#EB99D4'),\n makeColorOption('#F5CCEA'),\n makeColorOption('#FF00A8'),\n ],\n\n [\n makeColorOption('#8E220A'),\n makeColorOption('#DD340F'),\n makeColorOption('#E45C3F'),\n makeColorOption('#EB856F'),\n makeColorOption('#F1AE9F'),\n makeColorOption('#F8D6CF'),\n makeColorOption('#FF7A00'),\n ],\n\n [\n makeColorOption('#947D02'),\n makeColorOption('#E7C302'),\n makeColorOption('#ECCF35'),\n makeColorOption('#F1DB67'),\n makeColorOption('#F5E79A'),\n makeColorOption('#FAF3CC'),\n makeColorOption('#FAFF09'),\n ],\n\n [\n makeColorOption('#055432'),\n makeColorOption('#07834F'),\n makeColorOption('#399C72'),\n makeColorOption('#6AB595'),\n makeColorOption('#9CCDB9'),\n makeColorOption('#CDE6DC'),\n makeColorOption('#05F38F'),\n ],\n\n [\n makeColorOption('#063E7E'),\n makeColorOption('#0A60C5'),\n makeColorOption('#3B80D1'),\n makeColorOption('#6CA0DC'),\n makeColorOption('#9DBFE8'),\n makeColorOption('#CEDFF3'),\n makeColorOption('#00E0FF'),\n ],\n\n [\n makeColorOption('#3E027A'),\n makeColorOption('#6103BF'),\n makeColorOption('#8136CC'),\n makeColorOption('#A068D9'),\n makeColorOption('#C09AE6'),\n makeColorOption('#DFCDF2'),\n makeColorOption('#A91DFF'),\n ],\n];\n\nexport const getAvailableColorOptions = () => {\n return icons.flat().map((item) => item.value);\n}\n","<script setup>\nimport { ref } from 'vue';\n\nconst emit = defineEmits(['select', 'clickoutside']);\n\nconst selectedRows = ref(0);\nconst selectedCols = ref(0);\n\nconst onTableGridMouseOver = (event) => {\n let target = event.target;\n let isGrid = !!target.dataset.grid;\n\n if (isGrid) {\n return;\n }\n\n let grid = target.parentElement;\n let allItems = [...grid.querySelectorAll('[data-item]')];\n\n let cols = parseInt(target.dataset.cols, 10);\n let rows = parseInt(target.dataset.rows, 10);\n\n selectedCols.value = cols;\n selectedRows.value = rows;\n \n for (let i = 0; i < allItems.length; i++) {\n let item = allItems[i];\n let itemsCols = parseInt(item.dataset.cols, 10);\n let itemsRows = parseInt(item.dataset.rows, 10);\n\n if (itemsCols <= cols && itemsRows <= rows) {\n item.classList.add('selected');\n } else {\n item.classList.remove('selected');\n }\n }\n};\n\nconst handleClick = ({ cols, rows }) => {\n emit('select', { cols, rows });\n};\n</script>\n\n<template>\n <div class=\"toolbar-table-grid-wrapper\">\n <div class=\"toolbar-table-grid\" @mouseover=\"onTableGridMouseOver\" data-grid=\"true\">\n <template v-for=\"i in 5\" :key=\"i\">\n <div class=\"toolbar-table-grid__item\" \n v-for=\"n in 5\" \n :key=\"`${i}_${n}`\" \n :data-cols=\"n\" \n :data-rows=\"i\" \n data-item=\"true\"\n @click.stop.prevent=\"handleClick({ cols: n, rows: i })\">\n </div>\n </template>\n </div>\n\n <div class=\"toolbar-table-grid-value\">\n {{ selectedRows }} x {{ selectedCols }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbar-table-grid {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 2px;\n padding: 8px;\n box-sizing: border-box;\n}\n\n.toolbar-table-grid__item {\n width: 20px;\n height: 20px;\n border: 1px solid #d3d3d3;\n cursor: pointer;\n transition: all .15s;\n}\n\n.toolbar-table-grid__item.selected {\n background-color: #dbdbdb;\n}\n\n.toolbar-table-grid-value {\n font-size: 13px;\n line-height: 1.1;\n padding: 0px 8px 2px;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['select']);\n\nconst props = defineProps({\n options: {\n type: Array,\n },\n});\n\nconst handleClick = (item) => {\n emit('select', { command: item.command });\n};\n</script>\n\n<template>\n <div class=\"toolbar-table-actions\">\n <div\n class=\"toolbar-table-actions__item\"\n :class=\"{ 'toolbar-table-actions__item--border': option.bottomBorder}\"\n v-for=\"option in options\"\n @click=\"handleClick(option)\">\n <div class=\"toolbar-table-actions__icon\">\n <div class=\"toolbar-table-actions__icon-wrapper\" v-html=\"option.icon\"></div>\n </div>\n <div class=\"toolbar-table-actions__label\">\n {{ option.label }}\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbar-table-actions {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px;\n box-sizing: border-box;\n}\n\n.toolbar-table-actions :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.toolbar-table-actions__item {\n display: flex;\n gap: 5px;\n background-color: #fff;\n padding: 4px 10px;\n border-radius: 4px;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n}\n\n.toolbar-table-actions__item:hover {\n background-color: #c8d0d8;\n}\n\n.toolbar-table-actions__item--border:after {\n content: '';\n display: block;\n position: absolute;\n bottom: -3px;\n left: -10px;\n right: 0;\n height: 1px;\n width: calc(100% + 20px);\n background: #c8d0d8;\n}\n\n.toolbar-table-actions__icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n color: black;\n box-sizing: border-box;\n}\n\n.toolbar-table-actions__icon-wrapper {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n height: 14px;\n color: #47484a;\n}\n\n.toolbar-table-actions__icon-wrapper :deep(svg) {\n width: auto;\n max-height: 14px;\n}\n\n.toolbar-table-actions__label {\n font-size: 15px;\n font-weight: 400;\n color: #222;\n white-space: nowrap;\n}\n</style>\n","import { undoDepth, redoDepth } from 'prosemirror-history';\nimport { h } from 'vue';\n\nimport { scrollToElement } from './scroll-helpers';\nimport { sanitizeNumber } from './helpers';\nimport { useToolbarItem } from './use-toolbar-item';\nimport AlignmentButtons from './AlignmentButtons.vue';\nimport LinkInput from './LinkInput.vue';\nimport DocumentMode from './DocumentMode.vue';\nimport LinkedStyle from './LinkedStyle.vue';\nimport { renderColorOptions } from './color-dropdown-helpers.js';\nimport TableGrid from './TableGrid.vue';\nimport TableActions from './TableActions.vue';\n\nconst closeDropdown = (dropdown) => {\n dropdown.expand.value = false;\n};\n\nexport const makeDefaultItems = (superToolbar, isDev = false, windowWidth, role, toolbarIcons) => {\n\n // bold\n const bold = useToolbarItem({\n type: 'button',\n name: 'bold',\n command: 'toggleBold',\n icon: toolbarIcons.bold,\n tooltip: 'Bold',\n });\n\n // font\n const fontButton = useToolbarItem({\n type: 'dropdown',\n name: 'fontFamily',\n tooltip: 'Font',\n command: 'setFontFamily',\n defaultLabel: 'Arial',\n label: 'Arial',\n markName: 'textStyle',\n labelAttr: 'fontFamily',\n hasCaret: true,\n isWide: true,\n style: { width: '116px' },\n suppressActiveHighlight: true,\n options: [\n {\n label: 'Georgia',\n key: 'Georgia, serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Georgia, serif' },\n },\n },\n {\n label: 'Arial',\n key: 'Arial, sans-serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Arial, sans-serif' },\n },\n },\n {\n label: 'Courier New',\n key: 'Courier New, monospace',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Courier New, monospace' },\n },\n },\n {\n label: 'Times New Roman',\n key: 'Times New Roman, serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Times New Roman, serif' },\n },\n },\n ],\n onActivate: ({ fontFamily }) => {\n if (!fontFamily) return;\n fontButton.label.value = fontFamily;\n },\n onDeactivate: () => (fontButton.label.value = fontButton.defaultLabel.value),\n });\n\n // font size\n const fontSize = useToolbarItem({\n type: 'dropdown',\n name: 'fontSize',\n defaultLabel: '12',\n label: '12',\n minWidth: '50px',\n markName: 'textStyle',\n labelAttr: 'fontSize',\n tooltip: 'Font size',\n hasCaret: true,\n hasInlineTextInput: false,\n inlineTextInputVisible: true,\n suppressActiveHighlight: true,\n isWide: true,\n command: 'setFontSize',\n options: [\n { label: '8', key: '8pt' },\n { label: '9', key: '9pt' },\n { label: '10', key: '10pt' },\n { label: '11', key: '11pt' },\n { label: '12', key: '12pt' },\n { label: '14', key: '14pt' },\n { label: '18', key: '18pt' },\n { label: '24', key: '24pt' },\n { label: '30', key: '30pt' },\n { label: '36', key: '36pt' },\n { label: '48', key: '48pt' },\n { label: '60', key: '60pt' },\n { label: '72', key: '72pt' },\n { label: '96', key: '96pt' },\n ],\n onActivate: ({ fontSize: size }) => {\n if (!size) return (fontSize.label.value = fontSize.defaultLabel.value);\n\n let sanitizedValue = sanitizeNumber(size, 12);\n if (sanitizedValue < 8) sanitizedValue = 8;\n if (sanitizedValue > 96) sanitizedValue = 96;\n\n // no units\n fontSize.label.value = String(sanitizedValue);\n },\n onDeactivate: () => (fontSize.label.value = fontSize.defaultLabel.value),\n });\n\n // separator\n const separator = useToolbarItem({\n type: 'separator',\n name: 'separator',\n isNarrow: true,\n });\n\n // italic\n const italic = useToolbarItem({\n type: 'button',\n name: 'italic',\n command: 'toggleItalic',\n icon: toolbarIcons.italic,\n active: false,\n tooltip: 'Italic',\n });\n\n // underline\n const underline = useToolbarItem({\n type: 'button',\n name: 'underline',\n command: 'toggleUnderline',\n icon: toolbarIcons.underline,\n active: false,\n tooltip: 'Underline',\n });\n \n // highlight\n const highlight = useToolbarItem({\n type: 'dropdown',\n name: 'highlight',\n icon: toolbarIcons.highlight,\n hideLabel: true,\n markName: 'highlight',\n labelAttr: 'color',\n active: false,\n tooltip: 'Highlight color',\n command: 'setHighlight',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(superToolbar, highlight),\n },\n ],\n onActivate: ({ color }) => {\n highlight.iconColor.value = color || '';\n },\n onDeactivate: () => (highlight.iconColor.value = ''),\n })\n\n // color\n const colorButton = useToolbarItem({\n type: 'dropdown',\n name: 'color',\n icon: toolbarIcons.color,\n hideLabel: true,\n markName: 'textStyle',\n labelAttr: 'color',\n active: false,\n tooltip: 'Text color',\n command: 'setColor',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(superToolbar, colorButton),\n },\n ],\n onActivate: ({ color }) => {\n colorButton.iconColor.value = color;\n },\n onDeactivate: () => (colorButton.iconColor.value = '#000'),\n });\n\n // link\n const link = useToolbarItem({\n type: 'dropdown',\n name: 'link',\n markName: 'link',\n icon: toolbarIcons.link,\n active: false,\n tooltip: 'Link',\n options: [\n {\n type: 'render',\n key: 'linkDropdown',\n render: () => renderLinkDropdown(link),\n },\n ],\n onActivate: ({ href }) => {\n if (href) link.attributes.value = { href };\n else link.attributes.value = {};\n link.expand.value = true;\n },\n onDeactivate: () => {\n link.attributes.value = {};\n link.expand.value = false;\n },\n });\n\n function renderLinkDropdown(link) {\n const handleSubmit = ({ href }) => {\n closeDropdown(link);\n link.attributes.value.link = { href };\n const itemWithCommand = { ...link, command: 'toggleLink' };\n superToolbar.emitCommand({ item: itemWithCommand, argument: { href, text: '' } });\n if (!href) link.active.value = false;\n };\n\n return h('div', {}, [\n h(LinkInput, {\n onSubmit: handleSubmit,\n href: link.attributes.value.href,\n goToAnchor: () => {\n closeDropdown(link);\n if (!superToolbar.activeEditor || !link.attributes.value?.href) return;\n const anchorName = link.attributes.value?.href?.slice(1);\n const container = superToolbar.activeEditor.element;\n const anchor = container.querySelector(`a[name='${anchorName}']`);\n if (anchor) scrollToElement(anchor);\n },\n }),\n ]);\n }\n\n const linkInput = useToolbarItem({\n type: 'options',\n name: 'linkInput',\n command: 'toggleLink',\n active: false,\n });\n link.childItem = linkInput;\n linkInput.parentItem = link;\n\n // image\n const image = useToolbarItem({\n type: 'button',\n name: 'image',\n command: 'startImageUpload',\n icon: toolbarIcons.image,\n active: false,\n tooltip: 'Image',\n disabled: false,\n });\n\n // table\n const tableItem = useToolbarItem({\n type: 'dropdown',\n name: 'table',\n icon: toolbarIcons.table,\n hideLabel: true,\n labelAttr: 'table',\n active: false,\n tooltip: 'Insert table',\n command: 'insertTable',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'table',\n type: 'render',\n render: () => renderTableGrid(tableItem),\n },\n ],\n });\n\n function renderTableGrid(tableItem) {\n const handleSelect = (e) => {\n superToolbar.emitCommand({ item: tableItem, argument: e });\n closeDropdown(tableItem);\n };\n\n return h('div', {}, [\n h(TableGrid, {\n onSelect: handleSelect,\n }),\n ]);\n }\n\n // table actions\n const tableActionsItem = useToolbarItem({\n type: 'dropdown',\n name: 'tableActions',\n command: 'executeTableCommand',\n icon: toolbarIcons.tableActions,\n hideLabel: true,\n disabled: true,\n options: [\n {\n type: 'render',\n render: () => renderTableActions(tableActionsItem),\n },\n ],\n });\n\n const tableActionsOptions = [\n { \n label: 'Insert row above',\n command: 'addRowBefore',\n icon: toolbarIcons.addRowBefore,\n },\n { \n label: 'Insert row below',\n command: 'addRowAfter',\n icon: toolbarIcons.addRowAfter,\n },\n { \n label: 'Insert column left',\n command: 'addColumnBefore',\n icon: toolbarIcons.addColumnBefore,\n },\n { \n label: 'Insert column right',\n command: 'addColumnAfter',\n icon: toolbarIcons.addColumnAfter,\n bottomBorder: true,\n },\n { \n label: 'Delete row',\n command: 'deleteRow',\n icon: toolbarIcons.deleteRow,\n },\n { \n label: 'Delete column',\n command: 'deleteColumn',\n icon: toolbarIcons.deleteColumn,\n },\n { \n label: 'Delete table',\n command: 'deleteTable',\n icon: toolbarIcons.deleteTable,\n },\n { \n label: 'Transparent borders',\n command: 'deleteCellAndTableBorders',\n icon: toolbarIcons.deleteBorders,\n bottomBorder: true,\n },\n { \n label: 'Merge cells',\n command: 'mergeCells',\n icon: toolbarIcons.mergeCells,\n },\n { \n label: 'Split cell',\n command: 'splitCell',\n icon: toolbarIcons.splitCell,\n },\n { \n label: 'Fix tables',\n command: 'fixTables',\n icon: toolbarIcons.fixTables,\n },\n ];\n\n function renderTableActions(tableActionsItem) {\n return h(TableActions, {\n options: tableActionsOptions,\n onSelect: (event) => {\n closeDropdown(tableActionsItem);\n const { command } = event;\n superToolbar.emitCommand({ item: tableActionsItem, argument: { command } });\n },\n });\n };\n\n // alignment\n const alignment = useToolbarItem({\n type: 'dropdown',\n name: 'textAlign',\n tooltip: 'Alignment',\n icon: toolbarIcons.alignLeft,\n command: 'setTextAlign',\n hasCaret: true,\n markName: 'textAlign',\n labelAttr: 'textAlign',\n suppressActiveHighlight: true,\n options: [\n {\n type: 'render',\n render: () => {\n const handleSelect = (e) => {\n closeDropdown(alignment);\n const buttonWithCommand = { ...alignment, command: 'setTextAlign' };\n buttonWithCommand.command = 'setTextAlign';\n superToolbar.emitCommand({ item: buttonWithCommand, argument: e });\n setAlignmentIcon(alignment, e);\n };\n\n return h('div', {}, [\n h(AlignmentButtons, {\n onSelect: handleSelect,\n }),\n ]);\n },\n key: 'alignment',\n },\n ],\n onActivate: ({ textAlign }) => {\n setAlignmentIcon(alignment, textAlign);\n },\n onDeactivate: () => {\n setAlignmentIcon(alignment, 'left');\n },\n });\n\n const setAlignmentIcon = (alignment, e) => {\n let alignValue = e === 'both' ? 'justify' : e;\n let icons = {\n left: toolbarIcons.alignLeft,\n right: toolbarIcons.alignRight,\n center: toolbarIcons.alignCenter,\n justify: toolbarIcons.alignJustify,\n };\n\n let icon = icons[alignValue] ?? icons.left;\n alignment.icon.value = icon;\n };\n\n // bullet list\n const bulletedList = useToolbarItem({\n type: 'button',\n name: 'list',\n command: 'toggleBulletList',\n icon: toolbarIcons.bulletList,\n active: false,\n tooltip: 'Bullet list',\n });\n\n // number list\n const numberedList = useToolbarItem({\n type: 'button',\n name: 'numberedlist',\n command: 'toggleOrderedList',\n icon: toolbarIcons.numberedList,\n active: false,\n tooltip: 'Numbered list',\n });\n\n // indent left\n const indentLeft = useToolbarItem({\n type: 'button',\n name: 'indentleft',\n command: 'decreaseTextIndent',\n icon: toolbarIcons.indentLeft,\n active: false,\n tooltip: 'Left indent',\n disabled: false,\n });\n\n // indent right\n const indentRight = useToolbarItem({\n type: 'button',\n name: 'indentright',\n command: 'increaseTextIndent',\n icon: toolbarIcons.indentRight,\n active: false,\n tooltip: 'Right indent',\n disabled: false,\n });\n\n // overflow\n const overflow = useToolbarItem({\n type: 'overflow',\n name: 'overflow',\n command: 'toggleOverflow',\n icon: toolbarIcons.overflow,\n active: false,\n disabled: false,\n });\n\n // const overflowOptions = useToolbarItem({\n // type: 'options',\n // name: 'overflowOptions',\n // preCommand(self, argument) {\n // self.parentItem.active = false;\n // },\n // });\n\n // zoom\n const zoom = useToolbarItem({\n type: 'dropdown',\n name: 'zoom',\n allowWithoutEditor: true,\n tooltip: 'Zoom',\n defaultLabel: '100%',\n label: '100%',\n hasCaret: true,\n command: 'setZoom',\n isWide: true,\n inlineTextInputVisible: false,\n hasInlineTextInput: true,\n options: [\n { label: '50%', key: 0.5 },\n { label: '75%', key: 0.75 },\n { label: '90%', key: 0.9 },\n { label: '100%', key: 1 },\n { label: '125%', key: 1.25 },\n { label: '150%', key: 1.5 },\n { label: '200%', key: 2 },\n ],\n onActivate: ({ zoom: value }) => {\n if (!value) return;\n\n zoom.label.value = value;\n },\n });\n\n // undo\n const undo = useToolbarItem({\n type: 'button',\n name: 'undo',\n disabled: true,\n tooltip: 'Undo',\n command: 'undo',\n icon: toolbarIcons.undo,\n group: 'left',\n onDeactivate: () => {\n undo.disabled.value = !superToolbar.undoDepth;\n },\n });\n\n // redo\n const redo = useToolbarItem({\n type: 'button',\n disabled: true,\n name: 'redo',\n tooltip: 'Redo',\n command: 'redo',\n icon: toolbarIcons.redo,\n group: 'left',\n onDeactivate: () => {\n redo.disabled.value = !superToolbar.redoDepth;\n },\n });\n\n // Track changes test buttons\n const toggleTrackChanges = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChanges',\n tooltip: 'Track Changes',\n command: 'toggleTrackChanges',\n icon: toolbarIcons.trackChanges,\n group: 'left',\n });\n\n const acceptTrackedChangeBySelection = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'acceptTrackedChangeBySelection',\n tooltip: 'Accept changes under selection',\n command: 'acceptTrackedChangeBySelection',\n icon: toolbarIcons.trackChangesAccept,\n group: 'left',\n });\n\n const rejectTrackedChangeOnSelection = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'rejectTrackedChangeOnSelection',\n tooltip: 'Reject changes under selection',\n command: 'rejectTrackedChangeOnSelection',\n icon: toolbarIcons.trackChangesReject,\n group: 'left',\n });\n\n const toggleTrackChangesOriginal = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChangesShowOriginal',\n tooltip: 'Toggle Show Original',\n command: 'toggleTrackChangesShowOriginal',\n icon: toolbarIcons.trackChangesOriginal,\n group: 'left',\n });\n\n const toggleTrackChangesFinal = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChangesShowFinal',\n tooltip: 'Toggle Show Final',\n command: 'toggleTrackChangesShowFinal',\n icon: toolbarIcons.trackChangesFinal,\n group: 'left',\n });\n //\n\n // search\n // const search = useToolbarItem({\n // type: \"button\",\n // allowWithoutEditor: true,\n // name: \"search\",\n // tooltip: \"Search\",\n // disabled: true,\n // icon: \"fas fa-magnifying-glass\", // change to svg\n // group: \"right\",\n // });\n\n const clearFormatting = useToolbarItem({\n type: 'button',\n name: 'clearFormatting',\n command: 'clearFormat',\n tooltip: 'Clear formatting',\n icon: toolbarIcons.clearFormatting,\n });\n\n const toolbarItemsMobile = [\n bold,\n italic,\n underline,\n indentRight,\n indentLeft,\n // search,\n overflow,\n ].map((item) => item.name);\n\n const copyFormat = useToolbarItem({\n type: 'button',\n name: 'copyFormat',\n tooltip: 'Format painter',\n icon: toolbarIcons.copyFormat,\n command: 'copyFormat',\n active: false,\n });\n\n const getDocumentOptionsAfterRole = (role, documentOptions) => {\n if (role === 'editor') return documentOptions;\n else if (role === 'suggester') return documentOptions.filter((option) => option.value === 'suggesting');\n else return documentOptions.filter((option) => option.value === 'viewing');\n };\n\n const getDefaultLabel = (role) => {\n if (role === 'editor') return 'Editing';\n else if (role === 'suggester') return 'Suggesting';\n else return 'Viewing';\n };\n\n const documentMode = useToolbarItem({\n type: 'dropdown',\n name: 'documentMode',\n command: 'setDocumentMode',\n allowWithoutEditor: true,\n icon: toolbarIcons.documentMode,\n defaultLabel: getDefaultLabel(role),\n label: getDefaultLabel(role),\n hasCaret: role === 'editor',\n isWide: true,\n style: { display: 'flex', justifyContent: 'flex-end' },\n inlineTextInputVisible: false,\n hasInlineTextInput: false,\n group: 'right',\n disabled: role !== 'editor',\n attributes: {\n dropdownPosition: 'right',\n className: 'toolbar-item--doc-mode',\n },\n options: [\n {\n type: 'render',\n render: () => renderDocumentMode(documentMode),\n },\n ],\n });\n\n const documentOptions = [\n { \n label: 'Editing', \n value: 'editing', \n icon: toolbarIcons.documentEditingMode, \n description: 'Edit document directly' \n },\n { \n label: 'Suggesting', \n value: 'suggesting', \n icon: toolbarIcons.documentSuggestingMode, \n description: 'Edits become suggestions' \n },\n { \n label: 'Viewing', \n value: 'viewing', \n icon: toolbarIcons.documentViewingMode, \n description: 'View clean version of document only' \n },\n ];\n\n function renderDocumentMode(renderDocumentButton) {\n const optionsAfterRole = getDocumentOptionsAfterRole(role, documentOptions);\n return h(DocumentMode, {\n options: optionsAfterRole,\n onSelect: (item) => {\n closeDropdown(renderDocumentButton);\n const { label, icon } = item;\n documentMode.label.value = label;\n documentMode.icon.value = icon;\n superToolbar.emitCommand({ item: documentMode, argument: label });\n },\n });\n };\n\n const pageBreakTool = useToolbarItem({\n type: 'button',\n name: 'pageBreakTool',\n command: 'insertPageBreak',\n icon: toolbarIcons.pageBreak,\n active: false,\n tooltip: 'Insert page break',\n });\n\n // define sizes to calculate toolbar overflow items\n const controlSizes = new Map([\n ['separator', 20],\n ['zoom', 71],\n ['fontFamily', 118],\n ['fontSize', 57],\n ['textAlign', 40],\n ['linkedStyles', 142],\n ['documentMode', 47],\n ['default', 32],\n ]);\n \n const ruler = useToolbarItem({\n type: 'button',\n name: 'ruler',\n command: 'toggleRuler',\n icon: toolbarIcons.ruler,\n active: false,\n tooltip: 'Show or hide ruler',\n });\n\n const linkedStyles = useToolbarItem({\n type: 'dropdown',\n name: 'linkedStyles',\n command: 'setLinkedStyle',\n icon: toolbarIcons.paintbrush,\n defaultLabel: 'Format text',\n label: 'Format text',\n hasCaret: true,\n isWide: true,\n style: { width: '140px' },\n suppressActiveHighlight: true,\n disabled: false,\n attributes: {\n className: 'toolbar-item--linked-styles',\n },\n options: [\n {\n type: 'render',\n key: 'linkedStyle',\n render: () => {\n const handleSelect = (style) => {\n closeDropdown(linkedStyles);\n const itemWithCommand = { ...linkedStyles, command: 'setLinkedStyle' };\n superToolbar.emitCommand({ item: itemWithCommand, argument: style });\n };\n\n return h('div', {}, [\n h(LinkedStyle, {\n editor: superToolbar.activeEditor,\n onSelect: handleSelect,\n })\n ])\n }\n }\n ],\n onActivate: () => {\n linkedStyles.disabled.value = false;\n },\n onDeactivate: () => {\n linkedStyles.disabled.value = true;\n },\n });\n\n // Responsive toolbar calculations\n const breakpoints = {\n sm: 768,\n md: 1024,\n lg: 1280,\n xl: 1410,\n };\n const stickyItemsWidth = 120;\n const toolbarPadding = 32;\n\n const itemsToHideXL = ['linkedStyles', 'clearFormatting', 'copyFormat', 'ruler'];\n const itemsToHideSM = ['zoom', 'fontFamily', 'fontSize', 'redo'];\n\n let toolbarItems = [\n undo,\n redo,\n\n // Dev - tracked changes\n // toggleTrackChanges,\n // acceptTrackedChangeBySelection,\n // rejectTrackedChangeOnSelection,\n // toggleTrackChangesOriginal,\n // toggleTrackChangesFinal,\n\n zoom,\n separator,\n fontButton,\n separator,\n fontSize,\n separator,\n bold,\n italic,\n underline,\n colorButton,\n highlight,\n separator,\n link,\n image,\n tableItem,\n tableActionsItem,\n separator,\n alignment,\n bulletedList,\n numberedList,\n indentLeft,\n indentRight,\n separator,\n linkedStyles,\n separator,\n pageBreakTool,\n copyFormat,\n clearFormatting,\n ruler,\n overflow,\n documentMode,\n // search,\n ];\n\n // Hide separators on small screens\n if (windowWidth <= breakpoints.md) {\n toolbarItems = toolbarItems.filter((item) => item.type !== 'separator');\n }\n\n // If no pagination, remove the page break tool\n if (!superToolbar.config.pagination) {\n toolbarItems = toolbarItems.filter((item) => item.name.value !== 'pageBreakTool');\n }\n\n // Remove docx only items\n if (superToolbar.config.mode !== 'docx') {\n const getLinkedStylesIndex = toolbarItems.findIndex((item) => item.name.value === 'linkedStyles');\n toolbarItems.splice(getLinkedStylesIndex - 1, 2);\n toolbarItems = toolbarItems.filter((item) => item.name.value !== 'ruler');\n }\n\n // Track changes test buttons\n const devItems = [toggleTrackChanges, toggleTrackChangesOriginal, toggleTrackChangesFinal];\n if (!isDev) {\n if (role === 'viewer') {\n devItems.push(...[acceptTrackedChangeBySelection, rejectTrackedChangeOnSelection]);\n }\n toolbarItems = toolbarItems.filter((item) => !devItems.includes(item));\n }\n\n // always visible items\n const toolbarItemsSticky = [undo, overflow, documentMode].map((item) => item.name);\n const isStickyItem = (item) => toolbarItemsSticky.includes(item.name);\n\n const overflowItems = [];\n const visibleItems = [];\n\n // initial width with padding\n let totalWidth = toolbarPadding + stickyItemsWidth;\n\n toolbarItems.forEach((item) => {\n const itemWidth = controlSizes.get(item.name.value) || controlSizes.get('default');\n\n if (windowWidth < breakpoints.xl && itemsToHideXL.includes(item.name.value)) {\n overflowItems.push(item);\n if (item.name.value === 'linkedStyles') {\n const linkedStylesIdx = toolbarItems.findIndex((item) => item.name.value === 'linkedStyles');\n toolbarItems.splice(linkedStylesIdx + 1, 1);\n }\n return;\n }\n\n if (windowWidth < breakpoints.sm && itemsToHideSM.includes(item.name.value)) {\n overflowItems.push(item);\n return;\n }\n\n if (isStickyItem(item)) {\n visibleItems.push(item);\n totalWidth += itemWidth;\n return;\n }\n\n if (totalWidth < windowWidth) {\n visibleItems.push(item);\n totalWidth += itemWidth;\n } else {\n overflowItems.push(item);\n }\n });\n\n return {\n defaultItems: visibleItems,\n overflowItems: overflowItems.filter((item) => item.type !== 'separator'),\n };\n};\n\nexport const setHistoryButtonStateOnUpdate =\n (toolbarItemsRef) =>\n ({ editor, transaction }) => {\n // console.debug('[SuperEditor dev] Document updated', editor);\n // activeEditor = editor;\n\n const undo = toolbarItemsRef.value.find((item) => item.name === 'undo');\n const redo = toolbarItemsRef.value.find((item) => item.name === 'redo');\n\n undo.disabled = undoDepth(editor.state) <= 0;\n redo.disabled = redoDepth(editor.state) <= 0;\n };\n","const ACCEPT_IMAGE_TYPES = ['.jpg', '.jpeg', '.png', 'image/jpeg', 'image/png'];\n\nexport const getFileOpener = () => {\n let fileInput = document.createElement('input');\n fileInput.type = 'file';\n\n let acceptTypes = ACCEPT_IMAGE_TYPES;\n fileInput.accept = acceptTypes.join(',');\n\n const openFile = () => {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files) return resolve(null);\n const file = files.item(0);\n if (!file) return resolve(null);\n return resolve({ file });\n };\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n };\n\n return openFile;\n};\n","export const handleImageUpload = (file) => {\n return new Promise((resolve, reject) => {\n let reader = new FileReader();\n reader.onload = (event) => resolve(event.target.result);\n reader.onerror = reject;\n setTimeout(() => reader.readAsDataURL(file), 250);\n });\n};\n","/**\n * Process an uploaded image to ensure it fits within the editor's content area.\n * @param {string | File} fileData Base 64 string or File object.\n * @returns {Promise<string | File>} Resolves with a base 64 string or File object.\n */\nexport const processUploadedImage = (fileData, editor) => {\n return new Promise((resolve, reject) => {\n const img = new window.Image();\n\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const { width, height } = getAllowedImageDimensions(\n img.width,\n img.height,\n editor,\n );\n canvas.width = width;\n canvas.height = height;\n\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, width, height);\n\n if (typeof fileData === 'string' ) {\n const resizedBase64 = canvas.toDataURL();\n resolve(resizedBase64);\n } else {\n canvas.toBlob((blob) => {\n const updatedFile = new File([blob], fileData.name, {\n type: fileData.type,\n lastModified: Date.now(),\n });\n resolve({ file: updatedFile, width, height });\n });\n }\n };\n img.onerror = (error) => reject(error);\n img.src = typeof fileData === 'string' ? fileData : URL.createObjectURL(fileData);\n });\n};\n\nexport const getAllowedImageDimensions = (width, height, editor) => {\n const { width: maxWidth, height: maxHeight } = editor.getMaxContentSize();\n if (!maxWidth || !maxHeight) return { width, height };\n\n let adjustedWidth = width;\n let adjustedHeight = height;\n const aspectRatio = width / height;\n\n if (height > maxHeight) {\n adjustedHeight = maxHeight;\n adjustedWidth = Math.round(maxHeight * aspectRatio);\n }\n\n if (adjustedWidth > maxWidth) {\n adjustedWidth = maxWidth;\n adjustedHeight = Math.round(maxWidth / aspectRatio);\n }\n\n return { width: adjustedWidth, height: adjustedHeight };\n};\n","import { ImagePlaceholderPluginKey, findPlaceholder } from './imagePlaceholderPlugin.js';\nimport { handleImageUpload as handleImageUploadDefault } from './handleImageUpload.js';\nimport { processUploadedImage } from './processUploadedImage.js';\n\nexport const startImageUpload = async ({ editor, view, file }) => {\n // Handler from config or default\n let imageUploadHandler =\n typeof editor.options.handleImageUpload === 'function'\n ? editor.options.handleImageUpload\n : handleImageUploadDefault;\n\n let fileSizeMb = (file.size / (1024 * 1024)).toFixed(4);\n\n if (fileSizeMb > 5) {\n window.alert('Image size must be less than 5MB');\n return;\n }\n\n let width;\n let height;\n try {\n // Will process the image file in place\n const processedImageResult = await processUploadedImage(file, editor);\n width = processedImageResult.width;\n height = processedImageResult.height;\n file = processedImageResult.file;\n } catch (err) {\n console.warn('Error processing image:', err);\n return;\n }\n\n // A fresh object to act as the ID for this upload\n let id = {};\n\n // Replace the selection with a placeholder\n let { tr, schema } = view.state;\n\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n let imageMeta = {\n type: 'add',\n pos: tr.selection.from,\n id,\n };\n\n tr.setMeta(ImagePlaceholderPluginKey, imageMeta);\n view.dispatch(tr);\n\n imageUploadHandler(file).then(\n (url) => {\n let fileName = file.name.replace(' ', '_');\n let placeholderPos = findPlaceholder(view.state, id);\n\n // If the content around the placeholder has been deleted,\n // drop the image\n if (placeholderPos == null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n let removeMeta = { type: 'remove', id };\n\n let mediaPath = `word/media/${fileName}`;\n let imageNode = schema.nodes.image.create({\n src: mediaPath,\n size: { width, height },\n });\n\n editor.storage.image.media = Object.assign(editor.storage.image.media, { [mediaPath]: url });\n\n // If we are in collaboration, we need to share the image with other clients\n if (editor.options.ydoc) {\n editor.commands.addImageToCollaboration({ mediaPath, fileData: url });\n }\n\n view.dispatch(\n view.state.tr\n .replaceWith(placeholderPos, placeholderPos, imageNode) // or .insert(placeholderPos, imageNode)\n .setMeta(ImagePlaceholderPluginKey, removeMeta),\n );\n },\n () => {\n let removeMeta = { type: 'remove', id };\n\n // On failure, just clean up the placeholder\n view.dispatch(tr.setMeta(ImagePlaceholderPluginKey, removeMeta));\n },\n );\n};\n","import EventEmitter from 'eventemitter3';\nimport { createApp, h } from 'vue';\nimport { undoDepth, redoDepth } from 'prosemirror-history';\nimport { TextSelection } from 'prosemirror-state';\nimport { makeDefaultItems } from './defaultItems';\nimport { getActiveFormatting } from '@core/helpers/getActiveFormatting.js';\nimport { vClickOutside } from '@harbour-enterprises/common';\nimport Toolbar from './Toolbar.vue';\nimport { startImageUpload, getFileOpener } from '../../extensions/image/imageHelpers/index.js';\nimport { findParentNode } from '@helpers/index.js';\nimport { toolbarIcons } from './toolbarIcons.js';\nimport { getQuickFormatList } from '@extensions/linked-styles/linked-styles.js';\nimport { getAvailableColorOptions, makeColorOption, renderColorOptions } from './color-dropdown-helpers.js';\nimport { isInTable } from '@helpers/isInTable.js';\n\nexport class SuperToolbar extends EventEmitter {\n config = {\n element: null,\n toolbarGroups: ['left', 'center', 'right'],\n role: 'editor',\n pagination: false,\n icons: { ...toolbarIcons },\n mode: 'docx',\n };\n\n #interceptedCommands = {\n setZoom: ({ item, argument }) => {\n // Currently only set up to work with full SuperDoc\n if (!argument) return;\n item.onActivate({ zoom: argument });\n\n this.emit('superdoc-command', { item, argument });\n const layers = document.querySelector('.layers');\n if (!layers) return;\n\n const isMobileDevice = typeof screen.orientation !== 'undefined';\n // 768px breakpoint doesn't consider iPad in portrait orientation\n const isSmallScreen = window.matchMedia('(max-width: 834px)').matches;\n \n // Zoom property doesn't work correctly when testing on mobile devices\n if (isMobileDevice && isSmallScreen) {\n layers.style.transformOrigin = '0 0';\n layers.style.transform = `scale(${parseInt(argument) / 100})`;\n } else {\n layers.style.zoom = parseInt(argument) / 100;\n }\n\n this.superdoc.superdocStore.activeZoom = parseInt(argument);\n },\n\n setDocumentMode: ({ item, argument }) => {\n if (!argument) return;\n\n this.emit('superdoc-command', { item, argument });\n },\n\n setFontSize: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument }, () => {\n this.activeEditor?.commands.setFieldAnnotationsFontSize(argument, true);\n });\n },\n\n setFontFamily: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument }, () => {\n this.activeEditor?.commands.setFieldAnnotationsFontFamily(argument, true);\n });\n },\n\n setColor: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n \n setHighlight: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n\n toggleRuler: ({ item, argument }) => {\n this.superdoc.toggleRuler();\n },\n\n startImageUpload: async ({ item, argument }) => {\n let open = getFileOpener();\n let result = await open();\n\n if (!result?.file) {\n return;\n }\n\n startImageUpload({\n editor: this.activeEditor,\n view: this.activeEditor.view,\n file: result.file,\n });\n },\n\n increaseTextIndent: ({ item, argument }) => {\n let command = item.command;\n let { state } = this.activeEditor;\n let listItem = findParentNode((node) => node.type.name === 'listItem')(state.selection);\n\n if (listItem) {\n return this.activeEditor.chain().sinkListItem('listItem').updateOrderedListStyleType().run();\n }\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n },\n\n decreaseTextIndent: ({ item, argument }) => {\n let command = item.command;\n let { state } = this.activeEditor;\n let listItem = findParentNode((node) => node.type.name === 'listItem')(state.selection);\n\n if (listItem) {\n return this.activeEditor.chain().liftListItem('listItem').updateOrderedListStyleType().run();\n }\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n },\n\n toggleBold: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('bold', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleItalic: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('italic', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleUnderline: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('underline', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleLink: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n\n // move cursor to end\n const { view } = this.activeEditor;\n const endPos = view.state.selection.$to.pos;\n const selection = new TextSelection(view.state.doc.resolve(endPos));\n const tr = view.state.tr.setSelection(selection);\n const state = view.state.apply(tr);\n view.updateState(state);\n\n setTimeout(() => {\n view.focus();\n }, 100);\n }\n this.updateToolbarState();\n },\n\n insertTable: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n\n executeTableCommand: ({ item, argument }) => {\n if (!argument) return;\n \n let command = argument.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n\n this.updateToolbarState();\n },\n };\n\n constructor(config) {\n super();\n\n this.config = { ...this.config, ...config };\n this.toolbarItems = [];\n this.overflowItems = [];\n this.documentMode = config.documentMode || 'editing';\n this.isDev = config.isDev || false;\n this.superdoc = config.superdoc;\n this.role = config.role || 'editor';\n \n this.config.icons = {\n ...toolbarIcons,\n ...config.icons,\n };\n\n this.#makeToolbarItems(this, this.config.icons, config.isDev);\n\n let el = null;\n if (this.config.element) {\n el = document.getElementById(this.config.element);\n if (!el) {\n console.warn(`[super-toolbar 🎨] Element not found: ${this.config.element}`);\n return;\n }\n }\n\n this.app = createApp(Toolbar);\n this.app.directive('click-outside', vClickOutside);\n this.app.config.globalProperties.$toolbar = this;\n if (el) this.toolbar = this.app.mount(el);\n this.activeEditor = config.editor || null;\n this.updateToolbarState();\n }\n\n log(...args) {\n console.debug('[🎨 super-toolbar]', ...args);\n }\n\n setZoom(percent_int) {\n const allItems = [...this.toolbarItems, ...this.overflowItems];\n const item = allItems.find((item) => item.name.value === 'zoom');\n this.#interceptedCommands.setZoom({ item, argument: percent_int });\n }\n\n /**\n * The toolbar expects an active Super Editor instance.\n * @param {*} editor\n */\n setActiveEditor(editor) {\n this.activeEditor = editor;\n this.activeEditor.on('transaction', this.onEditorTransaction.bind(this));\n }\n\n getToolbarItemByGroup(groupName) {\n return this.toolbarItems.filter((item) => item.group.value === groupName);\n }\n\n #makeToolbarItems(superToolbar, icons, isDev = false) {\n const documentWidth = document.documentElement.clientWidth; // take into account the scrollbar\n const { defaultItems, overflowItems } = makeDefaultItems(superToolbar, isDev, documentWidth, this.role, icons);\n this.toolbarItems = defaultItems;\n this.overflowItems = overflowItems;\n }\n\n #initDefaultFonts() {\n if (!this.activeEditor || !this.activeEditor.converter) return;\n const { typeface = 'Arial', fontSizePt = 12 } = this.activeEditor.converter.getDocumentDefaultStyles() ?? {};\n const fontSizeItem = this.toolbarItems.find((item) => item.name.value === 'fontSize');\n if (fontSizeItem) fontSizeItem.defaultLabel.value = fontSizePt;\n\n const fontFamilyItem = this.toolbarItems.find((item) => item.name.value === 'fontFamily');\n if (fontFamilyItem) fontFamilyItem.defaultLabel.value = typeface;\n }\n \n #updateHighlightColors() {\n if (!this.activeEditor || !this.activeEditor.converter) return;\n if (!this.activeEditor.converter.docHiglightColors.size) return;\n \n const highlightItem = this.toolbarItems.find((item) => item.name.value === 'highlight');\n\n const pickerColorOptions = getAvailableColorOptions();\n const perChunk = 7; // items per chunk\n\n const result = Array.from(this.activeEditor.converter.docHiglightColors).reduce((resultArray, item, index) => {\n const chunkIndex = Math.floor(index / perChunk);\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [];\n }\n\n if (!pickerColorOptions.includes(item)) resultArray[chunkIndex].push(makeColorOption(item));\n return resultArray;\n }, []);\n \n const option = {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(this, highlightItem, result),\n }\n\n highlightItem.nestedOptions.value = [option];\n }\n\n\n /**\n * Update the toolbar state. Expects a list of marks in the form: { name, attrs }\n * @param {Object} marks\n */\n updateToolbarState() {\n this.#updateToolbarHistory();\n this.#initDefaultFonts();\n this.#updateHighlightColors();\n\n // Decativate toolbar items if no active editor\n // This will skip buttons that are marked as allowWithoutEditor\n if (!this.activeEditor || this.documentMode === 'viewing') {\n this.#deactivateAll();\n return;\n }\n\n const marks = getActiveFormatting(this.activeEditor);\n const inTable = isInTable(this.activeEditor.state);\n\n this.toolbarItems.forEach((item) => {\n item.resetDisabled();\n\n // Linked Styles dropdown behaves a bit different from other buttons.\n // We need to disable it manually if there are no linked styles to show\n if (item.name.value === 'linkedStyles') {\n if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {\n return item.deactivate();\n } else {\n return item.activate();\n }\n };\n\n const activeMark = marks.find((mark) => mark.name === item.name.value);\n\n if (activeMark) {\n item.activate(activeMark.attrs);\n } else {\n item.deactivate();\n }\n\n if (item.name.value === 'tableActions') {\n if (inTable) item.disabled.value = false;\n else item.disabled.value = true;\n }\n });\n }\n\n onToolbarResize = () => {\n this.#makeToolbarItems(this, this.config.icons, this.isDev);\n if (this.role === 'viewer') {\n this.#deactivateAll();\n };\n };\n\n #deactivateAll() {\n this.activeEditor = null;\n this.toolbarItems.forEach((item) => {\n const { allowWithoutEditor } = item;\n if (allowWithoutEditor.value) return;\n item.setDisabled(true);\n });\n }\n\n #updateToolbarHistory() {\n if (!this.activeEditor) return;\n this.undoDepth = undoDepth(this.activeEditor.state);\n this.redoDepth = redoDepth(this.activeEditor.state);\n }\n\n /**\n * React to editor transactions. Might want to debounce this.\n */\n onEditorTransaction({ editor, transaction }) {\n if (!transaction.docChanged && !transaction.selectionSet) return;\n this.updateToolbarState();\n }\n\n /**\n * Main handler for toolbar commands.\n *\n * @param {Object} item is an instance of the useToolbarItem composable\n * @param {Object} argument is the argument passed to the command\n */\n emitCommand({ item, argument }) {\n const { command } = item;\n \n if (!command) {\n return;\n }\n\n this.log('(emmitCommand) Command:', command, item, argument);\n\n // Check if we have a custom or overloaded command defined\n if (command in this.#interceptedCommands) {\n return this.#interceptedCommands[command]({ item, argument });\n }\n\n if (command in this.activeEditor?.commands) {\n this.activeEditor.commands[command](argument);\n this.updateToolbarState();\n } else {\n throw new Error(`[super-toolbar 🎨] Command not found: ${command}`);\n }\n }\n\n #runCommandWithArgumentOnly({ item, argument }, callback) {\n if (!argument || !this.activeEditor) return;\n\n let command = item.command;\n if (command in this.activeEditor?.commands) {\n this.activeEditor.commands[command](argument);\n if (typeof callback === 'function') callback(argument);\n this.updateToolbarState();\n }\n }\n}\n","/**\n * Adjusts pagination breaks based on editor zoom/positioning\n * \n * @param {HTMLElement} editorElem The editor container element\n * @param {Object} editor The editor instance\n * @returns {void}\n */\nexport function adjustPaginationBreaks(editorElem, editor) {\n if (!editorElem.value || !editor?.value?.options?.scale) return;\n\n const zoom = editor.value.options.scale;\n const bounds = editorElem.value.getBoundingClientRect();\n\n // Find all `.pagination-break-wrapper` nodes and adjust them\n const breakNodes = editorElem.value.querySelectorAll('.pagination-break-wrapper');\n let firstLeft;\n\n // We align all nodes to the first one, which is guaranteed to be in the right place\n // since its the original header and is not generated inside any document node\n breakNodes.forEach((node) => {\n const nodeBounds = node.getBoundingClientRect();\n const left = ((nodeBounds.left - bounds.left) / zoom) * -1 + 1;\n if (!firstLeft) firstLeft = left;\n if (left !== firstLeft) {\n const diff = left - firstLeft;\n node.style.transform = `translateX(${diff}px)`;\n }\n });\n};","import { TextSelection } from 'prosemirror-state';\n\n/**\n * Calculates cursor position based on margin click event\n * @param {MouseEvent} event Mousedown event\n * @param {SuperEditor} editor SuperEditor instance\n */\nexport const onMarginClickCursorChange = (event, editor) => {\n const y = event.clientY;\n const x = event.clientX;\n const { view } = editor;\n const editorRect = view.dom.getBoundingClientRect();\n\n let coords = {\n left: 0,\n top: y,\n };\n let isRightMargin = false;\n\n if (x > editorRect.right) {\n coords.left = editorRect.left + editorRect.width - 1;\n isRightMargin = true;\n } else if (x < editorRect.left) {\n coords.left = editorRect.left;\n }\n\n const pos = view.posAtCoords(coords)?.pos;\n if (pos) {\n let cursorPos = pos;\n\n if (isRightMargin) {\n const $pos = view.state.doc.resolve(pos);\n const charOffset = $pos.textOffset;\n\n const node = view.state.doc.nodeAt(pos);\n const text = node?.text;\n const charAtPos = text?.charAt(charOffset);\n\n cursorPos = node?.isText && charAtPos !== ' ' ? pos - 1 : pos;\n }\n\n const transaction = view.state.tr.setSelection(\n TextSelection.create(view.state.doc, cursorPos)\n );\n view.dispatch(transaction);\n view.focus();\n }\n}\n","<script setup>\nimport { ref, onMounted, onUnmounted, computed, reactive } from 'vue';\n\nconst emit = defineEmits(['margin-change']);\nconst props = defineProps({\n orientation: {\n type: String,\n default: 'horizontal',\n },\n length: {\n type: Number,\n default: 0,\n },\n editor: {\n type: Object,\n required: true,\n }\n});\n\nconst HANDLE_WIDTH = 5;\nconst MIN_WIDTH = 200;\nconst ruler = ref(null);\nconst rulerDefinition = ref([]);\nconst alignment = 'flex-end';\n\nconst rulerHandleOriginalColor = ref('#CCCCCC');\nconst rulerHandleActiveColor = ref('#2563EB66');\nconst pageSize = ref(null);\nconst pageMargins = ref(null);\n\nconst isDragging = ref(false);\nconst currentHandle = ref(null);\nconst leftHandle = reactive({ side: 'left', x: 0 });\nconst rightHandle = reactive({ side: 'right', x: 0 });\nconst showVerticalIndicator = ref(false);\nconst initialX = ref(0);\nlet offsetX = 0;\n\n/**\n * Generate the ruler.\n */\nconst initRuler = () => {\n const rulerItems = [];\n\n const { pageMargins: docMargins, pageSize: docSize } = props.editor.getPageStyles();\n pageSize.value = docSize;\n pageMargins.value = docMargins;\n\n rightHandle.x = docSize.width * 96 - docMargins.right * 96;\n leftHandle.x = docMargins.left * 96;\n\n for (let i = 0; i < docSize.width; i++) {\n const marginNum = 0.0625 * 96 - 0.5;\n const margin = `${marginNum}px`;\n\n const diff = docSize.width - i;\n rulerItems.push(...generateSection(1, 'main', '20%', margin, i));\n rulerItems.push(...generateSection(3, 'eighth', '10%', margin));\n rulerItems.push(...generateSection(1, 'half', '40%', margin));\n\n if (diff <= 0.5) break;\n rulerItems.push(...generateSection(3, 'eighth', '10%', margin));\n }\n return rulerItems;\n};\n\n/**\n * Generate a section of the ruler\n * \n * @param {Number} qty - Number of elements in the section\n * @param {String} size - Size of the element\n * @param {String} height - Height of the element\n * @param {String} margin - Margin of the element\n * @param {Number} index - Index of the element\n * @returns {Array} - Array of ruler elements\n */\nconst generateSection = (qty, size, height, margin, index) => {\n return Array.from({ length: qty }, (_, i) => {\n const item = {\n className: `${size}-unit ruler-section`,\n height,\n margin\n };\n\n if (index !== undefined) item.numbering = index;\n return item;\n });\n};\n\n\n/**\n * Get the style for a ruler element\n * \n * @param {Object} unit - Ruler element\n * @returns {Object} - Style object\n */\nconst getStyle = computed(() => (unit) => {\n return {\n width: '1px',\n minWidth: '1px',\n maxWidth: '1px',\n height: unit.height,\n backgroundColor: unit.color || '#666',\n marginLeft: unit.numbering === 0 ? null : unit.margin,\n marginRight: unit.margin,\n };\n});\n\n/**\n * Get the position of the margin handles\n * \n * @param {String} side - Side of the margin handle\n * @returns {Object} - Style object\n */\nconst getHandlePosition = computed(() => (side) => {\n const handle = side === 'left' ? leftHandle : rightHandle;\n return {\n left: `${handle.x}px`,\n };\n});\n\n/**\n * Get the style for the vertical indicator\n * \n * @returns {Object} - Style object\n */\nconst getVerticalIndicatorStyle = computed(() => {\n if (!ruler.value) return;\n const parentElement = ruler.value.parentElement;\n const editor = parentElement.querySelector('.super-editor');\n const editorBounds = editor.getBoundingClientRect();\n return {\n left: `${currentHandle.value.x}px`,\n minHeight : `${editorBounds.height}px`,\n };\n});\n\n/**\n * On mouse down, prepare to drag a margin handle and show the vertical indicator\n * \n * @param {Event} event - Mouse down event\n * @returns {void}\n */\nconst handleMouseDown = (event) => {\n isDragging.value = true;\n\n setRulerHandleActive();\n\n // Get the currently selected handle\n const itemId = event.currentTarget.id;\n currentHandle.value = itemId === 'left-margin-handle' ? leftHandle : rightHandle;\n initialX.value = currentHandle.value.x;\n offsetX = event.clientX - currentHandle.value.x;\n\n showVerticalIndicator.value = true;\n};\n\n/**\n * On mouse move, update the position of the margin handle\n * \n * @param {Event} event - Mouse move event\n * @returns {void}\n */\nconst handleMouseMove = (event) => {\n if (!isDragging.value) return\n \n const newLeft = event.clientX - offsetX;\n currentHandle.value.x = newLeft;\n\n if (currentHandle.value.side === 'left') {\n if (newLeft <= 0) {\n currentHandle.value.x = 0;\n } else if (newLeft >= rightHandle.x - MIN_WIDTH) {\n currentHandle.value.x = rightHandle.x - MIN_WIDTH;\n }\n } else {\n if (newLeft >= pageSize.value.width * 96) {\n currentHandle.value.x = pageSize.value.width * 96;\n } else if (newLeft <= leftHandle.x + MIN_WIDTH) {\n currentHandle.value.x = leftHandle.x + MIN_WIDTH;\n }\n }\n};\n\n/**\n * On mouse up, stop dragging the margin handle and emit the new margin value\n * \n * @returns {void}\n */\nconst handleMouseUp = () => {\n isDragging.value = false;\n showVerticalIndicator.value = false;\n\n setRulerHandleInactive();\n\n if (currentHandle.value && currentHandle.value.x !== initialX.value) {\n const marginValue = getNewMarginValue();\n emit('margin-change', {\n side: currentHandle.value.side,\n value: marginValue,\n });\n }\n};\n\n/**\n * Set the ruler handle color to active\n * \n * @returns {void}\n */\nconst setRulerHandleActive = () => {\n rulerHandleOriginalColor.value = rulerHandleActiveColor.value;\n}\n\n/**\n * Set the ruler handle color to inactive\n * \n * @returns {void}\n */\nconst setRulerHandleInactive = () => {\n rulerHandleOriginalColor.value = '#CCC';\n}\n\n/**\n * Get the new margin value based on the current handle position\n * \n * @returns {Number} - New margin value\n */\nconst getNewMarginValue = () => {\n if (currentHandle.value.side === 'left') return currentHandle.value.x / 96;\n else return (pageSize.value.width * 96 - currentHandle.value.x) / 96;\n};\n\n/**\n * Set ruler style variables\n * \n * @returns {Object} - Style object\n */\nconst getStyleVars = computed(() => {\n return {\n '--alignment': alignment,\n '--ruler-handle-color': rulerHandleOriginalColor.value,\n '--ruler-handle-active-color': rulerHandleActiveColor.value,\n };\n});\n\nonMounted(() => {\n rulerDefinition.value = initRuler();\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n});\n\nonUnmounted(() => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n});\n\n</script>\n\n<template>\n <div class=\"ruler\" ref=\"ruler\" :style=\"getStyleVars\">\n\n <!-- Margin handles -->\n <div\n class=\"margin-handle handle-left\"\n id=\"left-margin-handle\"\n @mousedown=\"handleMouseDown\"\n :style=\"getHandlePosition('left')\"\n ></div>\n <div\n class=\"margin-handle handle-right\"\n id=\"right-margin-handle\"\n @mousedown=\"handleMouseDown\"\n :style=\"getHandlePosition('right')\"\n ></div>\n <!-- Margin handles end -->\n \n <div v-if=\"showVerticalIndicator\" class=\"vertical-indicator\" :style=\"getVerticalIndicatorStyle\"></div>\n \n <!-- The ruler display -->\n <div v-for=\"unit in rulerDefinition\" :class=\"unit.className\" :style=\"getStyle(unit)\">\n <div class=\"numbering\">{{ unit.numbering }}</div>\n <div v-for=\"half in unit.elements\" :class=\"half.className\" :style=\"getStyle(half)\">\n <div v-for=\"quarter in half.elements\" :class=\"quarter.className\" :style=\"getStyle(quarter)\">\n </div>\n </div>\n </div>\n\n </div>\n</template>\n\n<style scoped>\n.vertical-indicator {\n position: absolute;\n height: 0px;\n min-width: 1px;\n background-color: #AAA;\n top: 20px;\n z-index: 100;\n}\n.margin-handle {\n width: 56px;\n min-width: 5px;\n max-width: 5px;\n background-color: var(--ruler-handle-color);\n height: 20px;\n cursor: grab;\n position: absolute;\n margin-left: -2px;\n border-radius: 4px 4px 0 0;\n transition: background-color 250ms ease;\n}\n.margin-handle:hover {\n background-color: var(--ruler-handle-active-color);\n}\n.ruler {\n max-height: 25px;\n height: 25px;\n max-width: 8.5in;\n display: flex;\n margin: 0;\n padding: 0;\n align-items: var(--alignment);\n box-sizing: border-box;\n position: relative;\n color: #666;\n}\n.mouse-tracker {\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 100%;\n background-color: var(--color);\n pointer-events: none;\n}\n.numbering {\n position: absolute;\n top: -16px;\n left: -2px;\n font-size: 10px;\n pointer-events: none;\n user-select: none;\n}\n.ruler-section {\n position: relative;\n display: flex;\n align-items: var(--alignment);\n pointer-events: none;\n user-select: none;\n}\n</style>","<script setup>\nimport 'tippy.js/dist/tippy.css';\nimport { NSkeleton } from 'naive-ui';\nimport { ref, onMounted, onBeforeUnmount, computed, shallowRef, reactive, nextTick } from 'vue';\nimport { Editor } from '@/index.js';\nimport { getStarterExtensions } from '@extensions/index.js';\nimport { adjustPaginationBreaks } from './pagination-helpers.js';\nimport { onMarginClickCursorChange } from './cursor-helpers.js';\nimport Ruler from './rulers/Ruler.vue';\n\nconst emit = defineEmits([\n 'editor-ready',\n 'editor-click',\n 'editor-keydown',\n 'comments-loaded',\n 'selection-update',\n]);\n\nconst props = defineProps({\n documentId: {\n type: String,\n required: false,\n },\n\n fileSource: {\n type: File,\n required: false,\n },\n\n state: {\n type: Object,\n required: false,\n default: () => null,\n },\n\n options: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n});\n\nconst editorReady = ref(false);\nconst editor = shallowRef(null);\n\nconst editorWrapper = ref(null);\nconst editorElem = ref(null);\n\nlet dataPollTimeout;\n\nconst stopPolling = () => {\n clearTimeout(dataPollTimeout);\n};\n\nconst pollForMetaMapData = (ydoc, retries = 10, interval = 500) => {\n const metaMap = ydoc.getMap('meta');\n\n const checkData = () => {\n const docx = metaMap.get('docx');\n if (docx) {\n stopPolling();\n initEditor({ content: docx });\n } else if (retries > 0) {\n console.debug(`Waiting for 'docx' data... retries left: ${retries}`);\n dataPollTimeout = setTimeout(checkData, interval); // Retry after the interval\n retries--;\n } else {\n console.warn('Failed to load docx data from meta map.');\n }\n };\n\n checkData();\n};\n\nconst loadNewFileData = async () => {\n try {\n const [docx, media, mediaFiles, fonts] = await Editor.loadXmlData(props.fileSource);\n return { content: docx, media, mediaFiles, fonts };\n } catch (err) {\n console.debug('Error loading new file data:', err);\n }\n};\n\nconst initializeData = async () => {\n // If we have the file, initialize immediately from file\n if (props.fileSource) {\n const fileData = await loadNewFileData();\n return initEditor(fileData);\n }\n\n // If we are in collaboration mode, wait for the docx data to be available\n else if (props.options.ydoc && props.options.collaborationProvider) {\n delete props.options.content;\n const ydoc = props.options.ydoc;\n const provider = props.options.collaborationProvider;\n const handleSynced = () => {\n pollForMetaMapData(ydoc);\n // Remove the synced event listener.\n // Avoids re-initializing the editor in case the connection is lost and reconnected\n provider.off('synced', handleSynced);\n }\n provider.on('synced', handleSynced);\n }\n};\n\nconst getExtensions = () => {\n const extensions = getStarterExtensions();\n if (!props.options.pagination) {\n return extensions.filter(ext => ext.name !== 'pagination');\n }\n return extensions;\n};\n\nconst initEditor = async ({ content, media = {}, mediaFiles = {}, fonts = {} } = {}) => {\n editor.value = new Editor({\n mode: 'docx',\n element: editorElem.value,\n fileSource: props.fileSource,\n extensions: getExtensions(),\n externalExtensions: props.options.externalExtensions,\n documentId: props.documentId,\n content,\n media,\n mediaFiles,\n fonts,\n ...props.options,\n });\n\n editor.value.on('paginationUpdate', () => {\n adjustPaginationBreaks(editorElem, editor);\n });\n\n editor.value.on('collaborationReady', () => {\n setTimeout(() => {\n editorReady.value = true;\n }, 150);\n });\n};\n\nconst handleSuperEditorKeydown = (event) => {\n emit('editor-keydown', { editor: editor.value });\n};\n\nconst handleSuperEditorClick = (event) => {\n emit('editor-click', { editor: editor.value });\n let pmElement = editorElem.value?.querySelector('.ProseMirror');\n\n if (!pmElement || !editor.value) {\n return;\n }\n\n let isInsideEditor = pmElement.contains(event.target);\n\n if (!isInsideEditor && editor.value.isEditable) {\n editor.value.view?.focus();\n }\n};\n\nonMounted(() => {\n initializeData();\n if (props.options?.suppressSkeletonLoader || !props.options?.collaborationProvider) editorReady.value = true;\n});\n\nconst handleMarginClick = (event) => {\n if (event.target.classList.contains('ProseMirror')) return;\n\n onMarginClickCursorChange(event, editor.value);\n};\n\n/**\n * Triggered when the user changes the margin value from the ruler\n *\n * @param {Object} param0\n * @param {String} param0.side - The side of the margin being changed\n * @param {Number} param0.value - The new value of the margin in inches\n * @returns {void}\n */\nconst handleMarginChange = ({ side, value }) => {\n if (!editor.value) return;\n\n const pageStyles = editor.value.getPageStyles();\n const { pageMargins } = pageStyles;\n const update = { ...pageMargins, [side]: value };\n editor.value?.updatePageStyle({ pageMargins: update });\n};\n\nonBeforeUnmount(() => {\n stopPolling();\n editor.value?.destroy();\n editor.value = null;\n});\n</script>\n\n<template>\n <div class=\"super-editor-container\">\n \n <Ruler\n class=\"ruler\"\n v-if=\"options.rulers && !!editor\"\n :editor=\"editor\"\n @margin-change=\"handleMarginChange\"\n />\n\n <div \n class=\"super-editor\"\n ref=\"editorWrapper\"\n @keydown=\"handleSuperEditorKeydown\" \n @click=\"handleSuperEditorClick\"\n @mousedown=\"handleMarginClick\"\n >\n <div ref=\"editorElem\" class=\"editor-element super-editor__element\"></div>\n </div>\n\n <div class=\"placeholder-editor\" v-if=\"!editorReady\">\n <div class=\"placeholder-title\">\n <n-skeleton text style=\"width: 60%\" />\n </div>\n\n <n-skeleton text :repeat=\"6\" />\n <n-skeleton text style=\"width: 60%\" />\n\n <n-skeleton text :repeat=\"6\" style=\"width: 30%; display: block; margin: 20px\" />\n <n-skeleton text style=\"width: 60%\" />\n <n-skeleton text :repeat=\"5\" />\n <n-skeleton text style=\"width: 30%\" />\n\n <n-skeleton text style=\"margin-top: 50px\" />\n <n-skeleton text :repeat=\"6\" />\n <n-skeleton text style=\"width: 70%\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.super-editor-container {\n width: auto;\n height: auto;\n min-width: 8in;\n min-height: 11in;\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n.ruler {\n margin-bottom: 2px;\n}\n\n.super-editor {\n color: initial;\n}\n\n.placeholder-editor {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n padding: 1in;\n z-index: 5;\n background-color: white;\n box-sizing: border-box;\n}\n\n.placeholder-title {\n display: flex;\n justify-content: center;\n margin-bottom: 40px;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['file-change']);\nconst onFileChange = (event) => {\n emit('file-change', event.target.files[0]);\n};\n</script>\n\n<template>\n <div>\n <input type=\"file\" id=\"fileInput\" @change=\"onFileChange\" accept=\".docx\" />\n </div>\n</template>\n\n<style scoped></style>\n","<script setup>\nimport { ref, shallowRef, onMounted, onBeforeUnmount } from 'vue';\nimport { Editor } from '@/index.js';\nimport { getRichTextExtensions, Placeholder } from '@extensions/index.js';\n\nconst emit = defineEmits(['update:modelValue', 'focus', 'blur']);\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n\n placeholder: {\n type: String,\n required: false,\n default: 'Type something...',\n },\n\n options: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n\n users: {\n type: Array,\n required: false,\n default: () => [],\n },\n});\n\nconst editor = shallowRef();\nconst editorElem = ref(null);\nconst isFocused = ref(false);\n\nconst onTransaction = ({ editor, transaction }) => {\n const contents = editor.getHTML();\n emit('update:modelValue', contents);\n};\n\nconst onFocus = ({ editor, transaction }) => {\n isFocused.value = true;\n updateUsersState();\n emit('focus', { editor, transaction });\n};\n\nconst onBlur = ({ editor, transaction }) => {\n isFocused.value = false;\n emit('blur', { editor, transaction });\n};\n\nconst initEditor = async () => {\n Placeholder.options.placeholder = props.placeholder || 'Type something...';\n\n props.options.onTransaction = onTransaction;\n props.options.onFocus = onFocus;\n props.options.onBlur = onBlur;\n editor.value = new Editor({\n mode: 'text',\n content: document.getElementById('currentContent'),\n element: editorElem.value,\n extensions: getRichTextExtensions(),\n users: props.users,\n ...props.options,\n });\n};\n\nconst handleFocus = () => {\n isFocused.value = true;\n editor.value?.view?.focus();\n};\n\nconst updateUsersState = () => {\n editor.value?.setOptions({ users: props.users });\n};\n\nonMounted(() => {\n initEditor();\n});\n\nonBeforeUnmount(() => {\n editor.value?.destroy();\n editor.value = null;\n});\n</script>\n\n<template>\n <div class=\"super-editor super-input\" :class=\"{ 'super-input-active': isFocused }\" @click.stop.prevent=\"handleFocus\">\n <div id=\"currentContent\" style=\"display: none\" v-html=\"modelValue\"></div>\n <div ref=\"editorElem\" class=\"editor-element super-editor__element\"></div>\n </div>\n</template>\n\n<style scoped>\n.super-editor {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border: 1px solid #999;\n outline: none;\n transition: border 0.2s ease;\n background-color: white;\n}\n\n.super-input {\n font-size: 13px;\n font-family: inherit;\n}\n\n.editor-element {\n height: 100%;\n width: 100%;\n border: none;\n outline: none;\n}\n\n.super-input-active {\n border: 1px solid #007bff;\n outline: none;\n}\n</style>\n","import './style.css';\nimport { SuperConverter } from './core/super-converter/SuperConverter';\nimport { getMarksFromSelection } from './core/helpers/getMarksFromSelection.js';\nimport { getActiveFormatting } from './core/helpers/getActiveFormatting.js';\nimport { getStarterExtensions, getRichTextExtensions } from './extensions/index.js';\nimport { SuperToolbar } from './components/toolbar/super-toolbar.js';\nimport { DocxZipper, helpers } from './core/index.js';\nimport { Editor } from './core/Editor.js';\nimport { createZip } from './core/super-converter/zipper.js';\nimport { getAllowedImageDimensions } from './extensions/image/imageHelpers/processUploadedImage.js';\nimport { Node, Attribute } from '@core/index.js';\nimport { Extension } from '@core/Extension.js';\nimport { Plugin } from 'prosemirror-state';\n\nimport SuperEditor from './components/SuperEditor.vue';\nimport BasicUpload from './dev/components/BasicUpload.vue';\nimport Toolbar from './components/toolbar/Toolbar.vue';\nimport SuperInput from './components/SuperInput.vue';\nimport * as fieldAnnotationHelpers from './extensions/field-annotation/fieldAnnotationHelpers/index.js';\nimport * as trackChangesHelpers from './extensions/track-changes/trackChangesHelpers/index.js';\n\nconst Extensions = {\n Node,\n Attribute,\n Extension,\n Plugin,\n};\n\n/**\n * Exported classes and components.\n * @module exports\n * @see SuperConverter\n * @see DocxZipper\n * @see SuperEditor\n * @see Toolbar\n */\nexport {\n // Classes\n SuperConverter,\n DocxZipper,\n SuperToolbar,\n Editor,\n\n // Components\n SuperEditor,\n SuperInput,\n BasicUpload,\n Toolbar,\n\n // Helpers\n helpers,\n fieldAnnotationHelpers,\n trackChangesHelpers,\n getMarksFromSelection,\n getActiveFormatting,\n getStarterExtensions,\n getRichTextExtensions,\n createZip,\n getAllowedImageDimensions,\n\n // External extensions classes\n Extensions,\n};\n"],"names":["EventEmitter","l","uuidv4","unref","alignment","closeDropdown","toolbarIcons","link","tableItem","tableActionsItem","icons","role","documentOptions","item","handleImageUploadDefault","editor"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"super-editor.es.js","sources":["../../../node_modules/eventemitter3/index.js","../src/components/toolbar/scroll-helpers.js","../src/components/toolbar/use-toolbar-item.js","../src/components/toolbar/AlignmentButtons.vue","../src/components/toolbar/LinkInput.vue","../src/components/toolbar/DocumentMode.vue","../src/components/toolbar/LinkedStyle.vue","../src/components/toolbar/IconGridRow.vue","../src/components/toolbar/IconGrid.vue","../src/components/toolbar/color-dropdown-helpers.js","../src/components/toolbar/TableGrid.vue","../src/components/toolbar/TableActions.vue","../src/components/toolbar/defaultItems.js","../src/extensions/image/imageHelpers/getFileOpener.js","../src/extensions/image/imageHelpers/handleImageUpload.js","../src/extensions/image/imageHelpers/processUploadedImage.js","../src/extensions/image/imageHelpers/startImageUpload.js","../src/components/toolbar/super-toolbar.js","../src/components/pagination-helpers.js","../src/components/cursor-helpers.js","../src/components/rulers/Ruler.vue","../src/components/SuperEditor.vue","../src/dev/components/BasicUpload.vue","../src/components/SuperInput.vue","../src/index.js"],"sourcesContent":["'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","function getScrollableParent(element) {\n let currentElement = element;\n\n while (currentElement) {\n const overflowY = window.getComputedStyle(currentElement).overflowY;\n if (/(auto|scroll)/.test(overflowY) && currentElement.scrollHeight > currentElement.clientHeight) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n\n return document.scrollingElement || document.documentElement;\n}\n\nexport function scrollToElement(targetElement, options = { behavior: 'smooth', block: 'start' }) {\n if (!targetElement) return;\n\n const container = getScrollableParent(targetElement);\n\n const containerRect = container.getBoundingClientRect();\n const targetRect = targetElement.getBoundingClientRect();\n const offsetTop = targetRect.top - containerRect.top + container.scrollTop;\n\n container.scrollTo({\n top: options.block === 'start' ? offsetTop : offsetTop - container.clientHeight + targetElement.offsetHeight,\n behavior: options.behavior,\n });\n}\n","import { ref } from 'vue';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport const useToolbarItem = (options) => {\n const types = ['button', 'options', 'separator', 'dropdown', 'overflow'];\n if (!types.includes(options.type)) {\n throw new Error('Invalid toolbar item type - ' + options.type);\n }\n\n if (options.type === 'button' && !options.defaultLabel && !options.icon) {\n throw new Error('Toolbar button item needs either icon or label - ' + options.name);\n }\n\n if (!options.name) {\n throw new Error('Invalid toolbar item name - ' + options.name);\n }\n\n const id = ref(uuidv4());\n const type = options.type;\n const name = ref(options.name);\n const command = options.command;\n const icon = ref(options.icon);\n const group = ref(options.group || 'center');\n const allowWithoutEditor = ref(options.allowWithoutEditor);\n const attributes = ref(options.attributes || {});\n\n const initiallyDisabled = options.disabled || false;\n const disabled = ref(options.disabled);\n const active = ref(false);\n const expand = ref(false);\n\n // top-level style\n const style = ref(options.style);\n const isNarrow = ref(options.isNarrow);\n const isWide = ref(options.isWide);\n const minWidth = ref(options.minWidth);\n const suppressActiveHighlight = ref(options.suppressActiveHighlight || false);\n\n const argument = ref(options.argument);\n const childItem = ref(null);\n const parentItem = ref(null);\n\n // icon properties\n const iconColor = ref(options.iconColor);\n const hasCaret = ref(options.hasCaret);\n\n // tooltip properties\n const tooltip = ref(options.tooltip);\n const tooltipVisible = ref(options.tooltipVisible);\n const tooltipTimeout = ref(options.tooltipTimeout);\n\n // behavior\n const defaultLabel = ref(options.defaultLabel);\n const label = ref(options.label);\n const hideLabel = ref(options.hideLabel);\n const inlineTextInputVisible = ref(options.inlineTextInputVisible);\n const hasInlineTextInput = ref(options.hasInlineTextInput);\n\n const markName = ref(options.markName);\n const labelAttr = ref(options.labelAttr);\n\n const nestedOptions = ref([]);\n if (options.options) {\n if (!Array.isArray(options.options)) throw new Error('Invalid toolbar item options - ' + options.options);\n nestedOptions.value.push(...options.options);\n }\n\n // Activation & Deactivation\n const activate = (attrs) => {\n onActivate(attrs);\n\n if (suppressActiveHighlight.value) return;\n active.value = true;\n };\n\n const deactivate = () => {\n onDeactivate();\n active.value = false;\n };\n\n const setDisabled = (state) => {\n disabled.value = state;\n };\n\n const resetDisabled = () => {\n disabled.value = initiallyDisabled;\n };\n\n // User can override this behavior\n const onActivate = options.onActivate || (() => null);\n const onDeactivate = options.onDeactivate || (() => null);\n\n const unref = () => {\n const flattened = {};\n Object.keys(refs).forEach((key) => {\n if (refs[key].value !== undefined) {\n flattened[key] = refs[key].value;\n }\n });\n return flattened;\n };\n\n const refs = {\n id,\n name,\n type,\n command,\n icon,\n tooltip,\n group,\n attributes,\n disabled,\n active,\n expand,\n nestedOptions,\n\n style,\n isNarrow,\n isWide,\n minWidth,\n argument,\n parentItem,\n iconColor,\n hasCaret,\n tooltipVisible,\n tooltipTimeout,\n defaultLabel,\n label,\n hideLabel,\n inlineTextInputVisible,\n hasInlineTextInput,\n markName,\n labelAttr,\n childItem,\n\n allowWithoutEditor,\n };\n\n return {\n ...refs,\n unref,\n activate,\n deactivate,\n setDisabled,\n resetDisabled,\n onActivate,\n onDeactivate,\n };\n};\n","<script setup>\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['select']);\n\nconst select = (alignment) => {\n emit('select', alignment);\n};\n</script>\n\n<template>\n <div class=\"alignment-buttons\">\n <div class=\"button-icon\" @click=\"select('left')\" v-html=\"toolbarIcons.alignLeft\"></div>\n <div class=\"button-icon\" @click=\"select('center')\" v-html=\"toolbarIcons.alignCenter\"></div>\n <div class=\"button-icon\" @click=\"select('right')\" v-html=\"toolbarIcons.alignRight\"></div>\n <div class=\"button-icon\" @click=\"select('justify')\" v-html=\"toolbarIcons.alignJustify\"></div>\n </div>\n</template>\n\n<style scoped>\n.alignment-buttons {\n display: flex;\n justify-content: space-between;\n width: 100%;\n padding: 8px;\n box-sizing: border-box;\n}\n.button-icon {\n cursor: pointer;\n padding: 5px;\n font-size: 16px;\n width: 25px;\n height: 25px;\n border-radius: 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n}\n.button-icon:hover {\n background-color: #d8dee5;\n}\n\n.button-icon :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","<script setup>\nimport { ref, computed, watch, getCurrentInstance, onMounted } from \"vue\";\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['submit', 'cancel']);\nconst props = defineProps({\n initialText: {\n type: String,\n default: '',\n },\n href: {\n type: String,\n default: '',\n },\n showInput: {\n type: Boolean,\n default: true,\n },\n showLink: {\n type: Boolean,\n default: true,\n },\n goToAnchor: {\n type: Function,\n default: () => {},\n },\n});\n\nconst { proxy } = getCurrentInstance();\nconst handleSubmit = () => {\n if (proxy?.$submit instanceof Function) proxy.$submit();\n if (rawUrl.value && validUrl.value) {\n emit('submit', { text: text.value, href: url.value });\n return;\n } else if (!rawUrl.value) {\n emit('submit', { text: text.value, href: null });\n return;\n }\n console.debug('[LinkInput] Invalid URL in handleSubmit');\n urlError.value = true;\n};\n\nconst handleRemove = () => {\n emit('submit', { text: text.value, href: null });\n};\n\nconst urlError = ref(false);\nconst text = ref(props.initialText);\nconst rawUrl = ref(props.href);\nconst url = computed(() => {\n if (!rawUrl.value?.startsWith('http')) return 'http://' + rawUrl.value;\n return rawUrl.value;\n});\n\nconst validUrl = computed(() => {\n const urlSplit = url.value.split('.').filter(Boolean);\n return url.value.includes('.') && urlSplit.length > 1;\n});\n\nconst getApplyText = computed(() => (showApply.value ? 'Apply' : 'Remove'));\nconst isDisabled = computed(() => !validUrl.value);\nconst showApply = computed(() => !showRemove.value);\nconst showRemove = computed(() => props.href && !rawUrl.value);\nconst isAnchor = computed(() => props.href.startsWith('#'));\n\nconst openLink = () => {\n window.open(url.value, '_blank');\n};\n\nwatch(\n () => props.href,\n (newVal) => {\n rawUrl.value = newVal;\n },\n);\n\nconst focusInput = () => {\n const input = document.querySelector('.link-input-ctn input');\n if (!input) return;\n input.focus();\n};\n\nonMounted(() => {\n if (props.showInput) focusInput();\n});\n</script>\n\n<template>\n <div class=\"link-input-ctn\">\n <div class=\"link-title\" v-if=\"!href\">Add link</div>\n <div class=\"link-title\" v-else-if=\"isAnchor\">Page anchor</div>\n <div class=\"link-title\" v-else>Edit link</div>\n\n <div v-if=\"showInput && !isAnchor\">\n <div class=\"input-row\">\n <div class=\"input-icon\" v-html=\"toolbarIcons.linkInput\"></div>\n <input\n type=\"text\"\n placeholder=\"Type or paste a link\"\n :class=\"{ error: urlError }\"\n v-model=\"rawUrl\"\n @keydown.enter.stop.prevent=\"handleSubmit\"\n @keydown=\"urlError = false\"\n />\n\n <div \n class=\"open-link-icon\" \n :class=\"{ disabled: !validUrl }\" \n v-html=\"toolbarIcons.openLink\" \n @click=\"openLink\">\n </div>\n </div>\n <div class=\"input-row link-buttons\">\n <button class=\"remove-btn\" @click=\"handleRemove\" v-if=\"href\">\n <div class=\"remove-btn__icon\" v-html=\"toolbarIcons.removeLink\"></div>\n Remove\n </button>\n <button class=\"submit-btn\" v-if=\"showApply\" @click=\"handleSubmit\" :class=\"{ 'disable-btn': isDisabled }\">\n {{ getApplyText }}\n </button>\n </div>\n </div>\n\n <div v-else-if=\"isAnchor\" class=\"input-row go-to-anchor clickable\">\n <a @click.stop.prevent=\"goToAnchor\">Go to {{ href.startsWith('#_') ? href.substring(2) : href }}</a>\n </div>\n </div>\n</template>\n\n<style scoped>\n.link-input-ctn :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.open-link-icon {\n margin-left: 10px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n border: 1px solid transparent;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n transition: all 0.2s ease;\n cursor: pointer;\n}\n\n.open-link-icon:hover {\n color: #1355ff;\n background-color: white;\n border: 1px solid #dbdbdb;\n}\n\n.open-link-icon :deep(svg) {\n width: 15px;\n height: 15px;\n}\n\n.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n.link-buttons {\n display: flex;\n justify-content: flex-end;\n margin-top: 10px;\n}\n\n.remove-btn__icon {\n display: inline-flex;\n width: 13px;\n height: 13px;\n flex-shrink: 0;\n margin-right: 4px;\n}\n\n.link-buttons button {\n margin-left: 5px;\n}\n.disable-btn {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n.go-to-anchor a {\n font-size: 14px;\n text-decoration: underline;\n}\n.clickable {\n cursor: pointer;\n}\n.link-title {\n font-size: 14px;\n font-weight: 600;\n margin-bottom: 10px;\n}\n\n.input-icon {\n position: absolute;\n transform: rotate(45deg);\n left: 25px;\n width: auto;\n height: 12px;\n color: #999;\n pointer-events: none;\n}\n\n.hasBottomMargin {\n margin-bottom: 1em;\n}\n\n.link-input-ctn {\n width: 320px;\n display: flex;\n flex-direction: column;\n padding: 1em;\n border-radius: 5px;\n background-color: #fff;\n box-sizing: border-box;\n}\n.remove-btn {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 10px 16px;\n border-radius: 8px;\n outline: none;\n background-color: white;\n color: black;\n font-weight: 400;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid #ebebeb;\n box-sizing: border-box;\n}\n.remove-btn:hover {\n background-color: #dbdbdb;\n}\n.submit-btn {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 10px 16px;\n border-radius: 8px;\n outline: none;\n border: none;\n background-color: #1355ff;\n color: white;\n font-weight: 400;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n box-sizing: border-box;\n}\n.submit-btn:hover {\n background-color: #0d47c1;\n}\n\n.input-row {\n align-content: baseline;\n display: flex;\n align-items: center;\n}\n\n.input-row input {\n font-size: 13px;\n flex-grow: 1;\n padding: 10px;\n border-radius: 8px;\n padding-left: 32px;\n box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.15);\n color: #666;\n border: 1px solid #ddd;\n box-sizing: border-box;\n}\n.input-row input:active,\n.input-row input:focus {\n outline: none;\n border: 1px solid #1355ff;\n}\n\n.input-row {\n font-size: 16px;\n}\n\n.error {\n border-color: red !important;\n background-color: #ff00001a;\n}\n\n.submit {\n cursor: pointer;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n options: {\n type: Array,\n },\n});\n\nconst handleClick = (item) => {\n emit('select', item);\n};\n</script>\n\n<template>\n <div class=\"document-mode\">\n <div\n class=\"option-item\"\n v-for=\"option in options\"\n @click=\"handleClick(option)\"\n :class=\"{ disabled: option.disabled }\"\n >\n <div class=\"document-mode-column icon-column\">\n <div class=\"icon-column__icon\" v-html=\"option.icon\"></div>\n </div>\n\n <div class=\"document-mode-column text-column\">\n <div class=\"document-mode-type\">\n {{ option.label }}\n </div>\n <div class=\"document-mode-description\">\n {{ option.description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.document-mode :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed !important;\n pointer-events: none;\n}\n.document-mode {\n display: flex;\n flex-direction: column;\n padding: 10px;\n box-sizing: border-box;\n}\n.option-item {\n display: flex;\n flex-direction: row;\n background-color: white;\n padding: 10px;\n border-radius: 4px;\n cursor: pointer;\n box-sizing: border-box;\n}\n.document-mode-column {\n display: flex;\n flex-direction: column;\n}\n.document-mode-type {\n font-weight: 400;\n font-size: 15px;\n color: #222;\n}\n\n.icon-column {\n margin-right: 5px;\n justify-content: flex-start;\n align-items: center;\n padding: 0 5px;\n color: black;\n height: 100%;\n box-sizing: border-box;\n}\n\n.icon-column__icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n height: 18px;\n color: #47484a;\n}\n\n.icon-column__icon :deep(svg) {\n width: auto; /* needed for safari */\n max-height: 18px;\n}\n\n.document-mode-description {\n font-size: 12px;\n color: #666;\n}\n.option-item:hover {\n background-color: #c8d0d8;\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { toolbarIcons } from './toolbarIcons.js';\nimport { generateLinkedStyleString, getQuickFormatList } from '@extensions/linked-styles/index.js';\n\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n editor: {\n type: Object,\n required: true,\n },\n});\n\nconst select = (style) => {\n emit('select', style);\n};\n\n</script>\n\n<template>\n <div class=\"linked-style-buttons\" v-if=\"props.editor\">\n <div\n v-for=\"style in getQuickFormatList(editor)\" class=\"style-item\" @click=\"select(style)\">\n <div class=\"style-name\" :style=\"generateLinkedStyleString(style, null, false)\">\n {{ style.definition.attrs.name }}\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.style-name {\n padding: 16px 10px;\n}\n.style-name:hover {\n background-color: #c8d0d8;\n}\n.linked-style-buttons {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n max-height: 400px;\n width: 200px;\n padding: 0;\n margin: 0;\n overflow: auto;\n}\n.button-icon {\n cursor: pointer;\n padding: 5px;\n font-size: 16px;\n width: 25px;\n height: 25px;\n border-radius: 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n}\n.button-icon:hover {\n background-color: #d8dee5;\n}\n\n.button-icon :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","<script setup>\nimport { computed, onMounted } from 'vue';\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst emit = defineEmits(['select']);\nconst props = defineProps({\n icons: {\n type: Array,\n required: true,\n },\n activeColor: {\n type: Object,\n required: false,\n },\n});\n\nconst isActive = computed(() => (option) => {\n if (!props.activeColor.value) return false;\n return props.activeColor.value.toUpperCase() === option.value;\n});\n\nconst getCheckStyle = (color, optionIndex) => {\n const lightColors = ['#FFFFFF', '#FAFF09'];\n if (optionIndex === 5 || lightColors.includes(color)) return { color: '#000' };\n return { color: '#FFF' };\n};\n\nconst handleClick = (option) => {\n emit('select', option.value);\n};\n\nonMounted(() => {\n const isMatrix = props.icons.every((row) => Array.isArray(row));\n if (!isMatrix) throw new Error('icon props must be 2d array');\n});\n</script>\n<template>\n <div class=\"option-row\" v-for=\"(row, rowIndex) in icons\" :key=\"rowIndex\">\n <div\n class=\"option\"\n v-for=\"(option, optionIndex) in row\"\n :key=\"optionIndex\"\n @click.stop.prevent=\"handleClick(option)\"\n >\n <div\n class=\"option__icon\"\n v-html=\"option.icon\"\n :style=\"option.style\">\n </div>\n\n <div\n v-if=\"isActive(option)\"\n class=\"option__check\"\n v-html=\"toolbarIcons.colorOptionCheck\"\n :style=\"getCheckStyle(option.value, optionIndex)\">\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.option-row {\n display: flex;\n flex-direction: row;\n}\n.option {\n border-radius: 50%;\n cursor: pointer;\n padding: 3px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n}\n\n.option:hover {\n background-color: #dbdbdb;\n}\n\n.option__icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n\n.option__check {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n position: absolute;\n}\n</style>\n","<script setup>\nimport IconGridRow from './IconGridRow.vue';\n\nconst emit = defineEmits(['select', 'clickoutside']);\nconst props = defineProps({\n icons: {\n type: Array,\n required: true,\n },\n customIcons: {\n type: Array,\n required: false,\n },\n activeColor: {\n type: Object,\n required: false,\n },\n});\n\nconst handleSelect = (option) => {\n emit('select', option);\n};\n\n</script>\n\n<template>\n <div class=\"option-grid-ctn\">\n <IconGridRow \n :icons=\"icons\"\n :active-color=\"activeColor\"\n @select=\"handleSelect\"\n />\n \n <template v-if=\"customIcons.flat().length\">\n <span class=\"option-grid-ctn__subtitle\">Custom colors</span>\n \n <IconGridRow\n :icons=\"customIcons\"\n :active-color=\"activeColor\"\n @select=\"handleSelect\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n.option-grid-ctn {\n display: flex;\n flex-direction: column;\n padding: 5px;\n border-radius: 5px;\n background-color: #fff;\n z-index: 3;\n box-sizing: border-box;\n &__subtitle {\n padding: 3px;\n font-size: 12px;\n font-weight: 600;\n\n }\n}\n\n.option-grid-ctn :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n</style>\n","import { h } from 'vue';\nimport IconGrid from './IconGrid.vue';\nimport { toolbarIcons } from './toolbarIcons.js';\n\nconst closeDropdown = (dropdown) => {\n dropdown.expand.value = false;\n};\n\n\nexport const makeColorOption = (color, label = null) => {\n return {\n label,\n icon: toolbarIcons.colorOption,\n value: color,\n style: {\n color,\n boxShadow: '0 0 5px 1px rgba(0, 0, 0, 0.1)',\n borderRadius: '50%',\n },\n };\n};\n\nexport const renderColorOptions = (superToolbar, button, customIcons = []) => {\n const handleSelect = (e) => {\n button.iconColor.value = e;\n superToolbar.emitCommand({ item: button, argument: e });\n closeDropdown(button);\n };\n\n return h('div', {}, [\n h(IconGrid, {\n icons,\n customIcons,\n activeColor: button.iconColor,\n onSelect: handleSelect,\n }),\n ]);\n}\n\nconst icons = [\n [\n makeColorOption('#111111'),\n makeColorOption('#333333'),\n makeColorOption('#5C5C5C'),\n makeColorOption('#858585'),\n makeColorOption('#ADADAD'),\n makeColorOption('#D6D6D6'),\n makeColorOption('#FFFFFF'),\n ],\n\n [\n makeColorOption('#860028'),\n makeColorOption('#D2003F'),\n makeColorOption('#DB3365'),\n makeColorOption('#E4668C'),\n makeColorOption('#ED99B2'),\n makeColorOption('#F6CCD9'),\n makeColorOption('#FF004D'),\n ],\n\n [\n makeColorOption('#83015E'),\n makeColorOption('#CD0194'),\n makeColorOption('#D734A9'),\n makeColorOption('#E167BF'),\n makeColorOption('#EB99D4'),\n makeColorOption('#F5CCEA'),\n makeColorOption('#FF00A8'),\n ],\n\n [\n makeColorOption('#8E220A'),\n makeColorOption('#DD340F'),\n makeColorOption('#E45C3F'),\n makeColorOption('#EB856F'),\n makeColorOption('#F1AE9F'),\n makeColorOption('#F8D6CF'),\n makeColorOption('#FF7A00'),\n ],\n\n [\n makeColorOption('#947D02'),\n makeColorOption('#E7C302'),\n makeColorOption('#ECCF35'),\n makeColorOption('#F1DB67'),\n makeColorOption('#F5E79A'),\n makeColorOption('#FAF3CC'),\n makeColorOption('#FAFF09'),\n ],\n\n [\n makeColorOption('#055432'),\n makeColorOption('#07834F'),\n makeColorOption('#399C72'),\n makeColorOption('#6AB595'),\n makeColorOption('#9CCDB9'),\n makeColorOption('#CDE6DC'),\n makeColorOption('#05F38F'),\n ],\n\n [\n makeColorOption('#063E7E'),\n makeColorOption('#0A60C5'),\n makeColorOption('#3B80D1'),\n makeColorOption('#6CA0DC'),\n makeColorOption('#9DBFE8'),\n makeColorOption('#CEDFF3'),\n makeColorOption('#00E0FF'),\n ],\n\n [\n makeColorOption('#3E027A'),\n makeColorOption('#6103BF'),\n makeColorOption('#8136CC'),\n makeColorOption('#A068D9'),\n makeColorOption('#C09AE6'),\n makeColorOption('#DFCDF2'),\n makeColorOption('#A91DFF'),\n ],\n];\n\nexport const getAvailableColorOptions = () => {\n return icons.flat().map((item) => item.value);\n}\n","<script setup>\nimport { ref } from 'vue';\n\nconst emit = defineEmits(['select', 'clickoutside']);\n\nconst selectedRows = ref(0);\nconst selectedCols = ref(0);\n\nconst onTableGridMouseOver = (event) => {\n let target = event.target;\n let isGrid = !!target.dataset.grid;\n\n if (isGrid) {\n return;\n }\n\n let grid = target.parentElement;\n let allItems = [...grid.querySelectorAll('[data-item]')];\n\n let cols = parseInt(target.dataset.cols, 10);\n let rows = parseInt(target.dataset.rows, 10);\n\n selectedCols.value = cols;\n selectedRows.value = rows;\n \n for (let i = 0; i < allItems.length; i++) {\n let item = allItems[i];\n let itemsCols = parseInt(item.dataset.cols, 10);\n let itemsRows = parseInt(item.dataset.rows, 10);\n\n if (itemsCols <= cols && itemsRows <= rows) {\n item.classList.add('selected');\n } else {\n item.classList.remove('selected');\n }\n }\n};\n\nconst handleClick = ({ cols, rows }) => {\n emit('select', { cols, rows });\n};\n</script>\n\n<template>\n <div class=\"toolbar-table-grid-wrapper\">\n <div class=\"toolbar-table-grid\" @mouseover=\"onTableGridMouseOver\" data-grid=\"true\">\n <template v-for=\"i in 5\" :key=\"i\">\n <div class=\"toolbar-table-grid__item\" \n v-for=\"n in 5\" \n :key=\"`${i}_${n}`\" \n :data-cols=\"n\" \n :data-rows=\"i\" \n data-item=\"true\"\n @click.stop.prevent=\"handleClick({ cols: n, rows: i })\">\n </div>\n </template>\n </div>\n\n <div class=\"toolbar-table-grid-value\">\n {{ selectedRows }} x {{ selectedCols }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbar-table-grid {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 2px;\n padding: 8px;\n box-sizing: border-box;\n}\n\n.toolbar-table-grid__item {\n width: 20px;\n height: 20px;\n border: 1px solid #d3d3d3;\n cursor: pointer;\n transition: all .15s;\n}\n\n.toolbar-table-grid__item.selected {\n background-color: #dbdbdb;\n}\n\n.toolbar-table-grid-value {\n font-size: 13px;\n line-height: 1.1;\n padding: 0px 8px 2px;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['select']);\n\nconst props = defineProps({\n options: {\n type: Array,\n },\n});\n\nconst handleClick = (item) => {\n emit('select', { command: item.command });\n};\n</script>\n\n<template>\n <div class=\"toolbar-table-actions\">\n <div\n class=\"toolbar-table-actions__item\"\n :class=\"{ 'toolbar-table-actions__item--border': option.bottomBorder}\"\n v-for=\"option in options\"\n @click=\"handleClick(option)\">\n <div class=\"toolbar-table-actions__icon\">\n <div class=\"toolbar-table-actions__icon-wrapper\" v-html=\"option.icon\"></div>\n </div>\n <div class=\"toolbar-table-actions__label\">\n {{ option.label }}\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.toolbar-table-actions {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px;\n box-sizing: border-box;\n}\n\n.toolbar-table-actions :deep(svg) {\n width: 100%;\n height: 100%;\n display: block;\n fill: currentColor;\n}\n\n.toolbar-table-actions__item {\n display: flex;\n gap: 5px;\n background-color: #fff;\n padding: 4px 10px;\n border-radius: 4px;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n}\n\n.toolbar-table-actions__item:hover {\n background-color: #c8d0d8;\n}\n\n.toolbar-table-actions__item--border:after {\n content: '';\n display: block;\n position: absolute;\n bottom: -3px;\n left: -10px;\n right: 0;\n height: 1px;\n width: calc(100% + 20px);\n background: #c8d0d8;\n}\n\n.toolbar-table-actions__icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n color: black;\n box-sizing: border-box;\n}\n\n.toolbar-table-actions__icon-wrapper {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n height: 14px;\n color: #47484a;\n}\n\n.toolbar-table-actions__icon-wrapper :deep(svg) {\n width: auto;\n max-height: 14px;\n}\n\n.toolbar-table-actions__label {\n font-size: 15px;\n font-weight: 400;\n color: #222;\n white-space: nowrap;\n}\n</style>\n","import { undoDepth, redoDepth } from 'prosemirror-history';\nimport { h } from 'vue';\n\nimport { scrollToElement } from './scroll-helpers';\nimport { sanitizeNumber } from './helpers';\nimport { useToolbarItem } from './use-toolbar-item';\nimport AlignmentButtons from './AlignmentButtons.vue';\nimport LinkInput from './LinkInput.vue';\nimport DocumentMode from './DocumentMode.vue';\nimport LinkedStyle from './LinkedStyle.vue';\nimport { renderColorOptions } from './color-dropdown-helpers.js';\nimport TableGrid from './TableGrid.vue';\nimport TableActions from './TableActions.vue';\n\nconst closeDropdown = (dropdown) => {\n dropdown.expand.value = false;\n};\n\nexport const makeDefaultItems = (superToolbar, isDev = false, windowWidth, role, toolbarIcons) => {\n\n // bold\n const bold = useToolbarItem({\n type: 'button',\n name: 'bold',\n command: 'toggleBold',\n icon: toolbarIcons.bold,\n tooltip: 'Bold',\n });\n\n // font\n const fontButton = useToolbarItem({\n type: 'dropdown',\n name: 'fontFamily',\n tooltip: 'Font',\n command: 'setFontFamily',\n defaultLabel: 'Arial',\n label: 'Arial',\n markName: 'textStyle',\n labelAttr: 'fontFamily',\n hasCaret: true,\n isWide: true,\n style: { width: '116px' },\n suppressActiveHighlight: true,\n options: [\n {\n label: 'Georgia',\n key: 'Georgia, serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Georgia, serif' },\n },\n },\n {\n label: 'Arial',\n key: 'Arial, sans-serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Arial, sans-serif' },\n },\n },\n {\n label: 'Courier New',\n key: 'Courier New, monospace',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Courier New, monospace' },\n },\n },\n {\n label: 'Times New Roman',\n key: 'Times New Roman, serif',\n fontWeight: 400,\n props: {\n style: { fontFamily: 'Times New Roman, serif' },\n },\n },\n ],\n onActivate: ({ fontFamily }) => {\n if (!fontFamily) return;\n fontButton.label.value = fontFamily;\n },\n onDeactivate: () => (fontButton.label.value = fontButton.defaultLabel.value),\n });\n\n // font size\n const fontSize = useToolbarItem({\n type: 'dropdown',\n name: 'fontSize',\n defaultLabel: '12',\n label: '12',\n minWidth: '50px',\n markName: 'textStyle',\n labelAttr: 'fontSize',\n tooltip: 'Font size',\n hasCaret: true,\n hasInlineTextInput: false,\n inlineTextInputVisible: true,\n suppressActiveHighlight: true,\n isWide: true,\n command: 'setFontSize',\n options: [\n { label: '8', key: '8pt' },\n { label: '9', key: '9pt' },\n { label: '10', key: '10pt' },\n { label: '11', key: '11pt' },\n { label: '12', key: '12pt' },\n { label: '14', key: '14pt' },\n { label: '18', key: '18pt' },\n { label: '24', key: '24pt' },\n { label: '30', key: '30pt' },\n { label: '36', key: '36pt' },\n { label: '48', key: '48pt' },\n { label: '60', key: '60pt' },\n { label: '72', key: '72pt' },\n { label: '96', key: '96pt' },\n ],\n onActivate: ({ fontSize: size }) => {\n if (!size) return (fontSize.label.value = fontSize.defaultLabel.value);\n\n let sanitizedValue = sanitizeNumber(size, 12);\n if (sanitizedValue < 8) sanitizedValue = 8;\n if (sanitizedValue > 96) sanitizedValue = 96;\n\n // no units\n fontSize.label.value = String(sanitizedValue);\n },\n onDeactivate: () => (fontSize.label.value = fontSize.defaultLabel.value),\n });\n\n // separator\n const separator = useToolbarItem({\n type: 'separator',\n name: 'separator',\n isNarrow: true,\n });\n\n // italic\n const italic = useToolbarItem({\n type: 'button',\n name: 'italic',\n command: 'toggleItalic',\n icon: toolbarIcons.italic,\n active: false,\n tooltip: 'Italic',\n });\n\n // underline\n const underline = useToolbarItem({\n type: 'button',\n name: 'underline',\n command: 'toggleUnderline',\n icon: toolbarIcons.underline,\n active: false,\n tooltip: 'Underline',\n });\n \n // highlight\n const highlight = useToolbarItem({\n type: 'dropdown',\n name: 'highlight',\n icon: toolbarIcons.highlight,\n hideLabel: true,\n markName: 'highlight',\n labelAttr: 'color',\n active: false,\n tooltip: 'Highlight color',\n command: 'setHighlight',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(superToolbar, highlight),\n },\n ],\n onActivate: ({ color }) => {\n highlight.iconColor.value = color || '';\n },\n onDeactivate: () => (highlight.iconColor.value = ''),\n })\n\n // color\n const colorButton = useToolbarItem({\n type: 'dropdown',\n name: 'color',\n icon: toolbarIcons.color,\n hideLabel: true,\n markName: 'textStyle',\n labelAttr: 'color',\n active: false,\n tooltip: 'Text color',\n command: 'setColor',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(superToolbar, colorButton),\n },\n ],\n onActivate: ({ color }) => {\n colorButton.iconColor.value = color;\n },\n onDeactivate: () => (colorButton.iconColor.value = '#000'),\n });\n\n // link\n const link = useToolbarItem({\n type: 'dropdown',\n name: 'link',\n markName: 'link',\n icon: toolbarIcons.link,\n active: false,\n tooltip: 'Link',\n options: [\n {\n type: 'render',\n key: 'linkDropdown',\n render: () => renderLinkDropdown(link),\n },\n ],\n onActivate: ({ href }) => {\n if (href) link.attributes.value = { href };\n else link.attributes.value = {};\n link.expand.value = true;\n },\n onDeactivate: () => {\n link.attributes.value = {};\n link.expand.value = false;\n },\n });\n\n function renderLinkDropdown(link) {\n const handleSubmit = ({ href }) => {\n closeDropdown(link);\n link.attributes.value.link = { href };\n const itemWithCommand = { ...link, command: 'toggleLink' };\n superToolbar.emitCommand({ item: itemWithCommand, argument: { href, text: '' } });\n if (!href) link.active.value = false;\n };\n\n return h('div', {}, [\n h(LinkInput, {\n onSubmit: handleSubmit,\n href: link.attributes.value.href,\n goToAnchor: () => {\n closeDropdown(link);\n if (!superToolbar.activeEditor || !link.attributes.value?.href) return;\n const anchorName = link.attributes.value?.href?.slice(1);\n const container = superToolbar.activeEditor.element;\n const anchor = container.querySelector(`a[name='${anchorName}']`);\n if (anchor) scrollToElement(anchor);\n },\n }),\n ]);\n }\n\n const linkInput = useToolbarItem({\n type: 'options',\n name: 'linkInput',\n command: 'toggleLink',\n active: false,\n });\n link.childItem = linkInput;\n linkInput.parentItem = link;\n\n // image\n const image = useToolbarItem({\n type: 'button',\n name: 'image',\n command: 'startImageUpload',\n icon: toolbarIcons.image,\n active: false,\n tooltip: 'Image',\n disabled: false,\n });\n\n // table\n const tableItem = useToolbarItem({\n type: 'dropdown',\n name: 'table',\n icon: toolbarIcons.table,\n hideLabel: true,\n labelAttr: 'table',\n active: false,\n tooltip: 'Insert table',\n command: 'insertTable',\n suppressActiveHighlight: true,\n options: [\n {\n key: 'table',\n type: 'render',\n render: () => renderTableGrid(tableItem),\n },\n ],\n });\n\n function renderTableGrid(tableItem) {\n const handleSelect = (e) => {\n superToolbar.emitCommand({ item: tableItem, argument: e });\n closeDropdown(tableItem);\n };\n\n return h('div', {}, [\n h(TableGrid, {\n onSelect: handleSelect,\n }),\n ]);\n }\n\n // table actions\n const tableActionsItem = useToolbarItem({\n type: 'dropdown',\n name: 'tableActions',\n command: 'executeTableCommand',\n icon: toolbarIcons.tableActions,\n hideLabel: true,\n disabled: true,\n options: [\n {\n type: 'render',\n render: () => renderTableActions(tableActionsItem),\n },\n ],\n });\n\n const tableActionsOptions = [\n { \n label: 'Insert row above',\n command: 'addRowBefore',\n icon: toolbarIcons.addRowBefore,\n },\n { \n label: 'Insert row below',\n command: 'addRowAfter',\n icon: toolbarIcons.addRowAfter,\n },\n { \n label: 'Insert column left',\n command: 'addColumnBefore',\n icon: toolbarIcons.addColumnBefore,\n },\n { \n label: 'Insert column right',\n command: 'addColumnAfter',\n icon: toolbarIcons.addColumnAfter,\n bottomBorder: true,\n },\n { \n label: 'Delete row',\n command: 'deleteRow',\n icon: toolbarIcons.deleteRow,\n },\n { \n label: 'Delete column',\n command: 'deleteColumn',\n icon: toolbarIcons.deleteColumn,\n },\n { \n label: 'Delete table',\n command: 'deleteTable',\n icon: toolbarIcons.deleteTable,\n },\n { \n label: 'Transparent borders',\n command: 'deleteCellAndTableBorders',\n icon: toolbarIcons.deleteBorders,\n bottomBorder: true,\n },\n { \n label: 'Merge cells',\n command: 'mergeCells',\n icon: toolbarIcons.mergeCells,\n },\n { \n label: 'Split cell',\n command: 'splitCell',\n icon: toolbarIcons.splitCell,\n },\n { \n label: 'Fix tables',\n command: 'fixTables',\n icon: toolbarIcons.fixTables,\n },\n ];\n\n function renderTableActions(tableActionsItem) {\n return h(TableActions, {\n options: tableActionsOptions,\n onSelect: (event) => {\n closeDropdown(tableActionsItem);\n const { command } = event;\n superToolbar.emitCommand({ item: tableActionsItem, argument: { command } });\n },\n });\n };\n\n // alignment\n const alignment = useToolbarItem({\n type: 'dropdown',\n name: 'textAlign',\n tooltip: 'Alignment',\n icon: toolbarIcons.alignLeft,\n command: 'setTextAlign',\n hasCaret: true,\n markName: 'textAlign',\n labelAttr: 'textAlign',\n suppressActiveHighlight: true,\n options: [\n {\n type: 'render',\n render: () => {\n const handleSelect = (e) => {\n closeDropdown(alignment);\n const buttonWithCommand = { ...alignment, command: 'setTextAlign' };\n buttonWithCommand.command = 'setTextAlign';\n superToolbar.emitCommand({ item: buttonWithCommand, argument: e });\n setAlignmentIcon(alignment, e);\n };\n\n return h('div', {}, [\n h(AlignmentButtons, {\n onSelect: handleSelect,\n }),\n ]);\n },\n key: 'alignment',\n },\n ],\n onActivate: ({ textAlign }) => {\n setAlignmentIcon(alignment, textAlign);\n },\n onDeactivate: () => {\n setAlignmentIcon(alignment, 'left');\n },\n });\n\n const setAlignmentIcon = (alignment, e) => {\n let alignValue = e === 'both' ? 'justify' : e;\n let icons = {\n left: toolbarIcons.alignLeft,\n right: toolbarIcons.alignRight,\n center: toolbarIcons.alignCenter,\n justify: toolbarIcons.alignJustify,\n };\n\n let icon = icons[alignValue] ?? icons.left;\n alignment.icon.value = icon;\n };\n\n // bullet list\n const bulletedList = useToolbarItem({\n type: 'button',\n name: 'list',\n command: 'toggleBulletList',\n icon: toolbarIcons.bulletList,\n active: false,\n tooltip: 'Bullet list',\n });\n\n // number list\n const numberedList = useToolbarItem({\n type: 'button',\n name: 'numberedlist',\n command: 'toggleOrderedList',\n icon: toolbarIcons.numberedList,\n active: false,\n tooltip: 'Numbered list',\n });\n\n // indent left\n const indentLeft = useToolbarItem({\n type: 'button',\n name: 'indentleft',\n command: 'decreaseTextIndent',\n icon: toolbarIcons.indentLeft,\n active: false,\n tooltip: 'Left indent',\n disabled: false,\n });\n\n // indent right\n const indentRight = useToolbarItem({\n type: 'button',\n name: 'indentright',\n command: 'increaseTextIndent',\n icon: toolbarIcons.indentRight,\n active: false,\n tooltip: 'Right indent',\n disabled: false,\n });\n\n // overflow\n const overflow = useToolbarItem({\n type: 'overflow',\n name: 'overflow',\n command: 'toggleOverflow',\n icon: toolbarIcons.overflow,\n active: false,\n disabled: false,\n });\n\n // const overflowOptions = useToolbarItem({\n // type: 'options',\n // name: 'overflowOptions',\n // preCommand(self, argument) {\n // self.parentItem.active = false;\n // },\n // });\n\n // zoom\n const zoom = useToolbarItem({\n type: 'dropdown',\n name: 'zoom',\n allowWithoutEditor: true,\n tooltip: 'Zoom',\n defaultLabel: '100%',\n label: '100%',\n hasCaret: true,\n command: 'setZoom',\n isWide: true,\n inlineTextInputVisible: false,\n hasInlineTextInput: true,\n options: [\n { label: '50%', key: 0.5 },\n { label: '75%', key: 0.75 },\n { label: '90%', key: 0.9 },\n { label: '100%', key: 1 },\n { label: '125%', key: 1.25 },\n { label: '150%', key: 1.5 },\n { label: '200%', key: 2 },\n ],\n onActivate: ({ zoom: value }) => {\n if (!value) return;\n\n zoom.label.value = value;\n },\n });\n\n // undo\n const undo = useToolbarItem({\n type: 'button',\n name: 'undo',\n disabled: true,\n tooltip: 'Undo',\n command: 'undo',\n icon: toolbarIcons.undo,\n group: 'left',\n onDeactivate: () => {\n undo.disabled.value = !superToolbar.undoDepth;\n },\n });\n\n // redo\n const redo = useToolbarItem({\n type: 'button',\n disabled: true,\n name: 'redo',\n tooltip: 'Redo',\n command: 'redo',\n icon: toolbarIcons.redo,\n group: 'left',\n onDeactivate: () => {\n redo.disabled.value = !superToolbar.redoDepth;\n },\n });\n\n // Track changes test buttons\n const toggleTrackChanges = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChanges',\n tooltip: 'Track Changes',\n command: 'toggleTrackChanges',\n icon: toolbarIcons.trackChanges,\n group: 'left',\n });\n\n const acceptTrackedChangeBySelection = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'acceptTrackedChangeBySelection',\n tooltip: 'Accept changes under selection',\n command: 'acceptTrackedChangeBySelection',\n icon: toolbarIcons.trackChangesAccept,\n group: 'left',\n });\n\n const rejectTrackedChangeOnSelection = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'rejectTrackedChangeOnSelection',\n tooltip: 'Reject changes under selection',\n command: 'rejectTrackedChangeOnSelection',\n icon: toolbarIcons.trackChangesReject,\n group: 'left',\n });\n\n const toggleTrackChangesOriginal = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChangesShowOriginal',\n tooltip: 'Toggle Show Original',\n command: 'toggleTrackChangesShowOriginal',\n icon: toolbarIcons.trackChangesOriginal,\n group: 'left',\n });\n\n const toggleTrackChangesFinal = useToolbarItem({\n type: 'button',\n disabled: false,\n name: 'toggleTrackChangesShowFinal',\n tooltip: 'Toggle Show Final',\n command: 'toggleTrackChangesShowFinal',\n icon: toolbarIcons.trackChangesFinal,\n group: 'left',\n });\n //\n\n // search\n // const search = useToolbarItem({\n // type: \"button\",\n // allowWithoutEditor: true,\n // name: \"search\",\n // tooltip: \"Search\",\n // disabled: true,\n // icon: \"fas fa-magnifying-glass\", // change to svg\n // group: \"right\",\n // });\n\n const clearFormatting = useToolbarItem({\n type: 'button',\n name: 'clearFormatting',\n command: 'clearFormat',\n tooltip: 'Clear formatting',\n icon: toolbarIcons.clearFormatting,\n });\n\n const toolbarItemsMobile = [\n bold,\n italic,\n underline,\n indentRight,\n indentLeft,\n // search,\n overflow,\n ].map((item) => item.name);\n\n const copyFormat = useToolbarItem({\n type: 'button',\n name: 'copyFormat',\n tooltip: 'Format painter',\n icon: toolbarIcons.copyFormat,\n command: 'copyFormat',\n active: false,\n });\n\n const getDocumentOptionsAfterRole = (role, documentOptions) => {\n if (role === 'editor') return documentOptions;\n else if (role === 'suggester') return documentOptions.filter((option) => option.value === 'suggesting');\n else return documentOptions.filter((option) => option.value === 'viewing');\n };\n\n const getDefaultLabel = (role) => {\n if (role === 'editor') return 'Editing';\n else if (role === 'suggester') return 'Suggesting';\n else return 'Viewing';\n };\n\n const documentMode = useToolbarItem({\n type: 'dropdown',\n name: 'documentMode',\n command: 'setDocumentMode',\n allowWithoutEditor: true,\n icon: toolbarIcons.documentMode,\n defaultLabel: getDefaultLabel(role),\n label: getDefaultLabel(role),\n hasCaret: role === 'editor',\n isWide: true,\n style: { display: 'flex', justifyContent: 'flex-end' },\n inlineTextInputVisible: false,\n hasInlineTextInput: false,\n group: 'right',\n disabled: role !== 'editor',\n attributes: {\n dropdownPosition: 'right',\n className: 'toolbar-item--doc-mode',\n },\n options: [\n {\n type: 'render',\n render: () => renderDocumentMode(documentMode),\n },\n ],\n });\n\n const documentOptions = [\n { \n label: 'Editing', \n value: 'editing', \n icon: toolbarIcons.documentEditingMode, \n description: 'Edit document directly' \n },\n { \n label: 'Suggesting', \n value: 'suggesting', \n icon: toolbarIcons.documentSuggestingMode, \n description: 'Edits become suggestions' \n },\n { \n label: 'Viewing', \n value: 'viewing', \n icon: toolbarIcons.documentViewingMode, \n description: 'View clean version of document only' \n },\n ];\n\n function renderDocumentMode(renderDocumentButton) {\n const optionsAfterRole = getDocumentOptionsAfterRole(role, documentOptions);\n return h(DocumentMode, {\n options: optionsAfterRole,\n onSelect: (item) => {\n closeDropdown(renderDocumentButton);\n const { label, icon } = item;\n documentMode.label.value = label;\n documentMode.icon.value = icon;\n superToolbar.emitCommand({ item: documentMode, argument: label });\n },\n });\n };\n\n const pageBreakTool = useToolbarItem({\n type: 'button',\n name: 'pageBreakTool',\n command: 'insertPageBreak',\n icon: toolbarIcons.pageBreak,\n active: false,\n tooltip: 'Insert page break',\n });\n\n // define sizes to calculate toolbar overflow items\n const controlSizes = new Map([\n ['separator', 20],\n ['zoom', 71],\n ['fontFamily', 118],\n ['fontSize', 57],\n ['textAlign', 40],\n ['linkedStyles', 142],\n ['documentMode', 47],\n ['default', 32],\n ]);\n \n const ruler = useToolbarItem({\n type: 'button',\n name: 'ruler',\n command: 'toggleRuler',\n icon: toolbarIcons.ruler,\n active: false,\n tooltip: 'Show or hide ruler',\n });\n\n const linkedStyles = useToolbarItem({\n type: 'dropdown',\n name: 'linkedStyles',\n command: 'setLinkedStyle',\n icon: toolbarIcons.paintbrush,\n defaultLabel: 'Format text',\n label: 'Format text',\n hasCaret: true,\n isWide: true,\n style: { width: '140px' },\n suppressActiveHighlight: true,\n disabled: false,\n attributes: {\n className: 'toolbar-item--linked-styles',\n },\n options: [\n {\n type: 'render',\n key: 'linkedStyle',\n render: () => {\n const handleSelect = (style) => {\n closeDropdown(linkedStyles);\n const itemWithCommand = { ...linkedStyles, command: 'setLinkedStyle' };\n superToolbar.emitCommand({ item: itemWithCommand, argument: style });\n };\n\n return h('div', {}, [\n h(LinkedStyle, {\n editor: superToolbar.activeEditor,\n onSelect: handleSelect,\n })\n ])\n }\n }\n ],\n onActivate: () => {\n linkedStyles.disabled.value = false;\n },\n onDeactivate: () => {\n linkedStyles.disabled.value = true;\n },\n });\n\n // Responsive toolbar calculations\n const breakpoints = {\n sm: 768,\n md: 1024,\n lg: 1280,\n xl: 1410,\n };\n const stickyItemsWidth = 120;\n const toolbarPadding = 32;\n\n const itemsToHideXL = ['linkedStyles', 'clearFormatting', 'copyFormat', 'ruler'];\n const itemsToHideSM = ['zoom', 'fontFamily', 'fontSize', 'redo'];\n\n let toolbarItems = [\n undo,\n redo,\n\n // Dev - tracked changes\n // toggleTrackChanges,\n acceptTrackedChangeBySelection,\n rejectTrackedChangeOnSelection,\n // toggleTrackChangesOriginal,\n // toggleTrackChangesFinal,\n\n zoom,\n separator,\n fontButton,\n separator,\n fontSize,\n separator,\n bold,\n italic,\n underline,\n colorButton,\n highlight,\n separator,\n link,\n image,\n tableItem,\n tableActionsItem,\n separator,\n alignment,\n bulletedList,\n numberedList,\n indentLeft,\n indentRight,\n separator,\n linkedStyles,\n separator,\n pageBreakTool,\n copyFormat,\n clearFormatting,\n ruler,\n overflow,\n documentMode,\n // search,\n ];\n\n // Hide separators on small screens\n if (windowWidth <= breakpoints.md) {\n toolbarItems = toolbarItems.filter((item) => item.type !== 'separator');\n }\n\n // If no pagination, remove the page break tool\n if (!superToolbar.config.pagination) {\n toolbarItems = toolbarItems.filter((item) => item.name.value !== 'pageBreakTool');\n }\n\n // Remove docx only items\n if (superToolbar.config.mode !== 'docx') {\n const getLinkedStylesIndex = toolbarItems.findIndex((item) => item.name.value === 'linkedStyles');\n toolbarItems.splice(getLinkedStylesIndex - 1, 2);\n toolbarItems = toolbarItems.filter((item) => item.name.value !== 'ruler');\n }\n\n // Track changes test buttons\n const devItems = [toggleTrackChanges, toggleTrackChangesOriginal, toggleTrackChangesFinal];\n if (!isDev) {\n if (role === 'viewer') {\n devItems.push(...[acceptTrackedChangeBySelection, rejectTrackedChangeOnSelection]);\n }\n toolbarItems = toolbarItems.filter((item) => !devItems.includes(item));\n }\n\n // always visible items\n const toolbarItemsSticky = [undo, overflow, documentMode].map((item) => item.name);\n const isStickyItem = (item) => toolbarItemsSticky.includes(item.name);\n\n const overflowItems = [];\n const visibleItems = [];\n\n // initial width with padding\n let totalWidth = toolbarPadding + stickyItemsWidth;\n\n toolbarItems.forEach((item) => {\n const itemWidth = controlSizes.get(item.name.value) || controlSizes.get('default');\n\n if (windowWidth < breakpoints.xl && itemsToHideXL.includes(item.name.value)) {\n overflowItems.push(item);\n if (item.name.value === 'linkedStyles') {\n const linkedStylesIdx = toolbarItems.findIndex((item) => item.name.value === 'linkedStyles');\n toolbarItems.splice(linkedStylesIdx + 1, 1);\n }\n return;\n }\n\n if (windowWidth < breakpoints.sm && itemsToHideSM.includes(item.name.value)) {\n overflowItems.push(item);\n return;\n }\n\n if (isStickyItem(item)) {\n visibleItems.push(item);\n totalWidth += itemWidth;\n return;\n }\n\n if (totalWidth < windowWidth) {\n visibleItems.push(item);\n totalWidth += itemWidth;\n } else {\n overflowItems.push(item);\n }\n });\n\n return {\n defaultItems: visibleItems,\n overflowItems: overflowItems.filter((item) => item.type !== 'separator'),\n };\n};\n\nexport const setHistoryButtonStateOnUpdate =\n (toolbarItemsRef) =>\n ({ editor, transaction }) => {\n // console.debug('[SuperEditor dev] Document updated', editor);\n // activeEditor = editor;\n\n const undo = toolbarItemsRef.value.find((item) => item.name === 'undo');\n const redo = toolbarItemsRef.value.find((item) => item.name === 'redo');\n\n undo.disabled = undoDepth(editor.state) <= 0;\n redo.disabled = redoDepth(editor.state) <= 0;\n };\n","const ACCEPT_IMAGE_TYPES = ['.jpg', '.jpeg', '.png', 'image/jpeg', 'image/png'];\n\nexport const getFileOpener = () => {\n let fileInput = document.createElement('input');\n fileInput.type = 'file';\n\n let acceptTypes = ACCEPT_IMAGE_TYPES;\n fileInput.accept = acceptTypes.join(',');\n\n const openFile = () => {\n return new Promise((resolve, reject) => {\n fileInput.onchange = async () => {\n const files = fileInput.files;\n if (!files) return resolve(null);\n const file = files.item(0);\n if (!file) return resolve(null);\n return resolve({ file });\n };\n fileInput.oncancel = () => resolve(null);\n fileInput.onerror = reject;\n fileInput.click();\n });\n };\n\n return openFile;\n};\n","export const handleImageUpload = (file) => {\n return new Promise((resolve, reject) => {\n let reader = new FileReader();\n reader.onload = (event) => resolve(event.target.result);\n reader.onerror = reject;\n setTimeout(() => reader.readAsDataURL(file), 250);\n });\n};\n","/**\n * Process an uploaded image to ensure it fits within the editor's content area.\n * @param {string | File} fileData Base 64 string or File object.\n * @returns {Promise<string | File>} Resolves with a base 64 string or File object.\n */\nexport const processUploadedImage = (fileData, editor) => {\n return new Promise((resolve, reject) => {\n const img = new window.Image();\n\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const { width, height } = getAllowedImageDimensions(\n img.width,\n img.height,\n editor,\n );\n canvas.width = width;\n canvas.height = height;\n\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, width, height);\n\n if (typeof fileData === 'string' ) {\n const resizedBase64 = canvas.toDataURL();\n resolve(resizedBase64);\n } else {\n canvas.toBlob((blob) => {\n const updatedFile = new File([blob], fileData.name, {\n type: fileData.type,\n lastModified: Date.now(),\n });\n resolve({ file: updatedFile, width, height });\n });\n }\n };\n img.onerror = (error) => reject(error);\n img.src = typeof fileData === 'string' ? fileData : URL.createObjectURL(fileData);\n });\n};\n\nexport const getAllowedImageDimensions = (width, height, editor) => {\n const { width: maxWidth, height: maxHeight } = editor.getMaxContentSize();\n if (!maxWidth || !maxHeight) return { width, height };\n\n let adjustedWidth = width;\n let adjustedHeight = height;\n const aspectRatio = width / height;\n\n if (height > maxHeight) {\n adjustedHeight = maxHeight;\n adjustedWidth = Math.round(maxHeight * aspectRatio);\n }\n\n if (adjustedWidth > maxWidth) {\n adjustedWidth = maxWidth;\n adjustedHeight = Math.round(maxWidth / aspectRatio);\n }\n\n return { width: adjustedWidth, height: adjustedHeight };\n};\n","import { ImagePlaceholderPluginKey, findPlaceholder } from './imagePlaceholderPlugin.js';\nimport { handleImageUpload as handleImageUploadDefault } from './handleImageUpload.js';\nimport { processUploadedImage } from './processUploadedImage.js';\n\nexport const startImageUpload = async ({ editor, view, file }) => {\n // Handler from config or default\n let imageUploadHandler =\n typeof editor.options.handleImageUpload === 'function'\n ? editor.options.handleImageUpload\n : handleImageUploadDefault;\n\n let fileSizeMb = (file.size / (1024 * 1024)).toFixed(4);\n\n if (fileSizeMb > 5) {\n window.alert('Image size must be less than 5MB');\n return;\n }\n\n let width;\n let height;\n try {\n // Will process the image file in place\n const processedImageResult = await processUploadedImage(file, editor);\n width = processedImageResult.width;\n height = processedImageResult.height;\n file = processedImageResult.file;\n } catch (err) {\n console.warn('Error processing image:', err);\n return;\n }\n\n // A fresh object to act as the ID for this upload\n let id = {};\n\n // Replace the selection with a placeholder\n let { tr, schema } = view.state;\n\n if (!tr.selection.empty) {\n tr.deleteSelection();\n }\n\n let imageMeta = {\n type: 'add',\n pos: tr.selection.from,\n id,\n };\n\n tr.setMeta(ImagePlaceholderPluginKey, imageMeta);\n view.dispatch(tr);\n\n imageUploadHandler(file).then(\n (url) => {\n let fileName = file.name.replace(' ', '_');\n let placeholderPos = findPlaceholder(view.state, id);\n\n // If the content around the placeholder has been deleted,\n // drop the image\n if (placeholderPos == null) {\n return;\n }\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n let removeMeta = { type: 'remove', id };\n\n let mediaPath = `word/media/${fileName}`;\n let imageNode = schema.nodes.image.create({\n src: mediaPath,\n size: { width, height },\n });\n\n editor.storage.image.media = Object.assign(editor.storage.image.media, { [mediaPath]: url });\n\n // If we are in collaboration, we need to share the image with other clients\n if (editor.options.ydoc) {\n editor.commands.addImageToCollaboration({ mediaPath, fileData: url });\n }\n\n view.dispatch(\n view.state.tr\n .replaceWith(placeholderPos, placeholderPos, imageNode) // or .insert(placeholderPos, imageNode)\n .setMeta(ImagePlaceholderPluginKey, removeMeta),\n );\n },\n () => {\n let removeMeta = { type: 'remove', id };\n\n // On failure, just clean up the placeholder\n view.dispatch(tr.setMeta(ImagePlaceholderPluginKey, removeMeta));\n },\n );\n};\n","import EventEmitter from 'eventemitter3';\nimport { createApp, h } from 'vue';\nimport { undoDepth, redoDepth } from 'prosemirror-history';\nimport { TextSelection } from 'prosemirror-state';\nimport { makeDefaultItems } from './defaultItems';\nimport { getActiveFormatting } from '@core/helpers/getActiveFormatting.js';\nimport { vClickOutside } from '@harbour-enterprises/common';\nimport Toolbar from './Toolbar.vue';\nimport { startImageUpload, getFileOpener } from '../../extensions/image/imageHelpers/index.js';\nimport { findParentNode } from '@helpers/index.js';\nimport { toolbarIcons } from './toolbarIcons.js';\nimport { getQuickFormatList } from '@extensions/linked-styles/linked-styles.js';\nimport { getAvailableColorOptions, makeColorOption, renderColorOptions } from './color-dropdown-helpers.js';\nimport { isInTable } from '@helpers/isInTable.js';\n\nexport class SuperToolbar extends EventEmitter {\n config = {\n element: null,\n toolbarGroups: ['left', 'center', 'right'],\n role: 'editor',\n pagination: false,\n icons: { ...toolbarIcons },\n mode: 'docx',\n };\n\n #interceptedCommands = {\n setZoom: ({ item, argument }) => {\n // Currently only set up to work with full SuperDoc\n if (!argument) return;\n item.onActivate({ zoom: argument });\n\n this.emit('superdoc-command', { item, argument });\n const layers = document.querySelector('.layers');\n if (!layers) return;\n\n const isMobileDevice = typeof screen.orientation !== 'undefined';\n // 768px breakpoint doesn't consider iPad in portrait orientation\n const isSmallScreen = window.matchMedia('(max-width: 834px)').matches;\n \n // Zoom property doesn't work correctly when testing on mobile devices\n if (isMobileDevice && isSmallScreen) {\n layers.style.transformOrigin = '0 0';\n layers.style.transform = `scale(${parseInt(argument) / 100})`;\n } else {\n layers.style.zoom = parseInt(argument) / 100;\n }\n\n this.superdoc.superdocStore.activeZoom = parseInt(argument);\n },\n\n setDocumentMode: ({ item, argument }) => {\n if (!argument) return;\n\n this.emit('superdoc-command', { item, argument });\n },\n\n setFontSize: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument }, () => {\n this.activeEditor?.commands.setFieldAnnotationsFontSize(argument, true);\n });\n },\n\n setFontFamily: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument }, () => {\n this.activeEditor?.commands.setFieldAnnotationsFontFamily(argument, true);\n });\n },\n\n setColor: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n \n setHighlight: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n\n toggleRuler: ({ item, argument }) => {\n this.superdoc.toggleRuler();\n },\n\n startImageUpload: async ({ item, argument }) => {\n let open = getFileOpener();\n let result = await open();\n\n if (!result?.file) {\n return;\n }\n\n startImageUpload({\n editor: this.activeEditor,\n view: this.activeEditor.view,\n file: result.file,\n });\n },\n\n increaseTextIndent: ({ item, argument }) => {\n let command = item.command;\n let { state } = this.activeEditor;\n let listItem = findParentNode((node) => node.type.name === 'listItem')(state.selection);\n\n if (listItem) {\n return this.activeEditor.chain().sinkListItem('listItem').updateOrderedListStyleType().run();\n }\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n },\n\n decreaseTextIndent: ({ item, argument }) => {\n let command = item.command;\n let { state } = this.activeEditor;\n let listItem = findParentNode((node) => node.type.name === 'listItem')(state.selection);\n\n if (listItem) {\n return this.activeEditor.chain().liftListItem('listItem').updateOrderedListStyleType().run();\n }\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n },\n\n toggleBold: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('bold', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleItalic: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('italic', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleUnderline: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n this.activeEditor.commands.toggleFieldAnnotationsFormat('underline', true);\n }\n\n this.updateToolbarState();\n },\n\n toggleLink: ({ item, argument }) => {\n let command = item.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n\n // move cursor to end\n const { view } = this.activeEditor;\n const endPos = view.state.selection.$to.pos;\n const selection = new TextSelection(view.state.doc.resolve(endPos));\n const tr = view.state.tr.setSelection(selection);\n const state = view.state.apply(tr);\n view.updateState(state);\n\n setTimeout(() => {\n view.focus();\n }, 100);\n }\n this.updateToolbarState();\n },\n\n insertTable: ({ item, argument }) => {\n this.#runCommandWithArgumentOnly({ item, argument });\n },\n\n executeTableCommand: ({ item, argument }) => {\n if (!argument) return;\n \n let command = argument.command;\n\n if (command in this.activeEditor.commands) {\n this.activeEditor.commands[command](argument);\n }\n\n this.updateToolbarState();\n },\n };\n\n constructor(config) {\n super();\n\n this.config = { ...this.config, ...config };\n this.toolbarItems = [];\n this.overflowItems = [];\n this.documentMode = config.documentMode || 'editing';\n this.isDev = config.isDev || false;\n this.superdoc = config.superdoc;\n this.role = config.role || 'editor';\n \n this.config.icons = {\n ...toolbarIcons,\n ...config.icons,\n };\n\n this.#makeToolbarItems(this, this.config.icons, config.isDev);\n\n let el = null;\n if (this.config.element) {\n el = document.getElementById(this.config.element);\n if (!el) {\n console.warn(`[super-toolbar 🎨] Element not found: ${this.config.element}`);\n return;\n }\n }\n\n this.app = createApp(Toolbar);\n this.app.directive('click-outside', vClickOutside);\n this.app.config.globalProperties.$toolbar = this;\n if (el) this.toolbar = this.app.mount(el);\n this.activeEditor = config.editor || null;\n this.updateToolbarState();\n }\n\n log(...args) {\n console.debug('[🎨 super-toolbar]', ...args);\n }\n\n setZoom(percent_int) {\n const allItems = [...this.toolbarItems, ...this.overflowItems];\n const item = allItems.find((item) => item.name.value === 'zoom');\n this.#interceptedCommands.setZoom({ item, argument: percent_int });\n }\n\n /**\n * The toolbar expects an active Super Editor instance.\n * @param {*} editor\n */\n setActiveEditor(editor) {\n this.activeEditor = editor;\n this.activeEditor.on('transaction', this.onEditorTransaction.bind(this));\n }\n\n getToolbarItemByGroup(groupName) {\n return this.toolbarItems.filter((item) => item.group.value === groupName);\n }\n\n #makeToolbarItems(superToolbar, icons, isDev = false) {\n const documentWidth = document.documentElement.clientWidth; // take into account the scrollbar\n const { defaultItems, overflowItems } = makeDefaultItems(superToolbar, isDev, documentWidth, this.role, icons);\n this.toolbarItems = defaultItems;\n this.overflowItems = overflowItems;\n }\n\n #initDefaultFonts() {\n if (!this.activeEditor || !this.activeEditor.converter) return;\n const { typeface = 'Arial', fontSizePt = 12 } = this.activeEditor.converter.getDocumentDefaultStyles() ?? {};\n const fontSizeItem = this.toolbarItems.find((item) => item.name.value === 'fontSize');\n if (fontSizeItem) fontSizeItem.defaultLabel.value = fontSizePt;\n\n const fontFamilyItem = this.toolbarItems.find((item) => item.name.value === 'fontFamily');\n if (fontFamilyItem) fontFamilyItem.defaultLabel.value = typeface;\n }\n \n #updateHighlightColors() {\n if (!this.activeEditor || !this.activeEditor.converter) return;\n if (!this.activeEditor.converter.docHiglightColors.size) return;\n \n const highlightItem = this.toolbarItems.find((item) => item.name.value === 'highlight');\n\n const pickerColorOptions = getAvailableColorOptions();\n const perChunk = 7; // items per chunk\n\n const result = Array.from(this.activeEditor.converter.docHiglightColors).reduce((resultArray, item, index) => {\n const chunkIndex = Math.floor(index / perChunk);\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = [];\n }\n\n if (!pickerColorOptions.includes(item)) resultArray[chunkIndex].push(makeColorOption(item));\n return resultArray;\n }, []);\n \n const option = {\n key: 'color',\n type: 'render',\n render: () => renderColorOptions(this, highlightItem, result),\n }\n\n highlightItem.nestedOptions.value = [option];\n }\n\n\n /**\n * Update the toolbar state. Expects a list of marks in the form: { name, attrs }\n * @param {Object} marks\n */\n updateToolbarState() {\n this.#updateToolbarHistory();\n this.#initDefaultFonts();\n this.#updateHighlightColors();\n\n // Decativate toolbar items if no active editor\n // This will skip buttons that are marked as allowWithoutEditor\n if (!this.activeEditor || this.documentMode === 'viewing') {\n this.#deactivateAll();\n return;\n }\n\n const marks = getActiveFormatting(this.activeEditor);\n const inTable = isInTable(this.activeEditor.state);\n\n this.toolbarItems.forEach((item) => {\n item.resetDisabled();\n\n // Linked Styles dropdown behaves a bit different from other buttons.\n // We need to disable it manually if there are no linked styles to show\n if (item.name.value === 'linkedStyles') {\n if (this.activeEditor && !getQuickFormatList(this.activeEditor).length) {\n return item.deactivate();\n } else {\n return item.activate();\n }\n };\n\n const activeMark = marks.find((mark) => mark.name === item.name.value);\n\n if (activeMark) {\n item.activate(activeMark.attrs);\n } else {\n item.deactivate();\n }\n\n if (item.name.value === 'tableActions') {\n if (inTable) item.disabled.value = false;\n else item.disabled.value = true;\n }\n });\n }\n\n onToolbarResize = () => {\n this.#makeToolbarItems(this, this.config.icons, this.isDev);\n if (this.role === 'viewer') {\n this.#deactivateAll();\n };\n };\n\n #deactivateAll() {\n this.activeEditor = null;\n this.toolbarItems.forEach((item) => {\n const { allowWithoutEditor } = item;\n if (allowWithoutEditor.value) return;\n item.setDisabled(true);\n });\n }\n\n #updateToolbarHistory() {\n if (!this.activeEditor) return;\n this.undoDepth = undoDepth(this.activeEditor.state);\n this.redoDepth = redoDepth(this.activeEditor.state);\n }\n\n /**\n * React to editor transactions. Might want to debounce this.\n */\n onEditorTransaction({ editor, transaction }) {\n if (!transaction.docChanged && !transaction.selectionSet) return;\n this.updateToolbarState();\n }\n\n /**\n * Main handler for toolbar commands.\n *\n * @param {Object} item is an instance of the useToolbarItem composable\n * @param {Object} argument is the argument passed to the command\n */\n emitCommand({ item, argument }) {\n const { command } = item;\n \n if (!command) {\n return;\n }\n\n this.log('(emmitCommand) Command:', command, item, argument);\n\n // Check if we have a custom or overloaded command defined\n if (command in this.#interceptedCommands) {\n return this.#interceptedCommands[command]({ item, argument });\n }\n\n if (command in this.activeEditor?.commands) {\n this.activeEditor.commands[command](argument);\n this.updateToolbarState();\n } else {\n throw new Error(`[super-toolbar 🎨] Command not found: ${command}`);\n }\n }\n\n #runCommandWithArgumentOnly({ item, argument }, callback) {\n if (!argument || !this.activeEditor) return;\n\n let command = item.command;\n if (command in this.activeEditor?.commands) {\n this.activeEditor.commands[command](argument);\n if (typeof callback === 'function') callback(argument);\n this.updateToolbarState();\n }\n }\n}\n","/**\n * Adjusts pagination breaks based on editor zoom/positioning\n * \n * @param {HTMLElement} editorElem The editor container element\n * @param {Object} editor The editor instance\n * @returns {void}\n */\nexport function adjustPaginationBreaks(editorElem, editor) {\n if (!editorElem.value || !editor?.value?.options?.scale) return;\n\n const zoom = editor.value.options.scale;\n const bounds = editorElem.value.getBoundingClientRect();\n\n // Find all `.pagination-break-wrapper` nodes and adjust them\n const breakNodes = editorElem.value.querySelectorAll('.pagination-break-wrapper');\n let firstLeft;\n\n // We align all nodes to the first one, which is guaranteed to be in the right place\n // since its the original header and is not generated inside any document node\n breakNodes.forEach((node) => {\n const nodeBounds = node.getBoundingClientRect();\n const left = ((nodeBounds.left - bounds.left) / zoom) * -1 + 1;\n if (!firstLeft) firstLeft = left;\n if (left !== firstLeft) {\n const diff = left - firstLeft;\n node.style.transform = `translateX(${diff}px)`;\n }\n });\n};","import { TextSelection } from 'prosemirror-state';\n\n/**\n * Calculates cursor position based on margin click event\n * @param {MouseEvent} event Mousedown event\n * @param {SuperEditor} editor SuperEditor instance\n */\nexport const onMarginClickCursorChange = (event, editor) => {\n const y = event.clientY;\n const x = event.clientX;\n const { view } = editor;\n const editorRect = view.dom.getBoundingClientRect();\n\n let coords = {\n left: 0,\n top: y,\n };\n let isRightMargin = false;\n\n if (x > editorRect.right) {\n coords.left = editorRect.left + editorRect.width - 1;\n isRightMargin = true;\n } else if (x < editorRect.left) {\n coords.left = editorRect.left;\n }\n\n const pos = view.posAtCoords(coords)?.pos;\n if (pos) {\n let cursorPos = pos;\n\n if (isRightMargin) {\n const $pos = view.state.doc.resolve(pos);\n const charOffset = $pos.textOffset;\n\n const node = view.state.doc.nodeAt(pos);\n const text = node?.text;\n const charAtPos = text?.charAt(charOffset);\n\n cursorPos = node?.isText && charAtPos !== ' ' ? pos - 1 : pos;\n }\n\n const transaction = view.state.tr.setSelection(\n TextSelection.create(view.state.doc, cursorPos)\n );\n view.dispatch(transaction);\n view.focus();\n }\n}\n","<script setup>\nimport { ref, onMounted, onUnmounted, computed, reactive } from 'vue';\n\nconst emit = defineEmits(['margin-change']);\nconst props = defineProps({\n orientation: {\n type: String,\n default: 'horizontal',\n },\n length: {\n type: Number,\n default: 0,\n },\n editor: {\n type: Object,\n required: true,\n }\n});\n\nconst HANDLE_WIDTH = 5;\nconst MIN_WIDTH = 200;\nconst ruler = ref(null);\nconst rulerDefinition = ref([]);\nconst alignment = 'flex-end';\n\nconst rulerHandleOriginalColor = ref('#CCCCCC');\nconst rulerHandleActiveColor = ref('#2563EB66');\nconst pageSize = ref(null);\nconst pageMargins = ref(null);\n\nconst isDragging = ref(false);\nconst currentHandle = ref(null);\nconst leftHandle = reactive({ side: 'left', x: 0 });\nconst rightHandle = reactive({ side: 'right', x: 0 });\nconst showVerticalIndicator = ref(false);\nconst initialX = ref(0);\nlet offsetX = 0;\n\n/**\n * Generate the ruler.\n */\nconst initRuler = () => {\n const rulerItems = [];\n\n const { pageMargins: docMargins, pageSize: docSize } = props.editor.getPageStyles();\n pageSize.value = docSize;\n pageMargins.value = docMargins;\n\n rightHandle.x = docSize.width * 96 - docMargins.right * 96;\n leftHandle.x = docMargins.left * 96;\n\n for (let i = 0; i < docSize.width; i++) {\n const marginNum = 0.0625 * 96 - 0.5;\n const margin = `${marginNum}px`;\n\n const diff = docSize.width - i;\n rulerItems.push(...generateSection(1, 'main', '20%', margin, i));\n rulerItems.push(...generateSection(3, 'eighth', '10%', margin));\n rulerItems.push(...generateSection(1, 'half', '40%', margin));\n\n if (diff <= 0.5) break;\n rulerItems.push(...generateSection(3, 'eighth', '10%', margin));\n }\n return rulerItems;\n};\n\n/**\n * Generate a section of the ruler\n * \n * @param {Number} qty - Number of elements in the section\n * @param {String} size - Size of the element\n * @param {String} height - Height of the element\n * @param {String} margin - Margin of the element\n * @param {Number} index - Index of the element\n * @returns {Array} - Array of ruler elements\n */\nconst generateSection = (qty, size, height, margin, index) => {\n return Array.from({ length: qty }, (_, i) => {\n const item = {\n className: `${size}-unit ruler-section`,\n height,\n margin\n };\n\n if (index !== undefined) item.numbering = index;\n return item;\n });\n};\n\n\n/**\n * Get the style for a ruler element\n * \n * @param {Object} unit - Ruler element\n * @returns {Object} - Style object\n */\nconst getStyle = computed(() => (unit) => {\n return {\n width: '1px',\n minWidth: '1px',\n maxWidth: '1px',\n height: unit.height,\n backgroundColor: unit.color || '#666',\n marginLeft: unit.numbering === 0 ? null : unit.margin,\n marginRight: unit.margin,\n };\n});\n\n/**\n * Get the position of the margin handles\n * \n * @param {String} side - Side of the margin handle\n * @returns {Object} - Style object\n */\nconst getHandlePosition = computed(() => (side) => {\n const handle = side === 'left' ? leftHandle : rightHandle;\n return {\n left: `${handle.x}px`,\n };\n});\n\n/**\n * Get the style for the vertical indicator\n * \n * @returns {Object} - Style object\n */\nconst getVerticalIndicatorStyle = computed(() => {\n if (!ruler.value) return;\n const parentElement = ruler.value.parentElement;\n const editor = parentElement.querySelector('.super-editor');\n const editorBounds = editor.getBoundingClientRect();\n return {\n left: `${currentHandle.value.x}px`,\n minHeight : `${editorBounds.height}px`,\n };\n});\n\n/**\n * On mouse down, prepare to drag a margin handle and show the vertical indicator\n * \n * @param {Event} event - Mouse down event\n * @returns {void}\n */\nconst handleMouseDown = (event) => {\n isDragging.value = true;\n\n setRulerHandleActive();\n\n // Get the currently selected handle\n const itemId = event.currentTarget.id;\n currentHandle.value = itemId === 'left-margin-handle' ? leftHandle : rightHandle;\n initialX.value = currentHandle.value.x;\n offsetX = event.clientX - currentHandle.value.x;\n\n showVerticalIndicator.value = true;\n};\n\n/**\n * On mouse move, update the position of the margin handle\n * \n * @param {Event} event - Mouse move event\n * @returns {void}\n */\nconst handleMouseMove = (event) => {\n if (!isDragging.value) return\n \n const newLeft = event.clientX - offsetX;\n currentHandle.value.x = newLeft;\n\n if (currentHandle.value.side === 'left') {\n if (newLeft <= 0) {\n currentHandle.value.x = 0;\n } else if (newLeft >= rightHandle.x - MIN_WIDTH) {\n currentHandle.value.x = rightHandle.x - MIN_WIDTH;\n }\n } else {\n if (newLeft >= pageSize.value.width * 96) {\n currentHandle.value.x = pageSize.value.width * 96;\n } else if (newLeft <= leftHandle.x + MIN_WIDTH) {\n currentHandle.value.x = leftHandle.x + MIN_WIDTH;\n }\n }\n};\n\n/**\n * On mouse up, stop dragging the margin handle and emit the new margin value\n * \n * @returns {void}\n */\nconst handleMouseUp = () => {\n isDragging.value = false;\n showVerticalIndicator.value = false;\n\n setRulerHandleInactive();\n\n if (currentHandle.value && currentHandle.value.x !== initialX.value) {\n const marginValue = getNewMarginValue();\n emit('margin-change', {\n side: currentHandle.value.side,\n value: marginValue,\n });\n }\n};\n\n/**\n * Set the ruler handle color to active\n * \n * @returns {void}\n */\nconst setRulerHandleActive = () => {\n rulerHandleOriginalColor.value = rulerHandleActiveColor.value;\n}\n\n/**\n * Set the ruler handle color to inactive\n * \n * @returns {void}\n */\nconst setRulerHandleInactive = () => {\n rulerHandleOriginalColor.value = '#CCC';\n}\n\n/**\n * Get the new margin value based on the current handle position\n * \n * @returns {Number} - New margin value\n */\nconst getNewMarginValue = () => {\n if (currentHandle.value.side === 'left') return currentHandle.value.x / 96;\n else return (pageSize.value.width * 96 - currentHandle.value.x) / 96;\n};\n\n/**\n * Set ruler style variables\n * \n * @returns {Object} - Style object\n */\nconst getStyleVars = computed(() => {\n return {\n '--alignment': alignment,\n '--ruler-handle-color': rulerHandleOriginalColor.value,\n '--ruler-handle-active-color': rulerHandleActiveColor.value,\n };\n});\n\nonMounted(() => {\n rulerDefinition.value = initRuler();\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n});\n\nonUnmounted(() => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n});\n\n</script>\n\n<template>\n <div class=\"ruler\" ref=\"ruler\" :style=\"getStyleVars\">\n\n <!-- Margin handles -->\n <div\n class=\"margin-handle handle-left\"\n id=\"left-margin-handle\"\n @mousedown=\"handleMouseDown\"\n :style=\"getHandlePosition('left')\"\n ></div>\n <div\n class=\"margin-handle handle-right\"\n id=\"right-margin-handle\"\n @mousedown=\"handleMouseDown\"\n :style=\"getHandlePosition('right')\"\n ></div>\n <!-- Margin handles end -->\n \n <div v-if=\"showVerticalIndicator\" class=\"vertical-indicator\" :style=\"getVerticalIndicatorStyle\"></div>\n \n <!-- The ruler display -->\n <div v-for=\"unit in rulerDefinition\" :class=\"unit.className\" :style=\"getStyle(unit)\">\n <div class=\"numbering\">{{ unit.numbering }}</div>\n <div v-for=\"half in unit.elements\" :class=\"half.className\" :style=\"getStyle(half)\">\n <div v-for=\"quarter in half.elements\" :class=\"quarter.className\" :style=\"getStyle(quarter)\">\n </div>\n </div>\n </div>\n\n </div>\n</template>\n\n<style scoped>\n.vertical-indicator {\n position: absolute;\n height: 0px;\n min-width: 1px;\n background-color: #AAA;\n top: 20px;\n z-index: 100;\n}\n.margin-handle {\n width: 56px;\n min-width: 5px;\n max-width: 5px;\n background-color: var(--ruler-handle-color);\n height: 20px;\n cursor: grab;\n position: absolute;\n margin-left: -2px;\n border-radius: 4px 4px 0 0;\n transition: background-color 250ms ease;\n}\n.margin-handle:hover {\n background-color: var(--ruler-handle-active-color);\n}\n.ruler {\n max-height: 25px;\n height: 25px;\n max-width: 8.5in;\n display: flex;\n margin: 0;\n padding: 0;\n align-items: var(--alignment);\n box-sizing: border-box;\n position: relative;\n color: #666;\n}\n.mouse-tracker {\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 100%;\n background-color: var(--color);\n pointer-events: none;\n}\n.numbering {\n position: absolute;\n top: -16px;\n left: -2px;\n font-size: 10px;\n pointer-events: none;\n user-select: none;\n}\n.ruler-section {\n position: relative;\n display: flex;\n align-items: var(--alignment);\n pointer-events: none;\n user-select: none;\n}\n</style>","<script setup>\nimport 'tippy.js/dist/tippy.css';\nimport { NSkeleton } from 'naive-ui';\nimport { ref, onMounted, onBeforeUnmount, computed, shallowRef, reactive, nextTick } from 'vue';\nimport { Editor } from '@/index.js';\nimport { getStarterExtensions } from '@extensions/index.js';\nimport { adjustPaginationBreaks } from './pagination-helpers.js';\nimport { onMarginClickCursorChange } from './cursor-helpers.js';\nimport Ruler from './rulers/Ruler.vue';\n\nconst emit = defineEmits([\n 'editor-ready',\n 'editor-click',\n 'editor-keydown',\n 'comments-loaded',\n 'selection-update',\n]);\n\nconst props = defineProps({\n documentId: {\n type: String,\n required: false,\n },\n\n fileSource: {\n type: File,\n required: false,\n },\n\n state: {\n type: Object,\n required: false,\n default: () => null,\n },\n\n options: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n});\n\nconst editorReady = ref(false);\nconst editor = shallowRef(null);\n\nconst editorWrapper = ref(null);\nconst editorElem = ref(null);\n\nlet dataPollTimeout;\n\nconst stopPolling = () => {\n clearTimeout(dataPollTimeout);\n};\n\nconst pollForMetaMapData = (ydoc, retries = 10, interval = 500) => {\n const metaMap = ydoc.getMap('meta');\n\n const checkData = () => {\n const docx = metaMap.get('docx');\n if (docx) {\n stopPolling();\n initEditor({ content: docx });\n } else if (retries > 0) {\n console.debug(`Waiting for 'docx' data... retries left: ${retries}`);\n dataPollTimeout = setTimeout(checkData, interval); // Retry after the interval\n retries--;\n } else {\n console.warn('Failed to load docx data from meta map.');\n }\n };\n\n checkData();\n};\n\nconst loadNewFileData = async () => {\n try {\n const [docx, media, mediaFiles, fonts] = await Editor.loadXmlData(props.fileSource);\n return { content: docx, media, mediaFiles, fonts };\n } catch (err) {\n console.debug('Error loading new file data:', err);\n }\n};\n\nconst initializeData = async () => {\n // If we have the file, initialize immediately from file\n if (props.fileSource) {\n const fileData = await loadNewFileData();\n return initEditor(fileData);\n }\n\n // If we are in collaboration mode, wait for the docx data to be available\n else if (props.options.ydoc && props.options.collaborationProvider) {\n delete props.options.content;\n const ydoc = props.options.ydoc;\n const provider = props.options.collaborationProvider;\n const handleSynced = () => {\n pollForMetaMapData(ydoc);\n // Remove the synced event listener.\n // Avoids re-initializing the editor in case the connection is lost and reconnected\n provider.off('synced', handleSynced);\n }\n provider.on('synced', handleSynced);\n }\n};\n\nconst getExtensions = () => {\n const extensions = getStarterExtensions();\n if (!props.options.pagination) {\n return extensions.filter(ext => ext.name !== 'pagination');\n }\n return extensions;\n};\n\nconst initEditor = async ({ content, media = {}, mediaFiles = {}, fonts = {} } = {}) => {\n editor.value = new Editor({\n mode: 'docx',\n element: editorElem.value,\n fileSource: props.fileSource,\n extensions: getExtensions(),\n externalExtensions: props.options.externalExtensions,\n documentId: props.documentId,\n content,\n media,\n mediaFiles,\n fonts,\n ...props.options,\n });\n\n editor.value.on('paginationUpdate', () => {\n adjustPaginationBreaks(editorElem, editor);\n });\n\n editor.value.on('collaborationReady', () => {\n setTimeout(() => {\n editorReady.value = true;\n }, 150);\n });\n};\n\nconst handleSuperEditorKeydown = (event) => {\n emit('editor-keydown', { editor: editor.value });\n};\n\nconst handleSuperEditorClick = (event) => {\n emit('editor-click', { editor: editor.value });\n let pmElement = editorElem.value?.querySelector('.ProseMirror');\n\n if (!pmElement || !editor.value) {\n return;\n }\n\n let isInsideEditor = pmElement.contains(event.target);\n\n if (!isInsideEditor && editor.value.isEditable) {\n editor.value.view?.focus();\n }\n};\n\nonMounted(() => {\n initializeData();\n if (props.options?.suppressSkeletonLoader || !props.options?.collaborationProvider) editorReady.value = true;\n});\n\nconst handleMarginClick = (event) => {\n if (event.target.classList.contains('ProseMirror')) return;\n\n onMarginClickCursorChange(event, editor.value);\n};\n\n/**\n * Triggered when the user changes the margin value from the ruler\n *\n * @param {Object} param0\n * @param {String} param0.side - The side of the margin being changed\n * @param {Number} param0.value - The new value of the margin in inches\n * @returns {void}\n */\nconst handleMarginChange = ({ side, value }) => {\n if (!editor.value) return;\n\n const pageStyles = editor.value.getPageStyles();\n const { pageMargins } = pageStyles;\n const update = { ...pageMargins, [side]: value };\n editor.value?.updatePageStyle({ pageMargins: update });\n};\n\nonBeforeUnmount(() => {\n stopPolling();\n editor.value?.destroy();\n editor.value = null;\n});\n</script>\n\n<template>\n <div class=\"super-editor-container\">\n \n <Ruler\n class=\"ruler\"\n v-if=\"options.rulers && !!editor\"\n :editor=\"editor\"\n @margin-change=\"handleMarginChange\"\n />\n\n <div \n class=\"super-editor\"\n ref=\"editorWrapper\"\n @keydown=\"handleSuperEditorKeydown\" \n @click=\"handleSuperEditorClick\"\n @mousedown=\"handleMarginClick\"\n >\n <div ref=\"editorElem\" class=\"editor-element super-editor__element\"></div>\n </div>\n\n <div class=\"placeholder-editor\" v-if=\"!editorReady\">\n <div class=\"placeholder-title\">\n <n-skeleton text style=\"width: 60%\" />\n </div>\n\n <n-skeleton text :repeat=\"6\" />\n <n-skeleton text style=\"width: 60%\" />\n\n <n-skeleton text :repeat=\"6\" style=\"width: 30%; display: block; margin: 20px\" />\n <n-skeleton text style=\"width: 60%\" />\n <n-skeleton text :repeat=\"5\" />\n <n-skeleton text style=\"width: 30%\" />\n\n <n-skeleton text style=\"margin-top: 50px\" />\n <n-skeleton text :repeat=\"6\" />\n <n-skeleton text style=\"width: 70%\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.super-editor-container {\n width: auto;\n height: auto;\n min-width: 8in;\n min-height: 11in;\n position: relative;\n display: flex;\n flex-direction: column;\n}\n\n.ruler {\n margin-bottom: 2px;\n}\n\n.super-editor {\n color: initial;\n}\n\n.placeholder-editor {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n padding: 1in;\n z-index: 5;\n background-color: white;\n box-sizing: border-box;\n}\n\n.placeholder-title {\n display: flex;\n justify-content: center;\n margin-bottom: 40px;\n}\n</style>\n","<script setup>\nconst emit = defineEmits(['file-change']);\nconst onFileChange = (event) => {\n emit('file-change', event.target.files[0]);\n};\n</script>\n\n<template>\n <div>\n <input type=\"file\" id=\"fileInput\" @change=\"onFileChange\" accept=\".docx\" />\n </div>\n</template>\n\n<style scoped></style>\n","<script setup>\nimport { ref, shallowRef, onMounted, onBeforeUnmount } from 'vue';\nimport { Editor } from '@/index.js';\nimport { getRichTextExtensions, Placeholder } from '@extensions/index.js';\n\nconst emit = defineEmits(['update:modelValue', 'focus', 'blur']);\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n\n placeholder: {\n type: String,\n required: false,\n default: 'Type something...',\n },\n\n options: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n\n users: {\n type: Array,\n required: false,\n default: () => [],\n },\n});\n\nconst editor = shallowRef();\nconst editorElem = ref(null);\nconst isFocused = ref(false);\n\nconst onTransaction = ({ editor, transaction }) => {\n const contents = editor.getHTML();\n emit('update:modelValue', contents);\n};\n\nconst onFocus = ({ editor, transaction }) => {\n isFocused.value = true;\n updateUsersState();\n emit('focus', { editor, transaction });\n};\n\nconst onBlur = ({ editor, transaction }) => {\n isFocused.value = false;\n emit('blur', { editor, transaction });\n};\n\nconst initEditor = async () => {\n Placeholder.options.placeholder = props.placeholder || 'Type something...';\n\n props.options.onTransaction = onTransaction;\n props.options.onFocus = onFocus;\n props.options.onBlur = onBlur;\n editor.value = new Editor({\n mode: 'text',\n content: document.getElementById('currentContent'),\n element: editorElem.value,\n extensions: getRichTextExtensions(),\n users: props.users,\n ...props.options,\n });\n};\n\nconst handleFocus = () => {\n isFocused.value = true;\n editor.value?.view?.focus();\n};\n\nconst updateUsersState = () => {\n editor.value?.setOptions({ users: props.users });\n};\n\nonMounted(() => {\n initEditor();\n});\n\nonBeforeUnmount(() => {\n editor.value?.destroy();\n editor.value = null;\n});\n</script>\n\n<template>\n <div class=\"super-editor super-input\" :class=\"{ 'super-input-active': isFocused }\" @click.stop.prevent=\"handleFocus\">\n <div id=\"currentContent\" style=\"display: none\" v-html=\"modelValue\"></div>\n <div ref=\"editorElem\" class=\"editor-element super-editor__element\"></div>\n </div>\n</template>\n\n<style scoped>\n.super-editor {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border: 1px solid #999;\n outline: none;\n transition: border 0.2s ease;\n background-color: white;\n}\n\n.super-input {\n font-size: 13px;\n font-family: inherit;\n}\n\n.editor-element {\n height: 100%;\n width: 100%;\n border: none;\n outline: none;\n}\n\n.super-input-active {\n border: 1px solid #007bff;\n outline: none;\n}\n</style>\n","import './style.css';\nimport { SuperConverter } from './core/super-converter/SuperConverter';\nimport { getMarksFromSelection } from './core/helpers/getMarksFromSelection.js';\nimport { getActiveFormatting } from './core/helpers/getActiveFormatting.js';\nimport { getStarterExtensions, getRichTextExtensions } from './extensions/index.js';\nimport { SuperToolbar } from './components/toolbar/super-toolbar.js';\nimport { DocxZipper, helpers } from './core/index.js';\nimport { Editor } from './core/Editor.js';\nimport { createZip } from './core/super-converter/zipper.js';\nimport { getAllowedImageDimensions } from './extensions/image/imageHelpers/processUploadedImage.js';\nimport { Node, Attribute } from '@core/index.js';\nimport { Extension } from '@core/Extension.js';\nimport { Plugin } from 'prosemirror-state';\n\nimport SuperEditor from './components/SuperEditor.vue';\nimport BasicUpload from './dev/components/BasicUpload.vue';\nimport Toolbar from './components/toolbar/Toolbar.vue';\nimport SuperInput from './components/SuperInput.vue';\nimport * as fieldAnnotationHelpers from './extensions/field-annotation/fieldAnnotationHelpers/index.js';\nimport * as trackChangesHelpers from './extensions/track-changes/trackChangesHelpers/index.js';\n\nconst Extensions = {\n Node,\n Attribute,\n Extension,\n Plugin,\n};\n\n/**\n * Exported classes and components.\n * @module exports\n * @see SuperConverter\n * @see DocxZipper\n * @see SuperEditor\n * @see Toolbar\n */\nexport {\n // Classes\n SuperConverter,\n DocxZipper,\n SuperToolbar,\n Editor,\n\n // Components\n SuperEditor,\n SuperInput,\n BasicUpload,\n Toolbar,\n\n // Helpers\n helpers,\n fieldAnnotationHelpers,\n trackChangesHelpers,\n getMarksFromSelection,\n getActiveFormatting,\n getStarterExtensions,\n getRichTextExtensions,\n createZip,\n getAllowedImageDimensions,\n\n // External extensions classes\n Extensions,\n};\n"],"names":["EventEmitter","l","uuidv4","unref","alignment","closeDropdown","toolbarIcons","link","tableItem","tableActionsItem","icons","role","documentOptions","item","handleImageUploadDefault","editor"],"mappings":"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","x_google_ignoreList":[0]}