🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@stll/folio-vue

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stll/folio-vue - npm Package Compare versions

Comparing version
0.9.0
to
0.10.0
+18
dist/components/AutocompleteCaretOverlay.types.d.ts
export type AutocompleteCaretRect = {
/** Overlay-relative pixel x. */
x: number;
/** Overlay-relative pixel y (top of the cursor line). */
y: number;
/** Line height in pixels at the anchor. */
lineHeight: number;
/** Available width from the caret to the page's right content edge. */
maxWidth?: number | undefined;
};
export type AutocompleteCaretOverlayProps = {
/** Position of the autocomplete anchor, or null while idle. */
caret: AutocompleteCaretRect | null;
/** The full streamed ghost text so far. */
text: string;
/** Whether tokens are still arriving. */
isStreaming: boolean;
};
import { Ref } from 'vue';
import { FontDefinition } from '../components/DocxEditor/types';
export type UseFontLifecycleOptions = {
isReady: Ref<boolean>;
getDocument: () => {
originalBuffer?: ArrayBuffer | null;
} | null;
fonts: () => ReadonlyArray<FontDefinition> | undefined;
remeasure: () => void;
};
export type FontLifecycleDependencies = {
loadEmbedded: (buffer: ArrayBuffer) => Promise<FontFace[]>;
loadHost: (fonts: ReadonlyArray<FontDefinition> | undefined) => Promise<FontFace[]>;
remove: (faces: readonly FontFace[]) => void;
};
/**
* Register document-embedded and host-provided fonts for the lifetime of their
* sources. Async results from a stale document or prop value are immediately
* removed, preventing one editor load from leaking faces into the next.
*/
export declare function useFontLifecycle(options: UseFontLifecycleOptions, dependencies?: FontLifecycleDependencies): void;

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

