@eigenpal/docx-editor-vue 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +204 -0
- package/README.md +60 -0
- package/dist/KeyboardShortcutsDialog-BtJB9UOD.js +2902 -0
- package/dist/KeyboardShortcutsDialog-D72k5DXR.cjs +1 -0
- package/dist/MenuBar-BrQW4COn.cjs +4 -0
- package/dist/MenuBar-D_Dvwb0F.js +3313 -0
- package/dist/RenderedDomContext-CHc18N_2.js +2 -0
- package/dist/TablePropertiesDialog-Ct5XChwd.cjs +1 -0
- package/dist/TablePropertiesDialog-cJx_xxxE.js +987 -0
- package/dist/_plugin-vue_export-helper-B52Kst-M.js +8 -0
- package/dist/_plugin-vue_export-helper-CX7YVcP6.cjs +1 -0
- package/dist/components/DocxEditor/types.d.ts +100 -0
- package/dist/components/EditorToolbarContext.d.ts +9 -0
- package/dist/components/Toolbar/presets.d.ts +42 -0
- package/dist/components/dialogs/index.d.ts +27 -0
- package/dist/components/imageContextMenuTypes.d.ts +30 -0
- package/dist/components/imageSelectionTypes.d.ts +14 -0
- package/dist/components/insertTableState.d.ts +9 -0
- package/dist/components/sidebar/cardStyles.d.ts +3 -0
- package/dist/components/sidebar/cardUtils.d.ts +1 -0
- package/dist/components/sidebar/resolveItemPositions.d.ts +4 -0
- package/dist/components/sidebar/sidebarUtils.d.ts +4 -0
- package/dist/components/tableStylePresets.d.ts +53 -0
- package/dist/components/toolbarUtils.d.ts +1 -0
- package/dist/components/ui/Icons.d.ts +1 -0
- package/dist/components/ui/hyperlinkPopupTypes.d.ts +20 -0
- package/dist/composables/index.d.ts +30 -0
- package/dist/composables/useAutoSave.d.ts +40 -0
- package/dist/composables/useClipboard.d.ts +22 -0
- package/dist/composables/useCommentLifecycle.d.ts +52 -0
- package/dist/composables/useCommentManagement.d.ts +41 -0
- package/dist/composables/useCommentSidebarItems.d.ts +24 -0
- package/dist/composables/useContextMenus.d.ts +39 -0
- package/dist/composables/useDocumentLifecycle.d.ts +11 -0
- package/dist/composables/useDocxEditor.d.ts +56 -0
- package/dist/composables/useDocxEditorRefApi.d.ts +49 -0
- package/dist/composables/useDragAutoScroll.d.ts +11 -0
- package/dist/composables/useFileIO.d.ts +30 -0
- package/dist/composables/useFindReplace.d.ts +34 -0
- package/dist/composables/useFixedDropdown.d.ts +14 -0
- package/dist/composables/useFormattingActions.d.ts +40 -0
- package/dist/composables/useHistory.d.ts +9 -0
- package/dist/composables/useHyperlinkManagement.d.ts +38 -0
- package/dist/composables/useImageActions.d.ts +30 -0
- package/dist/composables/useKeyboardShortcuts.d.ts +17 -0
- package/dist/composables/useMenuActions.d.ts +23 -0
- package/dist/composables/useOutlineSidebar.d.ts +17 -0
- package/dist/composables/usePageSetupControls.d.ts +22 -0
- package/dist/composables/usePagesPointer.d.ts +70 -0
- package/dist/composables/useSelectionHighlight.d.ts +19 -0
- package/dist/composables/useSelectionSync.d.ts +13 -0
- package/dist/composables/useTableResize.d.ts +7 -0
- package/dist/composables/useTableSelection.d.ts +10 -0
- package/dist/composables/useToolbarDropdowns.d.ts +14 -0
- package/dist/composables/useTrackedChanges.d.ts +12 -0
- package/dist/composables/useVisualLineNavigation.d.ts +11 -0
- package/dist/composables/useWheelZoom.d.ts +10 -0
- package/dist/composables/useZoom.d.ts +16 -0
- package/dist/composables.cjs +1 -0
- package/dist/composables.js +485 -0
- package/dist/dialogs.cjs +1 -0
- package/dist/dialogs.js +3 -0
- package/dist/docx-editor-vue.css +2 -0
- package/dist/i18n/LocaleContext.d.ts +1 -0
- package/dist/i18n/index.d.ts +26 -0
- package/dist/index.cjs +20 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +3600 -0
- package/dist/lib/utils.d.ts +10 -0
- package/dist/plugin-api/RenderedDomContext.d.ts +1 -0
- package/dist/plugin-api/index.d.ts +18 -0
- package/dist/plugin-api/types.d.ts +28 -0
- package/dist/plugin-api.cjs +1 -0
- package/dist/plugin-api.js +62 -0
- package/dist/renderAsync.d.ts +31 -0
- package/dist/styles/index.d.ts +12 -0
- package/dist/styles/zIndex.d.ts +24 -0
- package/dist/styles.cjs +1 -0
- package/dist/styles.js +5 -0
- package/dist/ui.cjs +18 -0
- package/dist/ui.d.ts +79 -0
- package/dist/ui.js +963 -0
- package/dist/useTableResize-1oSe9Kjk.js +480 -0
- package/dist/useTableResize-lWdIgX9x.cjs +1 -0
- package/dist/utils/commentFactories.d.ts +7 -0
- package/dist/utils/domQueries.d.ts +28 -0
- package/dist/utils/imageClipboard.d.ts +9 -0
- package/dist/utils/paraTextHelpers.d.ts +29 -0
- package/dist/utils/refApiQueries.d.ts +46 -0
- package/dist/zIndex-CH0jZ7U7.cjs +1 -0
- package/dist/zIndex-CxELVe_L.js +12 -0
- package/package.json +119 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vue mirror of packages/react/src/lib/utils.ts — `cn()` class-name
|
|
3
|
+
* merger. The React file uses `clsx` (~700 bytes), but adding clsx
|
|
4
|
+
* just for this would bloat the Vue bundle. This minimal inline
|
|
5
|
+
* implementation handles the cases consumer plugins actually use:
|
|
6
|
+
* strings, arrays, and conditional objects ({ 'class-name': boolean }).
|
|
7
|
+
*/
|
|
8
|
+
type ClassValue = string | number | null | undefined | false | ClassValue[] | Record<string, boolean | undefined | null>;
|
|
9
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RenderedDomContextImpl, createRenderedDomContext, } from '@eigenpal/docx-editor-core/plugin-api/RenderedDomContext';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @eigenpal/docx-editor-vue/plugin-api
|
|
3
|
+
*
|
|
4
|
+
* Generic plugin interface and host component for integrating external
|
|
5
|
+
* plugins with the Vue editor. Pairs with the framework-agnostic plugin
|
|
6
|
+
* types exported from `@eigenpal/docx-editor-core/plugin-api`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { PluginHost, type EditorPlugin } from '@eigenpal/docx-editor-vue/plugin-api';
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export { default as PluginHost } from './PluginHost.vue';
|
|
17
|
+
export { createRenderedDomContext, RenderedDomContextImpl } from './RenderedDomContext';
|
|
18
|
+
export type { EditorPlugin, EditorPluginCore, PanelConfig, PluginPanelProps, PositionCoordinates, RenderedDomContext, VueEditorPlugin, } from './types';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EditorView } from 'prosemirror-view';
|
|
2
|
+
import { Component, VNode } from 'vue';
|
|
3
|
+
import { EditorPluginCore, PluginPanelProps, RenderedDomContext } from '@eigenpal/docx-editor-core/plugin-api';
|
|
4
|
+
export type { EditorPluginCore, PluginPanelProps, PanelConfig, RenderedDomContext, PositionCoordinates, } from '@eigenpal/docx-editor-core/plugin-api';
|
|
5
|
+
/**
|
|
6
|
+
* Vue-specific editor plugin interface.
|
|
7
|
+
*
|
|
8
|
+
* Extends EditorPluginCore with:
|
|
9
|
+
* - Panel: Vue component for rendering in the annotation panel
|
|
10
|
+
* - renderOverlay: Function returning VNode for overlay rendering
|
|
11
|
+
*/
|
|
12
|
+
export interface VueEditorPlugin<TState = any> extends EditorPluginCore<TState> {
|
|
13
|
+
/**
|
|
14
|
+
* Vue component to render in the annotation panel area.
|
|
15
|
+
*/
|
|
16
|
+
Panel?: Component<PluginPanelProps<TState>>;
|
|
17
|
+
/**
|
|
18
|
+
* Render an overlay on top of the rendered pages.
|
|
19
|
+
*/
|
|
20
|
+
renderOverlay?: (context: RenderedDomContext, state: TState, editorView: EditorView | null) => VNode | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Canonical alias — `EditorPlugin` is `VueEditorPlugin` inside the Vue
|
|
24
|
+
* adapter. The package name already encodes the framework; importing
|
|
25
|
+
* `EditorPlugin` from `@eigenpal/docx-editor-vue/plugin-api` reads as
|
|
26
|
+
* cleanly as the React import. Mirrors React's `EditorPlugin` alias.
|
|
27
|
+
*/
|
|
28
|
+
export type EditorPlugin<TState = any> = VueEditorPlugin<TState>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./_plugin-vue_export-helper-CX7YVcP6.cjs`);let t=require(`vue`),n=require(`@eigenpal/docx-editor-core`),r=require(`@eigenpal/docx-editor-core/plugin-api/RenderedDomContext`);var i={class:`plugin-host__editor`},a=(0,t.defineComponent)({__name:`PluginHost`,props:{plugins:{default:()=>[]},editorView:{},panelConfig:{default:()=>({})},panelCollapsed:{type:Boolean,default:!1}},setup(e){let r=e,a=(0,t.computed)(()=>r.panelConfig?.position??`right`),o=(0,t.computed)(()=>r.panelConfig?.defaultSize??280),s=(0,t.computed)(()=>({width:a.value===`bottom`?`100%`:o.value+`px`,height:a.value===`bottom`?o.value+`px`:`auto`})),c=new n.PluginLifecycleManager;function l(e){let t=e,n=t?.requiresAdapter??t?.requiresFramework??t?.adapter??t?.framework;if(typeof n==`string`&&n.toLowerCase()===`react`)throw Error(`Plugin "${t.id??`unknown`}" requires the React adapter and cannot be mounted in @eigenpal/docx-editor-vue. Use @eigenpal/docx-editor-react/plugin-api or a Vue-compatible plugin.`)}function u(e){l(e);let t=e;if(typeof t.id!=`string`||t.id.length===0)throw Error(`Vue plugins must provide a non-empty string id.`);return{id:t.id,styles:typeof t.styles==`string`?t.styles:void 0,initialize:typeof t.initialize==`function`?t.initialize:void 0,onStateChange:typeof t.onStateChange==`function`?t.onStateChange:void 0,destroy:typeof t.destroy==`function`?t.destroy:void 0}}return(0,t.watch)([()=>r.editorView,()=>r.plugins],([e,t],r,i)=>{if(c.destroy(),!e)return;let a=t.map(u);c.initialize(a,e),c.updateStates(e);let o=a.filter(e=>e.styles).map(e=>(0,n.injectStyles)(e.id,e.styles)),s=null,l=()=>c.updateStates(e),d=()=>{s!==null&&cancelAnimationFrame(s),s=requestAnimationFrame(l)},f=e.dom;f.addEventListener(`input`,d),f.addEventListener(`focus`,l),f.addEventListener(`click`,l);let p=e.dispatch.bind(e),m=(e=>{p(e),d()});e.dispatch=m,i(()=>{f.removeEventListener(`input`,d),f.removeEventListener(`focus`,l),f.removeEventListener(`click`,l),s!==null&&cancelAnimationFrame(s),e.dispatch===m&&(e.dispatch=p),o.forEach(e=>e()),c.destroy()})},{immediate:!0}),(0,t.onBeforeUnmount)(()=>{c.destroy()}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`plugin-host`,`plugin-host--${a.value}`])},[(0,t.createElementVNode)(`div`,i,[(0,t.renderSlot)(n.$slots,`default`,{},void 0,!0)]),n.$slots.panel&&!e.panelCollapsed?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:`plugin-host__panel`,style:(0,t.normalizeStyle)(s.value)},[(0,t.renderSlot)(n.$slots,`panel`,{},void 0,!0)],4)):(0,t.createCommentVNode)(``,!0)],2))}}),o=e.t(a,[[`__scopeId`,`data-v-97fa42f4`]]);exports.PluginHost=o,Object.defineProperty(exports,`RenderedDomContextImpl`,{enumerable:!0,get:function(){return r.RenderedDomContextImpl}}),Object.defineProperty(exports,`createRenderedDomContext`,{enumerable:!0,get:function(){return r.createRenderedDomContext}});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { t as e } from "./_plugin-vue_export-helper-B52Kst-M.js";
|
|
2
|
+
import { n as t, t as n } from "./RenderedDomContext-CHc18N_2.js";
|
|
3
|
+
import { computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, normalizeClass as c, normalizeStyle as l, onBeforeUnmount as u, openBlock as d, renderSlot as f, watch as p } from "vue";
|
|
4
|
+
import { PluginLifecycleManager as m, injectStyles as h } from "@eigenpal/docx-editor-core";
|
|
5
|
+
//#region src/plugin-api/PluginHost.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var g = { class: "plugin-host__editor" }, _ = /* @__PURE__ */ e(/* @__PURE__ */ s({
|
|
7
|
+
__name: "PluginHost",
|
|
8
|
+
props: {
|
|
9
|
+
plugins: { default: () => [] },
|
|
10
|
+
editorView: {},
|
|
11
|
+
panelConfig: { default: () => ({}) },
|
|
12
|
+
panelCollapsed: {
|
|
13
|
+
type: Boolean,
|
|
14
|
+
default: !1
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
setup(e) {
|
|
18
|
+
let t = e, n = r(() => t.panelConfig?.position ?? "right"), s = r(() => t.panelConfig?.defaultSize ?? 280), _ = r(() => ({
|
|
19
|
+
width: n.value === "bottom" ? "100%" : s.value + "px",
|
|
20
|
+
height: n.value === "bottom" ? s.value + "px" : "auto"
|
|
21
|
+
})), v = new m();
|
|
22
|
+
function y(e) {
|
|
23
|
+
let t = e, n = t?.requiresAdapter ?? t?.requiresFramework ?? t?.adapter ?? t?.framework;
|
|
24
|
+
if (typeof n == "string" && n.toLowerCase() === "react") throw Error(`Plugin "${t.id ?? "unknown"}" requires the React adapter and cannot be mounted in @eigenpal/docx-editor-vue. Use @eigenpal/docx-editor-react/plugin-api or a Vue-compatible plugin.`);
|
|
25
|
+
}
|
|
26
|
+
function b(e) {
|
|
27
|
+
y(e);
|
|
28
|
+
let t = e;
|
|
29
|
+
if (typeof t.id != "string" || t.id.length === 0) throw Error("Vue plugins must provide a non-empty string id.");
|
|
30
|
+
return {
|
|
31
|
+
id: t.id,
|
|
32
|
+
styles: typeof t.styles == "string" ? t.styles : void 0,
|
|
33
|
+
initialize: typeof t.initialize == "function" ? t.initialize : void 0,
|
|
34
|
+
onStateChange: typeof t.onStateChange == "function" ? t.onStateChange : void 0,
|
|
35
|
+
destroy: typeof t.destroy == "function" ? t.destroy : void 0
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return p([() => t.editorView, () => t.plugins], ([e, t], n, r) => {
|
|
39
|
+
if (v.destroy(), !e) return;
|
|
40
|
+
let i = t.map(b);
|
|
41
|
+
v.initialize(i, e), v.updateStates(e);
|
|
42
|
+
let a = i.filter((e) => e.styles).map((e) => h(e.id, e.styles)), o = null, s = () => v.updateStates(e), c = () => {
|
|
43
|
+
o !== null && cancelAnimationFrame(o), o = requestAnimationFrame(s);
|
|
44
|
+
}, l = e.dom;
|
|
45
|
+
l.addEventListener("input", c), l.addEventListener("focus", s), l.addEventListener("click", s);
|
|
46
|
+
let u = e.dispatch.bind(e), d = ((e) => {
|
|
47
|
+
u(e), c();
|
|
48
|
+
});
|
|
49
|
+
e.dispatch = d, r(() => {
|
|
50
|
+
l.removeEventListener("input", c), l.removeEventListener("focus", s), l.removeEventListener("click", s), o !== null && cancelAnimationFrame(o), e.dispatch === d && (e.dispatch = u), a.forEach((e) => e()), v.destroy();
|
|
51
|
+
});
|
|
52
|
+
}, { immediate: !0 }), u(() => {
|
|
53
|
+
v.destroy();
|
|
54
|
+
}), (t, r) => (d(), a("div", { class: c(["plugin-host", `plugin-host--${n.value}`]) }, [o("div", g, [f(t.$slots, "default", {}, void 0, !0)]), t.$slots.panel && !e.panelCollapsed ? (d(), a("div", {
|
|
55
|
+
key: 0,
|
|
56
|
+
class: "plugin-host__panel",
|
|
57
|
+
style: l(_.value)
|
|
58
|
+
}, [f(t.$slots, "panel", {}, void 0, !0)], 4)) : i("", !0)], 2));
|
|
59
|
+
}
|
|
60
|
+
}), [["__scopeId", "data-v-97fa42f4"]]);
|
|
61
|
+
//#endregion
|
|
62
|
+
export { _ as PluginHost, n as RenderedDomContextImpl, t as createRenderedDomContext };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EditorHandle } from '@eigenpal/docx-editor-core';
|
|
2
|
+
import { Document } from '@eigenpal/docx-editor-core/types/document';
|
|
3
|
+
import { DocxInput } from '@eigenpal/docx-editor-core/utils';
|
|
4
|
+
import { DocxEditorProps, EditorMode } from './components/DocxEditor/types';
|
|
5
|
+
/** Options for `renderAsync`. */
|
|
6
|
+
export type RenderAsyncOptions = Omit<DocxEditorProps, 'documentBuffer' | 'document'> & {
|
|
7
|
+
onReady?: () => void;
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
onChange?: (document: Document) => void;
|
|
10
|
+
onRename?: (name: string) => void;
|
|
11
|
+
onMenuAction?: (action: string) => void;
|
|
12
|
+
onModeChange?: (mode: EditorMode) => void;
|
|
13
|
+
};
|
|
14
|
+
/** Imperative handle returned by Vue `renderAsync()`. */
|
|
15
|
+
export interface DocxEditorHandle extends EditorHandle {
|
|
16
|
+
/** Set zoom level (1.0 = 100%). */
|
|
17
|
+
setZoom: (zoom: number) => void;
|
|
18
|
+
/** Scroll to a body paragraph by Word `w14:paraId`. */
|
|
19
|
+
scrollToParaId: (paraId: string) => boolean;
|
|
20
|
+
/** Scroll to a raw ProseMirror document position. */
|
|
21
|
+
scrollToPosition: (pmPos: number) => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Render a DOCX editor into a container element using Vue.
|
|
25
|
+
*
|
|
26
|
+
* @param input - DOCX data (ArrayBuffer, Uint8Array, Blob, or File)
|
|
27
|
+
* @param container - DOM element to render into
|
|
28
|
+
* @param options - Editor configuration
|
|
29
|
+
* @returns A handle implementing the framework-agnostic EditorHandle interface
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderAsync(input: DocxInput, container: HTMLElement, options?: RenderAsyncOptions): Promise<DocxEditorHandle>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @eigenpal/docx-editor-vue/styles
|
|
3
|
+
*
|
|
4
|
+
* CSS import path constant and shared layering tokens. Bring in the
|
|
5
|
+
* editor's base styles by importing `@eigenpal/docx-editor-vue/styles.css`
|
|
6
|
+
* directly; this module exists for tooling that prefers a JS-style import.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare const EDITOR_CSS_PATH = "@eigenpal/docx-editor-vue/styles.css";
|
|
12
|
+
export * from './zIndex';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Z-index stacking order for the Vue editor chrome — mirrors
|
|
3
|
+
* `packages/react/src/styles/zIndex.ts` so layered UI stays consistent
|
|
4
|
+
* across adapters instead of drifting into ad-hoc per-component numbers.
|
|
5
|
+
*
|
|
6
|
+
* Order, low to high:
|
|
7
|
+
* page content (default 0)
|
|
8
|
+
* selection overlay — caret + selection rects painted over the pages
|
|
9
|
+
* decoration layer — PM-plugin decorations (collab cursors, etc.), just above the local caret
|
|
10
|
+
* image overlay — image selection / resize handles
|
|
11
|
+
* HF inline editor — header/footer inline editor: above page content, below chrome
|
|
12
|
+
* ruler — must stay readable when the HF editor is active
|
|
13
|
+
* dropdown / popover — opens from toolbar buttons or HF options
|
|
14
|
+
* context menu / modal — top-most transient surfaces (context menus, dialogs)
|
|
15
|
+
*/
|
|
16
|
+
export declare const Z_INDEX: {
|
|
17
|
+
readonly selectionOverlay: 10;
|
|
18
|
+
readonly decorationLayer: 11;
|
|
19
|
+
readonly imageOverlay: 15;
|
|
20
|
+
readonly hfInlineEditor: 10;
|
|
21
|
+
readonly ruler: 30;
|
|
22
|
+
readonly dropdown: 100;
|
|
23
|
+
readonly contextMenu: 10000;
|
|
24
|
+
};
|
package/dist/styles.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./zIndex-CH0jZ7U7.cjs`);var t=`@eigenpal/docx-editor-vue/styles.css`;exports.EDITOR_CSS_PATH=t,exports.Z_INDEX=e.t;
|
package/dist/styles.js
ADDED
package/dist/ui.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./KeyboardShortcutsDialog-D72k5DXR.cjs`),t=require(`./MenuBar-BrQW4COn.cjs`),n=require(`./_plugin-vue_export-helper-CX7YVcP6.cjs`),r=require(`./TablePropertiesDialog-Ct5XChwd.cjs`);let i=require(`vue`);require(`@eigenpal/docx-editor-core/utils/units`);let a=require(`@eigenpal/docx-editor-core/utils/listState`),o=require(`@eigenpal/docx-editor-core/utils/cardStyles`);var s={class:`docx-editor-toolbar`},c={class:`docx-editor-toolbar__title-row`},l={class:`docx-editor-toolbar__title-left`},u={class:`docx-editor-toolbar__title-center`},d={class:`docx-editor-toolbar__title-right`},f=(0,i.defineComponent)({inheritAttrs:!1,__name:`EditorToolbar`,props:{showMenuBar:{type:Boolean,default:!0}},emits:[`menu-action`],setup(e){return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,s,[(0,i.renderSlot)(n.$slots,`title-bar`,{},()=>[(0,i.createElementVNode)(`div`,c,[(0,i.createElementVNode)(`div`,l,[(0,i.renderSlot)(n.$slots,`title-bar-left`,{},void 0,!0)]),(0,i.createElementVNode)(`div`,u,[(0,i.renderSlot)(n.$slots,`document-name`,{},void 0,!0),e.showMenuBar?((0,i.openBlock)(),(0,i.createBlock)(t.t,{key:0,onAction:r[0]||=e=>n.$emit(`menu-action`,e)})):(0,i.createCommentVNode)(``,!0)]),(0,i.createElementVNode)(`div`,d,[(0,i.renderSlot)(n.$slots,`title-bar-right`,{},void 0,!0)])])],!0),(0,i.renderSlot)(n.$slots,`toolbar`,{},()=>[(0,i.createVNode)(t.x,(0,i.normalizeProps)((0,i.guardReactiveProps)(n.$attrs)),null,16)],!0)]))}}),p=n.t(f,[[`__scopeId`,`data-v-7d626a51`]]),ee={},te={class:`docx-title-bar`},m={class:`docx-title-bar__left`},h={class:`docx-title-bar__center`},g={class:`docx-title-bar__right`};function _(e,t){return(0,i.openBlock)(),(0,i.createElementBlock)(`div`,te,[(0,i.createElementVNode)(`div`,m,[(0,i.renderSlot)(e.$slots,`left`,{},void 0,!0)]),(0,i.createElementVNode)(`div`,h,[(0,i.renderSlot)(e.$slots,`default`,{},void 0,!0)]),(0,i.createElementVNode)(`div`,g,[(0,i.renderSlot)(e.$slots,`right`,{},void 0,!0)])])}var v=n.t(ee,[[`render`,_],[`__scopeId`,`data-v-53d684ff`]]),y=[`title`],b={key:0,class:`responsive-toolbar__overflow-menu`},x=(0,i.defineComponent)({__name:`ResponsiveToolbar`,setup(e){let t=(0,i.ref)(null),n=(0,i.ref)(null),r=(0,i.ref)(null),a=(0,i.ref)(0),o=(0,i.ref)(!1),s=null;function c(){let e=t.value,r=n.value;if(!e||!r)return;let i=e.clientWidth-40,o=Array.from(r.children),s=0;for(let e of o)e.style.display=``;let c=0;for(let e of o)c+=e.offsetWidth+2,c>i?e.style.display=`none`:s++;a.value=o.length-s}function l(e){let t=e.target;r.value?.contains(t)||(o.value=!1)}return(0,i.onMounted)(()=>{s=new ResizeObserver(()=>{(0,i.nextTick)(c)}),t.value&&s.observe(t.value),(0,i.nextTick)(c),document.addEventListener(`mousedown`,l)}),(0,i.onBeforeUnmount)(()=>{s?.disconnect(),document.removeEventListener(`mousedown`,l)}),(e,s)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{class:`responsive-toolbar`,ref_key:`containerRef`,ref:t},[(0,i.createElementVNode)(`div`,{class:`responsive-toolbar__items`,ref_key:`itemsRef`,ref:n},[(0,i.renderSlot)(e.$slots,`default`,{},void 0,!0)],512),a.value>0?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:0,class:`responsive-toolbar__overflow`,ref_key:`overflowRef`,ref:r},[(0,i.createElementVNode)(`button`,{class:`responsive-toolbar__overflow-btn`,onMousedown:s[0]||=(0,i.withModifiers)(e=>o.value=!o.value,[`prevent`]),title:`${a.value} more items`},` ⋯ `,40,y),o.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,b,[(0,i.renderSlot)(e.$slots,`overflow`,{},void 0,!0)])):(0,i.createCommentVNode)(``,!0)],512)):(0,i.createCommentVNode)(``,!0)],512))}}),S=n.t(x,[[`__scopeId`,`data-v-30fbba34`]]),C=[`value`,`disabled`],w={key:0,label:`Sans-serif`},T=[`value`],E={key:1,label:`Serif`},D=[`value`],O={key:2,label:`Monospace`},k=[`value`],A={key:3,label:`Other`},j=[`value`],M=(0,i.defineComponent)({__name:`FontPicker`,props:{value:{},fonts:{},disabled:{type:Boolean,default:!1},className:{},placeholder:{default:`Font`},showPreview:{type:Boolean,default:!0}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,a=[{name:`Arial`,fontFamily:`Arial, Helvetica, sans-serif`,category:`sans-serif`},{name:`Calibri`,fontFamily:`"Calibri", Arial, sans-serif`,category:`sans-serif`},{name:`Helvetica`,fontFamily:`Helvetica, Arial, sans-serif`,category:`sans-serif`},{name:`Verdana`,fontFamily:`Verdana, Geneva, sans-serif`,category:`sans-serif`},{name:`Open Sans`,fontFamily:`"Open Sans", sans-serif`,category:`sans-serif`},{name:`Roboto`,fontFamily:`Roboto, sans-serif`,category:`sans-serif`},{name:`Times New Roman`,fontFamily:`"Times New Roman", Times, serif`,category:`serif`},{name:`Georgia`,fontFamily:`Georgia, serif`,category:`serif`},{name:`Cambria`,fontFamily:`Cambria, Georgia, serif`,category:`serif`},{name:`Garamond`,fontFamily:`Garamond, serif`,category:`serif`},{name:`Courier New`,fontFamily:`"Courier New", monospace`,category:`monospace`},{name:`Consolas`,fontFamily:`Consolas, monospace`,category:`monospace`}],o=(0,i.computed)(()=>n.fonts??a),s=(0,i.computed)(()=>{let e={"sans-serif":[],serif:[],monospace:[],other:[]};for(let t of o.value)e[t.category??`other`].push(t);return e}),c=(0,i.computed)(()=>n.value?o.value.find(e=>e.fontFamily===n.value||e.name.toLowerCase()===n.value.toLowerCase())?.name??n.value:n.placeholder);function l(e){let t=e.target.value;r(`change`,o.value.find(e=>e.name===t)?.fontFamily??t)}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`select`,{class:(0,i.normalizeClass)([`docx-font-picker`,e.className]),value:c.value,disabled:e.disabled,"aria-label":`Font family`,onChange:l},[s.value[`sans-serif`].length?((0,i.openBlock)(),(0,i.createElementBlock)(`optgroup`,w,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(s.value[`sans-serif`],t=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,i.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,i.toDisplayString)(t.name),13,T))),128))])):(0,i.createCommentVNode)(``,!0),s.value.serif.length?((0,i.openBlock)(),(0,i.createElementBlock)(`optgroup`,E,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(s.value.serif,t=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,i.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,i.toDisplayString)(t.name),13,D))),128))])):(0,i.createCommentVNode)(``,!0),s.value.monospace.length?((0,i.openBlock)(),(0,i.createElementBlock)(`optgroup`,O,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(s.value.monospace,t=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,i.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,i.toDisplayString)(t.name),13,k))),128))])):(0,i.createCommentVNode)(``,!0),s.value.other.length?((0,i.openBlock)(),(0,i.createElementBlock)(`optgroup`,A,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(s.value.other,t=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,i.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,i.toDisplayString)(t.name),13,j))),128))])):(0,i.createCommentVNode)(``,!0)],42,C))}}),N=n.t(M,[[`__scopeId`,`data-v-e9575b1d`]]),P={class:`docx-font-size`},F=[`disabled`],I=[`value`,`disabled`,`placeholder`],L=[`disabled`],R=(0,i.defineComponent)({__name:`FontSizePicker`,props:{value:{},sizes:{},disabled:{type:Boolean,default:!1},minSize:{default:1},maxSize:{default:1638},placeholder:{default:`11`}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,a=[8,9,10,11,12,14,16,18,20,24,28,36,48,72],o=(0,i.computed)(()=>n.sizes??a),s=(0,i.computed)(()=>n.value??parseInt(n.placeholder,10)??11),c=(0,i.computed)(()=>n.value===void 0?n.placeholder:String(n.value));function l(e){return o.value.find(t=>t>e)??Math.min(e+1,n.maxSize)}function u(e){return[...o.value].reverse().find(t=>t<e)??Math.max(e-1,n.minSize)}function d(){n.disabled||r(`change`,u(s.value))}function f(){n.disabled||r(`change`,l(s.value))}function p(e){let t=parseFloat(e.target.value);!isNaN(t)&&t>=n.minSize&&t<=n.maxSize&&r(`change`,Math.round(t*2)/2)}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,P,[(0,i.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value<=e.minSize,title:`Decrease font size`,onClick:(0,i.withModifiers)(d,[`prevent`])},`−`,8,F),(0,i.createElementVNode)(`input`,{class:`docx-font-size__input`,type:`text`,value:c.value,disabled:e.disabled,placeholder:e.placeholder,onKeydown:[n[0]||=(0,i.withKeys)((0,i.withModifiers)(e=>{d(),e.stopPropagation()},[`prevent`]),[`up`]),n[1]||=(0,i.withKeys)((0,i.withModifiers)(e=>{f(),e.stopPropagation()},[`prevent`]),[`down`]),n[2]||=(0,i.withKeys)((0,i.withModifiers)(e=>p(e),[`prevent`]),[`enter`])],onBlur:n[3]||=e=>p(e)},null,40,I),(0,i.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value>=e.maxSize,title:`Increase font size`,onClick:(0,i.withModifiers)(f,[`prevent`])},`+`,8,L)]))}}),z=n.t(R,[[`__scopeId`,`data-v-966fd914`]]),B=[`value`,`disabled`],V=[`value`],H=(0,i.defineComponent)({__name:`LineSpacingPicker`,props:{value:{},options:{},disabled:{type:Boolean,default:!1},className:{}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,a=[{label:`Single`,value:1,twipsValue:240},{label:`1.15`,value:1.15,twipsValue:276},{label:`1.5`,value:1.5,twipsValue:360},{label:`Double`,value:2,twipsValue:480}],o=(0,i.computed)(()=>n.options??a),s=(0,i.computed)(()=>n.value??o.value[0].twipsValue);function c(e){let t=parseInt(e.target.value,10);isNaN(t)||r(`change`,t)}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`select`,{class:(0,i.normalizeClass)([`docx-line-spacing`,e.className]),value:String(s.value),disabled:e.disabled,"aria-label":`Line spacing`,onChange:c},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(o.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:e.twipsValue,value:String(e.twipsValue)},(0,i.toDisplayString)(e.label),9,V))),128))],42,B))}}),U=n.t(H,[[`__scopeId`,`data-v-fa103426`]]),W=[`value`,`disabled`],G=[`value`],K=(0,i.defineComponent)({__name:`StylePicker`,props:{value:{},styles:{},disabled:{type:Boolean,default:!1},className:{}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,a=[{styleId:`Normal`,name:`Normal text`},{styleId:`Title`,name:`Title`},{styleId:`Subtitle`,name:`Subtitle`},{styleId:`Heading1`,name:`Heading 1`},{styleId:`Heading2`,name:`Heading 2`},{styleId:`Heading3`,name:`Heading 3`}],o=(0,i.computed)(()=>n.styles??a);function s(e){r(`change`,e.target.value)}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`select`,{class:(0,i.normalizeClass)([`docx-style-picker`,e.className]),value:e.value??`Normal`,disabled:e.disabled,"aria-label":`Paragraph style`,onChange:s},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(o.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:e.styleId,value:e.styleId},(0,i.toDisplayString)(e.name),9,G))),128))],42,W))}}),q=n.t(K,[[`__scopeId`,`data-v-e8ec7466`]]),J=[`disabled`,`title`,`aria-expanded`,`onClick`],Y={class:`docx-align__panel`},X=[`title`,`onClick`],Z=(0,i.defineComponent)({__name:`AlignmentButtons`,props:{value:{default:`left`},disabled:{type:Boolean,default:!1}},emits:[`change`],setup(n,{emit:r}){let a=n,o=r,s=(0,i.ref)(!1),c=[{value:`left`,label:`Align left`,icon:`format_align_left`,shortcut:`Ctrl+L`},{value:`center`,label:`Center`,icon:`format_align_center`,shortcut:`Ctrl+E`},{value:`right`,label:`Align right`,icon:`format_align_right`,shortcut:`Ctrl+R`},{value:`both`,label:`Justify`,icon:`format_align_justify`,shortcut:`Ctrl+J`}],l=(0,i.computed)(()=>c.find(e=>e.value===a.value)?.icon??`format_align_left`),u=(0,i.computed)(()=>c.find(e=>e.value===a.value)?.label??`Left`);function d(e){o(`change`,e),s.value=!1}return(r,a)=>((0,i.openBlock)(),(0,i.createBlock)(t.E,{open:s.value,"onUpdate:open":a[0]||=e=>s.value=e,onClose:a[1]||=e=>s.value=!1},{trigger:(0,i.withCtx)(({toggle:t})=>[(0,i.createElementVNode)(`button`,{type:`button`,class:(0,i.normalizeClass)([`docx-align__btn`,{"docx-align__btn--open":s.value}]),disabled:n.disabled,title:`Alignment: ${u.value}`,"aria-expanded":s.value,"aria-haspopup":`true`,onClick:(0,i.withModifiers)(t,[`prevent`])},[(0,i.createVNode)(e.p,{name:l.value,size:20},null,8,[`name`]),(0,i.createVNode)(e.p,{name:`arrow_drop_down`,size:14})],10,J)]),panel:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Y,[((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(c,t=>(0,i.createElementVNode)(`button`,{key:t.value,type:`button`,class:(0,i.normalizeClass)([`docx-align__option`,{"docx-align__option--active":n.value===t.value}]),title:`${t.label} (${t.shortcut})`,onClick:(0,i.withModifiers)(e=>d(t.value),[`prevent`])},[(0,i.createVNode)(e.p,{name:t.icon,size:20},null,8,[`name`])],10,X)),64))])]),_:1},8,[`open`]))}}),Q=n.t(Z,[[`__scopeId`,`data-v-f2eb4f74`]]),ne={class:`docx-list-btns`},re=[`disabled`],ie=[`disabled`],ae=[`disabled`],oe=[`disabled`],se=(0,i.defineComponent)({__name:`ListButtons`,props:{listState:{},disabled:{type:Boolean,default:!1},showIndentButtons:{type:Boolean,default:!0},canOutdent:{type:Boolean,default:!0}},emits:[`bullet-list`,`numbered-list`,`indent`,`outdent`],setup(t){return(n,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`span`,ne,[(0,i.createElementVNode)(`button`,{type:`button`,class:(0,i.normalizeClass)([`docx-list-btns__btn`,{"docx-list-btns__btn--active":t.listState?.isInList&&t.listState?.type===`bullet`}]),disabled:t.disabled,title:`Bullet list`,onClick:r[0]||=(0,i.withModifiers)(e=>n.$emit(`bullet-list`),[`prevent`])},[(0,i.createVNode)(e.p,{name:`format_list_bulleted`,size:20})],10,re),(0,i.createElementVNode)(`button`,{type:`button`,class:(0,i.normalizeClass)([`docx-list-btns__btn`,{"docx-list-btns__btn--active":t.listState?.isInList&&t.listState?.type===`numbered`}]),disabled:t.disabled,title:`Numbered list`,onClick:r[1]||=(0,i.withModifiers)(e=>n.$emit(`numbered-list`),[`prevent`])},[(0,i.createVNode)(e.p,{name:`format_list_numbered`,size:20})],10,ie),t.showIndentButtons?((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,{key:0},[(0,i.createElementVNode)(`button`,{type:`button`,class:`docx-list-btns__btn`,disabled:t.disabled||!t.canOutdent,title:`Decrease indent`,onClick:r[2]||=(0,i.withModifiers)(e=>n.$emit(`outdent`),[`prevent`])},[(0,i.createVNode)(e.p,{name:`format_indent_decrease`,size:20})],8,ae),(0,i.createElementVNode)(`button`,{type:`button`,class:`docx-list-btns__btn`,disabled:t.disabled,title:`Increase indent`,onClick:r[3]||=(0,i.withModifiers)(e=>n.$emit(`indent`),[`prevent`])},[(0,i.createVNode)(e.p,{name:`format_indent_increase`,size:20})],8,oe)],64)):(0,i.createCommentVNode)(``,!0)]))}}),ce=n.t(se,[[`__scopeId`,`data-v-6e11903a`]]),le=[`value`,`disabled`,`aria-label`],ue=[`value`],de=(0,i.defineComponent)({__name:`ZoomControl`,props:{value:{default:1},levels:{},disabled:{type:Boolean,default:!1},className:{},compact:{type:Boolean,default:!1}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,a=[{value:.5,label:`50%`},{value:.75,label:`75%`},{value:1,label:`100%`},{value:1.25,label:`125%`},{value:1.5,label:`150%`},{value:2,label:`200%`}],o=(0,i.computed)(()=>n.levels??a),s=(0,i.computed)(()=>{let e=o.value.find(e=>Math.abs(e.value-n.value)<.001);return e?e.label:`${Math.round(n.value*100)}%`});function c(e){let t=parseFloat(e.target.value);isNaN(t)||r(`change`,t)}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`select`,{class:(0,i.normalizeClass)([`docx-zoom-control`,{"docx-zoom-control--compact":e.compact,[e.className??``]:!!e.className}]),value:e.value,disabled:e.disabled,"aria-label":`Zoom: ${s.value}`,onChange:c},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(o.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`option`,{key:e.value,value:e.value},(0,i.toDisplayString)(e.label),9,ue))),128))],42,le))}}),fe=n.t(de,[[`__scopeId`,`data-v-b68bd14b`]]),pe=(0,i.defineComponent)({__name:`Tooltip`,props:{content:{},side:{default:`bottom`},delayMs:{default:400}},setup(e){let t=e,n=(0,i.ref)(!1),r=(0,i.ref)({x:0,y:0}),a=(0,i.ref)(null),o=null;function s(){o=setTimeout(()=>{let e=a.value;if(e){let n=e.getBoundingClientRect();r.value={x:n.left+n.width/2,y:t.side===`top`?n.top-8:n.bottom+8}}n.value=!0},t.delayMs)}function c(){o&&=(clearTimeout(o),null),n.value=!1}(0,i.onBeforeUnmount)(()=>{o&&clearTimeout(o)});let l=(0,i.computed)(()=>({left:r.value.x+`px`,top:r.value.y+`px`,transform:t.side===`top`?`translate(-50%, -100%)`:t.side===`bottom`?`translate(-50%, 0)`:void 0}));return(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,null,[(0,i.createElementVNode)(`span`,{ref_key:`triggerRef`,ref:a,class:`docx-tooltip__trigger`,onMouseenter:s,onMouseleave:c},[(0,i.renderSlot)(t.$slots,`default`,{},void 0,!0)],544),((0,i.openBlock)(),(0,i.createBlock)(i.Teleport,{to:`body`},[n.value?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:0,class:`docx-tooltip`,style:(0,i.normalizeStyle)(l.value)},(0,i.toDisplayString)(e.content),5)):(0,i.createCommentVNode)(``,!0)]))],64))}}),me=n.t(pe,[[`__scopeId`,`data-v-ad4cfb4e`]]),he=[`aria-label`],ge={key:0,class:`docx-loading__spinner`},_e={key:1,class:`docx-loading__bar`},ve={key:2,class:`docx-loading__message`},ye=(0,i.defineComponent)({__name:`LoadingIndicator`,props:{isLoading:{type:Boolean},variant:{default:`spinner`},size:{default:`medium`},message:{},overlay:{type:Boolean,default:!1},progress:{default:null}},setup(e){return(t,n)=>e.isLoading?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{key:0,class:(0,i.normalizeClass)([`docx-loading`,`docx-loading--${e.variant}`,`docx-loading--${e.size}`,{"docx-loading--overlay":e.overlay}]),role:`status`,"aria-label":e.message},[e.variant===`spinner`?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,ge)):e.variant===`bar`||e.variant===`progress`?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,_e,[(0,i.createElementVNode)(`div`,{class:`docx-loading__bar-fill`,style:(0,i.normalizeStyle)(e.variant===`progress`&&e.progress!=null?{width:e.progress+`%`}:void 0)},null,4)])):(0,i.createCommentVNode)(``,!0),e.message?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,ve,(0,i.toDisplayString)(e.message),1)):(0,i.createCommentVNode)(``,!0)],10,he)):(0,i.createCommentVNode)(``,!0)}}),be=n.t(ye,[[`__scopeId`,`data-v-2bd78a2f`]]),xe=[`disabled`],Se=`inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50`,Ce=(0,i.defineComponent)({__name:`Button`,props:{variant:{default:`default`},size:{default:`default`},disabled:{type:Boolean,default:!1},className:{default:``}},emits:[`click`],setup(e){let t=e,n={default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,outline:`border border-input bg-background hover:bg-accent hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`},r={default:`h-10 px-4 py-2`,sm:`h-9 rounded-md px-3`,lg:`h-11 rounded-md px-8`,icon:`h-9 w-9`,"icon-sm":`h-7 w-7`},a=(0,i.computed)(()=>[Se,n[t.variant],r[t.size],t.className].filter(Boolean).join(` `));return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{class:(0,i.normalizeClass)(a.value),disabled:e.disabled,onClick:n[0]||=e=>t.$emit(`click`,e)},[(0,i.renderSlot)(t.$slots,`default`)],10,xe))}}),we=[`disabled`,`aria-expanded`,`title`,`onClick`],Te={class:`docx-table-grid__panel`},Ee={class:`docx-table-grid__label`},De=[`onMouseenter`,`onClick`],Oe=(0,i.defineComponent)({__name:`TableGridPicker`,props:{disabled:{type:Boolean,default:!1},gridRows:{default:5},gridColumns:{default:5},tooltip:{default:`Insert table`}},emits:[`insert`],setup(n,{emit:r}){let a=n,o=r,s=(0,i.ref)(!1),c=(0,i.ref)({rows:1,cols:1}),l=(0,i.computed)(()=>{let e=[];for(let t=1;t<=a.gridRows;t++)for(let n=1;n<=a.gridColumns;n++)e.push({r:t,c:n});return e});function u(e,t){o(`insert`,e,t),s.value=!1}function d(){s.value=!1,c.value={rows:1,cols:1}}return(r,a)=>((0,i.openBlock)(),(0,i.createBlock)(t.E,{open:s.value,"onUpdate:open":a[0]||=e=>s.value=e,onClose:d},{trigger:(0,i.withCtx)(({toggle:t})=>[(0,i.createElementVNode)(`button`,{type:`button`,class:`docx-table-grid__btn`,disabled:n.disabled,"aria-expanded":s.value,"aria-haspopup":`grid`,title:n.tooltip,onClick:(0,i.withModifiers)(t,[`prevent`])},[(0,i.createVNode)(e.p,{name:`grid_on`,size:20})],8,we)]),panel:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`div`,Te,[(0,i.createElementVNode)(`div`,Ee,(0,i.toDisplayString)(c.value.rows)+` × `+(0,i.toDisplayString)(c.value.cols),1),(0,i.createElementVNode)(`div`,{class:`docx-table-grid__grid`,style:(0,i.normalizeStyle)({gridTemplateColumns:`repeat(${n.gridColumns}, 18px)`})},[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(l.value,e=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{key:`${e.r}-${e.c}`,class:(0,i.normalizeClass)([`docx-table-grid__cell`,{"docx-table-grid__cell--active":e.r<=c.value.rows&&e.c<=c.value.cols}]),onMouseenter:t=>c.value={rows:e.r,cols:e.c},onClick:(0,i.withModifiers)(t=>u(e.r,e.c),[`prevent`])},null,42,De))),128))],4)])]),_:1},8,[`open`]))}}),ke=n.t(Oe,[[`__scopeId`,`data-v-235ac5f8`]]),Ae={class:`docx-table-insert`},je=[`disabled`,`title`,`onClick`],Me=(0,i.defineComponent)({__name:`TableInsertButtons`,props:{disabled:{type:Boolean}},emits:[`action`],setup(t,{emit:n}){let r=n,a=[{action:`addRowAbove`,icon:`keyboard_arrow_up`,label:`Insert row above`},{action:`addRowBelow`,icon:`keyboard_arrow_down`,label:`Insert row below`},{action:`addColumnLeft`,icon:`keyboard_arrow_left`,label:`Insert column left`},{action:`addColumnRight`,icon:`keyboard_arrow_right`,label:`Insert column right`}];return(n,o)=>((0,i.openBlock)(),(0,i.createElementBlock)(`span`,Ae,[((0,i.openBlock)(),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)(a,n=>(0,i.createElementVNode)(`button`,{key:n.action,type:`button`,class:`docx-table-insert__btn`,disabled:t.disabled,title:n.label,onClick:(0,i.withModifiers)(e=>r(`action`,n.action),[`prevent`])},[(0,i.createVNode)(e.p,{name:n.icon,size:20},null,8,[`name`])],8,je)),64))]))}}),Ne=n.t(Me,[[`__scopeId`,`data-v-c5bf5e60`]]),Pe=[`disabled`,`title`],Fe=(0,i.defineComponent)({__name:`TableMergeButton`,props:{canSplit:{type:Boolean},disabled:{type:Boolean}},emits:[`action`],setup(t,{emit:n}){let r=n;return(n,a)=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{type:`button`,class:`docx-table-merge`,disabled:t.disabled,title:t.canSplit?`Split cells`:`Merge cells`,onClick:a[0]||=(0,i.withModifiers)(e=>r(`action`,t.canSplit?`splitCells`:`mergeCells`),[`prevent`])},[(0,i.createVNode)(e.p,{name:t.canSplit?`call_split`:`call_merge`,size:20},null,8,[`name`])],8,Pe))}}),Ie=n.t(Fe,[[`__scopeId`,`data-v-ec895571`]]),Le=[`disabled`,`title`],Re={key:0,class:`print-btn__icon`},ze=(0,i.defineComponent)({__name:`PrintButton`,props:{disabled:{type:Boolean,default:!1},label:{default:`Print`},compact:{type:Boolean,default:!1}},emits:[`print`],setup(e,{emit:t}){let n=e,r=t;function a(){n.disabled||(r(`print`),window.print())}return(t,n)=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{class:`print-btn`,disabled:e.disabled,title:e.label,onMousedown:(0,i.withModifiers)(a,[`prevent`])},[(0,i.createTextVNode)((0,i.toDisplayString)(e.compact?``:e.label)+` `,1),e.compact?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,Re,`🖨`)):(0,i.createCommentVNode)(``,!0)],40,Le))}}),Be=n.t(ze,[[`__scopeId`,`data-v-aa063c92`]]),Ve=`
|
|
2
|
+
@media print {
|
|
3
|
+
body * { visibility: hidden; }
|
|
4
|
+
.docx-print-pages, .docx-print-pages * { visibility: visible; }
|
|
5
|
+
.docx-print-pages { position: absolute; left: 0; top: 0; }
|
|
6
|
+
.docx-print-page {
|
|
7
|
+
box-shadow: none !important;
|
|
8
|
+
margin: 0 !important;
|
|
9
|
+
page-break-after: always;
|
|
10
|
+
page-break-inside: avoid;
|
|
11
|
+
}
|
|
12
|
+
img { max-width: 100%; page-break-inside: avoid; }
|
|
13
|
+
table, tr { page-break-inside: avoid; }
|
|
14
|
+
h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
|
|
15
|
+
p { orphans: 3; widows: 3; }
|
|
16
|
+
}
|
|
17
|
+
@page { margin: 0; size: auto; }
|
|
18
|
+
`,$=(0,i.defineComponent)({__name:`PrintPreview`,setup(e){return(e,t)=>((0,i.openBlock)(),(0,i.createBlock)((0,i.resolveDynamicComponent)(`style`),null,{default:(0,i.withCtx)(()=>[(0,i.createTextVNode)((0,i.toDisplayString)(Ve))]),_:1}))}}),He=[`title`],Ue={key:0,class:`unsaved-indicator__dot`},We={key:1,class:`unsaved-indicator__badge`},Ge={key:2,class:`unsaved-indicator__text`},Ke=(0,i.defineComponent)({__name:`UnsavedIndicator`,props:{currentState:{},warnOnUnload:{type:Boolean,default:!0},variant:{default:`dot`},label:{default:`Unsaved changes`},title:{default:`You have unsaved changes`}},setup(e,{expose:t}){let n=e,r=(0,i.ref)(!1),a=(0,i.ref)(0),o=null;(0,i.watch)(()=>n.currentState,e=>{if(e!==void 0){if(o===null){o=e;return}e!==o&&(r.value=!0,a.value++)}});function s(){o=n.currentState??null,r.value=!1,a.value=0}function c(e){r.value&&n.warnOnUnload&&(e.preventDefault(),e.returnValue=``)}return(0,i.onMounted)(()=>{window.addEventListener(`beforeunload`,c)}),(0,i.onBeforeUnmount)(()=>{window.removeEventListener(`beforeunload`,c)}),t({hasUnsavedChanges:r,changeCount:a,markAsSaved:s}),(t,n)=>r.value?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,{key:0,class:(0,i.normalizeClass)([`unsaved-indicator`,`unsaved-indicator--${e.variant}`]),title:e.title},[e.variant===`dot`?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,Ue)):e.variant===`badge`?((0,i.openBlock)(),(0,i.createElementBlock)(`span`,We,(0,i.toDisplayString)(a.value),1)):((0,i.openBlock)(),(0,i.createElementBlock)(`span`,Ge,(0,i.toDisplayString)(e.label),1))],10,He)):(0,i.createCommentVNode)(``,!0)}}),qe=n.t(Ke,[[`__scopeId`,`data-v-bf5add7c`]]),Je=o.CARD_STYLE_COLLAPSED,Ye=o.CARD_STYLE_EXPANDED;exports.AddCommentCard=t.l,exports.AlignmentButtons=Q,exports.Button=Ce,exports.CARD_STYLE_COLLAPSED=Je,exports.CARD_STYLE_EXPANDED=Ye,exports.ColorPicker=t.D,exports.CommentCard=t.f,exports.CommentMarginMarkers=t.s,exports.DocumentName=t.i,exports.EditingModeDropdown=t.T,exports.EditorToolbar=p,exports.FindReplaceDialog=e.s,exports.FontPicker=N,exports.FontSizePicker=z,exports.FootnotePropertiesDialog=r.o,exports.HorizontalRuler=t.o,exports.HyperlinkDialog=e.a,exports.IconGridDropdown=t.w,exports.ImagePositionDialog=r.a,exports.ImagePropertiesDialog=e.r,exports.ImageTransformDropdown=t.S,exports.ImageWrapDropdown=t.C,exports.InsertImageDialog=e.o,exports.InsertSymbolDialog=e.i,exports.InsertTableDialog=r.i,exports.KeyboardShortcutsDialog=e.t,exports.LineSpacingPicker=U,exports.ListButtons=ce,exports.LoadingIndicator=be,exports.MenuBar=t.t,exports.MenuDropdown=t.r,exports.PageSetupDialog=e.n,exports.PasteSpecialDialog=r.r,exports.Popover=t.E,exports.PrintButton=Be,exports.PrintPreview=$,exports.ReplyInput=t.p,exports.ReplyThread=t.m,exports.ResolvedCommentMarker=t.d,exports.ResponsiveToolbar=S,exports.SplitCellDialog=r.n,exports.StylePicker=q,exports.TableBorderColorPicker=t.v,exports.TableBorderPicker=t.y,exports.TableBorderWidthPicker=t._,exports.TableCellFillPicker=t.b,exports.TableGridInline=t.n,exports.TableGridPicker=ke,exports.TableInsertButtons=Ne,exports.TableMergeButton=Ie,exports.TableMoreDropdown=t.g,exports.TablePropertiesDialog=r.t,exports.TableStyleGallery=r.s,exports.TableToolbar=t.h,exports.TitleBar=v,exports.Toolbar=t.x,exports.Tooltip=me,exports.TrackedChangeCard=t.u,exports.UnifiedSidebar=t.c,exports.UnsavedIndicator=qe,exports.VerticalRuler=t.a,exports.ZoomControl=fe,Object.defineProperty(exports,`createDefaultListState`,{enumerable:!0,get:function(){return a.createDefaultListState}});
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @eigenpal/docx-editor-vue/ui
|
|
3
|
+
*
|
|
4
|
+
* UI entry point — toolbar primitives, pickers, dialogs.
|
|
5
|
+
* Mirrors `packages/react/src/ui.ts` so consumer code that imports
|
|
6
|
+
* `@eigenpal/docx-editor-react/ui { ColorPicker, FontPicker }` and
|
|
7
|
+
* swaps to `@eigenpal/docx-editor-vue/ui` works without surface
|
|
8
|
+
* changes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { Toolbar, FontPicker, ColorPicker } from '@eigenpal/docx-editor-vue/ui';
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export { default as Toolbar } from './components/Toolbar.vue';
|
|
19
|
+
export { default as EditorToolbar } from './components/EditorToolbar.vue';
|
|
20
|
+
export { default as TitleBar } from './components/TitleBar.vue';
|
|
21
|
+
export { default as ResponsiveToolbar } from './components/ui/ResponsiveToolbar.vue';
|
|
22
|
+
export { default as MenuBar } from './components/MenuBar.vue';
|
|
23
|
+
export { default as MenuDropdown } from './components/ui/MenuDropdown.vue';
|
|
24
|
+
export { default as DocumentName } from './components/DocumentName.vue';
|
|
25
|
+
export { default as EditingModeDropdown } from './components/EditingModeDropdown.vue';
|
|
26
|
+
export { default as FontPicker } from './components/ui/FontPicker.vue';
|
|
27
|
+
export { default as FontSizePicker } from './components/ui/FontSizePicker.vue';
|
|
28
|
+
export { default as LineSpacingPicker } from './components/ui/LineSpacingPicker.vue';
|
|
29
|
+
export { default as StylePicker } from './components/ui/StylePicker.vue';
|
|
30
|
+
export { default as ColorPicker } from './components/ui/ColorPicker.vue';
|
|
31
|
+
export { default as AlignmentButtons } from './components/ui/AlignmentButtons.vue';
|
|
32
|
+
export { default as ListButtons } from './components/ui/ListButtons.vue';
|
|
33
|
+
export { createDefaultListState, type ListState } from '@eigenpal/docx-editor-core/utils/listState';
|
|
34
|
+
export { default as ZoomControl } from './components/ui/ZoomControl.vue';
|
|
35
|
+
export { default as Tooltip } from './components/ui/Tooltip.vue';
|
|
36
|
+
export { default as LoadingIndicator } from './components/ui/LoadingIndicator.vue';
|
|
37
|
+
export { default as Button } from './components/ui/Button.vue';
|
|
38
|
+
export { default as IconGridDropdown } from './components/ui/IconGridDropdown.vue';
|
|
39
|
+
export { default as Popover } from './components/ui/Popover.vue';
|
|
40
|
+
export { default as TableToolbar } from './components/ui/TableToolbar.vue';
|
|
41
|
+
export { default as TableStyleGallery } from './components/ui/TableStyleGallery.vue';
|
|
42
|
+
export { default as TableGridPicker } from './components/ui/TableGridPicker.vue';
|
|
43
|
+
export { default as TableGridInline } from './components/ui/TableGridInline.vue';
|
|
44
|
+
export { default as TableInsertButtons } from './components/ui/TableInsertButtons.vue';
|
|
45
|
+
export { default as TableMergeButton } from './components/ui/TableMergeButton.vue';
|
|
46
|
+
export { default as TableMoreDropdown } from './components/ui/TableMoreDropdown.vue';
|
|
47
|
+
export { default as TableCellFillPicker } from './components/ui/TableCellFillPicker.vue';
|
|
48
|
+
export { default as TableBorderPicker } from './components/ui/TableBorderPicker.vue';
|
|
49
|
+
export { default as TableBorderColorPicker } from './components/ui/TableBorderColorPicker.vue';
|
|
50
|
+
export { default as TableBorderWidthPicker } from './components/ui/TableBorderWidthPicker.vue';
|
|
51
|
+
export { default as ImageWrapDropdown } from './components/ui/ImageWrapDropdown.vue';
|
|
52
|
+
export { default as ImageTransformDropdown } from './components/ui/ImageTransformDropdown.vue';
|
|
53
|
+
export { default as UnifiedSidebar } from './components/UnifiedSidebar.vue';
|
|
54
|
+
export { default as CommentCard } from './components/sidebar/CommentCard.vue';
|
|
55
|
+
export { default as TrackedChangeCard } from './components/sidebar/TrackedChangeCard.vue';
|
|
56
|
+
export { default as AddCommentCard } from './components/sidebar/AddCommentCard.vue';
|
|
57
|
+
export { default as ReplyInput } from './components/sidebar/ReplyInput.vue';
|
|
58
|
+
export { default as ReplyThread } from './components/sidebar/ReplyThread.vue';
|
|
59
|
+
export { default as ResolvedCommentMarker } from './components/sidebar/ResolvedCommentMarker.vue';
|
|
60
|
+
export { default as CommentMarginMarkers } from './components/CommentMarginMarkers.vue';
|
|
61
|
+
export { default as FindReplaceDialog } from './components/dialogs/FindReplaceDialog.vue';
|
|
62
|
+
export { default as FootnotePropertiesDialog } from './components/dialogs/FootnotePropertiesDialog.vue';
|
|
63
|
+
export { default as HyperlinkDialog } from './components/dialogs/HyperlinkDialog.vue';
|
|
64
|
+
export { default as ImagePositionDialog } from './components/dialogs/ImagePositionDialog.vue';
|
|
65
|
+
export { default as ImagePropertiesDialog } from './components/dialogs/ImagePropertiesDialog.vue';
|
|
66
|
+
export { default as InsertImageDialog } from './components/dialogs/InsertImageDialog.vue';
|
|
67
|
+
export { default as InsertSymbolDialog } from './components/dialogs/InsertSymbolDialog.vue';
|
|
68
|
+
export { default as InsertTableDialog } from './components/dialogs/InsertTableDialog.vue';
|
|
69
|
+
export { default as KeyboardShortcutsDialog } from './components/dialogs/KeyboardShortcutsDialog.vue';
|
|
70
|
+
export { default as PageSetupDialog } from './components/dialogs/PageSetupDialog.vue';
|
|
71
|
+
export { default as PasteSpecialDialog } from './components/dialogs/PasteSpecialDialog.vue';
|
|
72
|
+
export { default as SplitCellDialog } from './components/dialogs/SplitCellDialog.vue';
|
|
73
|
+
export { default as TablePropertiesDialog } from './components/dialogs/TablePropertiesDialog.vue';
|
|
74
|
+
export { default as PrintButton } from './components/PrintButton.vue';
|
|
75
|
+
export { default as PrintPreview } from './components/ui/PrintPreview.vue';
|
|
76
|
+
export { default as HorizontalRuler } from './components/ui/HorizontalRuler.vue';
|
|
77
|
+
export { default as VerticalRuler } from './components/ui/VerticalRuler.vue';
|
|
78
|
+
export { default as UnsavedIndicator } from './components/ui/UnsavedIndicator.vue';
|
|
79
|
+
export { CARD_STYLE_COLLAPSED, CARD_STYLE_EXPANDED } from './components/sidebar/cardStyles';
|