@stll/folio-vue
Advanced tools
| 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; |
@@ -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; |
@@ -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; |
+75
-75
| 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
@@ -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; |
+2
-2
@@ -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 }; |
+4
-1
@@ -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
@@ -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; |
+10
-10
@@ -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; |
+1
-1
| { | ||
| "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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 3 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 3 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1258605
3.36%110
1.85%21160
3.13%