let e=require("vue"),t=require("@stll/folio-core/paged-layout/sectionGeometry"),n=require("@stll/folio-core/prosemirror/plugins/anonymizationDecorations"),r=require("@stll/folio-core/prosemirror/plugins/autocompleteSuggestion"),i=require("@stll/folio-core/prosemirror/plugins/templateDirectives"),a=require("@stll/folio-core/prosemirror/plugins/suggestionMode"),o=require("@stll/folio-core/controller/folioEditor"),s=require("@stll/folio-core/controller/folioEditorEvents"),c=require("@stll/folio-core/controller/collaborationModules"),l=require("@stll/folio-core/controller/headerFooterEditorManager"),u=require("@stll/folio-core/controller/noteEditorManager"),d=require("@stll/folio-core/controller/hiddenEditorManager"),f=require("@stll/folio-core/controller/layoutPipeline"),p=require("@stll/folio-core/controller/layoutScheduler"),m=require("@stll/folio-core/controller/layoutSession"),h=require("@stll/folio-core/docx/parser"),g=require("@stll/folio-core/docx/footnoteParser"),_=require("@stll/folio-core/layout-bridge/convert/headerFooterLayout"),ee=require("@stll/folio-core/layout-engine"),te=require("@stll/folio-core/layout-painter"),v=require("@stll/folio-core/paged-layout/LayoutSelectionGate"),ne=require("@stll/folio-core/paged-layout/transactionDirtyRange"),re=require("@stll/folio-core/prosemirror/conversion/fromProseDoc"),ie=require("@stll/folio-core/prosemirror/extensions/ExtensionManager"),y=require("@stll/folio-core/prosemirror/extensions/features/ParagraphChangeTrackerExtension"),ae=require("@stll/folio-core/prosemirror/extensions/StarterKit"),oe=require("@stll/folio-core/prosemirror/plugins/templatePreviewValues"),se=require("@stll/folio-core/prosemirror/plugins/templateSlashMenu"),ce=require("@stll/folio-core/utils/headerFooter"),le=require("@stll/folio-core/utils/findVerticalScrollParent"),b=require("@stll/folio-core/prosemirror/tableResize"),ue=require("@stll/folio-core/prosemirror/utils/extractTrackedChanges"),x=require("@stll/folio-core/utils/zoom");var de=`(prefers-color-scheme: dark)`;function S(){return typeof window<`u`&&typeof window.matchMedia==`function`}function C(e,t){return e===`dark`||e===`system`&&t}function fe(e){if(!S())return()=>{};let t=window.matchMedia(de);e(t.matches);let n=t=>e(t.matches);return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}var w=`light`,T=Symbol(`folioColorMode`),pe=(t=w)=>{(0,e.provide)(T,(0,e.computed)(()=>(0,e.toValue)(t)))},me={install(t,n=w){t.provide(T,(0,e.computed)(()=>(0,e.toValue)(n)))}};function E(){let t=(0,e.inject)(T,(0,e.computed)(()=>w)),n=(0,e.ref)(!1),r=(0,e.ref)(!1);return(0,e.onMounted)(()=>{n.value=!0}),(0,e.watchEffect)(e=>{!n.value||t.value!==`system`||e(fe(e=>{r.value=e}))}),(0,e.computed)(()=>C(t.value,n.value&&r.value))}var he=24,ge=32,_e=96,ve=250,ye=[];function be(e){let n=e?.columnCount??1;if(n<=1)return;let r={count:n,gap:(0,t.twipsToPixels)(e?.columnSpace??720),equalWidth:e?.equalWidth??!0};return e?.separator!==void 0&&(r.separator=e.separator),r}function xe(e,t,n,r,i,a){if(!e)return;let o=t?{...a,rId:t}:a,s=t?n?.getView(t):null;return s?(0,_.convertHeaderFooterPmDocToContent)(s.state.doc,r,i,o):(0,_.convertHeaderFooterToContent)(e,r,i,o)}function Se(e,t,n,r,i){if(!e||e.size===0)return;let a=new Map;for(let[o,s]of e){let e=xe(s,o,t,n,r,i);e&&a.set(o,e)}return a.size>0?a:void 0}function Ce(e,t,n){let r=new Map;if(!n||!n.package.footnotes)return r;let i=new Map;for(let e of n.package.footnotes)e.noteType&&e.noteType!==`normal`||i.set(e.id,e);for(let[n,a]of e){let e=[];for(let n of a){let r=i.get(n);if(!r)continue;let a=t.get(n),o=a?.displayNumber??0;e.push({displayNumber:String(o),noteId:n,text:(0,g.getFootnoteText)(r),...a?{content:{blocks:a.blocks,measures:a.measures,height:a.height}}:{}})}e.length>0&&r.set(n,e)}return r}var we=new Set([`black`,`blue`,`cyan`,`darkBlue`,`darkCyan`,`darkGray`,`darkGreen`,`darkMagenta`,`darkRed`,`darkYellow`,`green`,`lightGray`,`magenta`,`none`,`red`,`white`,`yellow`]);function Te(e){let t=[],n=(e,r)=>{for(let[n,i]of e.marks.entries())i.type.name===`highlight`&&!we.has(String(i.attrs.color))&&t.push(`${r}.marks[${n}]=${JSON.stringify(i.attrs)}`);e.forEach((e,t,i)=>{n(e,`${r}.content[${i}]`)})};return n(e,`doc`),t.join(`; `)}function Ee(){return typeof document>`u`||!(`fonts`in document)||document.fonts.status===`loaded`}function De(g){let{hiddenContainer:_,hiddenHeaderFooterContainer:le,noteEditorContainer:b,pagesContainer:ue,readOnly:x=!1,pageGap:de=he,showMarginGuides:S,marginGuideColor:C,documentKey:fe,password:w,editorMode:T,author:pe,externalPlugins:me=[],collaboration:E,onAnonymizationMatchesChange:we,showTemplateDirectives:De,onSlashMenuChange:Oe,onSlashMenuKeyAction:ke,onChange:Ae,onError:D,onSelectionUpdate:O,onEditorViewReady:je,onCopy:Me,onCut:k,onPaste:A,onReadOnlyEditAttempt:Ne,featureFlags:Pe,onSelectiveSaveTripwire:Fe}=g,Ie=le??_,j=(0,e.shallowRef)(null),M=(0,e.shallowRef)(null),N=(0,e.shallowRef)(null),P=(0,e.shallowRef)(null),F=(0,e.shallowRef)([]),I=(0,e.shallowRef)(null),L=(0,e.shallowRef)(null),R=(0,e.shallowRef)(null),Le=(0,e.shallowRef)([]),Re=(0,e.shallowRef)([]),z=(0,e.ref)(!1),B=(0,e.ref)(null),V=(0,e.ref)(!1),H=new ie.ExtensionManager((0,ae.createStarterKit)());H.buildSchema(),H.initializeRuntime();let ze=(0,a.createSuggestionModePlugin)(!1),Be=[ze],Ve=(0,r.autocompleteSuggestionPlugin)({keymap:!0}),He=(0,n.createAnonymizationDecorationsPlugin)({onMatchesChange:e=>we?.(e)}),U=(0,i.createTemplateDirectivesPlugin)(),Ue=(0,se.templateSlashMenuPlugin)({onChange:e=>Oe?.(e),onKeyAction:e=>ke?.(e)??!1}),We=(0,oe.createTemplatePreviewValuesPlugin)(),Ge=()=>(0,e.toValue)(De)===!0;function Ke(){return[Ve,ze,...me,...(0,e.toValue)(E)?.plugins??[],He,...Ge()?[U,Ue]:[],We]}let W=(0,s.createFolioEditorEmitter)(),G=new v.LayoutSelectionGate,qe=(0,m.createLayoutSession)(),Je=new te.LayoutPainter({pageGap:de,showShadow:!0}),K=(0,l.createHeaderFooterEditorManager)({getHost:()=>Ie.value,getDocument:()=>j.value,getStyles:()=>j.value?.package.styles??null,getTheme:()=>j.value?.package.theme??null,onTransaction:({rId:e,kind:t,view:n,docChanged:r,selectionChanged:i})=>{if(r){V.value=!0;let e=M.value;e&&Y.schedule(e.state,null)}if(r||i){let{from:r,to:i}=n.state.selection;I.value={from:r,kind:t,rId:e,to:i},O?.(n.state),W.emit(`selectionChange`,{from:r,to:i})}G.requestRender()}}),Ye={current:null},q=(0,u.createNoteEditorManager)({getHost:()=>b?.value??null,getPlugins:()=>Be,getDocument:()=>j.value,getStyles:()=>j.value?.package.styles??null,getTheme:()=>j.value?.package.theme??null,onTransaction:({docChanged:e,selectionChanged:t,view:n})=>{if(e){V.value=!0;let e=j.value;if(e){let t=Ye.current?.snapshotDocument(e)??e;j.value=t,Ae?.(t),W.emit(`docChange`,t)}let t=M.value;t&&Y.schedule(t.state,null)}if(e||t){O?.(n.state);let{from:e,to:t}=n.state.selection;W.emit(`selectionChange`,{from:e,to:t})}}});Ye.current=q;function Xe(e){e.layout&&(R.value=e.layout),e.blocks&&(Le.value=e.blocks),e.measures&&(Re.value=e.measures),e.blockLookup&&Je.setBlockLookup(e.blockLookup),e.layout&&W.emit(`layoutComplete`,e.layout)}function J(n,r={}){let i=ue.value,a=i instanceof HTMLDivElement?i:null,o=j.value,s=o?.package.document,c=s?.sections?.[0]?.properties??s?.finalSectionProperties??null,l=(0,t.getPageSize)(c),u=(0,t.getMargins)(c),d=be(c),p=l.w-u.left-u.right,m=o?.package.styles??null,h=o?.package.theme??null,g=o?.package.settings?.defaultTabStop,_=o?.package.settings,te=_!==void 0&&`mirrorMargins`in _&&_.mirrorMargins===!0,v=(0,ce.resolveHeaderFooterContent)(o?.package);try{Xe((0,f.runLayoutPipeline)({contentWidth:p,columns:d,pageSize:l,margins:u,pageGap:de,showMarginGuides:(0,e.toValue)(S)===!0,marginGuideColor:(0,e.toValue)(C),syncCoordinator:G,headerContent:v.headerContent,footerContent:v.footerContent,firstPageHeaderContent:v.firstPageHeaderContent,firstPageFooterContent:v.firstPageFooterContent,headerContentRId:v.activeHeaderRId,footerContentRId:v.activeFooterRId,firstPageHeaderContentRId:v.activeFirstHeaderRId,firstPageFooterContentRId:v.activeFirstFooterRId,sectionHeaderFooterRefs:(0,ee.resolveSectionHeaderFooterRefs)(o),theme:h,sectionProperties:c,document:o,defaultTabStop:g,mirrorMargins:te,styles:m,layout:R.value,hfPMs:K,painter:Je,pagesContainer:a,session:qe,renderHfFromContentOrPm:xe,renderHeaderFooterContentByRId:Se,documentFontsAreLoaded:Ee,buildFootnoteRenderItems:Ce,describeInvalidHighlightMarks:Te,emptyTemplatePreviewEntries:ye},n,r))}catch(e){let t=e instanceof Error?e:Error(String(e));D?.(t)}}let Y=(0,p.createLayoutScheduler)({runLayout:(e,t)=>J(e,t),debounceMs:ge,maxDelayMs:_e,clock:p.browserClock}),X=null;function Ze(){X!==null&&(window.clearTimeout(X),X=null);let e=M.value,t=j.value;if(!(!e||!t))try{let n=(0,re.fromProseDoc)(e.state.doc,t);j.value=n,K.sync(),q.sync(),Ae?.(n),W.emit(`docChange`,n)}catch(e){D?.(e instanceof Error?e:Error(String(e)))}}function Qe(){X!==null&&window.clearTimeout(X),X=window.setTimeout(()=>{X=null,Ze()},ve)}let Z=(0,d.createHiddenEditorManager)({getHost:()=>_.value,getDocument:()=>j.value,getStyles:()=>j.value?.package.styles??null,getExtensionManager:()=>H,getExternalPlugins:Ke,getCollaboration:()=>(0,e.toValue)(E),getCollaborationModules:()=>P.value,getPrecomputedInitialState:()=>null,getReadOnly:()=>(0,e.toValue)(x),getDocumentKey:()=>(0,e.toValue)(fe),getDocumentContext:()=>j.value,onTransaction:$e,onSelectionChange:e=>{N.value=e,O?.(e),W.emit(`selectionChange`,{from:e.selection.from,to:e.selection.to})},onKeyDown:()=>!1,onCopy:()=>Me?.(),onCut:()=>k?.(),onPaste:()=>A?.(),onReadOnlyEditAttempt:()=>Ne?.(),onEditorViewReady:et,onEditorViewDestroy:()=>{M.value=null,z.value=!1,je?.(null)},onRemoteSelectionsChange:e=>{F.value=e}}),Q=()=>{let t=(0,e.toValue)(E)?.awareness,n=P.value,r=Z.getView();F.value=t&&n&&r?(0,d.collectRemoteSelections)(r.state,t,n):[]};(0,e.watch)(()=>(0,e.toValue)(E),(e,t,n)=>{if(F.value=[],!e){P.value=null,Z.retryViewCreation(),Z.syncExternalDocument();return}let r=!1;n(()=>{r=!0}),P.value=null,(0,c.loadCollaborationModules)().then(e=>{r||(P.value=e,Z.retryViewCreation(),Z.syncExternalDocument(),Q())},e=>{r||(P.value=null,D?.(e instanceof Error?e:Error(String(e))))})},{immediate:!0}),(0,e.watch)(()=>({awareness:(0,e.toValue)(E)?.awareness,modules:P.value,view:M.value}),({awareness:e,modules:t,view:n},r,i)=>{if(!e||!t||!n){F.value=[];return}e.on(`change`,Q),Q(),i(()=>{e.off(`change`,Q),F.value=[]})},{flush:`post`});function $e(e,t){N.value=t,e.docChanged&&(V.value=!0,G.incrementStateSeq(),Y.schedule(t,(0,ne.getTransactionDirtyRange)(e)),Qe()),G.requestRender()}function et(t){M.value=t,N.value=t.state,z.value=!0,J(t.state,{reason:`initial`}),G.requestRender(),$(t),je?.(t),(0,e.toValue)(x)||requestAnimationFrame(()=>{M.value===t&&t.focus()})}let tt=(0,o.createFolioEditor)({getEditorApi:()=>Z.api,getLayout:()=>R.value,runLayout:(e,t)=>J(e,t),emitter:W});function $(t){(0,a.setSuggestionMode)((0,e.toValue)(T)===`suggesting`,t.state,t.dispatch,(0,e.toValue)(pe))}(0,e.watch)([()=>(0,e.toValue)(T),()=>(0,e.toValue)(pe)],()=>{let e=M.value;e&&$(e);for(let e of q.listStories()){let t=q.getView(e);t&&$(t)}}),(0,e.watch)(()=>(0,e.toValue)(x),e=>{Z.syncEditable(),e&&mt()});function nt(e){let t=Ge();if(t===e.state.plugins.includes(U))return;let n=e.state.plugins.filter(e=>e!==U&&e!==Ue);if(t){let e=n.indexOf(We),t=e===-1?n.length:e;n.splice(t,0,U,Ue)}e.updateState(e.state.reconfigure({plugins:n}))}(0,e.watch)(()=>Ge(),()=>{let e=M.value;e&&nt(e)});function rt(){Z.ensureView()}function it(){V.value=!1,I.value=null,L.value=null,q.activate(null),Y.dispose(),Z.destroyView(),K.sync(),q.sync(),Z.ensureView(),Z.getView()||at()}function at(){let t=j.value;if(!(!t||(0,e.toValue)(E)))try{let e=(0,d.createHiddenEditorState)({document:t,styles:t.package.styles??null,manager:H,externalPlugins:Ke(),collaborationModules:null,reason:`mount`});N.value=e,J(e,{reason:`initial`})}catch(e){D?.(e instanceof Error?e:Error(String(e)))}}(0,e.watch)([_,ue,Ie,...b?[b]:[]],()=>{_.value&&j.value&&!Z.getView()&&rt(),K.sync(),q.sync()},{flush:`post`});async function ot(t){B.value=null,z.value=!1;try{let n=await(0,h.parseDocx)(t,{password:(0,e.toValue)(w)});j.value=n,it()}catch(e){let t=e instanceof Error?e:Error(String(e));B.value=t.message,D?.(t)}}function st(e){B.value=null,j.value=e,it()}async function ct(t){let n=M.value,r=j.value;if(!n||!r)return null;let i=q.snapshotDocument(K.snapshotDocument(r)),a=n.state,{resolveSelectiveSaveFlags:o}=await import(`@stll/folio-core/docx/selectiveSaveFlags`),s=o((0,e.toValue)(Pe)),c=(0,re.fromProseDoc)(a.doc,i),l=c.originalBuffer??null,u=s.selectiveSave&&t?.selective!==!1,d=u||s.selectiveSaveTripwire,{repackDocx:f,createDocx:p}=await import(`@stll/folio-core/docx/rezip`),m=null;if(d&&l){let{attemptSelectiveSave:e}=await import(`@stll/folio-core/docx/selectiveSave`);m=await e(c,l,{changedParaIds:(0,y.getChangedParagraphIds)(a),structuralChange:(0,y.hasStructuralChanges)(a),hasUntrackedChanges:(0,y.hasUntrackedChanges)(a),maxBytes:s.selectiveSaveMaxBytes})}let h=u?m:null,g=null;if(!h)g=l?await f(c):await p(c),h=g;else if(s.selectiveSaveTripwire)try{g=await f(c)}catch{}if(s.selectiveSaveTripwire&&g&&Fe)try{let{compareSelectiveVsFull:e}=await import(`@stll/folio-core/docx/selectiveSaveTripwire`);Fe(await e(m,g))}catch{}return j.value=c,K.sync(),q.sync(),V.value=!1,new Blob([h],{type:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`})}function lt(){let e=j.value;return e?q.snapshotDocument(K.snapshotDocument(e)):null}function ut(e){j.value=e,K.sync(),q.sync(),L.value&&!q.getView(L.value)&&(L.value=null)}function dt(e){return K.getView(e)}function ft(){K.sync()}function pt(e){let t=q.activate(e);t&&($(t),L.value=e,requestAnimationFrame(()=>t.focus()))}function mt(){q.activate(null),L.value=null}function ht(){let e=L.value;return e?q.getView(e):null}function gt(){return H.getCommands()}function _t(){let e=ht();e?e.focus():M.value?.focus()}function vt(){let e=M.value;e&&J(e.state,{reason:`manual`})}(0,e.watch)([()=>(0,e.toValue)(S),()=>(0,e.toValue)(C)],()=>vt());function yt(){Y.dispose(),X!==null&&(window.clearTimeout(X),X=null),Z.destroyView(),F.value=[],K.destroy(),q.destroy(),H.destroy(),N.value=null,R.value=null,j.value=null,z.value=!1}return(0,e.onScopeDispose)(yt),{editor:tt,editorView:M,editorState:N,remoteSelections:F,headerFooterSelection:I,activeNoteStory:L,isReady:z,isDirty:V,parseError:B,layout:R,blocks:Le,measures:Re,syncCoordinator:G,loadBuffer:ot,loadDocument:st,save:ct,getDocument:lt,setDocument:ut,getHeaderFooterView:dt,syncHeaderFooterViews:ft,openNoteStory:pt,closeNoteStory:mt,getActiveNoteView:ht,getCommands:gt,focus:_t,reLayout:vt,destroy:yt}}function Oe(e,t){if(t<e.top+40){let n=Math.max(0,e.top+40-t);return-Math.min(12,n/40*12)}if(t>e.bottom-40){let n=Math.max(0,t-(e.bottom-40));return Math.min(12,n/40*12)}return 0}function ke({pagesContainer:t,onScrollExtendSelection:n}){let r=null,i=0,a=0,o=!1,s=null;function c(){if(s)return s;let e=t.value;return e?(s=(0,le.findVerticalScrollParent)(e),s):null}function l(){o=!1,r!==null&&(cancelAnimationFrame(r),r=null)}function u(){if(!o)return;let e=c();if(!e)return;let t=Oe(e.getBoundingClientRect(),a);t!==0&&(e.scrollTop+=t,n(i,a)),r=requestAnimationFrame(u)}function d(){o||(o=!0,r=requestAnimationFrame(u))}function f(e,t){if(i=e,a=t,!o){let e=c();if(!e)return;let n=e.getBoundingClientRect();(t<n.top+40||t>n.bottom-40)&&d()}}return(0,e.onScopeDispose)(()=>l()),{updateMousePosition:f,stopAutoScroll:l}}function Ae(){let e={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidths:{left:0,right:0}},t={active:!1,startY:0,handle:null,rowIndex:0,isEdge:!1,tablePmStart:0,origHeight:0},n={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidth:0},r=null;function i(){return e.active||t.active||n.active}function a(i,a){let o=i.target;return o instanceof HTMLElement?o.classList.contains(`layout-table-resize-handle`)?(i.preventDefault(),i.stopPropagation(),r=a,e.active=!0,e.startX=i.clientX,e.handle=o,o.classList.add(`dragging`),e.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),e.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),D(a,e),!0):o.classList.contains(`layout-table-row-resize-handle`)||o.classList.contains(`layout-table-edge-handle-bottom`)?(i.preventDefault(),i.stopPropagation(),r=a,t.active=!0,t.startY=i.clientY,t.handle=o,t.isEdge=o.dataset.isEdge===`bottom`,o.classList.add(`dragging`),t.rowIndex=parseInt(o.dataset.rowIndex??`0`,10),t.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),O(a,t,o),!0):o.classList.contains(`layout-table-edge-handle-right`)?(i.preventDefault(),i.stopPropagation(),r=a,n.active=!0,n.startX=i.clientX,n.handle=o,o.classList.add(`dragging`),n.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),n.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),je(a,n),!0):!1:!1}function o(r){if(e.active&&e.handle){r.preventDefault();let t=r.clientX-e.startX,n=parseFloat(e.handle.style.left);e.handle.style.left=`${n+t}px`,e.startX=r.clientX;let i=Math.round(t*b.TWIPS_PER_PIXEL),a=e.origWidths.left+i,o=e.origWidths.right-i;a>=b.MIN_CELL_WIDTH_TWIPS&&o>=b.MIN_CELL_WIDTH_TWIPS&&(e.origWidths={left:a,right:o});return}if(t.active&&t.handle){r.preventDefault();let e=r.clientY-t.startY,n=parseFloat(t.handle.style.top);t.handle.style.top=`${n+e}px`,t.startY=r.clientY;let i=Math.round(e*b.TWIPS_PER_PIXEL),a=t.origHeight+i;a>=b.MIN_ROW_HEIGHT_TWIPS&&(t.origHeight=a);return}if(n.active&&n.handle){r.preventDefault();let e=r.clientX-n.startX,t=parseFloat(n.handle.style.left);n.handle.style.left=`${t+e}px`,n.startX=r.clientX;let i=Math.round(e*b.TWIPS_PER_PIXEL),a=n.origWidth+i;a>=b.MIN_CELL_WIDTH_TWIPS&&(n.origWidth=a)}}function s(i){if(e.active){e.active=!1,e.handle?.classList.remove(`dragging`),r&&(0,b.commitColumnResize)(r,{pmStart:e.tablePmStart,colIdx:e.columnIndex,newLeft:e.origWidths.left,newRight:e.origWidths.right}),e.handle=null;return}if(t.active){t.active=!1,t.handle?.classList.remove(`dragging`),r&&(0,b.commitRowResize)(r,{pmStart:t.tablePmStart,rowIdx:t.rowIndex,newHeight:t.origHeight}),t.handle=null;return}n.active&&(n.active=!1,n.handle?.classList.remove(`dragging`),r&&(0,b.commitRightEdgeResize)(r,{pmStart:n.tablePmStart,colIdx:n.columnIndex,newWidth:n.origWidth}),n.handle=null)}function c(){return document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),()=>{document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s)}}return{tryStartResize:a,install:c,isResizing:i}}function D(e,t){let n=(0,b.readColumnWidths)(e,t.tablePmStart,t.columnIndex);n&&(t.origWidths=n)}function O(e,t,n){let r=(0,b.readRowHeight)(e,t.tablePmStart,t.rowIndex);if(r!=null){t.origHeight=r;return}let i=n.closest(`.layout-table`)?.querySelector(`[data-row-index="${t.rowIndex}"]`),a=i?i.getBoundingClientRect().height:30;t.origHeight=Math.round(a*b.TWIPS_PER_PIXEL)}function je(e,t){let n=(0,b.readColumnWidthAt)(e,t.tablePmStart,t.columnIndex);n!=null&&(t.origWidth=n)}function Me(t,n){return(0,e.computed)(()=>(n.value,(0,ue.extractTrackedChanges)(t.value?.state??null)))}var k=x.ZOOM_MIN,A=x.ZOOM_MAX,Ne=[.5,.75,1,1.25,1.5,2];function Pe(t=1){let n=(0,e.ref)(Math.max(k,Math.min(A,t))),r=(0,e.computed)(()=>Math.round(n.value*100)),i=(0,e.computed)(()=>n.value<=k),a=(0,e.computed)(()=>n.value>=A);function o(e){n.value=Math.max(k,Math.min(A,Math.round(e*100)/100))}function s(){o(n.value+x.ZOOM_STEP)}function c(){o(n.value-x.ZOOM_STEP)}function l(){o(1)}function u(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.deltaY<0?s():c())}function d(e){(e.ctrlKey||e.metaKey)&&(e.shiftKey||e.altKey||(e.key===`=`||e.key===`+`?(e.preventDefault(),s()):e.key===`-`?(e.preventDefault(),c()):e.key===`0`&&(e.preventDefault(),l())))}function f(){(0,e.onMounted)(()=>document.addEventListener(`keydown`,d)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`keydown`,d))}return{zoom:n,zoomPercent:r,isMinZoom:i,isMaxZoom:a,setZoom:o,zoomIn:s,zoomOut:c,resetZoom:l,handleWheel:u,handleKeyDown:d,installShortcuts:f,ZOOM_PRESETS:Ne}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Pe}});
import { computed as e, inject as t, onBeforeUnmount as n, onMounted as r, onScopeDispose as i, provide as a, ref as o, shallowRef as s, toValue as c, watch as l, watchEffect as u } from "vue";
import { getMargins as d, getPageSize as f, twipsToPixels as p } from "@stll/folio-core/paged-layout/sectionGeometry";
import { createAnonymizationDecorationsPlugin as m } from "@stll/folio-core/prosemirror/plugins/anonymizationDecorations";
import { autocompleteSuggestionPlugin as h } from "@stll/folio-core/prosemirror/plugins/autocompleteSuggestion";
import { createTemplateDirectivesPlugin as g } from "@stll/folio-core/prosemirror/plugins/templateDirectives";
import { createSuggestionModePlugin as ee, setSuggestionMode as te } from "@stll/folio-core/prosemirror/plugins/suggestionMode";
import { createFolioEditor as _ } from "@stll/folio-core/controller/folioEditor";
import { createFolioEditorEmitter as ne } from "@stll/folio-core/controller/folioEditorEvents";
import { loadCollaborationModules as v } from "@stll/folio-core/controller/collaborationModules";
import { createHeaderFooterEditorManager as re } from "@stll/folio-core/controller/headerFooterEditorManager";
import { createNoteEditorManager as ie } from "@stll/folio-core/controller/noteEditorManager";
import { collectRemoteSelections as ae, createHiddenEditorManager as oe, createHiddenEditorState as se } from "@stll/folio-core/controller/hiddenEditorManager";
import { runLayoutPipeline as ce } from "@stll/folio-core/controller/layoutPipeline";
import { browserClock as le, createLayoutScheduler as ue } from "@stll/folio-core/controller/layoutScheduler";
import { createLayoutSession as de } from "@stll/folio-core/controller/layoutSession";
import { parseDocx as fe } from "@stll/folio-core/docx/parser";
import { getFootnoteText as y } from "@stll/folio-core/docx/footnoteParser";
import { convertHeaderFooterPmDocToContent as b, convertHeaderFooterToContent as pe } from "@stll/folio-core/layout-bridge/convert/headerFooterLayout";
import { resolveSectionHeaderFooterRefs as me } from "@stll/folio-core/layout-engine";
import { LayoutPainter as he } from "@stll/folio-core/layout-painter";
import { LayoutSelectionGate as ge } from "@stll/folio-core/paged-layout/LayoutSelectionGate";
import { getTransactionDirtyRange as _e } from "@stll/folio-core/paged-layout/transactionDirtyRange";
import { fromProseDoc as ve } from "@stll/folio-core/prosemirror/conversion/fromProseDoc";
import { ExtensionManager as ye } from "@stll/folio-core/prosemirror/extensions/ExtensionManager";
import { getChangedParagraphIds as be, hasStructuralChanges as xe, hasUntrackedChanges as Se } from "@stll/folio-core/prosemirror/extensions/features/ParagraphChangeTrackerExtension";
import { createStarterKit as Ce } from "@stll/folio-core/prosemirror/extensions/StarterKit";
import { createTemplatePreviewValuesPlugin as we } from "@stll/folio-core/prosemirror/plugins/templatePreviewValues";
import { templateSlashMenuPlugin as Te } from "@stll/folio-core/prosemirror/plugins/templateSlashMenu";
import { resolveHeaderFooterContent as Ee } from "@stll/folio-core/utils/headerFooter";
import { findVerticalScrollParent as De } from "@stll/folio-core/utils/findVerticalScrollParent";
import { MIN_CELL_WIDTH_TWIPS as x, MIN_ROW_HEIGHT_TWIPS as Oe, TWIPS_PER_PIXEL as S, commitColumnResize as C, commitRightEdgeResize as ke, commitRowResize as Ae, readColumnWidthAt as je, readColumnWidths as Me, readRowHeight as Ne } from "@stll/folio-core/prosemirror/tableResize";
import { extractTrackedChanges as w } from "@stll/folio-core/prosemirror/utils/extractTrackedChanges";
import { ZOOM_MAX as T, ZOOM_MIN as Pe, ZOOM_STEP as E } from "@stll/folio-core/utils/zoom";
//#region src/utils/colorMode.ts
var Fe = "(prefers-color-scheme: dark)";
function Ie() {
return typeof window < "u" && typeof window.matchMedia == "function";
}
function Le(e, t) {
return e === "dark" || e === "system" && t;
}
function Re(e) {
if (!Ie()) return () => {};
let t = window.matchMedia(Fe);
e(t.matches);
let n = (t) => e(t.matches);
return t.addEventListener("change", n), () => t.removeEventListener("change", n);
}
//#endregion
//#region src/composables/useColorMode.ts
var D = "light", O = Symbol("folioColorMode"), k = (t = D) => {
a(O, e(() => c(t)));
}, A = { install(t, n = D) {
t.provide(O, e(() => c(n)));
} };
function j() {
let n = t(O, e(() => D)), i = o(!1), a = o(!1);
return r(() => {
i.value = !0;
}), u((e) => {
!i.value || n.value !== "system" || e(Re((e) => {
a.value = e;
}));
}), e(() => Le(n.value, i.value && a.value));
}
//#endregion
//#region src/composables/useDocxEditor.ts
var ze = 24, Be = 32, Ve = 96, He = 250, Ue = [];
function We(e) {
let t = e?.columnCount ?? 1;
if (t <= 1) return;
let n = {
count: t,
gap: p(e?.columnSpace ?? 720),
equalWidth: e?.equalWidth ?? !0
};
return e?.separator !== void 0 && (n.separator = e.separator), n;
}
function Ge(e, t, n, r, i, a) {
if (!e) return;
let o = t ? {
...a,
rId: t
} : a, s = t ? n?.getView(t) : null;
return s ? b(s.state.doc, r, i, o) : pe(e, r, i, o);
}
function Ke(e, t, n, r, i) {
if (!e || e.size === 0) return;
let a = /* @__PURE__ */ new Map();
for (let [o, s] of e) {
let e = Ge(s, o, t, n, r, i);
e && a.set(o, e);
}
return a.size > 0 ? a : void 0;
}
function qe(e, t, n) {
let r = /* @__PURE__ */ new Map();
if (!n || !n.package.footnotes) return r;
let i = /* @__PURE__ */ new Map();
for (let e of n.package.footnotes) e.noteType && e.noteType !== "normal" || i.set(e.id, e);
for (let [n, a] of e) {
let e = [];
for (let n of a) {
let r = i.get(n);
if (!r) continue;
let a = t.get(n), o = a?.displayNumber ?? 0;
e.push({
displayNumber: String(o),
noteId: n,
text: y(r),
...a ? { content: {
blocks: a.blocks,
measures: a.measures,
height: a.height
} } : {}
});
}
e.length > 0 && r.set(n, e);
}
return r;
}
var M = /* @__PURE__ */ new Set([
"black",
"blue",
"cyan",
"darkBlue",
"darkCyan",
"darkGray",
"darkGreen",
"darkMagenta",
"darkRed",
"darkYellow",
"green",
"lightGray",
"magenta",
"none",
"red",
"white",
"yellow"
]);
function Je(e) {
let t = [], n = (e, r) => {
for (let [n, i] of e.marks.entries()) i.type.name === "highlight" && !M.has(String(i.attrs.color)) && t.push(`${r}.marks[${n}]=${JSON.stringify(i.attrs)}`);
e.forEach((e, t, i) => {
n(e, `${r}.content[${i}]`);
});
};
return n(e, "doc"), t.join("; ");
}
function Ye() {
return typeof document > "u" || !("fonts" in document) || document.fonts.status === "loaded";
}
function N(e) {
let { hiddenContainer: t, hiddenHeaderFooterContainer: n, noteEditorContainer: r, pagesContainer: a, readOnly: u = !1, pageGap: p = ze, showMarginGuides: y, marginGuideColor: b, documentKey: pe, password: De, editorMode: x, author: Oe, externalPlugins: S = [], collaboration: C, onAnonymizationMatchesChange: ke, showTemplateDirectives: Ae, onSlashMenuChange: je, onSlashMenuKeyAction: Me, onChange: Ne, onError: w, onSelectionUpdate: T, onEditorViewReady: Pe, onCopy: E, onCut: Fe, onPaste: Ie, onReadOnlyEditAttempt: Le, featureFlags: Re, onSelectiveSaveTripwire: D } = e, O = n ?? t, k = s(null), A = s(null), j = s(null), M = s(null), N = s([]), P = s(null), F = s(null), I = s(null), L = s([]), R = s([]), z = o(!1), B = o(null), V = o(!1), H = new ye(Ce());
H.buildSchema(), H.initializeRuntime();
let Xe = ee(!1), Ze = [Xe], Qe = h({ keymap: !0 }), $e = m({ onMatchesChange: (e) => ke?.(e) }), U = g(), et = Te({
onChange: (e) => je?.(e),
onKeyAction: (e) => Me?.(e) ?? !1
}), tt = we(), nt = () => c(Ae) === !0;
function rt() {
return [
Qe,
Xe,
...S,
...c(C)?.plugins ?? [],
$e,
...nt() ? [U, et] : [],
tt
];
}
let W = ne(), G = new ge(), it = de(), at = new he({
pageGap: p,
showShadow: !0
}), K = re({
getHost: () => O.value,
getDocument: () => k.value,
getStyles: () => k.value?.package.styles ?? null,
getTheme: () => k.value?.package.theme ?? null,
onTransaction: ({ rId: e, kind: t, view: n, docChanged: r, selectionChanged: i }) => {
if (r) {
V.value = !0;
let e = A.value;
e && Y.schedule(e.state, null);
}
if (r || i) {
let { from: r, to: i } = n.state.selection;
P.value = {
from: r,
kind: t,
rId: e,
to: i
}, T?.(n.state), W.emit("selectionChange", {
from: r,
to: i
});
}
G.requestRender();
}
}), ot = { current: null }, q = ie({
getHost: () => r?.value ?? null,
getPlugins: () => Ze,
getDocument: () => k.value,
getStyles: () => k.value?.package.styles ?? null,
getTheme: () => k.value?.package.theme ?? null,
onTransaction: ({ docChanged: e, selectionChanged: t, view: n }) => {
if (e) {
V.value = !0;
let e = k.value;
if (e) {
let t = ot.current?.snapshotDocument(e) ?? e;
k.value = t, Ne?.(t), W.emit("docChange", t);
}
let t = A.value;
t && Y.schedule(t.state, null);
}
if (e || t) {
T?.(n.state);
let { from: e, to: t } = n.state.selection;
W.emit("selectionChange", {
from: e,
to: t
});
}
}
});
ot.current = q;
function st(e) {
e.layout && (I.value = e.layout), e.blocks && (L.value = e.blocks), e.measures && (R.value = e.measures), e.blockLookup && at.setBlockLookup(e.blockLookup), e.layout && W.emit("layoutComplete", e.layout);
}
function J(e, t = {}) {
let n = a.value, r = n instanceof HTMLDivElement ? n : null, i = k.value, o = i?.package.document, s = o?.sections?.[0]?.properties ?? o?.finalSectionProperties ?? null, l = f(s), u = d(s), m = We(s), h = l.w - u.left - u.right, g = i?.package.styles ?? null, ee = i?.package.theme ?? null, te = i?.package.settings?.defaultTabStop, _ = i?.package.settings, ne = _ !== void 0 && "mirrorMargins" in _ && _.mirrorMargins === !0, v = Ee(i?.package);
try {
st(ce({
contentWidth: h,
columns: m,
pageSize: l,
margins: u,
pageGap: p,
showMarginGuides: c(y) === !0,
marginGuideColor: c(b),
syncCoordinator: G,
headerContent: v.headerContent,
footerContent: v.footerContent,
firstPageHeaderContent: v.firstPageHeaderContent,
firstPageFooterContent: v.firstPageFooterContent,
headerContentRId: v.activeHeaderRId,
footerContentRId: v.activeFooterRId,
firstPageHeaderContentRId: v.activeFirstHeaderRId,
firstPageFooterContentRId: v.activeFirstFooterRId,
sectionHeaderFooterRefs: me(i),
theme: ee,
sectionProperties: s,
document: i,
defaultTabStop: te,
mirrorMargins: ne,
styles: g,
layout: I.value,
hfPMs: K,
painter: at,
pagesContainer: r,
session: it,
renderHfFromContentOrPm: Ge,
renderHeaderFooterContentByRId: Ke,
documentFontsAreLoaded: Ye,
buildFootnoteRenderItems: qe,
describeInvalidHighlightMarks: Je,
emptyTemplatePreviewEntries: Ue
}, e, t));
} catch (e) {
let t = e instanceof Error ? e : Error(String(e));
w?.(t);
}
}
let Y = ue({
runLayout: (e, t) => J(e, t),
debounceMs: Be,
maxDelayMs: Ve,
clock: le
}), X = null;
function ct() {
X !== null && (window.clearTimeout(X), X = null);
let e = A.value, t = k.value;
if (!(!e || !t)) try {
let n = ve(e.state.doc, t);
k.value = n, K.sync(), q.sync(), Ne?.(n), W.emit("docChange", n);
} catch (e) {
w?.(e instanceof Error ? e : Error(String(e)));
}
}
function lt() {
X !== null && window.clearTimeout(X), X = window.setTimeout(() => {
X = null, ct();
}, He);
}
let Z = oe({
getHost: () => t.value,
getDocument: () => k.value,
getStyles: () => k.value?.package.styles ?? null,
getExtensionManager: () => H,
getExternalPlugins: rt,
getCollaboration: () => c(C),
getCollaborationModules: () => M.value,
getPrecomputedInitialState: () => null,
getReadOnly: () => c(u),
getDocumentKey: () => c(pe),
getDocumentContext: () => k.value,
onTransaction: ut,
onSelectionChange: (e) => {
j.value = e, T?.(e), W.emit("selectionChange", {
from: e.selection.from,
to: e.selection.to
});
},
onKeyDown: () => !1,
onCopy: () => E?.(),
onCut: () => Fe?.(),
onPaste: () => Ie?.(),
onReadOnlyEditAttempt: () => Le?.(),
onEditorViewReady: dt,
onEditorViewDestroy: () => {
A.value = null, z.value = !1, Pe?.(null);
},
onRemoteSelectionsChange: (e) => {
N.value = e;
}
}), Q = () => {
let e = c(C)?.awareness, t = M.value, n = Z.getView();
N.value = e && t && n ? ae(n.state, e, t) : [];
};
l(() => c(C), (e, t, n) => {
if (N.value = [], !e) {
M.value = null, Z.retryViewCreation(), Z.syncExternalDocument();
return;
}
let r = !1;
n(() => {
r = !0;
}), M.value = null, v().then((e) => {
r || (M.value = e, Z.retryViewCreation(), Z.syncExternalDocument(), Q());
}, (e) => {
r || (M.value = null, w?.(e instanceof Error ? e : Error(String(e))));
});
}, { immediate: !0 }), l(() => ({
awareness: c(C)?.awareness,
modules: M.value,
view: A.value
}), ({ awareness: e, modules: t, view: n }, r, i) => {
if (!e || !t || !n) {
N.value = [];
return;
}
e.on("change", Q), Q(), i(() => {
e.off("change", Q), N.value = [];
});
}, { flush: "post" });
function ut(e, t) {
j.value = t, e.docChanged && (V.value = !0, G.incrementStateSeq(), Y.schedule(t, _e(e)), lt()), G.requestRender();
}
function dt(e) {
A.value = e, j.value = e.state, z.value = !0, J(e.state, { reason: "initial" }), G.requestRender(), $(e), Pe?.(e), c(u) || requestAnimationFrame(() => {
A.value === e && e.focus();
});
}
let ft = _({
getEditorApi: () => Z.api,
getLayout: () => I.value,
runLayout: (e, t) => J(e, t),
emitter: W
});
function $(e) {
te(c(x) === "suggesting", e.state, e.dispatch, c(Oe));
}
l([() => c(x), () => c(Oe)], () => {
let e = A.value;
e && $(e);
for (let e of q.listStories()) {
let t = q.getView(e);
t && $(t);
}
}), l(() => c(u), (e) => {
Z.syncEditable(), e && Tt();
});
function pt(e) {
let t = nt();
if (t === e.state.plugins.includes(U)) return;
let n = e.state.plugins.filter((e) => e !== U && e !== et);
if (t) {
let e = n.indexOf(tt), t = e === -1 ? n.length : e;
n.splice(t, 0, U, et);
}
e.updateState(e.state.reconfigure({ plugins: n }));
}
l(() => nt(), () => {
let e = A.value;
e && pt(e);
});
function mt() {
Z.ensureView();
}
function ht() {
V.value = !1, P.value = null, F.value = null, q.activate(null), Y.dispose(), Z.destroyView(), K.sync(), q.sync(), Z.ensureView(), Z.getView() || gt();
}
function gt() {
let e = k.value;
if (!(!e || c(C))) try {
let t = se({
document: e,
styles: e.package.styles ?? null,
manager: H,
externalPlugins: rt(),
collaborationModules: null,
reason: "mount"
});
j.value = t, J(t, { reason: "initial" });
} catch (e) {
w?.(e instanceof Error ? e : Error(String(e)));
}
}
l([
t,
a,
O,
...r ? [r] : []
], () => {
t.value && k.value && !Z.getView() && mt(), K.sync(), q.sync();
}, { flush: "post" });
async function _t(e) {
B.value = null, z.value = !1;
try {
let t = await fe(e, { password: c(De) });
k.value = t, ht();
} catch (e) {
let t = e instanceof Error ? e : Error(String(e));
B.value = t.message, w?.(t);
}
}
function vt(e) {
B.value = null, k.value = e, ht();
}
async function yt(e) {
let t = A.value, n = k.value;
if (!t || !n) return null;
let r = q.snapshotDocument(K.snapshotDocument(n)), i = t.state, { resolveSelectiveSaveFlags: a } = await import("@stll/folio-core/docx/selectiveSaveFlags"), o = a(c(Re)), s = ve(i.doc, r), l = s.originalBuffer ?? null, u = o.selectiveSave && e?.selective !== !1, d = u || o.selectiveSaveTripwire, { repackDocx: f, createDocx: p } = await import("@stll/folio-core/docx/rezip"), m = null;
if (d && l) {
let { attemptSelectiveSave: e } = await import("@stll/folio-core/docx/selectiveSave");
m = await e(s, l, {
changedParaIds: be(i),
structuralChange: xe(i),
hasUntrackedChanges: Se(i),
maxBytes: o.selectiveSaveMaxBytes
});
}
let h = u ? m : null, g = null;
if (!h) g = l ? await f(s) : await p(s), h = g;
else if (o.selectiveSaveTripwire) try {
g = await f(s);
} catch {}
if (o.selectiveSaveTripwire && g && D) try {
let { compareSelectiveVsFull: e } = await import("@stll/folio-core/docx/selectiveSaveTripwire");
D(await e(m, g));
} catch {}
return k.value = s, K.sync(), q.sync(), V.value = !1, new Blob([h], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
}
function bt() {
let e = k.value;
return e ? q.snapshotDocument(K.snapshotDocument(e)) : null;
}
function xt(e) {
k.value = e, K.sync(), q.sync(), F.value && !q.getView(F.value) && (F.value = null);
}
function St(e) {
return K.getView(e);
}
function Ct() {
K.sync();
}
function wt(e) {
let t = q.activate(e);
t && ($(t), F.value = e, requestAnimationFrame(() => t.focus()));
}
function Tt() {
q.activate(null), F.value = null;
}
function Et() {
let e = F.value;
return e ? q.getView(e) : null;
}
function Dt() {
return H.getCommands();
}
function Ot() {
let e = Et();
e ? e.focus() : A.value?.focus();
}
function kt() {
let e = A.value;
e && J(e.state, { reason: "manual" });
}
l([() => c(y), () => c(b)], () => kt());
function At() {
Y.dispose(), X !== null && (window.clearTimeout(X), X = null), Z.destroyView(), N.value = [], K.destroy(), q.destroy(), H.destroy(), j.value = null, I.value = null, k.value = null, z.value = !1;
}
return i(At), {
editor: ft,
editorView: A,
editorState: j,
remoteSelections: N,
headerFooterSelection: P,
activeNoteStory: F,
isReady: z,
isDirty: V,
parseError: B,
layout: I,
blocks: L,
measures: R,
syncCoordinator: G,
loadBuffer: _t,
loadDocument: vt,
save: yt,
getDocument: bt,
setDocument: xt,
getHeaderFooterView: St,
syncHeaderFooterViews: Ct,
openNoteStory: wt,
closeNoteStory: Tt,
getActiveNoteView: Et,
getCommands: Dt,
focus: Ot,
reLayout: kt,
destroy: At
};
}
function P(e, t) {
if (t < e.top + 40) {
let n = Math.max(0, e.top + 40 - t);
return -Math.min(12, n / 40 * 12);
}
if (t > e.bottom - 40) {
let n = Math.max(0, t - (e.bottom - 40));
return Math.min(12, n / 40 * 12);
}
return 0;
}
//#endregion
//#region src/composables/useDragAutoScroll.ts
function F({ pagesContainer: e, onScrollExtendSelection: t }) {
let n = null, r = 0, a = 0, o = !1, s = null;
function c() {
if (s) return s;
let t = e.value;
return t ? (s = De(t), s) : null;
}
function l() {
o = !1, n !== null && (cancelAnimationFrame(n), n = null);
}
function u() {
if (!o) return;
let e = c();
if (!e) return;
let i = P(e.getBoundingClientRect(), a);
i !== 0 && (e.scrollTop += i, t(r, a)), n = requestAnimationFrame(u);
}
function d() {
o || (o = !0, n = requestAnimationFrame(u));
}
function f(e, t) {
if (r = e, a = t, !o) {
let e = c();
if (!e) return;
let n = e.getBoundingClientRect();
(t < n.top + 40 || t > n.bottom - 40) && d();
}
}
return i(() => l()), {
updateMousePosition: f,
stopAutoScroll: l
};
}
//#endregion
//#region src/composables/useTableResize.ts
function I() {
let e = {
active: !1,
startX: 0,
handle: null,
columnIndex: 0,
tablePmStart: 0,
origWidths: {
left: 0,
right: 0
}
}, t = {
active: !1,
startY: 0,
handle: null,
rowIndex: 0,
isEdge: !1,
tablePmStart: 0,
origHeight: 0
}, n = {
active: !1,
startX: 0,
handle: null,
columnIndex: 0,
tablePmStart: 0,
origWidth: 0
}, r = null;
function i() {
return e.active || t.active || n.active;
}
function a(i, a) {
let o = i.target;
return o instanceof HTMLElement ? o.classList.contains("layout-table-resize-handle") ? (i.preventDefault(), i.stopPropagation(), r = a, e.active = !0, e.startX = i.clientX, e.handle = o, o.classList.add("dragging"), e.columnIndex = parseInt(o.dataset.columnIndex ?? "0", 10), e.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), L(a, e), !0) : o.classList.contains("layout-table-row-resize-handle") || o.classList.contains("layout-table-edge-handle-bottom") ? (i.preventDefault(), i.stopPropagation(), r = a, t.active = !0, t.startY = i.clientY, t.handle = o, t.isEdge = o.dataset.isEdge === "bottom", o.classList.add("dragging"), t.rowIndex = parseInt(o.dataset.rowIndex ?? "0", 10), t.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), R(a, t, o), !0) : o.classList.contains("layout-table-edge-handle-right") ? (i.preventDefault(), i.stopPropagation(), r = a, n.active = !0, n.startX = i.clientX, n.handle = o, o.classList.add("dragging"), n.columnIndex = parseInt(o.dataset.columnIndex ?? "0", 10), n.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), z(a, n), !0) : !1 : !1;
}
function o(r) {
if (e.active && e.handle) {
r.preventDefault();
let t = r.clientX - e.startX, n = parseFloat(e.handle.style.left);
e.handle.style.left = `${n + t}px`, e.startX = r.clientX;
let i = Math.round(t * S), a = e.origWidths.left + i, o = e.origWidths.right - i;
a >= x && o >= x && (e.origWidths = {
left: a,
right: o
});
return;
}
if (t.active && t.handle) {
r.preventDefault();
let e = r.clientY - t.startY, n = parseFloat(t.handle.style.top);
t.handle.style.top = `${n + e}px`, t.startY = r.clientY;
let i = Math.round(e * S), a = t.origHeight + i;
a >= Oe && (t.origHeight = a);
return;
}
if (n.active && n.handle) {
r.preventDefault();
let e = r.clientX - n.startX, t = parseFloat(n.handle.style.left);
n.handle.style.left = `${t + e}px`, n.startX = r.clientX;
let i = Math.round(e * S), a = n.origWidth + i;
a >= x && (n.origWidth = a);
}
}
function s(i) {
if (e.active) {
e.active = !1, e.handle?.classList.remove("dragging"), r && C(r, {
pmStart: e.tablePmStart,
colIdx: e.columnIndex,
newLeft: e.origWidths.left,
newRight: e.origWidths.right
}), e.handle = null;
return;
}
if (t.active) {
t.active = !1, t.handle?.classList.remove("dragging"), r && Ae(r, {
pmStart: t.tablePmStart,
rowIdx: t.rowIndex,
newHeight: t.origHeight
}), t.handle = null;
return;
}
n.active && (n.active = !1, n.handle?.classList.remove("dragging"), r && ke(r, {
pmStart: n.tablePmStart,
colIdx: n.columnIndex,
newWidth: n.origWidth
}), n.handle = null);
}
function c() {
return document.addEventListener("mousemove", o), document.addEventListener("mouseup", s), () => {
document.removeEventListener("mousemove", o), document.removeEventListener("mouseup", s);
};
}
return {
tryStartResize: a,
install: c,
isResizing: i
};
}
function L(e, t) {
let n = Me(e, t.tablePmStart, t.columnIndex);
n && (t.origWidths = n);
}
function R(e, t, n) {
let r = Ne(e, t.tablePmStart, t.rowIndex);
if (r != null) {
t.origHeight = r;
return;
}
let i = n.closest(".layout-table")?.querySelector(`[data-row-index="${t.rowIndex}"]`), a = i ? i.getBoundingClientRect().height : 30;
t.origHeight = Math.round(a * S);
}
function z(e, t) {
let n = je(e, t.tablePmStart, t.columnIndex);
n != null && (t.origWidth = n);
}
//#endregion
//#region src/composables/useTrackedChanges.ts
function B(t, n) {
return e(() => (n.value, w(t.value?.state ?? null)));
}
//#endregion
//#region src/composables/useZoom.ts
var V = Pe, H = T, Xe = [
.5,
.75,
1,
1.25,
1.5,
2
];
function Ze(t = 1) {
let i = o(Math.max(V, Math.min(H, t))), a = e(() => Math.round(i.value * 100)), s = e(() => i.value <= V), c = e(() => i.value >= H);
function l(e) {
i.value = Math.max(V, Math.min(H, Math.round(e * 100) / 100));
}
function u() {
l(i.value + E);
}
function d() {
l(i.value - E);
}
function f() {
l(1);
}
function p(e) {
(e.ctrlKey || e.metaKey) && (e.preventDefault(), e.deltaY < 0 ? u() : d());
}
function m(e) {
(e.ctrlKey || e.metaKey) && (e.shiftKey || e.altKey || (e.key === "=" || e.key === "+" ? (e.preventDefault(), u()) : e.key === "-" ? (e.preventDefault(), d()) : e.key === "0" && (e.preventDefault(), f())));
}
function h() {
r(() => document.addEventListener("keydown", m)), n(() => document.removeEventListener("keydown", m));
}
return {
zoom: i,
zoomPercent: a,
isMinZoom: s,
isMaxZoom: c,
setZoom: l,
zoomIn: u,
zoomOut: d,
resetZoom: f,
handleWheel: p,
handleKeyDown: m,
installShortcuts: h,
ZOOM_PRESETS: Xe
};
}
//#endregion
export { F as a, D as c, I as i, k as l, w as n, N as o, B as r, A as s, Ze as t, j as u };
/** Register fonts embedded in a document with the browser font set. */
/**
* Extract and register embedded faces from a raw document buffer. Extraction
* and individual face failures are best-effort: rendering falls back to the
* normal CSS font stack instead of failing the document load.
*/
export declare function loadEmbeddedFontFaces(buffer: ArrayBuffer): Promise<FontFace[]>;
/** Browser-only `FontFace` registration shared by Vue's font sources. */
/** The document's `FontFaceSet`, or `null` outside a DOM. */
export declare function getDocumentFontSet(): FontFaceSet | null;
/**
* Register one font face best-effort. Invalid descriptors and rejected font
* binaries are skipped so one bad face cannot prevent the document rendering.
*/
export declare function registerFontFace(fontSet: FontFaceSet, family: string, source: string | BufferSource, descriptors: FontFaceDescriptors): Promise<FontFace | null>;
/** Remove previously registered faces from the document font set. */
export declare function removeFontFaces(faces: readonly FontFace[]): void;
+14
-0

@@ -30,2 +30,6 @@ import { EditorState, Transaction } from 'prosemirror-state';

getView: () => EditorView | null;
/** Get the currently active body, header/footer, or note-story view. */
getActiveView: () => EditorView | null;
/** Close the visible note story, if one is active. */
closeNoteStory: () => void;
/**

@@ -75,2 +79,12 @@ * Look up the persistent hidden HF EditorView by `rId`. Returns null when the

/**
* Set (or clear, with `null`) the persistent passage highlight overlay. The
* range is projected onto the painted pages and painted with a translucent
* wash; it does not move the PM selection. Replaces any previous highlight.
* The overlay is cleared automatically on the next doc-changing transaction.
*/
setPassageHighlight: (range: {
from: number;
to: number;
} | null) => void;
/**
* Resolve the page number (1-indexed) that contains the given PM position, or

@@ -77,0 +91,0 @@ * null if no layout is available yet. Works for unrendered pages too via the

@@ -311,2 +311,17 @@ import { CSSProperties, VNodeChild } from 'vue';

/**
* Outcome of {@link DocxEditorRef.highlightPassage}:
* - `"passage"`: the text matched inside the block; scrolled there and painted
* the range highlight.
* - `"block"`: the text did not match but the block resolved; behaved like
* {@link DocxEditorRef.scrollToBlock} (scroll + whole-paragraph flash where a
* paraId exists).
* - `"none"`: the block did not resolve; no-op.
*/
export type HighlightPassageResult = "passage" | "block" | "none";
export type HighlightPassageOptions = {
blockId: string;
text: string;
snapshot?: FolioAIEditSnapshot;
};
/**
* Imperative handle exposed by the DocxEditor component.

@@ -415,2 +430,14 @@ */

scrollToBlock: (blockId: string, snapshot?: FolioAIEditSnapshot) => boolean;
/**
* Resolve a text passage inside a block, scroll to it, and paint a persistent
* translucent highlight over the matched range. Unlike {@link scrollToBlock},
* the passage outcome does not move the PM selection, so the highlight is not
* confused with a selection. Replaces any previous passage highlight. Returns
* which outcome happened; see {@link HighlightPassageResult}. The highlight is
* ephemeral view state: cleared on the next doc-changing transaction and by
* {@link clearPassageHighlight}.
*/
highlightPassage: (options: HighlightPassageOptions) => HighlightPassageResult;
/** Clear the passage highlight painted by {@link highlightPassage}, if any. */
clearPassageHighlight: () => void;
/** Resolve a stable block or text-range target and reveal it in the editor. */

@@ -417,0 +444,0 @@ showInDocument: (target: FolioDocumentNavigationTarget, snapshot?: FolioAIEditSnapshot) => boolean;

+2
-2

@@ -1,2 +0,2 @@

Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useFindReplace-ZCrdvwEk.cjs"),t=require("./useZoom-BYEcnpS0.cjs");let n=require("vue"),r=require("prosemirror-history"),i=require("@stll/folio-core/utils/clipboard"),a=require("@stll/folio-core/managers/ClipboardManager"),o=require("@stll/folio-core/managers/TableSelectionManager"),s=require("@stll/folio-core/prosemirror/utils/visualLineNavigation"),c=require("@stll/folio-core/prosemirror/utils/extractTrackedChanges");function l(e={}){let{onCopy:t,onCut:r,onPaste:a,cleanWordFormatting:o=!0,editable:s=!0,onError:c}=e,l=(0,n.ref)(!1),u=(0,n.ref)(null),d=c?{onError:c}:{};async function f(e){if(l.value)return!1;l.value=!0;try{let n=await(0,i.copyRuns)(e.runs,d);return n&&t?.(e),n}finally{l.value=!1}}async function p(e){if(l.value||!s)return!1;l.value=!0;try{let t=await(0,i.copyRuns)(e.runs,d);return t&&r?.(e),t}finally{l.value=!1}}async function m(e=!1){if(l.value||!s)return null;l.value=!0;try{if(navigator.clipboard&&navigator.clipboard.read){let t=await navigator.clipboard.read(),n=``,r=``;for(let e of t)e.types.includes(`text/html`)&&(n=await(await e.getType(`text/html`)).text()),e.types.includes(`text/plain`)&&(r=await(await e.getType(`text/plain`)).text());e&&(n=``);let s=(0,i.parseClipboardHtml)(n,r,o);return u.value=s,a?.(s,e),s}return null}catch(e){return c?.(e instanceof Error?e:Error(String(e))),null}finally{l.value=!1}}return{copy:f,cut:p,paste:m,isProcessing:l,lastPastedContent:u}}function u({isOpen:e,onClose:t,align:r=`left`}){let i=(0,n.ref)(null),a=(0,n.ref)(null),o=(0,n.ref)({position:`fixed`,top:`0px`,left:`0px`,zIndex:1e4});function s(e,t){o.value={position:`fixed`,top:e+`px`,left:t+`px`,zIndex:1e4}}function c(e){let n=e.target;n instanceof Node&&i.value&&!i.value.contains(n)&&a.value&&!a.value.contains(n)&&t()}function l(e){e.key===`Escape`&&t()}function u(e){let n=e.target;n instanceof Node&&a.value&&a.value.contains(n)||t()}function d(){document.addEventListener(`mousedown`,c),document.addEventListener(`keydown`,l),window.addEventListener(`scroll`,u,!0)}function f(){document.removeEventListener(`mousedown`,c),document.removeEventListener(`keydown`,l),window.removeEventListener(`scroll`,u,!0)}(0,n.watch)(e,e=>{if(!e){f();return}let t=i.value;if(!t)return;let n=t.getBoundingClientRect();r===`right`?requestAnimationFrame(()=>{let e=a.value;if(e){let t=e.getBoundingClientRect();s(n.bottom+4,n.right-t.width)}else s(n.bottom+4,n.left)}):s(n.bottom+4,n.left),d()}),(0,n.onScopeDispose)(f);function p(e){e.preventDefault(),e.stopPropagation()}return{containerRef:i,dropdownRef:a,dropdownStyle:o,handleMouseDown:p}}function d(e,t){let i=(0,n.computed)(()=>{t.value;let n=e.value;return n?(0,r.undoDepth)(n.state)>0:!1}),a=(0,n.computed)(()=>{t.value;let n=e.value;return n?(0,r.redoDepth)(n.state)>0:!1});function o(){let t=e.value;return t?(0,r.undo)(t.state,t.dispatch):!1}function s(){let t=e.value;return t?(0,r.redo)(t.state,t.dispatch):!1}return{canUndo:i,canRedo:a,undo:o,redo:s}}var f={backgroundColor:`rgba(26, 115, 232, 0.3)`,borderRadius:0,zIndex:0,opacity:1,mixBlendMode:`multiply`};function p(e){let t=window.getSelection();if(!t||t.rangeCount===0||t.isCollapsed)return[];let n=t.getRangeAt(0);if(e&&!e.contains(n.commonAncestorContainer))return[];let r=0,i=0;if(e){let t=e.getBoundingClientRect();r=t.left+e.scrollLeft,i=t.top+e.scrollTop}let a=[];for(let e of n.getClientRects())e.width===0&&e.height===0||a.push({left:e.left-r,top:e.top-i,width:e.width,height:e.height});return a}function m(e,t=2){if(e.length<=1)return e;let n=[...e].sort((e,n)=>Math.abs(e.top-n.top)<t?e.left-n.left:e.top-n.top),r=n[0];if(!r)return e;let i=[],a={...r};for(let e=1;e<n.length;e++){let r=n[e];if(!r)continue;let o=Math.abs(r.top-a.top)<t,s=r.left<=a.left+a.width+t;if(o&&s){let e=Math.max(a.left+a.width,r.left+r.width);a.width=e-a.left,a.height=Math.max(a.height,r.height)}else i.push(a),a={...r}}return i.push(a),i}function h(e){return m(p(e))}function g(){let e=window.getSelection();return e!==null&&!e.isCollapsed&&e.rangeCount>0}function _(e){let t=window.getSelection();return!t||t.rangeCount===0?!1:e.contains(t.getRangeAt(0).commonAncestorContainer)}var v=`docx-selection-styles`,y=null;function b(){y&&=(y.remove(),null),document.getElementById(v)?.remove()}function x(e=f){b();let t=`
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useFindReplace-ZCrdvwEk.cjs"),t=require("./useZoom-DBbzwfMG.cjs");let n=require("vue"),r=require("prosemirror-history"),i=require("@stll/folio-core/utils/clipboard"),a=require("@stll/folio-core/managers/ClipboardManager"),o=require("@stll/folio-core/managers/TableSelectionManager"),s=require("@stll/folio-core/prosemirror/utils/visualLineNavigation"),c=require("@stll/folio-core/prosemirror/utils/extractTrackedChanges");function l(e={}){let{onCopy:t,onCut:r,onPaste:a,cleanWordFormatting:o=!0,editable:s=!0,onError:c}=e,l=(0,n.ref)(!1),u=(0,n.ref)(null),d=c?{onError:c}:{};async function f(e){if(l.value)return!1;l.value=!0;try{let n=await(0,i.copyRuns)(e.runs,d);return n&&t?.(e),n}finally{l.value=!1}}async function p(e){if(l.value||!s)return!1;l.value=!0;try{let t=await(0,i.copyRuns)(e.runs,d);return t&&r?.(e),t}finally{l.value=!1}}async function m(e=!1){if(l.value||!s)return null;l.value=!0;try{if(navigator.clipboard&&navigator.clipboard.read){let t=await navigator.clipboard.read(),n=``,r=``;for(let e of t)e.types.includes(`text/html`)&&(n=await(await e.getType(`text/html`)).text()),e.types.includes(`text/plain`)&&(r=await(await e.getType(`text/plain`)).text());e&&(n=``);let s=(0,i.parseClipboardHtml)(n,r,o);return u.value=s,a?.(s,e),s}return null}catch(e){return c?.(e instanceof Error?e:Error(String(e))),null}finally{l.value=!1}}return{copy:f,cut:p,paste:m,isProcessing:l,lastPastedContent:u}}function u({isOpen:e,onClose:t,align:r=`left`}){let i=(0,n.ref)(null),a=(0,n.ref)(null),o=(0,n.ref)({position:`fixed`,top:`0px`,left:`0px`,zIndex:1e4});function s(e,t){o.value={position:`fixed`,top:e+`px`,left:t+`px`,zIndex:1e4}}function c(e){let n=e.target;n instanceof Node&&i.value&&!i.value.contains(n)&&a.value&&!a.value.contains(n)&&t()}function l(e){e.key===`Escape`&&t()}function u(e){let n=e.target;n instanceof Node&&a.value&&a.value.contains(n)||t()}function d(){document.addEventListener(`mousedown`,c),document.addEventListener(`keydown`,l),window.addEventListener(`scroll`,u,!0)}function f(){document.removeEventListener(`mousedown`,c),document.removeEventListener(`keydown`,l),window.removeEventListener(`scroll`,u,!0)}(0,n.watch)(e,e=>{if(!e){f();return}let t=i.value;if(!t)return;let n=t.getBoundingClientRect();r===`right`?requestAnimationFrame(()=>{let e=a.value;if(e){let t=e.getBoundingClientRect();s(n.bottom+4,n.right-t.width)}else s(n.bottom+4,n.left)}):s(n.bottom+4,n.left),d()}),(0,n.onScopeDispose)(f);function p(e){e.preventDefault(),e.stopPropagation()}return{containerRef:i,dropdownRef:a,dropdownStyle:o,handleMouseDown:p}}function d(e,t){let i=(0,n.computed)(()=>{t.value;let n=e.value;return n?(0,r.undoDepth)(n.state)>0:!1}),a=(0,n.computed)(()=>{t.value;let n=e.value;return n?(0,r.redoDepth)(n.state)>0:!1});function o(){let t=e.value;return t?(0,r.undo)(t.state,t.dispatch):!1}function s(){let t=e.value;return t?(0,r.redo)(t.state,t.dispatch):!1}return{canUndo:i,canRedo:a,undo:o,redo:s}}var f={backgroundColor:`rgba(26, 115, 232, 0.3)`,borderRadius:0,zIndex:0,opacity:1,mixBlendMode:`multiply`};function p(e){let t=window.getSelection();if(!t||t.rangeCount===0||t.isCollapsed)return[];let n=t.getRangeAt(0);if(e&&!e.contains(n.commonAncestorContainer))return[];let r=0,i=0;if(e){let t=e.getBoundingClientRect();r=t.left+e.scrollLeft,i=t.top+e.scrollTop}let a=[];for(let e of n.getClientRects())e.width===0&&e.height===0||a.push({left:e.left-r,top:e.top-i,width:e.width,height:e.height});return a}function m(e,t=2){if(e.length<=1)return e;let n=[...e].sort((e,n)=>Math.abs(e.top-n.top)<t?e.left-n.left:e.top-n.top),r=n[0];if(!r)return e;let i=[],a={...r};for(let e=1;e<n.length;e++){let r=n[e];if(!r)continue;let o=Math.abs(r.top-a.top)<t,s=r.left<=a.left+a.width+t;if(o&&s){let e=Math.max(a.left+a.width,r.left+r.width);a.width=e-a.left,a.height=Math.max(a.height,r.height)}else i.push(a),a={...r}}return i.push(a),i}function h(e){return m(p(e))}function g(){let e=window.getSelection();return e!==null&&!e.isCollapsed&&e.rangeCount>0}function _(e){let t=window.getSelection();return!t||t.rangeCount===0?!1:e.contains(t.getRangeAt(0).commonAncestorContainer)}var v=`docx-selection-styles`,y=null;function b(){y&&=(y.remove(),null),document.getElementById(v)?.remove()}function x(e=f){b();let t=`
/* DOCX Editor Selection Highlighting */

@@ -61,2 +61,2 @@

}
`;y=document.createElement(`style`),y.id=v,y.textContent=t,document.head.appendChild(y)}function S(){return y!==null||document.getElementById(v)!==null}function C(){return window.getSelection()?.toString()??``}function w(e){let{containerRef:t,enabled:r=!0,config:i=f,useOverlay:a=!1,debounceMs:o=16,onSelectionChange:s}=e,c=(0,n.ref)(!1),l=(0,n.ref)(``),u=(0,n.ref)([]),d=(0,n.ref)(!1),p=null,m=0;function v(){let e=t.value,n=g(),r=C(),i=e?_(e):!1;c.value=n,l.value=r,d.value=i,u.value=a&&i&&e?h(e):[],s?.(n&&i,r)}function y(){v()}function b(){let e=performance.now();if(e-m<o){p&&clearTimeout(p),p=setTimeout(()=>{m=performance.now(),v(),p=null},o);return}m=e,v()}function w(e){let t={position:`absolute`,left:`${e.left}px`,top:`${e.top}px`,width:`${e.width}px`,height:`${e.height}px`,backgroundColor:i.backgroundColor,zIndex:i.zIndex??0,pointerEvents:`none`};return i.borderRadius&&(t.borderRadius=`${i.borderRadius}px`),i.borderColor&&(t.border=`1px solid ${i.borderColor}`),t}return(0,n.onMounted)(()=>{r&&(S()||x(i),document.addEventListener(`selectionchange`,b))}),(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`selectionchange`,b),p&&clearTimeout(p)}),(0,n.watch)(t,()=>v()),{hasSelection:(0,n.computed)(()=>c.value),selectedText:(0,n.computed)(()=>l.value),highlightRects:(0,n.computed)(()=>u.value),isSelectionInContainer:(0,n.computed)(()=>d.value),refresh:y,getOverlayStyle:w}}function T(){let e=new o.TableSelectionManager,t=(0,n.ref)(null),r=()=>{let n=e.getSnapshot();t.value=n.tableIndex!==null&&n.rowIndex!==null&&n.columnIndex!==null?{tableIndex:n.tableIndex,rowIndex:n.rowIndex,columnIndex:n.columnIndex}:null},i=e.subscribe(r);r(),(0,n.onScopeDispose)(i);function a(t,n,r){e.selectCellCoordinates({tableIndex:t,rowIndex:n,columnIndex:r})}function s(t,n){let r=(0,o.findTableFromClick)(t,n);if(!r){e.clearSelection();return}e.selectCellCoordinates(r)}function c(){e.clearSelection()}function l(t,n,r){return e.isCellSelected(t,n,r)}return{selectedCell:t,handleCellClick:a,handleClickTarget:s,clearSelection:c,isCellSelected:l}}function E(e){let t=(0,s.createVisualLineState)();function n(t){let n=e.value;return n?(0,s.getCaretClientX)(n,t):null}function r(t){let n=e.value;return n?(0,s.findLineElementAtPosition)(n,t):null}function i(e,t){return(0,s.findPositionOnLineAtClientX)(e,t)}function a(n,r){return(0,s.handleVisualLineKeyDown)(t,n,r,e.value)}return{state:t,getCaretClientX:n,findLineElementAtPosition:r,findPositionOnLineAtClientX:i,handlePMKeyDown:a}}exports.createSelectionFromDOM=a.createSelectionFromDOM,exports.extractTrackedChanges=c.extractTrackedChanges,exports.getSelectionRuns=a.getSelectionRuns,exports.runsToClipboardContent=i.runsToClipboardContent,exports.useClipboard=l,exports.useDocxEditor=t.a,exports.useDragAutoScroll=t.i,exports.useFindReplace=e.t,exports.useFixedDropdown=u,exports.useHistory=d,exports.useSelectionHighlight=w,exports.useTableResize=t.r,exports.useTableSelection=T,exports.useTrackedChanges=t.n,exports.useVisualLineNavigation=E,exports.useWheelZoom=t.t,exports.useZoom=t.t;
`;y=document.createElement(`style`),y.id=v,y.textContent=t,document.head.appendChild(y)}function S(){return y!==null||document.getElementById(v)!==null}function C(){return window.getSelection()?.toString()??``}function w(e){let{containerRef:t,enabled:r=!0,config:i=f,useOverlay:a=!1,debounceMs:o=16,onSelectionChange:s}=e,c=(0,n.ref)(!1),l=(0,n.ref)(``),u=(0,n.ref)([]),d=(0,n.ref)(!1),p=null,m=0;function v(){let e=t.value,n=g(),r=C(),i=e?_(e):!1;c.value=n,l.value=r,d.value=i,u.value=a&&i&&e?h(e):[],s?.(n&&i,r)}function y(){v()}function b(){let e=performance.now();if(e-m<o){p&&clearTimeout(p),p=setTimeout(()=>{m=performance.now(),v(),p=null},o);return}m=e,v()}function w(e){let t={position:`absolute`,left:`${e.left}px`,top:`${e.top}px`,width:`${e.width}px`,height:`${e.height}px`,backgroundColor:i.backgroundColor,zIndex:i.zIndex??0,pointerEvents:`none`};return i.borderRadius&&(t.borderRadius=`${i.borderRadius}px`),i.borderColor&&(t.border=`1px solid ${i.borderColor}`),t}return(0,n.onMounted)(()=>{r&&(S()||x(i),document.addEventListener(`selectionchange`,b))}),(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`selectionchange`,b),p&&clearTimeout(p)}),(0,n.watch)(t,()=>v()),{hasSelection:(0,n.computed)(()=>c.value),selectedText:(0,n.computed)(()=>l.value),highlightRects:(0,n.computed)(()=>u.value),isSelectionInContainer:(0,n.computed)(()=>d.value),refresh:y,getOverlayStyle:w}}function T(){let e=new o.TableSelectionManager,t=(0,n.ref)(null),r=()=>{let n=e.getSnapshot();t.value=n.tableIndex!==null&&n.rowIndex!==null&&n.columnIndex!==null?{tableIndex:n.tableIndex,rowIndex:n.rowIndex,columnIndex:n.columnIndex}:null},i=e.subscribe(r);r(),(0,n.onScopeDispose)(i);function a(t,n,r){e.selectCellCoordinates({tableIndex:t,rowIndex:n,columnIndex:r})}function s(t,n){let r=(0,o.findTableFromClick)(t,n);if(!r){e.clearSelection();return}e.selectCellCoordinates(r)}function c(){e.clearSelection()}function l(t,n,r){return e.isCellSelected(t,n,r)}return{selectedCell:t,handleCellClick:a,handleClickTarget:s,clearSelection:c,isCellSelected:l}}function E(e){let t=(0,s.createVisualLineState)();function n(t){let n=e.value;return n?(0,s.getCaretClientX)(n,t):null}function r(t){let n=e.value;return n?(0,s.findLineElementAtPosition)(n,t):null}function i(e,t){return(0,s.findPositionOnLineAtClientX)(e,t)}function a(n,r){return(0,s.handleVisualLineKeyDown)(t,n,r,e.value)}return{state:t,getCaretClientX:n,findLineElementAtPosition:r,findPositionOnLineAtClientX:i,handlePMKeyDown:a}}exports.colorModePlugin=t.o,exports.createSelectionFromDOM=a.createSelectionFromDOM,exports.defaultColorMode=t.s,exports.extractTrackedChanges=c.extractTrackedChanges,exports.getSelectionRuns=a.getSelectionRuns,exports.provideColorMode=t.c,exports.runsToClipboardContent=i.runsToClipboardContent,exports.useClipboard=l,exports.useColorMode=t.l,exports.useDocxEditor=t.a,exports.useDragAutoScroll=t.i,exports.useFindReplace=e.t,exports.useFixedDropdown=u,exports.useHistory=d,exports.useSelectionHighlight=w,exports.useTableResize=t.r,exports.useTableSelection=T,exports.useTrackedChanges=t.n,exports.useVisualLineNavigation=E,exports.useWheelZoom=t.t,exports.useZoom=t.t;
import { t as e } from "./useFindReplace-CL8Rbc3y.js";
import { a as t, i as n, n as r, o as i, r as a, t as o } from "./useZoom-C0p0o54p.js";
import { computed as s, onBeforeUnmount as c, onMounted as l, onScopeDispose as u, ref as d, watch as f } from "vue";
import { redo as p, redoDepth as m, undo as h, undoDepth as g } from "prosemirror-history";
import { copyRuns as _, parseClipboardHtml as v, runsToClipboardContent as y } from "@stll/folio-core/utils/clipboard";
import { createSelectionFromDOM as b, getSelectionRuns as x } from "@stll/folio-core/managers/ClipboardManager";
import { TableSelectionManager as S, findTableFromClick as C } from "@stll/folio-core/managers/TableSelectionManager";
import { createVisualLineState as w, findLineElementAtPosition as T, findPositionOnLineAtClientX as E, getCaretClientX as D, handleVisualLineKeyDown as O } from "@stll/folio-core/prosemirror/utils/visualLineNavigation";
import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "./useZoom-DwDDS7hq.js";
import { computed as d, onBeforeUnmount as f, onMounted as p, onScopeDispose as m, ref as h, watch as g } from "vue";
import { redo as _, redoDepth as v, undo as y, undoDepth as b } from "prosemirror-history";
import { copyRuns as x, parseClipboardHtml as S, runsToClipboardContent as C } from "@stll/folio-core/utils/clipboard";
import { createSelectionFromDOM as w, getSelectionRuns as T } from "@stll/folio-core/managers/ClipboardManager";
import { TableSelectionManager as E, findTableFromClick as D } from "@stll/folio-core/managers/TableSelectionManager";
import { createVisualLineState as O, findLineElementAtPosition as k, findPositionOnLineAtClientX as A, getCaretClientX as j, handleVisualLineKeyDown as M } from "@stll/folio-core/prosemirror/utils/visualLineNavigation";
//#region src/composables/useClipboard.ts
function k(e = {}) {
let { onCopy: t, onCut: n, onPaste: r, cleanWordFormatting: i = !0, editable: a = !0, onError: o } = e, s = d(!1), c = d(null), l = o ? { onError: o } : {};
function N(e = {}) {
let { onCopy: t, onCut: n, onPaste: r, cleanWordFormatting: i = !0, editable: a = !0, onError: o } = e, s = h(!1), c = h(null), l = o ? { onError: o } : {};
async function u(e) {

@@ -16,3 +16,3 @@ if (s.value) return !1;

try {
let n = await _(e.runs, l);
let n = await x(e.runs, l);
return n && t?.(e), n;

@@ -23,7 +23,7 @@ } finally {

}
async function f(e) {
async function d(e) {
if (s.value || !a) return !1;
s.value = !0;
try {
let t = await _(e.runs, l);
let t = await x(e.runs, l);
return t && n?.(e), t;

@@ -34,3 +34,3 @@ } finally {

}
async function p(e = !1) {
async function f(e = !1) {
if (s.value || !a) return null;

@@ -43,3 +43,3 @@ s.value = !0;

e && (n = "");
let o = v(n, a, i);
let o = S(n, a, i);
return c.value = o, r?.(o, e), o;

@@ -56,4 +56,4 @@ }

copy: u,
cut: f,
paste: p,
cut: d,
paste: f,
isProcessing: s,

@@ -65,4 +65,4 @@ lastPastedContent: c

//#region src/composables/useFixedDropdown.ts
function A({ isOpen: e, onClose: t, align: n = "left" }) {
let r = d(null), i = d(null), a = d({
function P({ isOpen: e, onClose: t, align: n = "left" }) {
let r = h(null), i = h(null), a = h({
position: "fixed",

@@ -92,11 +92,11 @@ top: "0px",

}
function p() {
function u() {
document.addEventListener("mousedown", s), document.addEventListener("keydown", c), window.addEventListener("scroll", l, !0);
}
function m() {
function d() {
document.removeEventListener("mousedown", s), document.removeEventListener("keydown", c), window.removeEventListener("scroll", l, !0);
}
f(e, (e) => {
g(e, (e) => {
if (!e) {
m();
d();
return;

@@ -113,5 +113,5 @@ }

} else o(a.bottom + 4, a.left);
}) : o(a.bottom + 4, a.left), p();
}), u(m);
function h(e) {
}) : o(a.bottom + 4, a.left), u();
}), m(d);
function f(e) {
e.preventDefault(), e.stopPropagation();

@@ -123,3 +123,3 @@ }

dropdownStyle: a,
handleMouseDown: h
handleMouseDown: f
};

@@ -129,19 +129,19 @@ }

//#region src/composables/useHistory.ts
function j(e, t) {
let n = s(() => {
function F(e, t) {
let n = d(() => {
t.value;
let n = e.value;
return n ? g(n.state) > 0 : !1;
}), r = s(() => {
return n ? b(n.state) > 0 : !1;
}), r = d(() => {
t.value;
let n = e.value;
return n ? m(n.state) > 0 : !1;
return n ? v(n.state) > 0 : !1;
});
function i() {
let t = e.value;
return t ? h(t.state, t.dispatch) : !1;
return t ? y(t.state, t.dispatch) : !1;
}
function a() {
let t = e.value;
return t ? p(t.state, t.dispatch) : !1;
return t ? _(t.state, t.dispatch) : !1;
}

@@ -157,3 +157,3 @@ return {

//#region src/utils/selectionHighlight.ts
var M = {
var I = {
backgroundColor: "rgba(26, 115, 232, 0.3)",

@@ -165,3 +165,3 @@ borderRadius: 0,

};
function N(e) {
function L(e) {
let t = window.getSelection();

@@ -185,3 +185,3 @@ if (!t || t.rangeCount === 0 || t.isCollapsed) return [];

}
function P(e, t = 2) {
function R(e, t = 2) {
if (e.length <= 1) return e;

@@ -202,19 +202,19 @@ let n = [...e].sort((e, n) => Math.abs(e.top - n.top) < t ? e.left - n.left : e.top - n.top), r = n[0];

}
function F(e) {
return P(N(e));
function z(e) {
return R(L(e));
}
function I() {
function B() {
let e = window.getSelection();
return e !== null && !e.isCollapsed && e.rangeCount > 0;
}
function L(e) {
function V(e) {
let t = window.getSelection();
return !t || t.rangeCount === 0 ? !1 : e.contains(t.getRangeAt(0).commonAncestorContainer);
}
var R = "docx-selection-styles", z = null;
function B() {
z &&= (z.remove(), null), document.getElementById(R)?.remove();
var H = "docx-selection-styles", U = null;
function W() {
U &&= (U.remove(), null), document.getElementById(H)?.remove();
}
function V(e = M) {
B();
function G(e = I) {
W();
let t = `

@@ -281,17 +281,17 @@ /* DOCX Editor Selection Highlighting */

`;
z = document.createElement("style"), z.id = R, z.textContent = t, document.head.appendChild(z);
U = document.createElement("style"), U.id = H, U.textContent = t, document.head.appendChild(U);
}
function H() {
return z !== null || document.getElementById(R) !== null;
function K() {
return U !== null || document.getElementById(H) !== null;
}
//#endregion
//#region src/composables/useSelectionHighlight.ts
function U() {
function q() {
return window.getSelection()?.toString() ?? "";
}
function W(e) {
let { containerRef: t, enabled: n = !0, config: r = M, useOverlay: i = !1, debounceMs: a = 16, onSelectionChange: o } = e, u = d(!1), p = d(""), m = d([]), h = d(!1), g = null, _ = 0;
function J(e) {
let { containerRef: t, enabled: n = !0, config: r = I, useOverlay: i = !1, debounceMs: a = 16, onSelectionChange: o } = e, s = h(!1), c = h(""), l = h([]), u = h(!1), m = null, _ = 0;
function v() {
let e = t.value, n = I(), r = U(), a = e ? L(e) : !1;
u.value = n, p.value = r, h.value = a, m.value = i && a && e ? F(e) : [], o?.(n && a, r);
let e = t.value, n = B(), r = q(), a = e ? V(e) : !1;
s.value = n, c.value = r, u.value = a, l.value = i && a && e ? z(e) : [], o?.(n && a, r);
}

@@ -304,4 +304,4 @@ function y() {

if (e - _ < a) {
g && clearTimeout(g), g = setTimeout(() => {
_ = performance.now(), v(), g = null;
m && clearTimeout(m), m = setTimeout(() => {
_ = performance.now(), v(), m = null;
}, a);

@@ -325,11 +325,11 @@ return;

}
return l(() => {
n && (H() || V(r), document.addEventListener("selectionchange", b));
}), c(() => {
document.removeEventListener("selectionchange", b), g && clearTimeout(g);
}), f(t, () => v()), {
hasSelection: s(() => u.value),
selectedText: s(() => p.value),
highlightRects: s(() => m.value),
isSelectionInContainer: s(() => h.value),
return p(() => {
n && (K() || G(r), document.addEventListener("selectionchange", b));
}), f(() => {
document.removeEventListener("selectionchange", b), m && clearTimeout(m);
}), g(t, () => v()), {
hasSelection: d(() => s.value),
selectedText: d(() => c.value),
highlightRects: d(() => l.value),
isSelectionInContainer: d(() => u.value),
refresh: y,

@@ -341,4 +341,4 @@ getOverlayStyle: x

//#region src/composables/useTableSelection.ts
function G() {
let e = new S(), t = d(null), n = () => {
function Y() {
let e = new E(), t = h(null), n = () => {
let n = e.getSnapshot();

@@ -351,3 +351,3 @@ t.value = n.tableIndex !== null && n.rowIndex !== null && n.columnIndex !== null ? {

}, r = e.subscribe(n);
n(), u(r);
n(), m(r);
function i(t, n, r) {

@@ -361,3 +361,3 @@ e.selectCellCoordinates({

function a(t, n) {
let r = C(t, n);
let r = D(t, n);
if (!r) {

@@ -385,17 +385,17 @@ e.clearSelection();

//#region src/composables/useVisualLineNavigation.ts
function K(e) {
let t = w();
function X(e) {
let t = O();
function n(t) {
let n = e.value;
return n ? D(n, t) : null;
return n ? j(n, t) : null;
}
function r(t) {
let n = e.value;
return n ? T(n, t) : null;
return n ? k(n, t) : null;
}
function i(e, t) {
return E(e, t);
return A(e, t);
}
function a(n, r) {
return O(t, n, r, e.value);
return M(t, n, r, e.value);
}

@@ -411,2 +411,2 @@ return {

//#endregion
export { b as createSelectionFromDOM, r as extractTrackedChanges, x as getSelectionRuns, y as runsToClipboardContent, k as useClipboard, i as useDocxEditor, t as useDragAutoScroll, e as useFindReplace, A as useFixedDropdown, j as useHistory, W as useSelectionHighlight, n as useTableResize, G as useTableSelection, a as useTrackedChanges, K as useVisualLineNavigation, o as useWheelZoom, o as useZoom };
export { c as colorModePlugin, w as createSelectionFromDOM, n as defaultColorMode, a as extractTrackedChanges, T as getSelectionRuns, i as provideColorMode, C as runsToClipboardContent, N as useClipboard, u as useColorMode, o as useDocxEditor, t as useDragAutoScroll, e as useFindReplace, P as useFixedDropdown, F as useHistory, J as useSelectionHighlight, r as useTableResize, Y as useTableSelection, s as useTrackedChanges, X as useVisualLineNavigation, l as useWheelZoom, l as useZoom };

@@ -18,2 +18,3 @@ /**

export * from './useClipboard';
export * from './useColorMode';
export * from './useDocxEditor';

@@ -20,0 +21,0 @@ export * from './useDragAutoScroll';

@@ -1,8 +0,21 @@

import { ComputedRef } from 'vue';
import { App, ComputedRef, MaybeRefOrGetter } from 'vue';
import { ColorMode } from '../utils/colorMode';
/** Color mode used when a host does not provide one. */
export declare const defaultColorMode: ColorMode;
/**
* Resolve the effective dark flag from a reactive `colorMode`. `'system'`
* Provide a reactive color mode to descendant folio components.
*
* Call this from a parent component's setup function. For app-wide setup, use
* {@link colorModePlugin} instead.
*/
export declare const provideColorMode: (colorMode?: MaybeRefOrGetter<ColorMode>) => void;
/** Vue plugin form: `app.use(colorModePlugin, "system")`. */
export declare const colorModePlugin: {
install(app: App, colorMode?: MaybeRefOrGetter<ColorMode>): void;
};
/**
* Resolve the effective dark flag from the inherited color mode. `'system'`
* follows the OS via `subscribeSystemDark` (SSR-safe; re-syncs on entry).
* Mirrors the React adapter's inline colorMode logic via the shared core helpers.
*/
export declare function useColorMode(colorMode: () => ColorMode): ComputedRef<boolean>;
export declare function useColorMode(): ComputedRef<boolean>;
export type { ColorMode } from '../utils/colorMode';

@@ -51,2 +51,5 @@ import { ComputedRef, Ref, ShallowRef, VNodeChild } from 'vue';

}) => void;
onCopy?: () => void;
onCut?: () => void;
onPaste?: () => void;
};

@@ -53,0 +56,0 @@ export type UseContextMenusReturn = {

@@ -6,2 +6,3 @@ import { MaybeRefOrGetter, Ref } from 'vue';

import { HeaderFooterPartKind } from '@stll/folio-core/controller/headerFooterEditorManager';
import { NoteStoryKey } from '@stll/folio-core/controller/noteEditorManager';
import { HiddenProseMirrorCollaboration, HiddenProseMirrorRemoteSelection } from '@stll/folio-core/controller/hiddenEditorManager';

@@ -22,2 +23,4 @@ import { FolioSelectiveSaveFlags } from '@stll/folio-core/docx/selectiveSaveFlags';

hiddenHeaderFooterContainer?: Ref<HTMLElement | null>;
/** Visible host for the active footnote or endnote ProseMirror story. */
noteEditorContainer?: Ref<HTMLElement | null>;
/** Container element the paginated pages are painted into. */

@@ -29,2 +32,6 @@ pagesContainer: Ref<HTMLElement | null>;

pageGap?: number;
/** Whether to paint each page's effective body-content boundary. Reactive. */
showMarginGuides?: MaybeRefOrGetter<boolean | undefined>;
/** CSS color used for margin guides. Reactive. */
marginGuideColor?: MaybeRefOrGetter<string | undefined>;
/**

@@ -75,2 +82,8 @@ * Stable identity of the loaded document (same across internal edits, distinct

onEditorViewReady?: (view: EditorView | null) => void;
/** Fires when the editor receives a copy event. */
onCopy?: () => void;
/** Fires when an editable editor receives a cut event. */
onCut?: () => void;
/** Fires when an editable editor receives a paste event. */
onPaste?: () => void;
/** Callback when a read-only user action would mutate the document. */

@@ -111,2 +124,4 @@ onReadOnlyEditAttempt?: () => void;

headerFooterSelection: Ref<HeaderFooterSelectionState | null>;
/** The note story currently open in the visible note editor. */
activeNoteStory: Ref<NoteStoryKey | null>;
/** True once the hidden view is mounted and a document is loaded. */

@@ -147,2 +162,8 @@ isReady: Ref<boolean>;

syncHeaderFooterViews: () => void;
/** Open an existing footnote or endnote story. */
openNoteStory: (story: NoteStoryKey) => void;
/** Close the visible note-story editor. */
closeNoteStory: () => void;
/** Resolve the active note-story view. */
getActiveNoteView: () => EditorView | null;
/** Access the extension command map for invoking marks / nodes / features. */

@@ -149,0 +170,0 @@ getCommands: () => CommandMap;

@@ -45,2 +45,13 @@ import { Ref } from 'vue';

scrollVisiblePositionIntoView: (pmPos: number) => void;
/**
* Set (or clear, with `null`) the persistent passage-highlight range that the
* `PassageHighlightOverlay` projects and paints. Backs `highlightPassage` /
* `clearPassageHighlight`; the Vue analogue of React's
* `PagedEditorRef.setPassageHighlight`. The overlay is cleared automatically
* on the next doc-changing transaction (owned by DocxEditor.vue).
*/
setPassageHighlight: (range: {
from: number;
to: number;
} | null) => void;
/** Editor author, used as the default operation author for AI edits. */

@@ -59,2 +70,4 @@ author: () => string;

getDocument: () => Document | null;
getActiveView: () => EditorView | null;
closeNoteStory: () => void;
getHeaderFooterView: (rId: string) => EditorView | null;

@@ -61,0 +74,0 @@ setZoom: (zoom: number) => void;

import { Ref } from 'vue';
export type UseKeyboardShortcutsOptions = {
showKeyboardShortcuts: Ref<boolean>;
showFindReplace: Ref<boolean>;

@@ -5,0 +4,0 @@ showHyperlink: Ref<boolean>;

@@ -5,2 +5,3 @@ import { Ref, ShallowRef } from 'vue';

import { Document } from '@stll/folio-core/types/document';
import { NoteStoryKey } from '@stll/folio-core/controller/noteEditorManager';
import { Layout } from '@stll/folio-core/layout-engine';

@@ -65,2 +66,6 @@ import { ImageSelectionInfo } from '../components/imageSelectionTypes';

setDocument: (doc: Document) => void;
/** Open a footnote or endnote story from a painted reference/body. */
openNoteStory: (story: NoteStoryKey) => void;
closeNoteStory: () => void;
getActiveNoteView: () => EditorView | null;
};

@@ -67,0 +72,0 @@ export type UsePagesPointerReturn = {

@@ -1,1 +0,1 @@

Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./WatermarkDialog-ChJtT7Bs.cjs");var t=e.m,n=e.l,r=e.p,i=e.c,a=e.f,o=e.s,s=e.d,c=e.a,l=e.u,u=e.i,d=e.r,f=e.n,p=e.t;exports.FindReplaceDialog=t,exports.FootnotePropertiesDialog=n,exports.HyperlinkDialog=r,exports.ImagePositionDialog=i,exports.ImagePropertiesDialog=a,exports.InsertImageDialog=o,exports.InsertSymbolDialog=s,exports.InsertTableDialog=c,exports.PageSetupDialog=l,exports.PasteSpecialDialog=u,exports.SplitCellDialog=d,exports.TablePropertiesDialog=f,exports.WatermarkDialog=p;
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./SplitCellDialog-B_TOoiMw.cjs");var t=e.m,n=e.s,r=e.p,i=e.o,a=e.f,o=e.a,s=e.d,c=e.r,l=e.u,u=e.n,d=e.t,f=e.l,p=e.c;exports.FindReplaceDialog=t,exports.FootnotePropertiesDialog=n,exports.HyperlinkDialog=r,exports.ImagePositionDialog=i,exports.ImagePropertiesDialog=a,exports.InsertImageDialog=o,exports.InsertSymbolDialog=s,exports.InsertTableDialog=c,exports.PageSetupDialog=l,exports.PasteSpecialDialog=u,exports.SplitCellDialog=d,exports.TablePropertiesDialog=f,exports.WatermarkDialog=p;

@@ -1,5 +0,5 @@

import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, p as c, r as l, s as u, t as d, u as f } from "./WatermarkDialog-Cf9ISDvv.js";
import { a as e, c as t, d as n, f as r, l as i, m as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "./SplitCellDialog-DRQuZsA3.js";
//#region src/components/dialogs/index.ts
var p = o, m = a, h = c, g = t, _ = r, v = u, y = n, b = e, x = f, S = i, C = l, w = s, T = d;
var p = a, m = u, h = c, g = s, _ = r, v = e, y = n, b = l, x = f, S = o, C = d, w = i, T = t;
//#endregion
export { p as FindReplaceDialog, m as FootnotePropertiesDialog, h as HyperlinkDialog, g as ImagePositionDialog, _ as ImagePropertiesDialog, v as InsertImageDialog, y as InsertSymbolDialog, b as InsertTableDialog, x as PageSetupDialog, S as PasteSpecialDialog, C as SplitCellDialog, w as TablePropertiesDialog, T as WatermarkDialog };

@@ -17,2 +17,4 @@ /**

export { default as DocxEditor } from './components/DocxEditor.vue';
export { default as AutocompleteCaretOverlay } from './components/AutocompleteCaretOverlay.vue';
export type { AutocompleteCaretOverlayProps, AutocompleteCaretRect, } from './components/AutocompleteCaretOverlay.types';
export { default as FormattingBar } from './components/FormattingBar.vue';

@@ -24,3 +26,3 @@ export type { FormattingBarProps } from './components/FormattingBar.types';

export { renderAsync, type DocxEditorHandle, type EditorHandle, type RenderAsyncOptions, } from './renderAsync';
export type { DocxEditorApplyDocumentOperationsOptions, DocxEditorCollaboration, DocxEditorProps, DocxEditorRef, EditorMode, } from './components/DocxEditor/types';
export type { DocxEditorApplyDocumentOperationsOptions, DocxEditorCollaboration, DocxEditorProps, DocxEditorRef, EditorMode, HighlightPassageOptions, HighlightPassageResult, } from './components/DocxEditor/types';
export type { ScrollToParaIdOptions } from '@stll/folio-core/paged-layout/paragraphFlash';

@@ -32,2 +34,3 @@ export type { FontOption } from './utils/fontOptions';

export { defaultLocale, i18nPlugin, provideLocale, useTranslation } from './i18n';
export { colorModePlugin, defaultColorMode, provideColorMode, useColorMode, type ColorMode, } from './composables/useColorMode';
export { useWheelZoom } from './composables/useWheelZoom';

@@ -34,0 +37,0 @@ export { insertImageFromFile, insertPageBreakInView, insertTableInView, insertTableOfContentsInView, } from '@stll/folio-core/prosemirror';

@@ -0,4 +1,6 @@

import { MaybeRefOrGetter } from 'vue';
import { Document } from '@stll/folio-core/types/document';
import { DocxInput } from '@stll/folio-core/utils/docxInput';
import { DocxEditorProps } from './components/DocxEditor/types';
import { ColorMode } from './composables/useColorMode';
/** Framework-agnostic handle for an imperatively mounted editor instance. */

@@ -28,2 +30,4 @@ export type EditorHandle = {

locale?: string;
/** Editor chrome color mode (default: `light`). */
colorMode?: MaybeRefOrGetter<ColorMode>;
};

@@ -30,0 +34,0 @@ /**

@@ -1,1 +0,1 @@

Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./WatermarkDialog-ChJtT7Bs.cjs"),t=require("./ListButtons-C1rU_Y1e.cjs");let n=require("vue");require("@stll/folio-core/utils/units");var r={class:`docx-editor-toolbar`},i={class:`docx-editor-toolbar__title-row`},a={class:`docx-editor-toolbar__title-left`},o={class:`docx-editor-toolbar__title-center`},s={class:`docx-editor-toolbar__title-right`},c=(0,n.defineComponent)({inheritAttrs:!1,__name:`EditorToolbar`,props:{showMenuBar:{type:Boolean,default:!0}},emits:[`menu-action`],setup(e){return(c,l)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,r,[(0,n.renderSlot)(c.$slots,`title-bar`,{},()=>[(0,n.createElementVNode)(`div`,i,[(0,n.createElementVNode)(`div`,a,[(0,n.renderSlot)(c.$slots,`title-bar-left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,o,[(0,n.renderSlot)(c.$slots,`document-name`,{},void 0,!0),e.showMenuBar?((0,n.openBlock)(),(0,n.createBlock)(t.w,{key:0,onAction:l[0]||=e=>c.$emit(`menu-action`,e)})):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`div`,s,[(0,n.renderSlot)(c.$slots,`title-bar-right`,{},void 0,!0)])])],!0),(0,n.renderSlot)(c.$slots,`toolbar`,{},()=>[(0,n.createVNode)(t.y,(0,n.normalizeProps)((0,n.guardReactiveProps)(c.$attrs)),null,16)],!0)]))}}),l=e.F(c,[[`__scopeId`,`data-v-79d81064`]]),u={},d={class:`docx-title-bar`},f={class:`docx-title-bar__left`},p={class:`docx-title-bar__center`},m={class:`docx-title-bar__right`};function h(e,t){return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createElementVNode)(`div`,f,[(0,n.renderSlot)(e.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,p,[(0,n.renderSlot)(e.$slots,`default`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,m,[(0,n.renderSlot)(e.$slots,`right`,{},void 0,!0)])])}var g=e.F(u,[[`render`,h],[`__scopeId`,`data-v-44b23810`]]);function _(e){let t=e.trim();if(!t)return``;let n=null,r=``;for(let e of t){if((e===`"`||e===`'`)&&n===null){n=e,r+=e;continue}if(e===n){n=null,r+=e;continue}if(e===`,`&&n===null)break;r+=e}return r.trim().replace(/^['"]|['"]$/g,``)}var v=[`value`,`disabled`],y={key:0,label:`Sans-serif`},b=[`value`],x={key:1,label:`Serif`},S=[`value`],C={key:2,label:`Monospace`},w=[`value`],T={key:3,label:`Other`},E=[`value`],D=(0,n.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 r=e,i=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,n.computed)(()=>r.fonts??a),s=(0,n.computed)(()=>{let e={"sans-serif":[],serif:[],monospace:[],other:[]};for(let t of o.value)e[t.category??`other`].push(t);return e}),c=(0,n.computed)(()=>{let e=r.value;if(!e)return r.placeholder;let t=e.toLowerCase();return o.value.find(n=>n.fontFamily===e||n.name.toLowerCase()===t||_(n.fontFamily).toLowerCase()===t)?.name??e});function l(e){if(!(e.target instanceof HTMLSelectElement))return;let t=e.target.value,n=o.value.find(e=>e.name===t);i(`change`,n?_(n.fontFamily)||n.name:t)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`select`,{class:(0,n.normalizeClass)([`docx-font-picker`,e.className]),value:c.value,disabled:e.disabled,"aria-label":`Font family`,onChange:l},[s.value[`sans-serif`].length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,y,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value[`sans-serif`],t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,b))),128))])):(0,n.createCommentVNode)(``,!0),s.value.serif.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,x,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.serif,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,S))),128))])):(0,n.createCommentVNode)(``,!0),s.value.monospace.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,C,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.monospace,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,w))),128))])):(0,n.createCommentVNode)(``,!0),s.value.other.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,T,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.other,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,E))),128))])):(0,n.createCommentVNode)(``,!0)],42,v))}}),O=e.F(D,[[`__scopeId`,`data-v-a6d7700f`]]),k={class:`docx-font-size`},A=[`disabled`],j=[`value`,`disabled`,`placeholder`],M=[`disabled`],N=(0,n.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 r=e,i=t,a=[8,9,10,11,12,14,16,18,20,24,28,36,48,72],o=(0,n.computed)(()=>r.sizes??a),s=(0,n.computed)(()=>r.value??parseInt(r.placeholder,10)??11),c=(0,n.computed)(()=>r.value===void 0?r.placeholder:String(r.value));function l(e){return o.value.find(t=>t>e)??Math.min(e+1,r.maxSize)}function u(e){return[...o.value].reverse().find(t=>t<e)??Math.max(e-1,r.minSize)}function d(){r.disabled||i(`change`,u(s.value))}function f(){r.disabled||i(`change`,l(s.value))}function p(e){if(!(e.target instanceof HTMLInputElement))return;let t=parseFloat(e.target.value);!isNaN(t)&&t>=r.minSize&&t<=r.maxSize&&i(`change`,Math.round(t*2)/2)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,k,[(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value<=e.minSize,title:`Decrease font size`,onClick:(0,n.withModifiers)(d,[`prevent`])},` − `,8,A),(0,n.createElementVNode)(`input`,{class:`docx-font-size__input`,type:`text`,value:c.value,disabled:e.disabled,placeholder:e.placeholder,onKeydown:[r[0]||=(0,n.withKeys)((0,n.withModifiers)(e=>{d(),e.stopPropagation()},[`prevent`]),[`up`]),r[1]||=(0,n.withKeys)((0,n.withModifiers)(e=>{f(),e.stopPropagation()},[`prevent`]),[`down`]),r[2]||=(0,n.withKeys)((0,n.withModifiers)(e=>p(e),[`prevent`]),[`enter`])],onBlur:r[3]||=e=>p(e)},null,40,j),(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value>=e.maxSize,title:`Increase font size`,onClick:(0,n.withModifiers)(f,[`prevent`])},` + `,8,M)]))}}),P=e.F(N,[[`__scopeId`,`data-v-dbc73bbe`]]),F=[`value`,`disabled`],I=[`value`],L=(0,n.defineComponent)({__name:`LineSpacingPicker`,props:{value:{},options:{},disabled:{type:Boolean,default:!1},className:{}},emits:[`change`],setup(e,{emit:t}){let r=e,i=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,n.computed)(()=>r.options??a),s=(0,n.computed)(()=>r.value??o.value[0]?.twipsValue??240);function c(e){if(!(e.target instanceof HTMLSelectElement))return;let t=parseInt(e.target.value,10);isNaN(t)||i(`change`,t)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`select`,{class:(0,n.normalizeClass)([`docx-line-spacing`,e.className]),value:String(s.value),disabled:e.disabled,"aria-label":`Line spacing`,onChange:c},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(o.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:e.twipsValue,value:String(e.twipsValue)},(0,n.toDisplayString)(e.label),9,I))),128))],42,F))}}),R=e.F(L,[[`__scopeId`,`data-v-c262ff91`]]),z=[`disabled`,`aria-expanded`,`title`,`onClick`],B={class:`docx-table-grid__panel`},V={class:`docx-table-grid__label`},H=[`onMouseenter`,`onClick`],U=(0,n.defineComponent)({__name:`TableGridPicker`,props:{disabled:{type:Boolean,default:!1},gridRows:{default:5},gridColumns:{default:5},tooltip:{default:`Insert table`}},emits:[`insert`],setup(t,{emit:r}){let{Popover:i}=e.y(),a=t,o=r,s=(0,n.ref)(!1),c=(0,n.ref)({rows:1,cols:1}),l=(0,n.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,n.openBlock)(),(0,n.createBlock)((0,n.unref)(i),{open:s.value,"onUpdate:open":a[0]||=e=>s.value=e,onClose:d},{trigger:(0,n.withCtx)(({toggle:r})=>[(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-table-grid__btn`,disabled:t.disabled,"aria-expanded":s.value,"aria-haspopup":`grid`,title:t.tooltip,onClick:(0,n.withModifiers)(r,[`prevent`])},[(0,n.createVNode)(e.P,{name:`grid_on`,size:20})],8,z)]),panel:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,B,[(0,n.createElementVNode)(`div`,V,(0,n.toDisplayString)(c.value.rows)+` × `+(0,n.toDisplayString)(c.value.cols),1),(0,n.createElementVNode)(`div`,{class:`docx-table-grid__grid`,style:(0,n.normalizeStyle)({gridTemplateColumns:`repeat(${t.gridColumns}, 18px)`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(l.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:`${e.r}-${e.c}`,class:(0,n.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,n.withModifiers)(t=>u(e.r,e.c),[`prevent`])},null,42,H))),128))],4)])]),_:1},8,[`open`]))}}),W=e.F(U,[[`__scopeId`,`data-v-2f56c54d`]]),G=[`disabled`,`title`],K={key:0,class:`print-btn__icon`},q=(0,n.defineComponent)({__name:`PrintButton`,props:{disabled:{type:Boolean,default:!1},label:{default:`Print`},compact:{type:Boolean,default:!1}},emits:[`print`],setup(e,{emit:t}){let r=e,i=t;function a(){r.disabled||(i(`print`),window.print())}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{class:`print-btn`,disabled:e.disabled,title:e.label,onMousedown:(0,n.withModifiers)(a,[`prevent`])},[(0,n.createTextVNode)((0,n.toDisplayString)(e.compact?``:e.label)+` `,1),e.compact?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,K,`🖨`)):(0,n.createCommentVNode)(``,!0)],40,G))}}),J=e.F(q,[[`__scopeId`,`data-v-2f2ba140`]]),Y={padding:`8px 10px`,borderRadius:8,backgroundColor:`var(--doc-card)`,cursor:`pointer`,boxShadow:`var(--doc-card-shadow)`},X={padding:`10px 12px`,borderRadius:8,backgroundColor:`var(--doc-surface)`,cursor:`pointer`,boxShadow:`var(--doc-card-shadow-strong)`};exports.AddCommentCard=t.a,exports.AlignmentButtons=t.n,exports.Button=e.N,exports.CARD_STYLE_COLLAPSED=Y,exports.CARD_STYLE_EXPANDED=X,exports.Checkbox=e.M,exports.ColorPicker=e.D,exports.CommentCard=t.c,exports.CommentMarginMarkers=t.D,exports.DEFAULT_COMPONENTS=e.h,exports.DatePickerPopover=e.E,exports.Dialog=e.T,exports.DocumentName=t.E,exports.EditingModeDropdown=t.b,exports.EditorToolbar=l,exports.FindReplaceDialog=e.m,exports.FontPicker=O,exports.FontSizePicker=P,exports.FootnotePropertiesDialog=e.l,exports.HorizontalRuler=t.v,exports.HyperlinkDialog=e.p,exports.IconGridDropdown=t.C,exports.ImagePositionDialog=e.c,exports.ImagePropertiesDialog=e.f,exports.ImageTransformDropdown=t.x,exports.ImageWrapDropdown=t.S,exports.Input=e.w,exports.InsertImageDialog=e.s,exports.InsertSymbolDialog=e.d,exports.InsertTableDialog=e.a,exports.LineSpacingPicker=R,exports.ListButtons=t.t,exports.MenuBar=t.w,exports.MenuDropdown=e.S,exports.OutlineRail=e.x,exports.PageSetupDialog=e.u,exports.PasteSpecialDialog=e.i,exports.Popover=e.C,exports.PrintButton=J,exports.ReplyInput=t.l,exports.ReplyThread=t.u,exports.ResolvedCommentMarker=t.s,exports.Select=e.b,exports.SplitCellDialog=e.r,exports.StylePicker=t.r,exports.TableBorderColorPicker=t.g,exports.TableBorderPicker=t._,exports.TableBorderWidthPicker=t.h,exports.TableCellFillPicker=t.m,exports.TableGridInline=t.T,exports.TableGridPicker=W,exports.TableMoreDropdown=t.p,exports.TablePropertiesDialog=e.n,exports.TableStyleGallery=e.o,exports.TableToolbar=t.f,exports.TitleBar=g,exports.Toolbar=t.y,exports.TrackedChangeCard=t.o,exports.UnifiedSidebar=t.i,exports.VerticalRuler=t.d,exports.WatermarkDialog=e.t,exports.provideFolioUI=e._,exports.resolveFolioComponents=e.v,exports.useFolioUI=e.y;
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./SplitCellDialog-B_TOoiMw.cjs"),t=require("./ListButtons-BcB7qvzQ.cjs");let n=require("vue");require("@stll/folio-core/utils/units");var r={class:`docx-editor-toolbar`},i={class:`docx-editor-toolbar__title-row`},a={class:`docx-editor-toolbar__title-left`},o={class:`docx-editor-toolbar__title-center`},s={class:`docx-editor-toolbar__title-right`},c=(0,n.defineComponent)({inheritAttrs:!1,__name:`EditorToolbar`,props:{showMenuBar:{type:Boolean,default:!0}},emits:[`menu-action`],setup(e){return(c,l)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,r,[(0,n.renderSlot)(c.$slots,`title-bar`,{},()=>[(0,n.createElementVNode)(`div`,i,[(0,n.createElementVNode)(`div`,a,[(0,n.renderSlot)(c.$slots,`title-bar-left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,o,[(0,n.renderSlot)(c.$slots,`document-name`,{},void 0,!0),e.showMenuBar?((0,n.openBlock)(),(0,n.createBlock)(t.w,{key:0,onAction:l[0]||=e=>c.$emit(`menu-action`,e)})):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`div`,s,[(0,n.renderSlot)(c.$slots,`title-bar-right`,{},void 0,!0)])])],!0),(0,n.renderSlot)(c.$slots,`toolbar`,{},()=>[(0,n.createVNode)(t.y,(0,n.normalizeProps)((0,n.guardReactiveProps)(c.$attrs)),null,16)],!0)]))}}),l=e.F(c,[[`__scopeId`,`data-v-79d81064`]]),u={},d={class:`docx-title-bar`},f={class:`docx-title-bar__left`},p={class:`docx-title-bar__center`},m={class:`docx-title-bar__right`};function h(e,t){return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createElementVNode)(`div`,f,[(0,n.renderSlot)(e.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,p,[(0,n.renderSlot)(e.$slots,`default`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,m,[(0,n.renderSlot)(e.$slots,`right`,{},void 0,!0)])])}var g=e.F(u,[[`render`,h],[`__scopeId`,`data-v-44b23810`]]);function _(e){let t=e.trim();if(!t)return``;let n=null,r=``;for(let e of t){if((e===`"`||e===`'`)&&n===null){n=e,r+=e;continue}if(e===n){n=null,r+=e;continue}if(e===`,`&&n===null)break;r+=e}return r.trim().replace(/^['"]|['"]$/g,``)}var v=[`value`,`disabled`],y={key:0,label:`Sans-serif`},b=[`value`],x={key:1,label:`Serif`},S=[`value`],C={key:2,label:`Monospace`},w=[`value`],T={key:3,label:`Other`},E=[`value`],D=(0,n.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 r=e,i=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,n.computed)(()=>r.fonts??a),s=(0,n.computed)(()=>{let e={"sans-serif":[],serif:[],monospace:[],other:[]};for(let t of o.value)e[t.category??`other`].push(t);return e}),c=(0,n.computed)(()=>{let e=r.value;if(!e)return r.placeholder;let t=e.toLowerCase();return o.value.find(n=>n.fontFamily===e||n.name.toLowerCase()===t||_(n.fontFamily).toLowerCase()===t)?.name??e});function l(e){if(!(e.target instanceof HTMLSelectElement))return;let t=e.target.value,n=o.value.find(e=>e.name===t);i(`change`,n?_(n.fontFamily)||n.name:t)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`select`,{class:(0,n.normalizeClass)([`docx-font-picker`,e.className]),value:c.value,disabled:e.disabled,"aria-label":`Font family`,onChange:l},[s.value[`sans-serif`].length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,y,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value[`sans-serif`],t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,b))),128))])):(0,n.createCommentVNode)(``,!0),s.value.serif.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,x,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.serif,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,S))),128))])):(0,n.createCommentVNode)(``,!0),s.value.monospace.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,C,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.monospace,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,w))),128))])):(0,n.createCommentVNode)(``,!0),s.value.other.length?((0,n.openBlock)(),(0,n.createElementBlock)(`optgroup`,T,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(s.value.other,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:t.name,value:t.name,style:(0,n.normalizeStyle)(e.showPreview?{fontFamily:t.fontFamily}:void 0)},(0,n.toDisplayString)(t.name),13,E))),128))])):(0,n.createCommentVNode)(``,!0)],42,v))}}),O=e.F(D,[[`__scopeId`,`data-v-a6d7700f`]]),k={class:`docx-font-size`},A=[`disabled`],j=[`value`,`disabled`,`placeholder`],M=[`disabled`],N=(0,n.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 r=e,i=t,a=[8,9,10,11,12,14,16,18,20,24,28,36,48,72],o=(0,n.computed)(()=>r.sizes??a),s=(0,n.computed)(()=>r.value??parseInt(r.placeholder,10)??11),c=(0,n.computed)(()=>r.value===void 0?r.placeholder:String(r.value));function l(e){return o.value.find(t=>t>e)??Math.min(e+1,r.maxSize)}function u(e){return[...o.value].reverse().find(t=>t<e)??Math.max(e-1,r.minSize)}function d(){r.disabled||i(`change`,u(s.value))}function f(){r.disabled||i(`change`,l(s.value))}function p(e){if(!(e.target instanceof HTMLInputElement))return;let t=parseFloat(e.target.value);!isNaN(t)&&t>=r.minSize&&t<=r.maxSize&&i(`change`,Math.round(t*2)/2)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,k,[(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value<=e.minSize,title:`Decrease font size`,onClick:(0,n.withModifiers)(d,[`prevent`])},` − `,8,A),(0,n.createElementVNode)(`input`,{class:`docx-font-size__input`,type:`text`,value:c.value,disabled:e.disabled,placeholder:e.placeholder,onKeydown:[r[0]||=(0,n.withKeys)((0,n.withModifiers)(e=>{d(),e.stopPropagation()},[`prevent`]),[`up`]),r[1]||=(0,n.withKeys)((0,n.withModifiers)(e=>{f(),e.stopPropagation()},[`prevent`]),[`down`]),r[2]||=(0,n.withKeys)((0,n.withModifiers)(e=>p(e),[`prevent`]),[`enter`])],onBlur:r[3]||=e=>p(e)},null,40,j),(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-font-size__btn`,disabled:e.disabled||s.value>=e.maxSize,title:`Increase font size`,onClick:(0,n.withModifiers)(f,[`prevent`])},` + `,8,M)]))}}),P=e.F(N,[[`__scopeId`,`data-v-dbc73bbe`]]),F=[`value`,`disabled`],I=[`value`],L=(0,n.defineComponent)({__name:`LineSpacingPicker`,props:{value:{},options:{},disabled:{type:Boolean,default:!1},className:{}},emits:[`change`],setup(e,{emit:t}){let r=e,i=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,n.computed)(()=>r.options??a),s=(0,n.computed)(()=>r.value??o.value[0]?.twipsValue??240);function c(e){if(!(e.target instanceof HTMLSelectElement))return;let t=parseInt(e.target.value,10);isNaN(t)||i(`change`,t)}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`select`,{class:(0,n.normalizeClass)([`docx-line-spacing`,e.className]),value:String(s.value),disabled:e.disabled,"aria-label":`Line spacing`,onChange:c},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(o.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`option`,{key:e.twipsValue,value:String(e.twipsValue)},(0,n.toDisplayString)(e.label),9,I))),128))],42,F))}}),R=e.F(L,[[`__scopeId`,`data-v-c262ff91`]]),z=[`disabled`,`aria-expanded`,`title`,`onClick`],B={class:`docx-table-grid__panel`},V={class:`docx-table-grid__label`},H=[`onMouseenter`,`onClick`],U=(0,n.defineComponent)({__name:`TableGridPicker`,props:{disabled:{type:Boolean,default:!1},gridRows:{default:5},gridColumns:{default:5},tooltip:{default:`Insert table`}},emits:[`insert`],setup(t,{emit:r}){let{Popover:i}=e.y(),a=t,o=r,s=(0,n.ref)(!1),c=(0,n.ref)({rows:1,cols:1}),l=(0,n.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,n.openBlock)(),(0,n.createBlock)((0,n.unref)(i),{open:s.value,"onUpdate:open":a[0]||=e=>s.value=e,onClose:d},{trigger:(0,n.withCtx)(({toggle:r})=>[(0,n.createElementVNode)(`button`,{type:`button`,class:`docx-table-grid__btn`,disabled:t.disabled,"aria-expanded":s.value,"aria-haspopup":`grid`,title:t.tooltip,onClick:(0,n.withModifiers)(r,[`prevent`])},[(0,n.createVNode)(e.P,{name:`grid_on`,size:20})],8,z)]),panel:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,B,[(0,n.createElementVNode)(`div`,V,(0,n.toDisplayString)(c.value.rows)+` × `+(0,n.toDisplayString)(c.value.cols),1),(0,n.createElementVNode)(`div`,{class:`docx-table-grid__grid`,style:(0,n.normalizeStyle)({gridTemplateColumns:`repeat(${t.gridColumns}, 18px)`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(l.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:`${e.r}-${e.c}`,class:(0,n.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,n.withModifiers)(t=>u(e.r,e.c),[`prevent`])},null,42,H))),128))],4)])]),_:1},8,[`open`]))}}),W=e.F(U,[[`__scopeId`,`data-v-2f56c54d`]]),G=[`disabled`,`title`],K={key:0,class:`print-btn__icon`},q=(0,n.defineComponent)({__name:`PrintButton`,props:{disabled:{type:Boolean,default:!1},label:{default:`Print`},compact:{type:Boolean,default:!1}},emits:[`print`],setup(e,{emit:t}){let r=e,i=t;function a(){r.disabled||(i(`print`),window.print())}return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{class:`print-btn`,disabled:e.disabled,title:e.label,onMousedown:(0,n.withModifiers)(a,[`prevent`])},[(0,n.createTextVNode)((0,n.toDisplayString)(e.compact?``:e.label)+` `,1),e.compact?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,K,`🖨`)):(0,n.createCommentVNode)(``,!0)],40,G))}}),J=e.F(q,[[`__scopeId`,`data-v-2f2ba140`]]),Y={padding:`8px 10px`,borderRadius:8,backgroundColor:`var(--doc-card)`,cursor:`pointer`,boxShadow:`var(--doc-card-shadow)`},X={padding:`10px 12px`,borderRadius:8,backgroundColor:`var(--doc-surface)`,cursor:`pointer`,boxShadow:`var(--doc-card-shadow-strong)`};exports.AddCommentCard=t.a,exports.AlignmentButtons=t.n,exports.Button=e.k,exports.CARD_STYLE_COLLAPSED=Y,exports.CARD_STYLE_EXPANDED=X,exports.Checkbox=e.O,exports.ColorPicker=e.D,exports.CommentCard=t.c,exports.CommentMarginMarkers=t.D,exports.DEFAULT_COMPONENTS=e.h,exports.DatePickerPopover=e.E,exports.Dialog=e.T,exports.DocumentName=t.E,exports.EditingModeDropdown=t.b,exports.EditorToolbar=l,exports.FindReplaceDialog=e.m,exports.FontPicker=O,exports.FontSizePicker=P,exports.FootnotePropertiesDialog=e.s,exports.HorizontalRuler=t.v,exports.HyperlinkDialog=e.p,exports.IconGridDropdown=t.C,exports.ImagePositionDialog=e.o,exports.ImagePropertiesDialog=e.f,exports.ImageTransformDropdown=t.x,exports.ImageWrapDropdown=t.S,exports.Input=e.w,exports.InsertImageDialog=e.a,exports.InsertSymbolDialog=e.d,exports.InsertTableDialog=e.r,exports.LineSpacingPicker=R,exports.ListButtons=t.t,exports.MenuBar=t.w,exports.MenuDropdown=e.S,exports.OutlineRail=e.x,exports.PageSetupDialog=e.u,exports.PasteSpecialDialog=e.n,exports.Popover=e.C,exports.PrintButton=J,exports.ReplyInput=t.l,exports.ReplyThread=t.u,exports.ResolvedCommentMarker=t.s,exports.Select=e.b,exports.SplitCellDialog=e.t,exports.StylePicker=t.r,exports.TableBorderColorPicker=t.g,exports.TableBorderPicker=t._,exports.TableBorderWidthPicker=t.h,exports.TableCellFillPicker=t.m,exports.TableGridInline=t.T,exports.TableGridPicker=W,exports.TableMoreDropdown=t.p,exports.TablePropertiesDialog=e.l,exports.TableStyleGallery=e.i,exports.TableToolbar=t.f,exports.TitleBar=g,exports.Toolbar=t.y,exports.TrackedChangeCard=t.o,exports.UnifiedSidebar=t.i,exports.VerticalRuler=t.d,exports.WatermarkDialog=e.c,exports.provideFolioUI=e._,exports.resolveFolioComponents=e.v,exports.useFolioUI=e.y;

@@ -1,3 +0,3 @@

import { C as e, D as t, E as n, F as r, M as i, N as a, P as o, S as s, T as c, _ as l, a as u, b as d, c as f, d as ee, f as te, h as ne, i as re, l as ie, m as ae, n as oe, o as se, p as ce, r as p, s as le, t as ue, u as de, v as m, w as fe, x as pe, y as h } from "./WatermarkDialog-Cf9ISDvv.js";
import { C as me, D as he, E as ge, S as _e, T as ve, _ as ye, a as be, b as g, c as _, d as v, f as y, g as b, h as x, i as S, l as C, m as w, n as T, o as E, p as D, r as O, s as k, t as A, u as j, v as M, w as N, x as xe, y as P } from "./ListButtons-DMnOM2pN.js";
import { C as e, D as t, E as n, F as r, O as i, P as a, S as o, T as s, _ as c, a as l, b as u, c as d, d as f, f as ee, h as te, i as ne, k as re, l as ie, m as ae, n as oe, o as se, p as ce, r as p, s as le, t as ue, u as de, v as m, w as fe, x as pe, y as h } from "./SplitCellDialog-DRQuZsA3.js";
import { C as me, D as he, E as ge, S as _e, T as ve, _ as ye, a as be, b as g, c as _, d as v, f as y, g as b, h as x, i as S, l as C, m as w, n as T, o as E, p as D, r as O, s as k, t as A, u as j, v as M, w as N, x as xe, y as P } from "./ListButtons-rpVlLZJ8.js";
import { Fragment as F, computed as I, createBlock as L, createCommentVNode as R, createElementBlock as z, createElementVNode as B, createTextVNode as Se, createVNode as V, defineComponent as H, guardReactiveProps as Ce, normalizeClass as U, normalizeProps as we, normalizeStyle as W, openBlock as G, ref as K, renderList as q, renderSlot as J, toDisplayString as Y, unref as Te, withCtx as X, withKeys as Z, withModifiers as Q } from "vue";

@@ -350,3 +350,3 @@ import "@stll/folio-core/utils/units";

setup(e, { emit: t }) {
let { Popover: n } = h(), r = e, i = t, a = K(!1), s = K({
let { Popover: n } = h(), r = e, i = t, o = K(!1), s = K({
rows: 1,

@@ -363,6 +363,6 @@ cols: 1

function l(e, t) {
i("insert", e, t), a.value = !1;
i("insert", e, t), o.value = !1;
}
function u() {
a.value = !1, s.value = {
o.value = !1, s.value = {
rows: 1,

@@ -373,4 +373,4 @@ cols: 1

return (t, r) => (G(), L(Te(n), {
open: a.value,
"onUpdate:open": r[0] ||= (e) => a.value = e,
open: o.value,
"onUpdate:open": r[0] ||= (e) => o.value = e,
onClose: u

@@ -382,7 +382,7 @@ }, {

disabled: e.disabled,
"aria-expanded": a.value,
"aria-expanded": o.value,
"aria-haspopup": "grid",
title: e.tooltip,
onClick: Q(t, ["prevent"])
}, [V(o, {
}, [V(a, {
name: "grid_on",

@@ -449,2 +449,2 @@ size: 20

//#endregion
export { be as AddCommentCard, T as AlignmentButtons, a as Button, dt as CARD_STYLE_COLLAPSED, ft as CARD_STYLE_EXPANDED, i as Checkbox, t as ColorPicker, _ as CommentCard, he as CommentMarginMarkers, ne as DEFAULT_COMPONENTS, n as DatePickerPopover, c as Dialog, ge as DocumentName, g as EditingModeDropdown, je as EditorToolbar, ae as FindReplaceDialog, Je as FontPicker, $e as FontSizePicker, ie as FootnotePropertiesDialog, M as HorizontalRuler, ce as HyperlinkDialog, me as IconGridDropdown, f as ImagePositionDialog, te as ImagePropertiesDialog, xe as ImageTransformDropdown, _e as ImageWrapDropdown, fe as Input, le as InsertImageDialog, ee as InsertSymbolDialog, u as InsertTableDialog, nt as LineSpacingPicker, A as ListButtons, N as MenuBar, s as MenuDropdown, pe as OutlineRail, de as PageSetupDialog, re as PasteSpecialDialog, e as Popover, ut as PrintButton, C as ReplyInput, j as ReplyThread, k as ResolvedCommentMarker, d as Select, p as SplitCellDialog, O as StylePicker, b as TableBorderColorPicker, ye as TableBorderPicker, x as TableBorderWidthPicker, w as TableCellFillPicker, ve as TableGridInline, st as TableGridPicker, D as TableMoreDropdown, oe as TablePropertiesDialog, se as TableStyleGallery, y as TableToolbar, Re as TitleBar, P as Toolbar, E as TrackedChangeCard, S as UnifiedSidebar, v as VerticalRuler, ue as WatermarkDialog, l as provideFolioUI, m as resolveFolioComponents, h as useFolioUI };
export { be as AddCommentCard, T as AlignmentButtons, re as Button, dt as CARD_STYLE_COLLAPSED, ft as CARD_STYLE_EXPANDED, i as Checkbox, t as ColorPicker, _ as CommentCard, he as CommentMarginMarkers, te as DEFAULT_COMPONENTS, n as DatePickerPopover, s as Dialog, ge as DocumentName, g as EditingModeDropdown, je as EditorToolbar, ae as FindReplaceDialog, Je as FontPicker, $e as FontSizePicker, le as FootnotePropertiesDialog, M as HorizontalRuler, ce as HyperlinkDialog, me as IconGridDropdown, se as ImagePositionDialog, ee as ImagePropertiesDialog, xe as ImageTransformDropdown, _e as ImageWrapDropdown, fe as Input, l as InsertImageDialog, f as InsertSymbolDialog, p as InsertTableDialog, nt as LineSpacingPicker, A as ListButtons, N as MenuBar, o as MenuDropdown, pe as OutlineRail, de as PageSetupDialog, oe as PasteSpecialDialog, e as Popover, ut as PrintButton, C as ReplyInput, j as ReplyThread, k as ResolvedCommentMarker, u as Select, ue as SplitCellDialog, O as StylePicker, b as TableBorderColorPicker, ye as TableBorderPicker, x as TableBorderWidthPicker, w as TableCellFillPicker, ve as TableGridInline, st as TableGridPicker, D as TableMoreDropdown, ie as TablePropertiesDialog, ne as TableStyleGallery, y as TableToolbar, Re as TitleBar, P as Toolbar, E as TrackedChangeCard, S as UnifiedSidebar, v as VerticalRuler, d as WatermarkDialog, c as provideFolioUI, m as resolveFolioComponents, h as useFolioUI };

@@ -121,3 +121,3 @@ import { Component } from 'vue';

* `null` when cleared). See the module docblock — no Vue chrome consumer
* renders this yet (content-control widgets are not ported to Vue).
* renders this for date content controls.
*/

@@ -124,0 +124,0 @@ export type FolioDatePickerPopoverProps = {

/**
* Color-mode resolution shared by every adapter so the light/dark/auto logic
* (and its SSR + prefers-color-scheme handling) can't drift between hosts. The
* adapters keep only their framework binding (useState/useEffect vs
* ref/watchEffect); the rules live here.
* Color-mode resolution for the Vue host binding. Pure resolution stays
* separate from Vue's provide/inject layer so browser capability checks and
* system-preference subscriptions remain independently testable.
*

@@ -7,0 +6,0 @@ * @packageDocumentation

@@ -15,4 +15,2 @@ import { FontDefinition } from '../components/DocxEditor/types';

export declare function toFontFaceInputs(fonts: ReadonlyArray<FontDefinition> | undefined): FontFaceInput[];
/** The document's `FontFaceSet`, or `null` outside a DOM. */
export declare function getDocumentFontSet(): FontFaceSet | null;
/**

@@ -22,6 +20,4 @@ * Register the host's custom font faces with the browser via the `FontFace` API.

* the faces that loaded successfully; each bad entry is skipped, never thrown.
* Pair with {@link removeFontFaces} to unregister on change/unmount.
* The font lifecycle unregisters returned faces on change/unmount.
*/
export declare function loadHostFontFaces(fonts: ReadonlyArray<FontDefinition> | undefined): Promise<FontFace[]>;
/** Remove previously registered faces from the document font set. */
export declare function removeFontFaces(faces: readonly FontFace[]): void;
{
"name": "@stll/folio-vue",
"version": "0.9.0",
"version": "0.10.0",
"description": "Vue 3 editor for folio: a Word-document (.docx) editor for the browser, built on @stll/folio-core and ProseMirror.",

@@ -5,0 +5,0 @@ "keywords": [

/**
* Bridges the host-facing `onComment*` and `onEditorViewReady` props into the
* editor internals, keeping the host SFC lean.
*
* PORT-BLOCKED (missing `useCommentManagement` + comment props): upstream's
* primary output is a `CommentCallbacks` bundle
* (`onCommentAdd`/`onCommentResolve`/`onCommentDelete`/`onCommentReply`/
* `onCommentsChange`) whose type is exported by the sibling
* `./useCommentManagement` composable — not yet ported to our fork. It also
* reads four host props (`onCommentAdd`, `onCommentResolve`, `onCommentDelete`,
* `onCommentReply`) that do not exist on our `DocxEditorProps` (which currently
* exposes only `onCommentsChange` and `onEditorViewReady`). Both the
* `CommentCallbacks` contract and the props it wires are absent, so the
* comment-bridge cannot be built without fabricating an API.
*
* The `onEditorViewReady` watch is portable on its own, but it is a bare side
* effect (no return value) and not the composable's contract, so this is left
* as a full block rather than a degenerate stub.
*
* Unblock: port `useCommentManagement` (exporting `CommentCallbacks`) and add
* the four `onComment*` callbacks to `DocxEditorProps`, then restore the
* upstream body verbatim.
*/
export {};
import { Ref } from 'vue';
import { EditorView } from 'prosemirror-view';
import { Command } from 'prosemirror-state';
/**
* A toolbar/menu command factory: called with whatever arguments the
* specific command needs, it returns a ProseMirror `Command`. The
* argument list is heterogeneous across commands (some take none,
* `insertTable` takes rows/cols), so it is typed structurally rather
* than per-command.
*/
type CommandFactory = (...args: readonly unknown[]) => Command;
export type UseMenuActionsOptions = {
editorView: Ref<EditorView | null>;
getCommands: () => Record<string, CommandFactory>;
docxInputRef: Ref<HTMLInputElement | null>;
imageInputRef: Ref<HTMLInputElement | null>;
showPageSetup: Ref<boolean>;
showWatermark: Ref<boolean>;
showHyperlink: Ref<boolean>;
showInsertSymbol: Ref<boolean>;
showKeyboardShortcuts: Ref<boolean>;
handleClearFormatting: () => void;
handleInsertPageBreak: () => void;
handleInsertSectionBreakNextPage: () => void;
handleInsertSectionBreakContinuous: () => void;
handleToggleOutline: () => void;
handleToggleSidebar: () => void;
downloadCurrentDocument: () => Promise<void>;
emit: (event: string, ...args: unknown[]) => void;
};
export declare function useMenuActions(opts: UseMenuActionsOptions): {
handleMenuAction: (action: string) => void;
handleMenuTableInsert: (rows: number, cols: number) => void;
execSimpleCommand: (name: string) => void;
};
export {};

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

let e=require("vue"),t=require("@stll/folio-core/paged-layout/sectionGeometry"),n=require("@stll/folio-core/prosemirror/plugins/anonymizationDecorations"),r=require("@stll/folio-core/prosemirror/plugins/templateDirectives"),i=require("@stll/folio-core/prosemirror/plugins/suggestionMode"),a=require("@stll/folio-core/controller/folioEditor"),o=require("@stll/folio-core/controller/folioEditorEvents"),s=require("@stll/folio-core/controller/collaborationModules"),c=require("@stll/folio-core/controller/headerFooterEditorManager"),l=require("@stll/folio-core/controller/hiddenEditorManager"),u=require("@stll/folio-core/controller/layoutPipeline"),d=require("@stll/folio-core/controller/layoutScheduler"),f=require("@stll/folio-core/controller/layoutSession"),p=require("@stll/folio-core/docx/parser"),m=require("@stll/folio-core/docx/footnoteParser"),h=require("@stll/folio-core/layout-bridge/convert/headerFooterLayout"),g=require("@stll/folio-core/layout-engine"),_=require("@stll/folio-core/layout-painter"),ee=require("@stll/folio-core/paged-layout/LayoutSelectionGate"),v=require("@stll/folio-core/paged-layout/transactionDirtyRange"),y=require("@stll/folio-core/prosemirror/conversion/fromProseDoc"),te=require("@stll/folio-core/prosemirror/extensions/ExtensionManager"),b=require("@stll/folio-core/prosemirror/extensions/features/ParagraphChangeTrackerExtension"),ne=require("@stll/folio-core/prosemirror/extensions/StarterKit"),re=require("@stll/folio-core/prosemirror/plugins/templatePreviewValues"),ie=require("@stll/folio-core/prosemirror/plugins/templateSlashMenu"),ae=require("@stll/folio-core/utils/headerFooter"),oe=require("@stll/folio-core/utils/findVerticalScrollParent"),x=require("@stll/folio-core/prosemirror/tableResize"),S=require("@stll/folio-core/prosemirror/utils/extractTrackedChanges"),C=require("@stll/folio-core/utils/zoom");var se=24,ce=32,le=96,ue=250,de=[];function fe(e){let n=e?.columnCount??1;if(n<=1)return;let r={count:n,gap:(0,t.twipsToPixels)(e?.columnSpace??720),equalWidth:e?.equalWidth??!0};return e?.separator!==void 0&&(r.separator=e.separator),r}function pe(e,t,n,r,i,a){if(!e)return;let o=t?{...a,rId:t}:a,s=t?n?.getView(t):null;return s?(0,h.convertHeaderFooterPmDocToContent)(s.state.doc,r,i,o):(0,h.convertHeaderFooterToContent)(e,r,i,o)}function me(e,t,n,r,i){if(!e||e.size===0)return;let a=new Map;for(let[o,s]of e){let e=pe(s,o,t,n,r,i);e&&a.set(o,e)}return a.size>0?a:void 0}function he(e,t,n){let r=new Map;if(!n||!n.package.footnotes)return r;let i=new Map;for(let e of n.package.footnotes)e.noteType&&e.noteType!==`normal`||i.set(e.id,e);for(let[n,a]of e){let e=[];for(let n of a){let r=i.get(n);if(!r)continue;let a=t.get(n),o=a?.displayNumber??0;e.push({displayNumber:String(o),text:(0,m.getFootnoteText)(r),...a?{content:{blocks:a.blocks,measures:a.measures,height:a.height}}:{}})}e.length>0&&r.set(n,e)}return r}var ge=new Set([`black`,`blue`,`cyan`,`darkBlue`,`darkCyan`,`darkGray`,`darkGreen`,`darkMagenta`,`darkRed`,`darkYellow`,`green`,`lightGray`,`magenta`,`none`,`red`,`white`,`yellow`]);function _e(e){let t=[],n=(e,r)=>{for(let[n,i]of e.marks.entries())i.type.name===`highlight`&&!ge.has(String(i.attrs.color))&&t.push(`${r}.marks[${n}]=${JSON.stringify(i.attrs)}`);e.forEach((e,t,i)=>{n(e,`${r}.content[${i}]`)})};return n(e,`doc`),t.join(`; `)}function ve(){return typeof document>`u`||!(`fonts`in document)||document.fonts.status===`loaded`}function ye(m){let{hiddenContainer:h,hiddenHeaderFooterContainer:oe,pagesContainer:x,readOnly:S=!1,pageGap:C=se,documentKey:ge,password:ye,editorMode:w,author:T,externalPlugins:be=[],collaboration:E,onAnonymizationMatchesChange:xe,showTemplateDirectives:Se,onSlashMenuChange:Ce,onSlashMenuKeyAction:D,onChange:O,onError:k,onSelectionUpdate:A,onEditorViewReady:we,onReadOnlyEditAttempt:Te,featureFlags:Ee,onSelectiveSaveTripwire:De}=m,Oe=oe??h,j=(0,e.shallowRef)(null),M=(0,e.shallowRef)(null),N=(0,e.shallowRef)(null),P=(0,e.shallowRef)(null),F=(0,e.shallowRef)([]),I=(0,e.shallowRef)(null),L=(0,e.shallowRef)(null),ke=(0,e.shallowRef)([]),Ae=(0,e.shallowRef)([]),R=(0,e.ref)(!1),z=(0,e.ref)(null),B=(0,e.ref)(!1),V=new te.ExtensionManager((0,ne.createStarterKit)());V.buildSchema(),V.initializeRuntime();let je=(0,i.createSuggestionModePlugin)(!1),Me=(0,n.createAnonymizationDecorationsPlugin)({onMatchesChange:e=>xe?.(e)}),H=(0,r.createTemplateDirectivesPlugin)(),U=(0,ie.templateSlashMenuPlugin)({onChange:e=>Ce?.(e),onKeyAction:e=>D?.(e)??!1}),Ne=(0,re.createTemplatePreviewValuesPlugin)(),W=()=>(0,e.toValue)(Se)===!0;function Pe(){return[je,...be,...(0,e.toValue)(E)?.plugins??[],Me,...W()?[H,U]:[],Ne]}let G=(0,o.createFolioEditorEmitter)(),K=new ee.LayoutSelectionGate,Fe=(0,f.createLayoutSession)(),Ie=new _.LayoutPainter({pageGap:C,showShadow:!0}),q=(0,c.createHeaderFooterEditorManager)({getHost:()=>Oe.value,getDocument:()=>j.value,getStyles:()=>j.value?.package.styles??null,getTheme:()=>j.value?.package.theme??null,onTransaction:({rId:e,kind:t,view:n,docChanged:r,selectionChanged:i})=>{if(r){B.value=!0;let e=M.value;e&&Y.schedule(e.state,null)}if(r||i){let{from:r,to:i}=n.state.selection;I.value={from:r,kind:t,rId:e,to:i},A?.(n.state),G.emit(`selectionChange`,{from:r,to:i})}K.requestRender()}});function Le(e){e.layout&&(L.value=e.layout),e.blocks&&(ke.value=e.blocks),e.measures&&(Ae.value=e.measures),e.blockLookup&&Ie.setBlockLookup(e.blockLookup),e.layout&&G.emit(`layoutComplete`,e.layout)}function J(e,n={}){let r=x.value,i=r instanceof HTMLDivElement?r:null,a=j.value,o=a?.package.document,s=o?.sections?.[0]?.properties??o?.finalSectionProperties??null,c=(0,t.getPageSize)(s),l=(0,t.getMargins)(s),d=fe(s),f=c.w-l.left-l.right,p=a?.package.styles??null,m=a?.package.theme??null,h=a?.package.settings?.defaultTabStop,_=a?.package.settings,ee=_!==void 0&&`mirrorMargins`in _&&_.mirrorMargins===!0,v=(0,ae.resolveHeaderFooterContent)(a?.package);try{Le((0,u.runLayoutPipeline)({contentWidth:f,columns:d,pageSize:c,margins:l,pageGap:C,syncCoordinator:K,headerContent:v.headerContent,footerContent:v.footerContent,firstPageHeaderContent:v.firstPageHeaderContent,firstPageFooterContent:v.firstPageFooterContent,headerContentRId:v.activeHeaderRId,footerContentRId:v.activeFooterRId,firstPageHeaderContentRId:v.activeFirstHeaderRId,firstPageFooterContentRId:v.activeFirstFooterRId,sectionHeaderFooterRefs:(0,g.resolveSectionHeaderFooterRefs)(a),theme:m,sectionProperties:s,document:a,defaultTabStop:h,mirrorMargins:ee,styles:p,layout:L.value,hfPMs:q,painter:Ie,pagesContainer:i,session:Fe,renderHfFromContentOrPm:pe,renderHeaderFooterContentByRId:me,documentFontsAreLoaded:ve,buildFootnoteRenderItems:he,describeInvalidHighlightMarks:_e,emptyTemplatePreviewEntries:de},e,n))}catch(e){let t=e instanceof Error?e:Error(String(e));k?.(t)}}let Y=(0,d.createLayoutScheduler)({runLayout:(e,t)=>J(e,t),debounceMs:ce,maxDelayMs:le,clock:d.browserClock}),X=null;function Re(){X!==null&&(window.clearTimeout(X),X=null);let e=M.value,t=j.value;if(!(!e||!t))try{let n=(0,y.fromProseDoc)(e.state.doc,t);j.value=n,q.sync(),O?.(n),G.emit(`docChange`,n)}catch(e){k?.(e instanceof Error?e:Error(String(e)))}}function ze(){X!==null&&window.clearTimeout(X),X=window.setTimeout(()=>{X=null,Re()},ue)}let Z=(0,l.createHiddenEditorManager)({getHost:()=>h.value,getDocument:()=>j.value,getStyles:()=>j.value?.package.styles??null,getExtensionManager:()=>V,getExternalPlugins:Pe,getCollaboration:()=>(0,e.toValue)(E),getCollaborationModules:()=>P.value,getPrecomputedInitialState:()=>null,getReadOnly:()=>(0,e.toValue)(S),getDocumentKey:()=>(0,e.toValue)(ge),getDocumentContext:()=>j.value,onTransaction:Be,onSelectionChange:e=>{N.value=e,A?.(e),G.emit(`selectionChange`,{from:e.selection.from,to:e.selection.to})},onKeyDown:()=>!1,onReadOnlyEditAttempt:()=>Te?.(),onEditorViewReady:Ve,onEditorViewDestroy:()=>{M.value=null,R.value=!1,we?.(null)},onRemoteSelectionsChange:e=>{F.value=e}}),Q=()=>{let t=(0,e.toValue)(E)?.awareness,n=P.value,r=Z.getView();F.value=t&&n&&r?(0,l.collectRemoteSelections)(r.state,t,n):[]};(0,e.watch)(()=>(0,e.toValue)(E),(e,t,n)=>{if(F.value=[],!e){P.value=null,Z.retryViewCreation(),Z.syncExternalDocument();return}let r=!1;n(()=>{r=!0}),P.value=null,(0,s.loadCollaborationModules)().then(e=>{r||(P.value=e,Z.retryViewCreation(),Z.syncExternalDocument(),Q())},e=>{r||(P.value=null,k?.(e instanceof Error?e:Error(String(e))))})},{immediate:!0}),(0,e.watch)(()=>({awareness:(0,e.toValue)(E)?.awareness,modules:P.value,view:M.value}),({awareness:e,modules:t,view:n},r,i)=>{if(!e||!t||!n){F.value=[];return}e.on(`change`,Q),Q(),i(()=>{e.off(`change`,Q),F.value=[]})},{flush:`post`});function Be(e,t){N.value=t,e.docChanged&&(B.value=!0,K.incrementStateSeq(),Y.schedule(t,(0,v.getTransactionDirtyRange)(e)),ze()),K.requestRender()}function Ve(t){M.value=t,N.value=t.state,R.value=!0,J(t.state,{reason:`initial`}),K.requestRender(),Ue(t),we?.(t),(0,e.toValue)(S)||requestAnimationFrame(()=>{M.value===t&&t.focus()})}let He=(0,a.createFolioEditor)({getEditorApi:()=>Z.api,getLayout:()=>L.value,runLayout:(e,t)=>J(e,t),emitter:G});function Ue(t){(0,i.setSuggestionMode)((0,e.toValue)(w)===`suggesting`,t.state,t.dispatch,(0,e.toValue)(T))}(0,e.watch)([()=>(0,e.toValue)(w),()=>(0,e.toValue)(T)],()=>{let e=M.value;e&&Ue(e)}),(0,e.watch)(()=>(0,e.toValue)(S),()=>Z.syncEditable());function We(e){let t=W();if(t===e.state.plugins.includes(H))return;let n=e.state.plugins.filter(e=>e!==H&&e!==U);if(t){let e=n.indexOf(Ne),t=e===-1?n.length:e;n.splice(t,0,H,U)}e.updateState(e.state.reconfigure({plugins:n}))}(0,e.watch)(()=>W(),()=>{let e=M.value;e&&We(e)});function Ge(){Z.ensureView()}function Ke(){B.value=!1,I.value=null,Y.dispose(),Z.destroyView(),q.sync(),Z.ensureView(),Z.getView()||qe()}function qe(){let t=j.value;if(!(!t||(0,e.toValue)(E)))try{let e=(0,l.createHiddenEditorState)({document:t,styles:t.package.styles??null,manager:V,externalPlugins:Pe(),collaborationModules:null,reason:`mount`});N.value=e,J(e,{reason:`initial`})}catch(e){k?.(e instanceof Error?e:Error(String(e)))}}(0,e.watch)([h,x,Oe],()=>{h.value&&j.value&&!Z.getView()&&Ge(),q.sync()},{flush:`post`});async function Je(t){z.value=null,R.value=!1;try{let n=await(0,p.parseDocx)(t,{password:(0,e.toValue)(ye)});j.value=n,Ke()}catch(e){let t=e instanceof Error?e:Error(String(e));z.value=t.message,k?.(t)}}function Ye(e){z.value=null,j.value=e,Ke()}async function Xe(t){let n=M.value,r=j.value;if(!n||!r)return null;let i=q.snapshotDocument(r),a=n.state,{resolveSelectiveSaveFlags:o}=await import(`@stll/folio-core/docx/selectiveSaveFlags`),s=o((0,e.toValue)(Ee)),c=(0,y.fromProseDoc)(a.doc,i),l=c.originalBuffer??null,u=s.selectiveSave&&t?.selective!==!1,d=u||s.selectiveSaveTripwire,{repackDocx:f,createDocx:p}=await import(`@stll/folio-core/docx/rezip`),m=null;if(d&&l){let{attemptSelectiveSave:e}=await import(`@stll/folio-core/docx/selectiveSave`);m=await e(c,l,{changedParaIds:(0,b.getChangedParagraphIds)(a),structuralChange:(0,b.hasStructuralChanges)(a),hasUntrackedChanges:(0,b.hasUntrackedChanges)(a),maxBytes:s.selectiveSaveMaxBytes})}let h=u?m:null,g=null;if(!h)g=l?await f(c):await p(c),h=g;else if(s.selectiveSaveTripwire)try{g=await f(c)}catch{}if(s.selectiveSaveTripwire&&g&&De)try{let{compareSelectiveVsFull:e}=await import(`@stll/folio-core/docx/selectiveSaveTripwire`);De(await e(m,g))}catch{}return j.value=c,q.sync(),B.value=!1,new Blob([h],{type:`application/vnd.openxmlformats-officedocument.wordprocessingml.document`})}function Ze(){let e=j.value;return e?q.snapshotDocument(e):null}function Qe(e){j.value=e,q.sync()}function $e(e){return q.getView(e)}function et(){q.sync()}function tt(){return V.getCommands()}function nt(){M.value?.focus()}function rt(){let e=M.value;e&&J(e.state,{reason:`manual`})}function $(){Y.dispose(),X!==null&&(window.clearTimeout(X),X=null),Z.destroyView(),F.value=[],q.destroy(),V.destroy(),N.value=null,L.value=null,j.value=null,R.value=!1}return(0,e.onScopeDispose)($),{editor:He,editorView:M,editorState:N,remoteSelections:F,headerFooterSelection:I,isReady:R,isDirty:B,parseError:z,layout:L,blocks:ke,measures:Ae,syncCoordinator:K,loadBuffer:Je,loadDocument:Ye,save:Xe,getDocument:Ze,setDocument:Qe,getHeaderFooterView:$e,syncHeaderFooterViews:et,getCommands:tt,focus:nt,reLayout:rt,destroy:$}}function w(e,t){if(t<e.top+40){let n=Math.max(0,e.top+40-t);return-Math.min(12,n/40*12)}if(t>e.bottom-40){let n=Math.max(0,t-(e.bottom-40));return Math.min(12,n/40*12)}return 0}function T({pagesContainer:t,onScrollExtendSelection:n}){let r=null,i=0,a=0,o=!1,s=null;function c(){if(s)return s;let e=t.value;return e?(s=(0,oe.findVerticalScrollParent)(e),s):null}function l(){o=!1,r!==null&&(cancelAnimationFrame(r),r=null)}function u(){if(!o)return;let e=c();if(!e)return;let t=w(e.getBoundingClientRect(),a);t!==0&&(e.scrollTop+=t,n(i,a)),r=requestAnimationFrame(u)}function d(){o||(o=!0,r=requestAnimationFrame(u))}function f(e,t){if(i=e,a=t,!o){let e=c();if(!e)return;let n=e.getBoundingClientRect();(t<n.top+40||t>n.bottom-40)&&d()}}return(0,e.onScopeDispose)(()=>l()),{updateMousePosition:f,stopAutoScroll:l}}function be(){let e={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidths:{left:0,right:0}},t={active:!1,startY:0,handle:null,rowIndex:0,isEdge:!1,tablePmStart:0,origHeight:0},n={active:!1,startX:0,handle:null,columnIndex:0,tablePmStart:0,origWidth:0},r=null;function i(){return e.active||t.active||n.active}function a(i,a){let o=i.target;return o instanceof HTMLElement?o.classList.contains(`layout-table-resize-handle`)?(i.preventDefault(),i.stopPropagation(),r=a,e.active=!0,e.startX=i.clientX,e.handle=o,o.classList.add(`dragging`),e.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),e.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),E(a,e),!0):o.classList.contains(`layout-table-row-resize-handle`)||o.classList.contains(`layout-table-edge-handle-bottom`)?(i.preventDefault(),i.stopPropagation(),r=a,t.active=!0,t.startY=i.clientY,t.handle=o,t.isEdge=o.dataset.isEdge===`bottom`,o.classList.add(`dragging`),t.rowIndex=parseInt(o.dataset.rowIndex??`0`,10),t.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),xe(a,t,o),!0):o.classList.contains(`layout-table-edge-handle-right`)?(i.preventDefault(),i.stopPropagation(),r=a,n.active=!0,n.startX=i.clientX,n.handle=o,o.classList.add(`dragging`),n.columnIndex=parseInt(o.dataset.columnIndex??`0`,10),n.tablePmStart=parseInt(o.dataset.tablePmStart??`0`,10),Se(a,n),!0):!1:!1}function o(r){if(e.active&&e.handle){r.preventDefault();let t=r.clientX-e.startX,n=parseFloat(e.handle.style.left);e.handle.style.left=`${n+t}px`,e.startX=r.clientX;let i=Math.round(t*x.TWIPS_PER_PIXEL),a=e.origWidths.left+i,o=e.origWidths.right-i;a>=x.MIN_CELL_WIDTH_TWIPS&&o>=x.MIN_CELL_WIDTH_TWIPS&&(e.origWidths={left:a,right:o});return}if(t.active&&t.handle){r.preventDefault();let e=r.clientY-t.startY,n=parseFloat(t.handle.style.top);t.handle.style.top=`${n+e}px`,t.startY=r.clientY;let i=Math.round(e*x.TWIPS_PER_PIXEL),a=t.origHeight+i;a>=x.MIN_ROW_HEIGHT_TWIPS&&(t.origHeight=a);return}if(n.active&&n.handle){r.preventDefault();let e=r.clientX-n.startX,t=parseFloat(n.handle.style.left);n.handle.style.left=`${t+e}px`,n.startX=r.clientX;let i=Math.round(e*x.TWIPS_PER_PIXEL),a=n.origWidth+i;a>=x.MIN_CELL_WIDTH_TWIPS&&(n.origWidth=a)}}function s(i){if(e.active){e.active=!1,e.handle?.classList.remove(`dragging`),r&&(0,x.commitColumnResize)(r,{pmStart:e.tablePmStart,colIdx:e.columnIndex,newLeft:e.origWidths.left,newRight:e.origWidths.right}),e.handle=null;return}if(t.active){t.active=!1,t.handle?.classList.remove(`dragging`),r&&(0,x.commitRowResize)(r,{pmStart:t.tablePmStart,rowIdx:t.rowIndex,newHeight:t.origHeight}),t.handle=null;return}n.active&&(n.active=!1,n.handle?.classList.remove(`dragging`),r&&(0,x.commitRightEdgeResize)(r,{pmStart:n.tablePmStart,colIdx:n.columnIndex,newWidth:n.origWidth}),n.handle=null)}function c(){return document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),()=>{document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s)}}return{tryStartResize:a,install:c,isResizing:i}}function E(e,t){let n=(0,x.readColumnWidths)(e,t.tablePmStart,t.columnIndex);n&&(t.origWidths=n)}function xe(e,t,n){let r=(0,x.readRowHeight)(e,t.tablePmStart,t.rowIndex);if(r!=null){t.origHeight=r;return}let i=n.closest(`.layout-table`)?.querySelector(`[data-row-index="${t.rowIndex}"]`),a=i?i.getBoundingClientRect().height:30;t.origHeight=Math.round(a*x.TWIPS_PER_PIXEL)}function Se(e,t){let n=(0,x.readColumnWidthAt)(e,t.tablePmStart,t.columnIndex);n!=null&&(t.origWidth=n)}function Ce(t,n){return(0,e.computed)(()=>(n.value,(0,S.extractTrackedChanges)(t.value?.state??null)))}var D=C.ZOOM_MIN,O=C.ZOOM_MAX,k=[.5,.75,1,1.25,1.5,2];function A(t=1){let n=(0,e.ref)(Math.max(D,Math.min(O,t))),r=(0,e.computed)(()=>Math.round(n.value*100)),i=(0,e.computed)(()=>n.value<=D),a=(0,e.computed)(()=>n.value>=O);function o(e){n.value=Math.max(D,Math.min(O,Math.round(e*100)/100))}function s(){o(n.value+C.ZOOM_STEP)}function c(){o(n.value-C.ZOOM_STEP)}function l(){o(1)}function u(e){(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.deltaY<0?s():c())}function d(e){(e.ctrlKey||e.metaKey)&&(e.shiftKey||e.altKey||(e.key===`=`||e.key===`+`?(e.preventDefault(),s()):e.key===`-`?(e.preventDefault(),c()):e.key===`0`&&(e.preventDefault(),l())))}function f(){(0,e.onMounted)(()=>document.addEventListener(`keydown`,d)),(0,e.onBeforeUnmount)(()=>document.removeEventListener(`keydown`,d))}return{zoom:n,zoomPercent:r,isMinZoom:i,isMaxZoom:a,setZoom:o,zoomIn:s,zoomOut:c,resetZoom:l,handleWheel:u,handleKeyDown:d,installShortcuts:f,ZOOM_PRESETS:k}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return A}});
import { computed as e, onBeforeUnmount as t, onMounted as n, onScopeDispose as r, ref as i, shallowRef as a, toValue as o, watch as s } from "vue";
import { getMargins as c, getPageSize as l, twipsToPixels as u } from "@stll/folio-core/paged-layout/sectionGeometry";
import { createAnonymizationDecorationsPlugin as d } from "@stll/folio-core/prosemirror/plugins/anonymizationDecorations";
import { createTemplateDirectivesPlugin as f } from "@stll/folio-core/prosemirror/plugins/templateDirectives";
import { createSuggestionModePlugin as p, setSuggestionMode as m } from "@stll/folio-core/prosemirror/plugins/suggestionMode";
import { createFolioEditor as h } from "@stll/folio-core/controller/folioEditor";
import { createFolioEditorEmitter as g } from "@stll/folio-core/controller/folioEditorEvents";
import { loadCollaborationModules as _ } from "@stll/folio-core/controller/collaborationModules";
import { createHeaderFooterEditorManager as ee } from "@stll/folio-core/controller/headerFooterEditorManager";
import { collectRemoteSelections as v, createHiddenEditorManager as te, createHiddenEditorState as ne } from "@stll/folio-core/controller/hiddenEditorManager";
import { runLayoutPipeline as re } from "@stll/folio-core/controller/layoutPipeline";
import { browserClock as ie, createLayoutScheduler as ae } from "@stll/folio-core/controller/layoutScheduler";
import { createLayoutSession as oe } from "@stll/folio-core/controller/layoutSession";
import { parseDocx as se } from "@stll/folio-core/docx/parser";
import { getFootnoteText as y } from "@stll/folio-core/docx/footnoteParser";
import { convertHeaderFooterPmDocToContent as b, convertHeaderFooterToContent as ce } from "@stll/folio-core/layout-bridge/convert/headerFooterLayout";
import { resolveSectionHeaderFooterRefs as le } from "@stll/folio-core/layout-engine";
import { LayoutPainter as ue } from "@stll/folio-core/layout-painter";
import { LayoutSelectionGate as de } from "@stll/folio-core/paged-layout/LayoutSelectionGate";
import { getTransactionDirtyRange as fe } from "@stll/folio-core/paged-layout/transactionDirtyRange";
import { fromProseDoc as pe } from "@stll/folio-core/prosemirror/conversion/fromProseDoc";
import { ExtensionManager as me } from "@stll/folio-core/prosemirror/extensions/ExtensionManager";
import { getChangedParagraphIds as he, hasStructuralChanges as ge, hasUntrackedChanges as _e } from "@stll/folio-core/prosemirror/extensions/features/ParagraphChangeTrackerExtension";
import { createStarterKit as ve } from "@stll/folio-core/prosemirror/extensions/StarterKit";
import { createTemplatePreviewValuesPlugin as ye } from "@stll/folio-core/prosemirror/plugins/templatePreviewValues";
import { templateSlashMenuPlugin as be } from "@stll/folio-core/prosemirror/plugins/templateSlashMenu";
import { resolveHeaderFooterContent as xe } from "@stll/folio-core/utils/headerFooter";
import { findVerticalScrollParent as Se } from "@stll/folio-core/utils/findVerticalScrollParent";
import { MIN_CELL_WIDTH_TWIPS as x, MIN_ROW_HEIGHT_TWIPS as S, TWIPS_PER_PIXEL as C, commitColumnResize as w, commitRightEdgeResize as Ce, commitRowResize as we, readColumnWidthAt as Te, readColumnWidths as Ee, readRowHeight as De } from "@stll/folio-core/prosemirror/tableResize";
import { extractTrackedChanges as T } from "@stll/folio-core/prosemirror/utils/extractTrackedChanges";
import { ZOOM_MAX as E, ZOOM_MIN as D, ZOOM_STEP as Oe } from "@stll/folio-core/utils/zoom";
//#region src/composables/useDocxEditor.ts
var ke = 24, Ae = 32, je = 96, Me = 250, Ne = [];
function Pe(e) {
let t = e?.columnCount ?? 1;
if (t <= 1) return;
let n = {
count: t,
gap: u(e?.columnSpace ?? 720),
equalWidth: e?.equalWidth ?? !0
};
return e?.separator !== void 0 && (n.separator = e.separator), n;
}
function Fe(e, t, n, r, i, a) {
if (!e) return;
let o = t ? {
...a,
rId: t
} : a, s = t ? n?.getView(t) : null;
return s ? b(s.state.doc, r, i, o) : ce(e, r, i, o);
}
function Ie(e, t, n, r, i) {
if (!e || e.size === 0) return;
let a = /* @__PURE__ */ new Map();
for (let [o, s] of e) {
let e = Fe(s, o, t, n, r, i);
e && a.set(o, e);
}
return a.size > 0 ? a : void 0;
}
function Le(e, t, n) {
let r = /* @__PURE__ */ new Map();
if (!n || !n.package.footnotes) return r;
let i = /* @__PURE__ */ new Map();
for (let e of n.package.footnotes) e.noteType && e.noteType !== "normal" || i.set(e.id, e);
for (let [n, a] of e) {
let e = [];
for (let n of a) {
let r = i.get(n);
if (!r) continue;
let a = t.get(n), o = a?.displayNumber ?? 0;
e.push({
displayNumber: String(o),
text: y(r),
...a ? { content: {
blocks: a.blocks,
measures: a.measures,
height: a.height
} } : {}
});
}
e.length > 0 && r.set(n, e);
}
return r;
}
var Re = /* @__PURE__ */ new Set([
"black",
"blue",
"cyan",
"darkBlue",
"darkCyan",
"darkGray",
"darkGreen",
"darkMagenta",
"darkRed",
"darkYellow",
"green",
"lightGray",
"magenta",
"none",
"red",
"white",
"yellow"
]);
function ze(e) {
let t = [], n = (e, r) => {
for (let [n, i] of e.marks.entries()) i.type.name === "highlight" && !Re.has(String(i.attrs.color)) && t.push(`${r}.marks[${n}]=${JSON.stringify(i.attrs)}`);
e.forEach((e, t, i) => {
n(e, `${r}.content[${i}]`);
});
};
return n(e, "doc"), t.join("; ");
}
function Be() {
return typeof document > "u" || !("fonts" in document) || document.fonts.status === "loaded";
}
function O(e) {
let { hiddenContainer: t, hiddenHeaderFooterContainer: n, pagesContainer: u, readOnly: y = !1, pageGap: b = ke, documentKey: ce, password: Se, editorMode: x, author: S, externalPlugins: C = [], collaboration: w, onAnonymizationMatchesChange: Ce, showTemplateDirectives: we, onSlashMenuChange: Te, onSlashMenuKeyAction: Ee, onChange: De, onError: T, onSelectionUpdate: E, onEditorViewReady: D, onReadOnlyEditAttempt: Oe, featureFlags: Re, onSelectiveSaveTripwire: O } = e, k = n ?? t, A = a(null), j = a(null), M = a(null), N = a(null), P = a([]), F = a(null), I = a(null), L = a([]), R = a([]), z = i(!1), B = i(null), V = i(!1), H = new me(ve());
H.buildSchema(), H.initializeRuntime();
let Ve = p(!1), He = d({ onMatchesChange: (e) => Ce?.(e) }), U = f(), W = be({
onChange: (e) => Te?.(e),
onKeyAction: (e) => Ee?.(e) ?? !1
}), Ue = ye(), G = () => o(we) === !0;
function We() {
return [
Ve,
...C,
...o(w)?.plugins ?? [],
He,
...G() ? [U, W] : [],
Ue
];
}
let K = g(), q = new de(), Ge = oe(), Ke = new ue({
pageGap: b,
showShadow: !0
}), J = ee({
getHost: () => k.value,
getDocument: () => A.value,
getStyles: () => A.value?.package.styles ?? null,
getTheme: () => A.value?.package.theme ?? null,
onTransaction: ({ rId: e, kind: t, view: n, docChanged: r, selectionChanged: i }) => {
if (r) {
V.value = !0;
let e = j.value;
e && X.schedule(e.state, null);
}
if (r || i) {
let { from: r, to: i } = n.state.selection;
F.value = {
from: r,
kind: t,
rId: e,
to: i
}, E?.(n.state), K.emit("selectionChange", {
from: r,
to: i
});
}
q.requestRender();
}
});
function qe(e) {
e.layout && (I.value = e.layout), e.blocks && (L.value = e.blocks), e.measures && (R.value = e.measures), e.blockLookup && Ke.setBlockLookup(e.blockLookup), e.layout && K.emit("layoutComplete", e.layout);
}
function Y(e, t = {}) {
let n = u.value, r = n instanceof HTMLDivElement ? n : null, i = A.value, a = i?.package.document, o = a?.sections?.[0]?.properties ?? a?.finalSectionProperties ?? null, s = l(o), d = c(o), f = Pe(o), p = s.w - d.left - d.right, m = i?.package.styles ?? null, h = i?.package.theme ?? null, g = i?.package.settings?.defaultTabStop, _ = i?.package.settings, ee = _ !== void 0 && "mirrorMargins" in _ && _.mirrorMargins === !0, v = xe(i?.package);
try {
qe(re({
contentWidth: p,
columns: f,
pageSize: s,
margins: d,
pageGap: b,
syncCoordinator: q,
headerContent: v.headerContent,
footerContent: v.footerContent,
firstPageHeaderContent: v.firstPageHeaderContent,
firstPageFooterContent: v.firstPageFooterContent,
headerContentRId: v.activeHeaderRId,
footerContentRId: v.activeFooterRId,
firstPageHeaderContentRId: v.activeFirstHeaderRId,
firstPageFooterContentRId: v.activeFirstFooterRId,
sectionHeaderFooterRefs: le(i),
theme: h,
sectionProperties: o,
document: i,
defaultTabStop: g,
mirrorMargins: ee,
styles: m,
layout: I.value,
hfPMs: J,
painter: Ke,
pagesContainer: r,
session: Ge,
renderHfFromContentOrPm: Fe,
renderHeaderFooterContentByRId: Ie,
documentFontsAreLoaded: Be,
buildFootnoteRenderItems: Le,
describeInvalidHighlightMarks: ze,
emptyTemplatePreviewEntries: Ne
}, e, t));
} catch (e) {
let t = e instanceof Error ? e : Error(String(e));
T?.(t);
}
}
let X = ae({
runLayout: (e, t) => Y(e, t),
debounceMs: Ae,
maxDelayMs: je,
clock: ie
}), Z = null;
function Je() {
Z !== null && (window.clearTimeout(Z), Z = null);
let e = j.value, t = A.value;
if (!(!e || !t)) try {
let n = pe(e.state.doc, t);
A.value = n, J.sync(), De?.(n), K.emit("docChange", n);
} catch (e) {
T?.(e instanceof Error ? e : Error(String(e)));
}
}
function Ye() {
Z !== null && window.clearTimeout(Z), Z = window.setTimeout(() => {
Z = null, Je();
}, Me);
}
let Q = te({
getHost: () => t.value,
getDocument: () => A.value,
getStyles: () => A.value?.package.styles ?? null,
getExtensionManager: () => H,
getExternalPlugins: We,
getCollaboration: () => o(w),
getCollaborationModules: () => N.value,
getPrecomputedInitialState: () => null,
getReadOnly: () => o(y),
getDocumentKey: () => o(ce),
getDocumentContext: () => A.value,
onTransaction: Xe,
onSelectionChange: (e) => {
M.value = e, E?.(e), K.emit("selectionChange", {
from: e.selection.from,
to: e.selection.to
});
},
onKeyDown: () => !1,
onReadOnlyEditAttempt: () => Oe?.(),
onEditorViewReady: Ze,
onEditorViewDestroy: () => {
j.value = null, z.value = !1, D?.(null);
},
onRemoteSelectionsChange: (e) => {
P.value = e;
}
}), $ = () => {
let e = o(w)?.awareness, t = N.value, n = Q.getView();
P.value = e && t && n ? v(n.state, e, t) : [];
};
s(() => o(w), (e, t, n) => {
if (P.value = [], !e) {
N.value = null, Q.retryViewCreation(), Q.syncExternalDocument();
return;
}
let r = !1;
n(() => {
r = !0;
}), N.value = null, _().then((e) => {
r || (N.value = e, Q.retryViewCreation(), Q.syncExternalDocument(), $());
}, (e) => {
r || (N.value = null, T?.(e instanceof Error ? e : Error(String(e))));
});
}, { immediate: !0 }), s(() => ({
awareness: o(w)?.awareness,
modules: N.value,
view: j.value
}), ({ awareness: e, modules: t, view: n }, r, i) => {
if (!e || !t || !n) {
P.value = [];
return;
}
e.on("change", $), $(), i(() => {
e.off("change", $), P.value = [];
});
}, { flush: "post" });
function Xe(e, t) {
M.value = t, e.docChanged && (V.value = !0, q.incrementStateSeq(), X.schedule(t, fe(e)), Ye()), q.requestRender();
}
function Ze(e) {
j.value = e, M.value = e.state, z.value = !0, Y(e.state, { reason: "initial" }), q.requestRender(), $e(e), D?.(e), o(y) || requestAnimationFrame(() => {
j.value === e && e.focus();
});
}
let Qe = h({
getEditorApi: () => Q.api,
getLayout: () => I.value,
runLayout: (e, t) => Y(e, t),
emitter: K
});
function $e(e) {
m(o(x) === "suggesting", e.state, e.dispatch, o(S));
}
s([() => o(x), () => o(S)], () => {
let e = j.value;
e && $e(e);
}), s(() => o(y), () => Q.syncEditable());
function et(e) {
let t = G();
if (t === e.state.plugins.includes(U)) return;
let n = e.state.plugins.filter((e) => e !== U && e !== W);
if (t) {
let e = n.indexOf(Ue), t = e === -1 ? n.length : e;
n.splice(t, 0, U, W);
}
e.updateState(e.state.reconfigure({ plugins: n }));
}
s(() => G(), () => {
let e = j.value;
e && et(e);
});
function tt() {
Q.ensureView();
}
function nt() {
V.value = !1, F.value = null, X.dispose(), Q.destroyView(), J.sync(), Q.ensureView(), Q.getView() || rt();
}
function rt() {
let e = A.value;
if (!(!e || o(w))) try {
let t = ne({
document: e,
styles: e.package.styles ?? null,
manager: H,
externalPlugins: We(),
collaborationModules: null,
reason: "mount"
});
M.value = t, Y(t, { reason: "initial" });
} catch (e) {
T?.(e instanceof Error ? e : Error(String(e)));
}
}
s([
t,
u,
k
], () => {
t.value && A.value && !Q.getView() && tt(), J.sync();
}, { flush: "post" });
async function it(e) {
B.value = null, z.value = !1;
try {
let t = await se(e, { password: o(Se) });
A.value = t, nt();
} catch (e) {
let t = e instanceof Error ? e : Error(String(e));
B.value = t.message, T?.(t);
}
}
function at(e) {
B.value = null, A.value = e, nt();
}
async function ot(e) {
let t = j.value, n = A.value;
if (!t || !n) return null;
let r = J.snapshotDocument(n), i = t.state, { resolveSelectiveSaveFlags: a } = await import("@stll/folio-core/docx/selectiveSaveFlags"), s = a(o(Re)), c = pe(i.doc, r), l = c.originalBuffer ?? null, u = s.selectiveSave && e?.selective !== !1, d = u || s.selectiveSaveTripwire, { repackDocx: f, createDocx: p } = await import("@stll/folio-core/docx/rezip"), m = null;
if (d && l) {
let { attemptSelectiveSave: e } = await import("@stll/folio-core/docx/selectiveSave");
m = await e(c, l, {
changedParaIds: he(i),
structuralChange: ge(i),
hasUntrackedChanges: _e(i),
maxBytes: s.selectiveSaveMaxBytes
});
}
let h = u ? m : null, g = null;
if (!h) g = l ? await f(c) : await p(c), h = g;
else if (s.selectiveSaveTripwire) try {
g = await f(c);
} catch {}
if (s.selectiveSaveTripwire && g && O) try {
let { compareSelectiveVsFull: e } = await import("@stll/folio-core/docx/selectiveSaveTripwire");
O(await e(m, g));
} catch {}
return A.value = c, J.sync(), V.value = !1, new Blob([h], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
}
function st() {
let e = A.value;
return e ? J.snapshotDocument(e) : null;
}
function ct(e) {
A.value = e, J.sync();
}
function lt(e) {
return J.getView(e);
}
function ut() {
J.sync();
}
function dt() {
return H.getCommands();
}
function ft() {
j.value?.focus();
}
function pt() {
let e = j.value;
e && Y(e.state, { reason: "manual" });
}
function mt() {
X.dispose(), Z !== null && (window.clearTimeout(Z), Z = null), Q.destroyView(), P.value = [], J.destroy(), H.destroy(), M.value = null, I.value = null, A.value = null, z.value = !1;
}
return r(mt), {
editor: Qe,
editorView: j,
editorState: M,
remoteSelections: P,
headerFooterSelection: F,
isReady: z,
isDirty: V,
parseError: B,
layout: I,
blocks: L,
measures: R,
syncCoordinator: q,
loadBuffer: it,
loadDocument: at,
save: ot,
getDocument: st,
setDocument: ct,
getHeaderFooterView: lt,
syncHeaderFooterViews: ut,
getCommands: dt,
focus: ft,
reLayout: pt,
destroy: mt
};
}
function k(e, t) {
if (t < e.top + 40) {
let n = Math.max(0, e.top + 40 - t);
return -Math.min(12, n / 40 * 12);
}
if (t > e.bottom - 40) {
let n = Math.max(0, t - (e.bottom - 40));
return Math.min(12, n / 40 * 12);
}
return 0;
}
//#endregion
//#region src/composables/useDragAutoScroll.ts
function A({ pagesContainer: e, onScrollExtendSelection: t }) {
let n = null, i = 0, a = 0, o = !1, s = null;
function c() {
if (s) return s;
let t = e.value;
return t ? (s = Se(t), s) : null;
}
function l() {
o = !1, n !== null && (cancelAnimationFrame(n), n = null);
}
function u() {
if (!o) return;
let e = c();
if (!e) return;
let r = k(e.getBoundingClientRect(), a);
r !== 0 && (e.scrollTop += r, t(i, a)), n = requestAnimationFrame(u);
}
function d() {
o || (o = !0, n = requestAnimationFrame(u));
}
function f(e, t) {
if (i = e, a = t, !o) {
let e = c();
if (!e) return;
let n = e.getBoundingClientRect();
(t < n.top + 40 || t > n.bottom - 40) && d();
}
}
return r(() => l()), {
updateMousePosition: f,
stopAutoScroll: l
};
}
//#endregion
//#region src/composables/useTableResize.ts
function j() {
let e = {
active: !1,
startX: 0,
handle: null,
columnIndex: 0,
tablePmStart: 0,
origWidths: {
left: 0,
right: 0
}
}, t = {
active: !1,
startY: 0,
handle: null,
rowIndex: 0,
isEdge: !1,
tablePmStart: 0,
origHeight: 0
}, n = {
active: !1,
startX: 0,
handle: null,
columnIndex: 0,
tablePmStart: 0,
origWidth: 0
}, r = null;
function i() {
return e.active || t.active || n.active;
}
function a(i, a) {
let o = i.target;
return o instanceof HTMLElement ? o.classList.contains("layout-table-resize-handle") ? (i.preventDefault(), i.stopPropagation(), r = a, e.active = !0, e.startX = i.clientX, e.handle = o, o.classList.add("dragging"), e.columnIndex = parseInt(o.dataset.columnIndex ?? "0", 10), e.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), M(a, e), !0) : o.classList.contains("layout-table-row-resize-handle") || o.classList.contains("layout-table-edge-handle-bottom") ? (i.preventDefault(), i.stopPropagation(), r = a, t.active = !0, t.startY = i.clientY, t.handle = o, t.isEdge = o.dataset.isEdge === "bottom", o.classList.add("dragging"), t.rowIndex = parseInt(o.dataset.rowIndex ?? "0", 10), t.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), N(a, t, o), !0) : o.classList.contains("layout-table-edge-handle-right") ? (i.preventDefault(), i.stopPropagation(), r = a, n.active = !0, n.startX = i.clientX, n.handle = o, o.classList.add("dragging"), n.columnIndex = parseInt(o.dataset.columnIndex ?? "0", 10), n.tablePmStart = parseInt(o.dataset.tablePmStart ?? "0", 10), P(a, n), !0) : !1 : !1;
}
function o(r) {
if (e.active && e.handle) {
r.preventDefault();
let t = r.clientX - e.startX, n = parseFloat(e.handle.style.left);
e.handle.style.left = `${n + t}px`, e.startX = r.clientX;
let i = Math.round(t * C), a = e.origWidths.left + i, o = e.origWidths.right - i;
a >= x && o >= x && (e.origWidths = {
left: a,
right: o
});
return;
}
if (t.active && t.handle) {
r.preventDefault();
let e = r.clientY - t.startY, n = parseFloat(t.handle.style.top);
t.handle.style.top = `${n + e}px`, t.startY = r.clientY;
let i = Math.round(e * C), a = t.origHeight + i;
a >= S && (t.origHeight = a);
return;
}
if (n.active && n.handle) {
r.preventDefault();
let e = r.clientX - n.startX, t = parseFloat(n.handle.style.left);
n.handle.style.left = `${t + e}px`, n.startX = r.clientX;
let i = Math.round(e * C), a = n.origWidth + i;
a >= x && (n.origWidth = a);
}
}
function s(i) {
if (e.active) {
e.active = !1, e.handle?.classList.remove("dragging"), r && w(r, {
pmStart: e.tablePmStart,
colIdx: e.columnIndex,
newLeft: e.origWidths.left,
newRight: e.origWidths.right
}), e.handle = null;
return;
}
if (t.active) {
t.active = !1, t.handle?.classList.remove("dragging"), r && we(r, {
pmStart: t.tablePmStart,
rowIdx: t.rowIndex,
newHeight: t.origHeight
}), t.handle = null;
return;
}
n.active && (n.active = !1, n.handle?.classList.remove("dragging"), r && Ce(r, {
pmStart: n.tablePmStart,
colIdx: n.columnIndex,
newWidth: n.origWidth
}), n.handle = null);
}
function c() {
return document.addEventListener("mousemove", o), document.addEventListener("mouseup", s), () => {
document.removeEventListener("mousemove", o), document.removeEventListener("mouseup", s);
};
}
return {
tryStartResize: a,
install: c,
isResizing: i
};
}
function M(e, t) {
let n = Ee(e, t.tablePmStart, t.columnIndex);
n && (t.origWidths = n);
}
function N(e, t, n) {
let r = De(e, t.tablePmStart, t.rowIndex);
if (r != null) {
t.origHeight = r;
return;
}
let i = n.closest(".layout-table")?.querySelector(`[data-row-index="${t.rowIndex}"]`), a = i ? i.getBoundingClientRect().height : 30;
t.origHeight = Math.round(a * C);
}
function P(e, t) {
let n = Te(e, t.tablePmStart, t.columnIndex);
n != null && (t.origWidth = n);
}
//#endregion
//#region src/composables/useTrackedChanges.ts
function F(t, n) {
return e(() => (n.value, T(t.value?.state ?? null)));
}
//#endregion
//#region src/composables/useZoom.ts
var I = D, L = E, R = [
.5,
.75,
1,
1.25,
1.5,
2
];
function z(r = 1) {
let a = i(Math.max(I, Math.min(L, r))), o = e(() => Math.round(a.value * 100)), s = e(() => a.value <= I), c = e(() => a.value >= L);
function l(e) {
a.value = Math.max(I, Math.min(L, Math.round(e * 100) / 100));
}
function u() {
l(a.value + Oe);
}
function d() {
l(a.value - Oe);
}
function f() {
l(1);
}
function p(e) {
(e.ctrlKey || e.metaKey) && (e.preventDefault(), e.deltaY < 0 ? u() : d());
}
function m(e) {
(e.ctrlKey || e.metaKey) && (e.shiftKey || e.altKey || (e.key === "=" || e.key === "+" ? (e.preventDefault(), u()) : e.key === "-" ? (e.preventDefault(), d()) : e.key === "0" && (e.preventDefault(), f())));
}
function h() {
n(() => document.addEventListener("keydown", m)), t(() => document.removeEventListener("keydown", m));
}
return {
zoom: a,
zoomPercent: o,
isMinZoom: s,
isMaxZoom: c,
setZoom: l,
zoomIn: u,
zoomOut: d,
resetZoom: f,
handleWheel: p,
handleKeyDown: m,
installShortcuts: h,
ZOOM_PRESETS: R
};
}
//#endregion
export { A as a, j as i, T as n, O as o, F as r, z as t };

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display