@embedpdf/plugin-view-manager 2.0.0-next.1 → 2.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t="CREATE_VIEW",i="REMOVE_VIEW",n="ADD_DOCUMENT_TO_VIEW",o="REMOVE_DOCUMENT_FROM_VIEW",s="MOVE_DOCUMENT_WITHIN_VIEW",d="SET_VIEW_ACTIVE_DOCUMENT",r="SET_FOCUSED_VIEW";function c(e,i){return{type:t,payload:{viewId:e,createdAt:i}}}function u(e){return{type:i,payload:e}}function w(e,t,i){return{type:n,payload:{viewId:e,documentId:t,index:i}}}function a(e,t){return{type:o,payload:{viewId:e,documentId:t}}}function m(e,t,i){return{type:s,payload:{viewId:e,documentId:t,toIndex:i}}}function v(e,t){return{type:d,payload:{viewId:e,documentId:t}}}function V(e){return{type:r,payload:e}}const h=class extends e.BasePlugin{constructor(t,i,n){super(t,i),this.id=t,this.viewCreated$=e.createBehaviorEmitter(),this.viewRemoved$=e.createBehaviorEmitter(),this.viewFocusChanged$=e.createBehaviorEmitter(),this.documentAddedToView$=e.createBehaviorEmitter(),this.documentRemovedFromView$=e.createBehaviorEmitter(),this.documentReordered$=e.createBehaviorEmitter(),this.viewActiveDocumentChanged$=e.createBehaviorEmitter()}buildCapability(){return{createView:e=>this.createView(e),removeView:e=>this.removeView(e),getAllViews:()=>this.getAllViews(),getViewCount:()=>this.getViewCount(),addDocumentToView:(e,t,i)=>this.addDocumentToView(e,t,i),removeDocumentFromView:(e,t)=>this.removeDocumentFromView(e,t),moveDocumentWithinView:(e,t,i)=>this.moveDocumentWithinView(e,t,i),moveDocumentBetweenViews:(e,t,i,n)=>this.moveDocumentBetweenViews(e,t,i,n),setViewActiveDocument:(e,t)=>this.setViewActiveDocument(e,t),setFocusedView:e=>this.setFocusedView(e),getFocusedViewId:()=>this.state.focusedViewId,getFocusedView:()=>this.getFocusedView(),getView:e=>this.getView(e),getViewDocuments:e=>this.getViewDocuments(e),getViewActiveDocument:e=>this.getViewActiveDocument(e),getDocumentView:e=>this.getDocumentView(e),isDocumentInAnyView:e=>this.isDocumentInAnyView(e),getUnassignedDocuments:e=>this.getUnassignedDocuments(e),onViewCreated:this.viewCreated$.on,onViewRemoved:this.viewRemoved$.on,onViewFocusChanged:this.viewFocusChanged$.on,onDocumentAddedToView:this.documentAddedToView$.on,onDocumentRemovedFromView:this.documentRemovedFromView$.on,onDocumentReordered:this.documentReordered$.on,onViewActiveDocumentChanged:this.viewActiveDocumentChanged$.on}}async initialize(e){const t=this.registry.getPlugin("document-manager");if(t&&t.provides&&(this.docManagerCapability=t.provides(),this.docManagerCapability.onDocumentClosed(e=>{const t=this.getDocumentView(e);t&&this.removeDocumentFromView(t,e)})),e.defaultViewCount&&e.defaultViewCount>0)for(let i=0;i<e.defaultViewCount;i++)this.createView(`view-${i+1}`);this.logger.info("ViewManagerPlugin","Initialize","View Manager Plugin initialized",{defaultViewCount:e.defaultViewCount,hasDocumentManager:!!this.docManagerCapability})}async destroy(){this.viewCreated$.clear(),this.viewRemoved$.clear(),this.viewFocusChanged$.clear(),this.documentAddedToView$.clear(),this.documentRemovedFromView$.clear(),this.documentReordered$.clear(),this.viewActiveDocumentChanged$.clear(),super.destroy()}createView(e){const t=e||this.generateViewId();return this.state.views[t]?(this.logger.warn("ViewManagerPlugin","CreateView",`View ${t} already exists`),t):(this.dispatch(c(t,Date.now())),this.viewCreated$.emit(t),this.logger.info("ViewManagerPlugin","CreateView",`View ${t} created`),t)}removeView(e){this.state.views[e]?1!==this.getViewCount()?(this.dispatch(u(e)),this.viewRemoved$.emit(e),this.logger.info("ViewManagerPlugin","RemoveView",`View ${e} removed`)):this.logger.warn("ViewManagerPlugin","RemoveView","Cannot remove the last view"):this.logger.warn("ViewManagerPlugin","RemoveView",`View ${e} not found`)}addDocumentToView(e,t,i){const n=this.state.views[e];if(!n)throw new Error(`View ${e} not found`);if(this.docManagerCapability&&!this.docManagerCapability.isDocumentOpen(t))throw new Error(`Document ${t} is not open`);const o=this.getDocumentView(t);let s;o&&o!==e&&(s=this.calculateNextActiveDocumentInView(o,t));const d=i??n.documentIds.length;this.logger.info("ViewManagerPlugin","AddDocumentToView",`Adding document ${t} to view ${e}`,{requestedIndex:i,calculatedIndex:d,currentDocumentIds:n.documentIds,previousViewId:o}),this.dispatch(w(e,t,d)),o&&o!==e&&(void 0!==s&&(this.dispatch(v(o,s)),this.viewActiveDocumentChanged$.emit({viewId:o,previousDocumentId:t,currentDocumentId:s})),this.documentRemovedFromView$.emit({viewId:o,documentId:t}),this.logger.info("ViewManagerPlugin","AddDocumentToView",`Document ${t} moved from view ${o} to ${e}`)),this.documentAddedToView$.emit({viewId:e,documentId:t,index:d}),this.logger.info("ViewManagerPlugin","AddDocumentToView",`Document ${t} added to view ${e} at index ${d}`)}removeDocumentFromView(e,t){const i=this.state.views[e];if(!i)throw new Error(`View ${e} not found`);if(!i.documentIds.includes(t))return void this.logger.warn("ViewManagerPlugin","RemoveDocumentFromView",`Document ${t} not in view ${e}`);const n=this.calculateNextActiveDocumentInView(e,t);this.dispatch(a(e,t)),void 0!==n&&(this.dispatch(v(e,n)),this.viewActiveDocumentChanged$.emit({viewId:e,previousDocumentId:t,currentDocumentId:n})),this.documentRemovedFromView$.emit({viewId:e,documentId:t}),this.logger.info("ViewManagerPlugin","RemoveDocumentFromView",`Document ${t} removed from view ${e}`)}moveDocumentWithinView(e,t,i){const n=this.state.views[e];if(!n)throw new Error(`View ${e} not found`);const o=n.documentIds.indexOf(t);if(-1===o)throw new Error(`Document ${t} not found in view ${e}`);if(i<0||i>=n.documentIds.length)throw new Error(`Invalid index ${i}`);this.dispatch(m(e,t,i)),this.documentReordered$.emit({viewId:e,documentId:t,fromIndex:o,toIndex:i})}moveDocumentBetweenViews(e,t,i,n){this.addDocumentToView(t,i,n)}setViewActiveDocument(e,t){const i=this.state.views[e];if(!i)throw new Error(`View ${e} not found`);if(null!==t&&!i.documentIds.includes(t))throw new Error(`Document ${t} not in view ${e}`);const n=i.activeDocumentId;n!==t&&(this.dispatch(v(e,t)),this.viewActiveDocumentChanged$.emit({viewId:e,previousDocumentId:n,currentDocumentId:t}))}getViewDocuments(e){var t;return(null==(t=this.state.views[e])?void 0:t.documentIds)??[]}getViewActiveDocument(e){var t;return(null==(t=this.state.views[e])?void 0:t.activeDocumentId)??null}getDocumentView(e){for(const t in this.state.views)if(this.state.views[t].documentIds.includes(e))return t;return null}isDocumentInAnyView(e){return null!==this.getDocumentView(e)}getUnassignedDocuments(e){const t=new Set(Object.values(this.state.views).flatMap(e=>e.documentIds));return e.filter(e=>!t.has(e.id))}setFocusedView(e){if(!this.state.views[e])throw new Error(`View ${e} not found`);const t=this.state.focusedViewId;t!==e&&(this.dispatch(V(e)),this.viewFocusChanged$.emit({previousViewId:t,currentViewId:e}),this.logger.info("ViewManagerPlugin","SetFocusedView",`Focus changed from ${t} to ${e}`))}getView(e){return this.state.views[e]??null}getFocusedView(){const e=this.state.focusedViewId;return e?this.getView(e):null}getAllViews(){return this.state.viewOrder.map(e=>this.state.views[e]).filter(e=>void 0!==e)}getViewCount(){return Object.keys(this.state.views).length}calculateNextActiveDocumentInView(e,t){const i=this.state.views[e];if(!i)return;if(i.activeDocumentId!==t)return;const n=i.documentIds,o=n.indexOf(t);return-1!==o?o>0?n[o-1]:o<n.length-1?n[o+1]:null:void 0}generateViewId(){return`view-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};h.id="view-manager";let l=h;const g="view-manager",I={id:g,name:"View Manager Plugin",version:"1.0.0",provides:["view-manager"],requires:[],optional:["document-manager"],defaultConfig:{
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t="CREATE_VIEW",i="REMOVE_VIEW",n="ADD_DOCUMENT_TO_VIEW",o="REMOVE_DOCUMENT_FROM_VIEW",s="MOVE_DOCUMENT_WITHIN_VIEW",d="SET_VIEW_ACTIVE_DOCUMENT",r="SET_FOCUSED_VIEW";function c(e,i){return{type:t,payload:{viewId:e,createdAt:i}}}function u(e){return{type:i,payload:e}}function w(e,t,i){return{type:n,payload:{viewId:e,documentId:t,index:i}}}function a(e,t){return{type:o,payload:{viewId:e,documentId:t}}}function m(e,t,i){return{type:s,payload:{viewId:e,documentId:t,toIndex:i}}}function v(e,t){return{type:d,payload:{viewId:e,documentId:t}}}function V(e){return{type:r,payload:e}}const h=class extends e.BasePlugin{constructor(t,i,n){super(t,i),this.id=t,this.viewCreated$=e.createBehaviorEmitter(),this.viewRemoved$=e.createBehaviorEmitter(),this.viewFocusChanged$=e.createBehaviorEmitter(),this.documentAddedToView$=e.createBehaviorEmitter(),this.documentRemovedFromView$=e.createBehaviorEmitter(),this.documentReordered$=e.createBehaviorEmitter(),this.viewActiveDocumentChanged$=e.createBehaviorEmitter()}buildCapability(){return{createView:e=>this.createView(e),removeView:e=>this.removeView(e),getAllViews:()=>this.getAllViews(),getViewCount:()=>this.getViewCount(),addDocumentToView:(e,t,i)=>this.addDocumentToView(e,t,i),removeDocumentFromView:(e,t)=>this.removeDocumentFromView(e,t),moveDocumentWithinView:(e,t,i)=>this.moveDocumentWithinView(e,t,i),moveDocumentBetweenViews:(e,t,i,n)=>this.moveDocumentBetweenViews(e,t,i,n),setViewActiveDocument:(e,t)=>this.setViewActiveDocument(e,t),setFocusedView:e=>this.setFocusedView(e),getFocusedViewId:()=>this.state.focusedViewId,getFocusedView:()=>this.getFocusedView(),getView:e=>this.getView(e),getViewDocuments:e=>this.getViewDocuments(e),getViewActiveDocument:e=>this.getViewActiveDocument(e),getDocumentView:e=>this.getDocumentView(e),isDocumentInAnyView:e=>this.isDocumentInAnyView(e),getUnassignedDocuments:e=>this.getUnassignedDocuments(e),onViewCreated:this.viewCreated$.on,onViewRemoved:this.viewRemoved$.on,onViewFocusChanged:this.viewFocusChanged$.on,onDocumentAddedToView:this.documentAddedToView$.on,onDocumentRemovedFromView:this.documentRemovedFromView$.on,onDocumentReordered:this.documentReordered$.on,onViewActiveDocumentChanged:this.viewActiveDocumentChanged$.on}}async initialize(e){const t=this.registry.getPlugin("document-manager");if(t&&t.provides&&(this.docManagerCapability=t.provides(),this.docManagerCapability.onDocumentClosed(e=>{const t=this.getDocumentView(e);t&&this.removeDocumentFromView(t,e)})),e.defaultViewCount&&e.defaultViewCount>0)for(let i=0;i<e.defaultViewCount;i++)this.createView(`view-${i+1}`);this.logger.info("ViewManagerPlugin","Initialize","View Manager Plugin initialized",{defaultViewCount:e.defaultViewCount,hasDocumentManager:!!this.docManagerCapability})}async destroy(){this.viewCreated$.clear(),this.viewRemoved$.clear(),this.viewFocusChanged$.clear(),this.documentAddedToView$.clear(),this.documentRemovedFromView$.clear(),this.documentReordered$.clear(),this.viewActiveDocumentChanged$.clear(),super.destroy()}createView(e){const t=e||this.generateViewId();return this.state.views[t]?(this.logger.warn("ViewManagerPlugin","CreateView",`View ${t} already exists`),t):(this.dispatch(c(t,Date.now())),this.viewCreated$.emit(t),this.logger.info("ViewManagerPlugin","CreateView",`View ${t} created`),t)}removeView(e){this.state.views[e]?1!==this.getViewCount()?(this.dispatch(u(e)),this.viewRemoved$.emit(e),this.logger.info("ViewManagerPlugin","RemoveView",`View ${e} removed`)):this.logger.warn("ViewManagerPlugin","RemoveView","Cannot remove the last view"):this.logger.warn("ViewManagerPlugin","RemoveView",`View ${e} not found`)}addDocumentToView(e,t,i){const n=this.state.views[e];if(!n)throw new Error(`View ${e} not found`);if(this.docManagerCapability&&!this.docManagerCapability.isDocumentOpen(t))throw new Error(`Document ${t} is not open`);const o=this.getDocumentView(t);let s;o&&o!==e&&(s=this.calculateNextActiveDocumentInView(o,t));const d=i??n.documentIds.length;this.logger.info("ViewManagerPlugin","AddDocumentToView",`Adding document ${t} to view ${e}`,{requestedIndex:i,calculatedIndex:d,currentDocumentIds:n.documentIds,previousViewId:o}),this.dispatch(w(e,t,d)),o&&o!==e&&(void 0!==s&&(this.dispatch(v(o,s)),this.viewActiveDocumentChanged$.emit({viewId:o,previousDocumentId:t,currentDocumentId:s})),this.documentRemovedFromView$.emit({viewId:o,documentId:t}),this.logger.info("ViewManagerPlugin","AddDocumentToView",`Document ${t} moved from view ${o} to ${e}`)),this.documentAddedToView$.emit({viewId:e,documentId:t,index:d}),this.logger.info("ViewManagerPlugin","AddDocumentToView",`Document ${t} added to view ${e} at index ${d}`)}removeDocumentFromView(e,t){const i=this.state.views[e];if(!i)throw new Error(`View ${e} not found`);if(!i.documentIds.includes(t))return void this.logger.warn("ViewManagerPlugin","RemoveDocumentFromView",`Document ${t} not in view ${e}`);const n=this.calculateNextActiveDocumentInView(e,t);this.dispatch(a(e,t)),void 0!==n&&(this.dispatch(v(e,n)),this.viewActiveDocumentChanged$.emit({viewId:e,previousDocumentId:t,currentDocumentId:n})),this.documentRemovedFromView$.emit({viewId:e,documentId:t}),this.logger.info("ViewManagerPlugin","RemoveDocumentFromView",`Document ${t} removed from view ${e}`)}moveDocumentWithinView(e,t,i){const n=this.state.views[e];if(!n)throw new Error(`View ${e} not found`);const o=n.documentIds.indexOf(t);if(-1===o)throw new Error(`Document ${t} not found in view ${e}`);if(i<0||i>=n.documentIds.length)throw new Error(`Invalid index ${i}`);this.dispatch(m(e,t,i)),this.documentReordered$.emit({viewId:e,documentId:t,fromIndex:o,toIndex:i})}moveDocumentBetweenViews(e,t,i,n){this.addDocumentToView(t,i,n)}setViewActiveDocument(e,t){const i=this.state.views[e];if(!i)throw new Error(`View ${e} not found`);if(null!==t&&!i.documentIds.includes(t))throw new Error(`Document ${t} not in view ${e}`);const n=i.activeDocumentId;n!==t&&(this.dispatch(v(e,t)),this.viewActiveDocumentChanged$.emit({viewId:e,previousDocumentId:n,currentDocumentId:t}))}getViewDocuments(e){var t;return(null==(t=this.state.views[e])?void 0:t.documentIds)??[]}getViewActiveDocument(e){var t;return(null==(t=this.state.views[e])?void 0:t.activeDocumentId)??null}getDocumentView(e){for(const t in this.state.views)if(this.state.views[t].documentIds.includes(e))return t;return null}isDocumentInAnyView(e){return null!==this.getDocumentView(e)}getUnassignedDocuments(e){const t=new Set(Object.values(this.state.views).flatMap(e=>e.documentIds));return e.filter(e=>!t.has(e.id))}setFocusedView(e){if(!this.state.views[e])throw new Error(`View ${e} not found`);const t=this.state.focusedViewId;t!==e&&(this.dispatch(V(e)),this.viewFocusChanged$.emit({previousViewId:t,currentViewId:e}),this.logger.info("ViewManagerPlugin","SetFocusedView",`Focus changed from ${t} to ${e}`))}getView(e){return this.state.views[e]??null}getFocusedView(){const e=this.state.focusedViewId;return e?this.getView(e):null}getAllViews(){return this.state.viewOrder.map(e=>this.state.views[e]).filter(e=>void 0!==e)}getViewCount(){return Object.keys(this.state.views).length}calculateNextActiveDocumentInView(e,t){const i=this.state.views[e];if(!i)return;if(i.activeDocumentId!==t)return;const n=i.documentIds,o=n.indexOf(t);return-1!==o?o>0?n[o-1]:o<n.length-1?n[o+1]:null:void 0}generateViewId(){return`view-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};h.id="view-manager";let l=h;const g="view-manager",I={id:g,name:"View Manager Plugin",version:"1.0.0",provides:["view-manager"],requires:[],optional:["document-manager"],defaultConfig:{defaultViewCount:1}},D={views:{},viewOrder:[],focusedViewId:null},f={manifest:I,create:(e,t)=>new l(g,e,t),reducer:(e=D,c)=>{switch(c.type){case t:{const{viewId:t,createdAt:i}=c.payload;return e.views[t]?e:{...e,views:{...e.views,[t]:{id:t,documentIds:[],activeDocumentId:null,createdAt:i}},viewOrder:[...e.viewOrder,t],focusedViewId:e.focusedViewId??t}}case i:{const t=c.payload,{[t]:i,...n}=e.views;let o=e.focusedViewId;if(e.focusedViewId===t){const i=e.viewOrder.filter(e=>e!==t);o=i.length>0?i[0]:null}return{...e,views:n,viewOrder:e.viewOrder.filter(e=>e!==t),focusedViewId:o}}case n:{const{viewId:t,documentId:i,index:n}=c.payload;if(!e.views[t])return e;const o={...e.views};for(const e in o)o[e].documentIds.includes(i)&&(o[e]={...o[e],documentIds:o[e].documentIds.filter(e=>e!==i)});const s=[...o[t].documentIds];return void 0!==n&&n>=0&&n<=s.length?s.splice(n,0,i):s.push(i),o[t]={...o[t],documentIds:s,activeDocumentId:o[t].activeDocumentId||i},{...e,views:o}}case o:{const{viewId:t,documentId:i}=c.payload,n=e.views[t];if(!n||!n.documentIds.includes(i))return e;const o=n.documentIds.filter(e=>e!==i);return{...e,views:{...e.views,[t]:{...n,documentIds:o}}}}case s:{const{viewId:t,documentId:i,toIndex:n}=c.payload,o=e.views[t];if(!o||!o.documentIds.includes(i))return e;const s=o.documentIds.indexOf(i);if(s===n)return e;const d=[...o.documentIds];return d.splice(s,1),d.splice(n,0,i),{...e,views:{...e.views,[t]:{...o,documentIds:d}}}}case d:{const{viewId:t,documentId:i}=c.payload,n=e.views[t];return n&&(null===i||n.documentIds.includes(i))?{...e,views:{...e.views,[t]:{...n,activeDocumentId:i}}}:e}case r:{const t=c.payload;return null===t||e.views[t]?{...e,focusedViewId:t}:e}default:return e}},initialState:D};exports.ADD_DOCUMENT_TO_VIEW=n,exports.CREATE_VIEW=t,exports.MOVE_DOCUMENT_WITHIN_VIEW=s,exports.REMOVE_DOCUMENT_FROM_VIEW=o,exports.REMOVE_VIEW=i,exports.SET_FOCUSED_VIEW=r,exports.SET_VIEW_ACTIVE_DOCUMENT=d,exports.VIEW_MANAGER_PLUGIN_ID=g,exports.ViewManagerPlugin=l,exports.ViewManagerPluginPackage=f,exports.addDocumentToView=w,exports.createView=c,exports.manifest=I,exports.moveDocumentWithinView=m,exports.removeDocumentFromView=a,exports.removeView=u,exports.setFocusedView=V,exports.setViewActiveDocument=v;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/lib/actions.ts","../src/lib/view-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\n\nexport const CREATE_VIEW = 'CREATE_VIEW';\nexport const REMOVE_VIEW = 'REMOVE_VIEW';\nexport const ADD_DOCUMENT_TO_VIEW = 'ADD_DOCUMENT_TO_VIEW';\nexport const REMOVE_DOCUMENT_FROM_VIEW = 'REMOVE_DOCUMENT_FROM_VIEW';\nexport const MOVE_DOCUMENT_WITHIN_VIEW = 'MOVE_DOCUMENT_WITHIN_VIEW';\nexport const SET_VIEW_ACTIVE_DOCUMENT = 'SET_VIEW_ACTIVE_DOCUMENT';\nexport const SET_FOCUSED_VIEW = 'SET_FOCUSED_VIEW';\n\nexport interface CreateViewAction extends Action {\n type: typeof CREATE_VIEW;\n payload: {\n viewId: string;\n createdAt: number;\n };\n}\n\nexport interface RemoveViewAction extends Action {\n type: typeof REMOVE_VIEW;\n payload: string; // viewId\n}\n\nexport interface AddDocumentToViewAction extends Action {\n type: typeof ADD_DOCUMENT_TO_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n index?: number;\n };\n}\n\nexport interface RemoveDocumentFromViewAction extends Action {\n type: typeof REMOVE_DOCUMENT_FROM_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n };\n}\n\nexport interface MoveDocumentWithinViewAction extends Action {\n type: typeof MOVE_DOCUMENT_WITHIN_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n toIndex: number;\n };\n}\n\nexport interface SetViewActiveDocumentAction extends Action {\n type: typeof SET_VIEW_ACTIVE_DOCUMENT;\n payload: {\n viewId: string;\n documentId: string | null;\n };\n}\n\nexport interface SetFocusedViewAction extends Action {\n type: typeof SET_FOCUSED_VIEW;\n payload: string | null; // viewId or null\n}\n\nexport type ViewManagerAction =\n | CreateViewAction\n | RemoveViewAction\n | AddDocumentToViewAction\n | RemoveDocumentFromViewAction\n | MoveDocumentWithinViewAction\n | SetViewActiveDocumentAction\n | SetFocusedViewAction;\n\nexport function createView(viewId: string, createdAt: number): CreateViewAction {\n return { type: CREATE_VIEW, payload: { viewId, createdAt } };\n}\n\nexport function removeView(viewId: string): RemoveViewAction {\n return { type: REMOVE_VIEW, payload: viewId };\n}\n\nexport function addDocumentToView(\n viewId: string,\n documentId: string,\n index?: number,\n): AddDocumentToViewAction {\n return { type: ADD_DOCUMENT_TO_VIEW, payload: { viewId, documentId, index } };\n}\n\nexport function removeDocumentFromView(\n viewId: string,\n documentId: string,\n): RemoveDocumentFromViewAction {\n return { type: REMOVE_DOCUMENT_FROM_VIEW, payload: { viewId, documentId } };\n}\n\nexport function moveDocumentWithinView(\n viewId: string,\n documentId: string,\n toIndex: number,\n): MoveDocumentWithinViewAction {\n return { type: MOVE_DOCUMENT_WITHIN_VIEW, payload: { viewId, documentId, toIndex } };\n}\n\nexport function setViewActiveDocument(\n viewId: string,\n documentId: string | null,\n): SetViewActiveDocumentAction {\n return { type: SET_VIEW_ACTIVE_DOCUMENT, payload: { viewId, documentId } };\n}\n\nexport function setFocusedView(viewId: string | null): SetFocusedViewAction {\n return { type: SET_FOCUSED_VIEW, payload: viewId };\n}\n","import { BasePlugin, PluginRegistry, createBehaviorEmitter, DocumentState } from '@embedpdf/core';\nimport type {\n DocumentManagerCapability,\n DocumentManagerPlugin,\n} from '@embedpdf/plugin-document-manager';\n\nimport {\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerCapability,\n View,\n ViewChangeEvent,\n ViewActiveDocumentChangedEvent,\n ViewDocumentReorderedEvent,\n ViewDocumentRemovedEvent,\n ViewDocumentAddedEvent,\n} from './types';\nimport {\n ViewManagerAction,\n createView as createViewAction,\n removeView as removeViewAction,\n setFocusedView as setFocusedViewAction,\n setViewActiveDocument,\n moveDocumentWithinView,\n removeDocumentFromView,\n addDocumentToView,\n} from './actions';\n\nexport class ViewManagerPlugin extends BasePlugin<\n ViewManagerPluginConfig,\n ViewManagerCapability,\n ViewManagerState,\n ViewManagerAction\n> {\n static readonly id = 'view-manager' as const;\n\n private readonly viewCreated$ = createBehaviorEmitter<string>();\n private readonly viewRemoved$ = createBehaviorEmitter<string>();\n private readonly viewFocusChanged$ = createBehaviorEmitter<ViewChangeEvent>();\n private readonly documentAddedToView$ = createBehaviorEmitter<ViewDocumentAddedEvent>();\n private readonly documentRemovedFromView$ = createBehaviorEmitter<ViewDocumentRemovedEvent>();\n private readonly documentReordered$ = createBehaviorEmitter<ViewDocumentReorderedEvent>();\n private readonly viewActiveDocumentChanged$ =\n createBehaviorEmitter<ViewActiveDocumentChangedEvent>();\n\n // Optional integration with DocumentManager\n private docManagerCapability?: DocumentManagerCapability;\n\n constructor(\n public readonly id: string,\n registry: PluginRegistry,\n config?: ViewManagerPluginConfig,\n ) {\n super(id, registry);\n }\n\n protected buildCapability(): ViewManagerCapability {\n return {\n // View lifecycle\n createView: (viewId) => this.createView(viewId),\n removeView: (viewId) => this.removeView(viewId),\n getAllViews: () => this.getAllViews(),\n getViewCount: () => this.getViewCount(),\n\n // Document management\n addDocumentToView: (viewId, documentId, index) =>\n this.addDocumentToView(viewId, documentId, index),\n removeDocumentFromView: (viewId, documentId) =>\n this.removeDocumentFromView(viewId, documentId),\n moveDocumentWithinView: (viewId, documentId, toIndex) =>\n this.moveDocumentWithinView(viewId, documentId, toIndex),\n moveDocumentBetweenViews: (fromViewId, toViewId, documentId, toIndex) =>\n this.moveDocumentBetweenViews(fromViewId, toViewId, documentId, toIndex),\n setViewActiveDocument: (viewId, documentId) => this.setViewActiveDocument(viewId, documentId),\n\n // Focus management\n setFocusedView: (viewId) => this.setFocusedView(viewId),\n getFocusedViewId: () => this.state.focusedViewId,\n getFocusedView: () => this.getFocusedView(),\n\n // Queries\n getView: (viewId) => this.getView(viewId),\n getViewDocuments: (viewId) => this.getViewDocuments(viewId),\n getViewActiveDocument: (viewId) => this.getViewActiveDocument(viewId),\n getDocumentView: (documentId) => this.getDocumentView(documentId),\n isDocumentInAnyView: (documentId) => this.isDocumentInAnyView(documentId),\n getUnassignedDocuments: (documentStates) => this.getUnassignedDocuments(documentStates),\n\n // Events\n onViewCreated: this.viewCreated$.on,\n onViewRemoved: this.viewRemoved$.on,\n onViewFocusChanged: this.viewFocusChanged$.on,\n onDocumentAddedToView: this.documentAddedToView$.on,\n onDocumentRemovedFromView: this.documentRemovedFromView$.on,\n onDocumentReordered: this.documentReordered$.on,\n onViewActiveDocumentChanged: this.viewActiveDocumentChanged$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Plugin Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(config: ViewManagerPluginConfig): Promise<void> {\n // Try to get DocumentManager if it exists (optional dependency)\n const docManager = this.registry.getPlugin<DocumentManagerPlugin>('document-manager');\n if (docManager && docManager.provides) {\n this.docManagerCapability = docManager.provides();\n\n this.docManagerCapability.onDocumentClosed((documentId) => {\n const viewId = this.getDocumentView(documentId);\n if (viewId) {\n this.removeDocumentFromView(viewId, documentId);\n }\n });\n }\n\n // Create default views if configured\n if (config.defaultViewCount && config.defaultViewCount > 0) {\n for (let i = 0; i < config.defaultViewCount; i++) {\n this.createView(`view-${i + 1}`);\n }\n }\n\n this.logger.info('ViewManagerPlugin', 'Initialize', 'View Manager Plugin initialized', {\n defaultViewCount: config.defaultViewCount,\n hasDocumentManager: !!this.docManagerCapability,\n });\n }\n\n async destroy(): Promise<void> {\n // Clear all emitters\n this.viewCreated$.clear();\n this.viewRemoved$.clear();\n this.viewFocusChanged$.clear();\n this.documentAddedToView$.clear();\n this.documentRemovedFromView$.clear();\n this.documentReordered$.clear();\n this.viewActiveDocumentChanged$.clear();\n\n super.destroy();\n }\n\n // ─────────────────────────────────────────────────────────\n // View Lifecycle\n // ─────────────────────────────────────────────────────────\n\n private createView(viewId?: string): string {\n const id = viewId || this.generateViewId();\n\n if (this.state.views[id]) {\n this.logger.warn('ViewManagerPlugin', 'CreateView', `View ${id} already exists`);\n return id;\n }\n\n this.dispatch(createViewAction(id, Date.now()));\n this.viewCreated$.emit(id);\n\n this.logger.info('ViewManagerPlugin', 'CreateView', `View ${id} created`);\n\n return id;\n }\n\n private removeView(viewId: string): void {\n const view = this.state.views[viewId];\n\n if (!view) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', `View ${viewId} not found`);\n return;\n }\n\n // Don't allow removing the last view\n if (this.getViewCount() === 1) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', 'Cannot remove the last view');\n return;\n }\n\n this.dispatch(removeViewAction(viewId));\n this.viewRemoved$.emit(viewId);\n\n this.logger.info('ViewManagerPlugin', 'RemoveView', `View ${viewId} removed`);\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Assignment\n // ─────────────────────────────────────────────────────────\n\n // Document Management Methods\n private addDocumentToView(viewId: string, documentId: string, index?: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n // Validate document exists if DocumentManager is present\n if (this.docManagerCapability) {\n if (!this.docManagerCapability.isDocumentOpen(documentId)) {\n throw new Error(`Document ${documentId} is not open`);\n }\n }\n\n // Check if document is already in another view (before state update)\n const previousViewId = this.getDocumentView(documentId);\n\n // Calculate next active document for the previous view if needed\n let nextActiveDocumentIdForPreviousView: string | null | undefined;\n if (previousViewId && previousViewId !== viewId) {\n nextActiveDocumentIdForPreviousView = this.calculateNextActiveDocumentInView(\n previousViewId,\n documentId,\n );\n }\n\n // Calculate the actual index - must account for the document being removed from this view\n // if it was already here (though we checked above, the reducer also handles this)\n const actualIndex = index ?? view.documentIds.length;\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Adding document ${documentId} to view ${viewId}`,\n {\n requestedIndex: index,\n calculatedIndex: actualIndex,\n currentDocumentIds: view.documentIds,\n previousViewId,\n },\n );\n\n this.dispatch(addDocumentToView(viewId, documentId, actualIndex));\n\n // Handle the previous view if document was moved\n if (previousViewId && previousViewId !== viewId) {\n // Set the next active document in the previous view if needed\n if (nextActiveDocumentIdForPreviousView !== undefined) {\n this.dispatch(setViewActiveDocument(previousViewId, nextActiveDocumentIdForPreviousView));\n\n // Emit active document changed event for the previous view\n this.viewActiveDocumentChanged$.emit({\n viewId: previousViewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentIdForPreviousView,\n });\n }\n\n // Emit removal event\n this.documentRemovedFromView$.emit({\n viewId: previousViewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} moved from view ${previousViewId} to ${viewId}`,\n );\n }\n\n // Emit addition event\n this.documentAddedToView$.emit({\n viewId,\n documentId,\n index: actualIndex,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} added to view ${viewId} at index ${actualIndex}`,\n );\n }\n\n private removeDocumentFromView(viewId: string, documentId: string): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (!view.documentIds.includes(documentId)) {\n this.logger.warn(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} not in view ${viewId}`,\n );\n return;\n }\n\n // Calculate next active document if we're removing the currently active one\n const nextActiveDocumentId = this.calculateNextActiveDocumentInView(viewId, documentId);\n\n this.dispatch(removeDocumentFromView(viewId, documentId));\n\n // Set the next active document if needed\n if (nextActiveDocumentId !== undefined) {\n this.dispatch(setViewActiveDocument(viewId, nextActiveDocumentId));\n\n // Emit active document changed event\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentId,\n });\n }\n\n this.documentRemovedFromView$.emit({\n viewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} removed from view ${viewId}`,\n );\n }\n\n private moveDocumentWithinView(viewId: string, documentId: string, toIndex: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === -1) {\n throw new Error(`Document ${documentId} not found in view ${viewId}`);\n }\n\n if (toIndex < 0 || toIndex >= view.documentIds.length) {\n throw new Error(`Invalid index ${toIndex}`);\n }\n\n this.dispatch(moveDocumentWithinView(viewId, documentId, toIndex));\n\n this.documentReordered$.emit({\n viewId,\n documentId,\n fromIndex,\n toIndex,\n });\n }\n\n private moveDocumentBetweenViews(\n fromViewId: string,\n toViewId: string,\n documentId: string,\n toIndex?: number,\n ): void {\n // Just use addDocumentToView - it handles removing from the source view\n // and all the next active document calculations\n this.addDocumentToView(toViewId, documentId, toIndex);\n }\n\n private setViewActiveDocument(viewId: string, documentId: string | null): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (documentId !== null && !view.documentIds.includes(documentId)) {\n throw new Error(`Document ${documentId} not in view ${viewId}`);\n }\n\n const previousDocumentId = view.activeDocumentId;\n if (previousDocumentId === documentId) return;\n\n this.dispatch(setViewActiveDocument(viewId, documentId));\n\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId,\n currentDocumentId: documentId,\n });\n }\n\n // Query Methods\n private getViewDocuments(viewId: string): string[] {\n return this.state.views[viewId]?.documentIds ?? [];\n }\n\n private getViewActiveDocument(viewId: string): string | null {\n return this.state.views[viewId]?.activeDocumentId ?? null;\n }\n\n private getDocumentView(documentId: string): string | null {\n for (const viewId in this.state.views) {\n if (this.state.views[viewId].documentIds.includes(documentId)) {\n return viewId;\n }\n }\n return null;\n }\n\n private isDocumentInAnyView(documentId: string): boolean {\n return this.getDocumentView(documentId) !== null;\n }\n\n private getUnassignedDocuments(documentStates: DocumentState[]): DocumentState[] {\n const assignedDocIds = new Set(Object.values(this.state.views).flatMap((v) => v.documentIds));\n\n return documentStates.filter((doc) => !assignedDocIds.has(doc.id));\n }\n\n // ─────────────────────────────────────────────────────────\n // Focus Management\n // ─────────────────────────────────────────────────────────\n\n private setFocusedView(viewId: string): void {\n if (!this.state.views[viewId]) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const previousViewId = this.state.focusedViewId;\n\n if (previousViewId === viewId) {\n return; // Already focused\n }\n\n this.dispatch(setFocusedViewAction(viewId));\n\n this.viewFocusChanged$.emit({\n previousViewId,\n currentViewId: viewId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'SetFocusedView',\n `Focus changed from ${previousViewId} to ${viewId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Queries\n // ─────────────────────────────────────────────────────────\n\n private getView(viewId: string): View | null {\n return this.state.views[viewId] ?? null;\n }\n\n private getFocusedView(): View | null {\n const focusedViewId = this.state.focusedViewId;\n if (!focusedViewId) return null;\n return this.getView(focusedViewId);\n }\n\n private getAllViews(): View[] {\n return this.state.viewOrder\n .map((viewId) => this.state.views[viewId])\n .filter((view): view is View => view !== undefined);\n }\n\n private getViewCount(): number {\n return Object.keys(this.state.views).length;\n }\n\n // ─────────────────────────────────────────────────────────\n // Helper Methods\n // ─────────────────────────────────────────────────────────\n\n /**\n * Calculate the next active document when removing a document from a view\n * Returns undefined if the document being removed is not the active document\n * Returns the next document ID (left first, then right) or null if no documents remain\n */\n private calculateNextActiveDocumentInView(\n viewId: string,\n removingDocumentId: string,\n ): string | null | undefined {\n const view = this.state.views[viewId];\n if (!view) return undefined;\n\n const currentActiveId = view.activeDocumentId;\n\n // Only calculate if we're removing the active document\n if (currentActiveId !== removingDocumentId) {\n return undefined;\n }\n\n const documentIds = view.documentIds;\n const removingIndex = documentIds.indexOf(removingDocumentId);\n\n if (removingIndex === -1) return undefined;\n\n // Try left first, then right, then null\n if (removingIndex > 0) {\n return documentIds[removingIndex - 1];\n } else if (removingIndex < documentIds.length - 1) {\n return documentIds[removingIndex + 1];\n } else {\n return null;\n }\n }\n\n private generateViewId(): string {\n return `view-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { ViewManagerPluginConfig } from './types';\n\nexport const VIEW_MANAGER_PLUGIN_ID = 'view-manager';\n\nexport const manifest: PluginManifest<ViewManagerPluginConfig> = {\n id: VIEW_MANAGER_PLUGIN_ID,\n name: 'View Manager Plugin',\n version: '1.0.0',\n provides: ['view-manager'],\n requires: [],\n optional: ['document-manager'],\n defaultConfig: {\n enabled: true,\n defaultViewCount: 1,\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { ViewManagerState } from './types';\nimport {\n ViewManagerAction,\n CREATE_VIEW,\n REMOVE_VIEW,\n SET_FOCUSED_VIEW,\n ADD_DOCUMENT_TO_VIEW,\n REMOVE_DOCUMENT_FROM_VIEW,\n MOVE_DOCUMENT_WITHIN_VIEW,\n SET_VIEW_ACTIVE_DOCUMENT,\n} from './actions';\n\nexport const initialState: ViewManagerState = {\n views: {},\n viewOrder: [],\n focusedViewId: null,\n};\n\nexport const viewManagerReducer: Reducer<ViewManagerState, ViewManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case CREATE_VIEW: {\n const { viewId, createdAt } = action.payload;\n\n if (state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n id: viewId,\n documentIds: [],\n activeDocumentId: null,\n createdAt,\n },\n },\n viewOrder: [...state.viewOrder, viewId],\n focusedViewId: state.focusedViewId ?? viewId,\n };\n }\n\n case REMOVE_VIEW: {\n const viewId = action.payload;\n const { [viewId]: removed, ...remainingViews } = state.views;\n\n let newFocusedViewId = state.focusedViewId;\n if (state.focusedViewId === viewId) {\n const remainingIds = state.viewOrder.filter((id) => id !== viewId);\n newFocusedViewId = remainingIds.length > 0 ? remainingIds[0] : null;\n }\n\n return {\n ...state,\n views: remainingViews,\n viewOrder: state.viewOrder.filter((id) => id !== viewId),\n focusedViewId: newFocusedViewId,\n };\n }\n\n case ADD_DOCUMENT_TO_VIEW: {\n const { viewId, documentId, index } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n\n // Remove document from any other view first\n const updatedViews = { ...state.views };\n for (const vid in updatedViews) {\n if (updatedViews[vid].documentIds.includes(documentId)) {\n updatedViews[vid] = {\n ...updatedViews[vid],\n documentIds: updatedViews[vid].documentIds.filter((id) => id !== documentId),\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n };\n }\n }\n\n // Add to target view\n const newDocumentIds = [...updatedViews[viewId].documentIds];\n if (index !== undefined && index >= 0 && index <= newDocumentIds.length) {\n newDocumentIds.splice(index, 0, documentId);\n } else {\n newDocumentIds.push(documentId);\n }\n\n updatedViews[viewId] = {\n ...updatedViews[viewId],\n documentIds: newDocumentIds,\n // Auto-set as active if it's the first document or no active document\n activeDocumentId: updatedViews[viewId].activeDocumentId || documentId,\n };\n\n return {\n ...state,\n views: updatedViews,\n };\n }\n\n case REMOVE_DOCUMENT_FROM_VIEW: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const newDocumentIds = view.documentIds.filter((id) => id !== documentId);\n\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case MOVE_DOCUMENT_WITHIN_VIEW: {\n const { viewId, documentId, toIndex } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === toIndex) return state;\n\n const newDocumentIds = [...view.documentIds];\n newDocumentIds.splice(fromIndex, 1);\n newDocumentIds.splice(toIndex, 0, documentId);\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case SET_VIEW_ACTIVE_DOCUMENT: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n if (documentId !== null && !view.documentIds.includes(documentId)) return state;\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n activeDocumentId: documentId,\n },\n },\n };\n }\n\n case SET_FOCUSED_VIEW: {\n const viewId = action.payload;\n\n if (viewId !== null && !state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n focusedViewId: viewId,\n };\n }\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { ViewManagerPlugin } from './view-manager-plugin';\nimport { manifest, VIEW_MANAGER_PLUGIN_ID } from './manifest';\nimport { ViewManagerPluginConfig, ViewManagerState } from './types';\nimport { viewManagerReducer, initialState } from './reducer';\nimport { ViewManagerAction } from './actions';\n\nexport const ViewManagerPluginPackage: PluginPackage<\n ViewManagerPlugin,\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerAction\n> = {\n manifest,\n create: (registry, config) => new ViewManagerPlugin(VIEW_MANAGER_PLUGIN_ID, registry, config),\n reducer: viewManagerReducer,\n initialState,\n};\n\nexport * from './view-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\n"],"names":["CREATE_VIEW","REMOVE_VIEW","ADD_DOCUMENT_TO_VIEW","REMOVE_DOCUMENT_FROM_VIEW","MOVE_DOCUMENT_WITHIN_VIEW","SET_VIEW_ACTIVE_DOCUMENT","SET_FOCUSED_VIEW","createView","viewId","createdAt","type","payload","removeView","addDocumentToView","documentId","index","removeDocumentFromView","moveDocumentWithinView","toIndex","setViewActiveDocument","setFocusedView","_ViewManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","viewCreated$","createBehaviorEmitter","viewRemoved$","viewFocusChanged$","documentAddedToView$","documentRemovedFromView$","documentReordered$","viewActiveDocumentChanged$","buildCapability","getAllViews","getViewCount","moveDocumentBetweenViews","fromViewId","toViewId","getFocusedViewId","state","focusedViewId","getFocusedView","getView","getViewDocuments","getViewActiveDocument","getDocumentView","isDocumentInAnyView","getUnassignedDocuments","documentStates","onViewCreated","on","onViewRemoved","onViewFocusChanged","onDocumentAddedToView","onDocumentRemovedFromView","onDocumentReordered","onViewActiveDocumentChanged","initialize","docManager","getPlugin","provides","docManagerCapability","onDocumentClosed","defaultViewCount","i","logger","info","hasDocumentManager","destroy","clear","generateViewId","views","warn","dispatch","createViewAction","Date","now","emit","removeViewAction","view","Error","isDocumentOpen","previousViewId","nextActiveDocumentIdForPreviousView","calculateNextActiveDocumentInView","actualIndex","documentIds","length","requestedIndex","calculatedIndex","currentDocumentIds","previousDocumentId","currentDocumentId","includes","nextActiveDocumentId","fromIndex","indexOf","activeDocumentId","_a","assignedDocIds","Set","Object","values","flatMap","v","filter","doc","has","setFocusedViewAction","currentViewId","viewOrder","map","keys","removingDocumentId","removingIndex","Math","random","toString","substr","ViewManagerPlugin","VIEW_MANAGER_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","enabled","initialState","ViewManagerPluginPackage","create","reducer","action","removed","remainingViews","newFocusedViewId","remainingIds","updatedViews","vid","newDocumentIds","splice","push"],"mappings":"kHAEaA,EAAc,cACdC,EAAc,cACdC,EAAuB,uBACvBC,EAA4B,4BAC5BC,EAA4B,4BAC5BC,EAA2B,2BAC3BC,EAAmB,mBA+DzB,SAASC,EAAWC,EAAgBC,GACzC,MAAO,CAAEC,KAAMV,EAAaW,QAAS,CAAEH,SAAQC,aACjD,CAEO,SAASG,EAAWJ,GACzB,MAAO,CAAEE,KAAMT,EAAaU,QAASH,EACvC,CAEO,SAASK,EACdL,EACAM,EACAC,GAEA,MAAO,CAAEL,KAAMR,EAAsBS,QAAS,CAAEH,SAAQM,aAAYC,SACtE,CAEO,SAASC,EACdR,EACAM,GAEA,MAAO,CAAEJ,KAAMP,EAA2BQ,QAAS,CAAEH,SAAQM,cAC/D,CAEO,SAASG,EACdT,EACAM,EACAI,GAEA,MAAO,CAAER,KAAMN,EAA2BO,QAAS,CAAEH,SAAQM,aAAYI,WAC3E,CAEO,SAASC,EACdX,EACAM,GAEA,MAAO,CAAEJ,KAAML,EAA0BM,QAAS,CAAEH,SAAQM,cAC9D,CAEO,SAASM,EAAeZ,GAC7B,MAAO,CAAEE,KAAMJ,EAAkBK,QAASH,EAC5C,CCnFO,MAAMa,EAAN,cAAgCC,EAAAA,WAoBrC,WAAAC,CACkBC,EAChBC,EACAC,GAEAC,MAAMH,EAAIC,GAJMG,KAAAJ,GAAAA,EAblBI,KAAiBC,aAAeC,0BAChCF,KAAiBG,aAAeD,0BAChCF,KAAiBI,kBAAoBF,0BACrCF,KAAiBK,qBAAuBH,0BACxCF,KAAiBM,yBAA2BJ,0BAC5CF,KAAiBO,mBAAqBL,0BACtCF,KAAiBQ,2BACfN,yBAWF,CAEU,eAAAO,GACR,MAAO,CAEL9B,WAAaC,GAAWoB,KAAKrB,WAAWC,GACxCI,WAAaJ,GAAWoB,KAAKhB,WAAWJ,GACxC8B,YAAa,IAAMV,KAAKU,cACxBC,aAAc,IAAMX,KAAKW,eAGzB1B,kBAAmB,CAACL,EAAQM,EAAYC,IACtCa,KAAKf,kBAAkBL,EAAQM,EAAYC,GAC7CC,uBAAwB,CAACR,EAAQM,IAC/Bc,KAAKZ,uBAAuBR,EAAQM,GACtCG,uBAAwB,CAACT,EAAQM,EAAYI,IAC3CU,KAAKX,uBAAuBT,EAAQM,EAAYI,GAClDsB,yBAA0B,CAACC,EAAYC,EAAU5B,EAAYI,IAC3DU,KAAKY,yBAAyBC,EAAYC,EAAU5B,EAAYI,GAClEC,sBAAuB,CAACX,EAAQM,IAAec,KAAKT,sBAAsBX,EAAQM,GAGlFM,eAAiBZ,GAAWoB,KAAKR,eAAeZ,GAChDmC,iBAAkB,IAAMf,KAAKgB,MAAMC,cACnCC,eAAgB,IAAMlB,KAAKkB,iBAG3BC,QAAUvC,GAAWoB,KAAKmB,QAAQvC,GAClCwC,iBAAmBxC,GAAWoB,KAAKoB,iBAAiBxC,GACpDyC,sBAAwBzC,GAAWoB,KAAKqB,sBAAsBzC,GAC9D0C,gBAAkBpC,GAAec,KAAKsB,gBAAgBpC,GACtDqC,oBAAsBrC,GAAec,KAAKuB,oBAAoBrC,GAC9DsC,uBAAyBC,GAAmBzB,KAAKwB,uBAAuBC,GAGxEC,cAAe1B,KAAKC,aAAa0B,GACjCC,cAAe5B,KAAKG,aAAawB,GACjCE,mBAAoB7B,KAAKI,kBAAkBuB,GAC3CG,sBAAuB9B,KAAKK,qBAAqBsB,GACjDI,0BAA2B/B,KAAKM,yBAAyBqB,GACzDK,oBAAqBhC,KAAKO,mBAAmBoB,GAC7CM,4BAA6BjC,KAAKQ,2BAA2BmB,GAEjE,CAMA,gBAAMO,CAAWpC,GAEf,MAAMqC,EAAanC,KAAKH,SAASuC,UAAiC,oBAalE,GAZID,GAAcA,EAAWE,WAC3BrC,KAAKsC,qBAAuBH,EAAWE,WAEvCrC,KAAKsC,qBAAqBC,iBAAkBrD,IAC1C,MAAMN,EAASoB,KAAKsB,gBAAgBpC,GAChCN,GACFoB,KAAKZ,uBAAuBR,EAAQM,MAMtCY,EAAO0C,kBAAoB1C,EAAO0C,iBAAmB,EACvD,IAAA,IAASC,EAAI,EAAGA,EAAI3C,EAAO0C,iBAAkBC,IAC3CzC,KAAKrB,WAAW,QAAQ8D,EAAI,KAIhCzC,KAAK0C,OAAOC,KAAK,oBAAqB,aAAc,kCAAmC,CACrFH,iBAAkB1C,EAAO0C,iBACzBI,qBAAsB5C,KAAKsC,sBAE/B,CAEA,aAAMO,GAEJ7C,KAAKC,aAAa6C,QAClB9C,KAAKG,aAAa2C,QAClB9C,KAAKI,kBAAkB0C,QACvB9C,KAAKK,qBAAqByC,QAC1B9C,KAAKM,yBAAyBwC,QAC9B9C,KAAKO,mBAAmBuC,QACxB9C,KAAKQ,2BAA2BsC,QAEhC/C,MAAM8C,SACR,CAMQ,UAAAlE,CAAWC,GACjB,MAAMgB,EAAKhB,GAAUoB,KAAK+C,iBAE1B,OAAI/C,KAAKgB,MAAMgC,MAAMpD,IACnBI,KAAK0C,OAAOO,KAAK,oBAAqB,aAAc,QAAQrD,oBACrDA,IAGTI,KAAKkD,SAASC,EAAiBvD,EAAIwD,KAAKC,QACxCrD,KAAKC,aAAaqD,KAAK1D,GAEvBI,KAAK0C,OAAOC,KAAK,oBAAqB,aAAc,QAAQ/C,aAErDA,EACT,CAEQ,UAAAZ,CAAWJ,GACJoB,KAAKgB,MAAMgC,MAAMpE,GAQF,IAAxBoB,KAAKW,gBAKTX,KAAKkD,SAASK,EAAiB3E,IAC/BoB,KAAKG,aAAamD,KAAK1E,GAEvBoB,KAAK0C,OAAOC,KAAK,oBAAqB,aAAc,QAAQ/D,cAP1DoB,KAAK0C,OAAOO,KAAK,oBAAqB,aAAc,+BANpDjD,KAAK0C,OAAOO,KAAK,oBAAqB,aAAc,QAAQrE,cAchE,CAOQ,iBAAAK,CAAkBL,EAAgBM,EAAoBC,GAC5D,MAAMqE,EAAOxD,KAAKgB,MAAMgC,MAAMpE,GAC9B,IAAK4E,EACH,MAAM,IAAIC,MAAM,QAAQ7E,eAI1B,GAAIoB,KAAKsC,uBACFtC,KAAKsC,qBAAqBoB,eAAexE,GAC5C,MAAM,IAAIuE,MAAM,YAAYvE,iBAKhC,MAAMyE,EAAiB3D,KAAKsB,gBAAgBpC,GAG5C,IAAI0E,EACAD,GAAkBA,IAAmB/E,IACvCgF,EAAsC5D,KAAK6D,kCACzCF,EACAzE,IAMJ,MAAM4E,EAAc3E,GAASqE,EAAKO,YAAYC,OAE9ChE,KAAK0C,OAAOC,KACV,oBACA,oBACA,mBAAmBzD,aAAsBN,IACzC,CACEqF,eAAgB9E,EAChB+E,gBAAiBJ,EACjBK,mBAAoBX,EAAKO,YACzBJ,mBAIJ3D,KAAKkD,SAASjE,EAAkBL,EAAQM,EAAY4E,IAGhDH,GAAkBA,IAAmB/E,SAEK,IAAxCgF,IACF5D,KAAKkD,SAAS3D,EAAsBoE,EAAgBC,IAGpD5D,KAAKQ,2BAA2B8C,KAAK,CACnC1E,OAAQ+E,EACRS,mBAAoBlF,EACpBmF,kBAAmBT,KAKvB5D,KAAKM,yBAAyBgD,KAAK,CACjC1E,OAAQ+E,EACRzE,eAGFc,KAAK0C,OAAOC,KACV,oBACA,oBACA,YAAYzD,qBAA8ByE,QAAqB/E,MAKnEoB,KAAKK,qBAAqBiD,KAAK,CAC7B1E,SACAM,aACAC,MAAO2E,IAGT9D,KAAK0C,OAAOC,KACV,oBACA,oBACA,YAAYzD,mBAA4BN,cAAmBkF,IAE/D,CAEQ,sBAAA1E,CAAuBR,EAAgBM,GAC7C,MAAMsE,EAAOxD,KAAKgB,MAAMgC,MAAMpE,GAC9B,IAAK4E,EACH,MAAM,IAAIC,MAAM,QAAQ7E,eAG1B,IAAK4E,EAAKO,YAAYO,SAASpF,GAM7B,YALAc,KAAK0C,OAAOO,KACV,oBACA,yBACA,YAAY/D,iBAA0BN,KAM1C,MAAM2F,EAAuBvE,KAAK6D,kCAAkCjF,EAAQM,GAE5Ec,KAAKkD,SAAS9D,EAAuBR,EAAQM,SAGhB,IAAzBqF,IACFvE,KAAKkD,SAAS3D,EAAsBX,EAAQ2F,IAG5CvE,KAAKQ,2BAA2B8C,KAAK,CACnC1E,SACAwF,mBAAoBlF,EACpBmF,kBAAmBE,KAIvBvE,KAAKM,yBAAyBgD,KAAK,CACjC1E,SACAM,eAGFc,KAAK0C,OAAOC,KACV,oBACA,yBACA,YAAYzD,uBAAgCN,IAEhD,CAEQ,sBAAAS,CAAuBT,EAAgBM,EAAoBI,GACjE,MAAMkE,EAAOxD,KAAKgB,MAAMgC,MAAMpE,GAC9B,IAAK4E,EACH,MAAM,IAAIC,MAAM,QAAQ7E,eAG1B,MAAM4F,EAAYhB,EAAKO,YAAYU,QAAQvF,GAC3C,IAAkB,IAAdsF,EACF,MAAM,IAAIf,MAAM,YAAYvE,uBAAgCN,KAG9D,GAAIU,EAAU,GAAKA,GAAWkE,EAAKO,YAAYC,OAC7C,MAAM,IAAIP,MAAM,iBAAiBnE,KAGnCU,KAAKkD,SAAS7D,EAAuBT,EAAQM,EAAYI,IAEzDU,KAAKO,mBAAmB+C,KAAK,CAC3B1E,SACAM,aACAsF,YACAlF,WAEJ,CAEQ,wBAAAsB,CACNC,EACAC,EACA5B,EACAI,GAIAU,KAAKf,kBAAkB6B,EAAU5B,EAAYI,EAC/C,CAEQ,qBAAAC,CAAsBX,EAAgBM,GAC5C,MAAMsE,EAAOxD,KAAKgB,MAAMgC,MAAMpE,GAC9B,IAAK4E,EACH,MAAM,IAAIC,MAAM,QAAQ7E,eAG1B,GAAmB,OAAfM,IAAwBsE,EAAKO,YAAYO,SAASpF,GACpD,MAAM,IAAIuE,MAAM,YAAYvE,iBAA0BN,KAGxD,MAAMwF,EAAqBZ,EAAKkB,iBAC5BN,IAAuBlF,IAE3Bc,KAAKkD,SAAS3D,EAAsBX,EAAQM,IAE5Cc,KAAKQ,2BAA2B8C,KAAK,CACnC1E,SACAwF,qBACAC,kBAAmBnF,IAEvB,CAGQ,gBAAAkC,CAAiBxC,SACvB,OAAO,OAAA+F,OAAK3D,MAAMgC,MAAMpE,SAAjB,EAAA+F,EAA0BZ,cAAe,EAClD,CAEQ,qBAAA1C,CAAsBzC,SAC5B,OAAO,OAAA+F,OAAK3D,MAAMgC,MAAMpE,aAAS8F,mBAAoB,IACvD,CAEQ,eAAApD,CAAgBpC,GACtB,IAAA,MAAWN,KAAUoB,KAAKgB,MAAMgC,MAC9B,GAAIhD,KAAKgB,MAAMgC,MAAMpE,GAAQmF,YAAYO,SAASpF,GAChD,OAAON,EAGX,OAAO,IACT,CAEQ,mBAAA2C,CAAoBrC,GAC1B,OAA4C,OAArCc,KAAKsB,gBAAgBpC,EAC9B,CAEQ,sBAAAsC,CAAuBC,GAC7B,MAAMmD,EAAiB,IAAIC,IAAIC,OAAOC,OAAO/E,KAAKgB,MAAMgC,OAAOgC,QAASC,GAAMA,EAAElB,cAEhF,OAAOtC,EAAeyD,OAAQC,IAASP,EAAeQ,IAAID,EAAIvF,IAChE,CAMQ,cAAAJ,CAAeZ,GACrB,IAAKoB,KAAKgB,MAAMgC,MAAMpE,GACpB,MAAM,IAAI6E,MAAM,QAAQ7E,eAG1B,MAAM+E,EAAiB3D,KAAKgB,MAAMC,cAE9B0C,IAAmB/E,IAIvBoB,KAAKkD,SAASmC,EAAqBzG,IAEnCoB,KAAKI,kBAAkBkD,KAAK,CAC1BK,iBACA2B,cAAe1G,IAGjBoB,KAAK0C,OAAOC,KACV,oBACA,iBACA,sBAAsBgB,QAAqB/E,KAE/C,CAMQ,OAAAuC,CAAQvC,GACd,OAAOoB,KAAKgB,MAAMgC,MAAMpE,IAAW,IACrC,CAEQ,cAAAsC,GACN,MAAMD,EAAgBjB,KAAKgB,MAAMC,cACjC,OAAKA,EACEjB,KAAKmB,QAAQF,GADO,IAE7B,CAEQ,WAAAP,GACN,OAAOV,KAAKgB,MAAMuE,UACfC,IAAK5G,GAAWoB,KAAKgB,MAAMgC,MAAMpE,IACjCsG,OAAQ1B,QAAgC,IAATA,EACpC,CAEQ,YAAA7C,GACN,OAAOmE,OAAOW,KAAKzF,KAAKgB,MAAMgC,OAAOgB,MACvC,CAWQ,iCAAAH,CACNjF,EACA8G,GAEA,MAAMlC,EAAOxD,KAAKgB,MAAMgC,MAAMpE,GAC9B,IAAK4E,EAAM,OAKX,GAHwBA,EAAKkB,mBAGLgB,EACtB,OAGF,MAAM3B,EAAcP,EAAKO,YACnB4B,EAAgB5B,EAAYU,QAAQiB,GAE1C,WAAIC,EAGAA,EAAgB,EACX5B,EAAY4B,EAAgB,GAC1BA,EAAgB5B,EAAYC,OAAS,EACvCD,EAAY4B,EAAgB,GAE5B,UART,CAUF,CAEQ,cAAA5C,GACN,MAAO,QAAQK,KAAKC,SAASuC,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,IACpE,GA7cAtG,EAAgBG,GAAK,eANhB,IAAMoG,EAANvG,ECzBA,MAAMwG,EAAyB,eAEzBC,EAAoD,CAC/DtG,GAAIqG,EACJE,KAAM,sBACNC,QAAS,QACT/D,SAAU,CAAC,gBACXgE,SAAU,GACVC,SAAU,CAAC,oBACXC,cAAe,CACbC,SAAS,EACThE,iBAAkB,ICDTiE,EAAiC,CAC5CzD,MAAO,CAAA,EACPuC,UAAW,GACXtE,cAAe,MCTJyF,EAKT,CACFR,WACAS,OAAQ,CAAC9G,EAAUC,IAAW,IAAIkG,EAAkBC,EAAwBpG,EAAUC,GACtF8G,QDI8E,CAC9E5F,EAAQyF,EACRI,KAEA,OAAQA,EAAO/H,MACb,KAAKV,EAAa,CAChB,MAAMQ,OAAEA,EAAAC,UAAQA,GAAcgI,EAAO9H,QAErC,OAAIiC,EAAMgC,MAAMpE,GACPoC,EAGF,IACFA,EACHgC,MAAO,IACFhC,EAAMgC,MACTpE,CAACA,GAAS,CACRgB,GAAIhB,EACJmF,YAAa,GACbW,iBAAkB,KAClB7F,cAGJ0G,UAAW,IAAIvE,EAAMuE,UAAW3G,GAChCqC,cAAeD,EAAMC,eAAiBrC,EAE1C,CAEA,KAAKP,EAAa,CAChB,MAAMO,EAASiI,EAAO9H,SACdH,CAACA,GAASkI,KAAYC,GAAmB/F,EAAMgC,MAEvD,IAAIgE,EAAmBhG,EAAMC,cAC7B,GAAID,EAAMC,gBAAkBrC,EAAQ,CAClC,MAAMqI,EAAejG,EAAMuE,UAAUL,OAAQtF,GAAOA,IAAOhB,GAC3DoI,EAAmBC,EAAajD,OAAS,EAAIiD,EAAa,GAAK,IACjE,CAEA,MAAO,IACFjG,EACHgC,MAAO+D,EACPxB,UAAWvE,EAAMuE,UAAUL,OAAQtF,GAAOA,IAAOhB,GACjDqC,cAAe+F,EAEnB,CAEA,KAAK1I,EAAsB,CACzB,MAAMM,OAAEA,EAAAM,WAAQA,EAAAC,MAAYA,GAAU0H,EAAO9H,QAG7C,IAFaiC,EAAMgC,MAAMpE,GAEd,OAAOoC,EAGlB,MAAMkG,EAAe,IAAKlG,EAAMgC,OAChC,IAAA,MAAWmE,KAAOD,EACZA,EAAaC,GAAKpD,YAAYO,SAASpF,KACzCgI,EAAaC,GAAO,IACfD,EAAaC,GAChBpD,YAAamD,EAAaC,GAAKpD,YAAYmB,OAAQtF,GAAOA,IAAOV,KAOvE,MAAMkI,EAAiB,IAAIF,EAAatI,GAAQmF,aAchD,YAbc,IAAV5E,GAAuBA,GAAS,GAAKA,GAASiI,EAAepD,OAC/DoD,EAAeC,OAAOlI,EAAO,EAAGD,GAEhCkI,EAAeE,KAAKpI,GAGtBgI,EAAatI,GAAU,IAClBsI,EAAatI,GAChBmF,YAAaqD,EAEb1C,iBAAkBwC,EAAatI,GAAQ8F,kBAAoBxF,GAGtD,IACF8B,EACHgC,MAAOkE,EAEX,CAEA,KAAK3I,EAA2B,CAC9B,MAAMK,OAAEA,EAAAM,WAAQA,GAAe2H,EAAO9H,QAChCyE,EAAOxC,EAAMgC,MAAMpE,GAEzB,IAAK4E,IAASA,EAAKO,YAAYO,SAASpF,GAAa,OAAO8B,EAE5D,MAAMoG,EAAiB5D,EAAKO,YAAYmB,OAAQtF,GAAOA,IAAOV,GAG9D,MAAO,IACF8B,EACHgC,MAAO,IACFhC,EAAMgC,MACTpE,CAACA,GAAS,IACL4E,EACHO,YAAaqD,IAIrB,CAEA,KAAK5I,EAA2B,CAC9B,MAAMI,OAAEA,EAAAM,WAAQA,EAAAI,QAAYA,GAAYuH,EAAO9H,QACzCyE,EAAOxC,EAAMgC,MAAMpE,GAEzB,IAAK4E,IAASA,EAAKO,YAAYO,SAASpF,GAAa,OAAO8B,EAE5D,MAAMwD,EAAYhB,EAAKO,YAAYU,QAAQvF,GAC3C,GAAIsF,IAAclF,EAAS,OAAO0B,EAElC,MAAMoG,EAAiB,IAAI5D,EAAKO,aAIhC,OAHAqD,EAAeC,OAAO7C,EAAW,GACjC4C,EAAeC,OAAO/H,EAAS,EAAGJ,GAE3B,IACF8B,EACHgC,MAAO,IACFhC,EAAMgC,MACTpE,CAACA,GAAS,IACL4E,EACHO,YAAaqD,IAIrB,CAEA,KAAK3I,EAA0B,CAC7B,MAAMG,OAAEA,EAAAM,WAAQA,GAAe2H,EAAO9H,QAChCyE,EAAOxC,EAAMgC,MAAMpE,GAEzB,OAAK4E,IACc,OAAftE,GAAwBsE,EAAKO,YAAYO,SAASpF,IAE/C,IACF8B,EACHgC,MAAO,IACFhC,EAAMgC,MACTpE,CAACA,GAAS,IACL4E,EACHkB,iBAAkBxF,KATN8B,CAapB,CAEA,KAAKtC,EAAkB,CACrB,MAAME,EAASiI,EAAO9H,QAEtB,OAAe,OAAXH,GAAoBoC,EAAMgC,MAAMpE,GAI7B,IACFoC,EACHC,cAAerC,GALRoC,CAOX,CAEA,QACE,OAAOA,ICvKXyF"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/actions.ts","../src/lib/view-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\n\nexport const CREATE_VIEW = 'CREATE_VIEW';\nexport const REMOVE_VIEW = 'REMOVE_VIEW';\nexport const ADD_DOCUMENT_TO_VIEW = 'ADD_DOCUMENT_TO_VIEW';\nexport const REMOVE_DOCUMENT_FROM_VIEW = 'REMOVE_DOCUMENT_FROM_VIEW';\nexport const MOVE_DOCUMENT_WITHIN_VIEW = 'MOVE_DOCUMENT_WITHIN_VIEW';\nexport const SET_VIEW_ACTIVE_DOCUMENT = 'SET_VIEW_ACTIVE_DOCUMENT';\nexport const SET_FOCUSED_VIEW = 'SET_FOCUSED_VIEW';\n\nexport interface CreateViewAction extends Action {\n type: typeof CREATE_VIEW;\n payload: {\n viewId: string;\n createdAt: number;\n };\n}\n\nexport interface RemoveViewAction extends Action {\n type: typeof REMOVE_VIEW;\n payload: string; // viewId\n}\n\nexport interface AddDocumentToViewAction extends Action {\n type: typeof ADD_DOCUMENT_TO_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n index?: number;\n };\n}\n\nexport interface RemoveDocumentFromViewAction extends Action {\n type: typeof REMOVE_DOCUMENT_FROM_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n };\n}\n\nexport interface MoveDocumentWithinViewAction extends Action {\n type: typeof MOVE_DOCUMENT_WITHIN_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n toIndex: number;\n };\n}\n\nexport interface SetViewActiveDocumentAction extends Action {\n type: typeof SET_VIEW_ACTIVE_DOCUMENT;\n payload: {\n viewId: string;\n documentId: string | null;\n };\n}\n\nexport interface SetFocusedViewAction extends Action {\n type: typeof SET_FOCUSED_VIEW;\n payload: string | null; // viewId or null\n}\n\nexport type ViewManagerAction =\n | CreateViewAction\n | RemoveViewAction\n | AddDocumentToViewAction\n | RemoveDocumentFromViewAction\n | MoveDocumentWithinViewAction\n | SetViewActiveDocumentAction\n | SetFocusedViewAction;\n\nexport function createView(viewId: string, createdAt: number): CreateViewAction {\n return { type: CREATE_VIEW, payload: { viewId, createdAt } };\n}\n\nexport function removeView(viewId: string): RemoveViewAction {\n return { type: REMOVE_VIEW, payload: viewId };\n}\n\nexport function addDocumentToView(\n viewId: string,\n documentId: string,\n index?: number,\n): AddDocumentToViewAction {\n return { type: ADD_DOCUMENT_TO_VIEW, payload: { viewId, documentId, index } };\n}\n\nexport function removeDocumentFromView(\n viewId: string,\n documentId: string,\n): RemoveDocumentFromViewAction {\n return { type: REMOVE_DOCUMENT_FROM_VIEW, payload: { viewId, documentId } };\n}\n\nexport function moveDocumentWithinView(\n viewId: string,\n documentId: string,\n toIndex: number,\n): MoveDocumentWithinViewAction {\n return { type: MOVE_DOCUMENT_WITHIN_VIEW, payload: { viewId, documentId, toIndex } };\n}\n\nexport function setViewActiveDocument(\n viewId: string,\n documentId: string | null,\n): SetViewActiveDocumentAction {\n return { type: SET_VIEW_ACTIVE_DOCUMENT, payload: { viewId, documentId } };\n}\n\nexport function setFocusedView(viewId: string | null): SetFocusedViewAction {\n return { type: SET_FOCUSED_VIEW, payload: viewId };\n}\n","import { BasePlugin, PluginRegistry, createBehaviorEmitter, DocumentState } from '@embedpdf/core';\nimport type {\n DocumentManagerCapability,\n DocumentManagerPlugin,\n} from '@embedpdf/plugin-document-manager';\n\nimport {\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerCapability,\n View,\n ViewChangeEvent,\n ViewActiveDocumentChangedEvent,\n ViewDocumentReorderedEvent,\n ViewDocumentRemovedEvent,\n ViewDocumentAddedEvent,\n} from './types';\nimport {\n ViewManagerAction,\n createView as createViewAction,\n removeView as removeViewAction,\n setFocusedView as setFocusedViewAction,\n setViewActiveDocument,\n moveDocumentWithinView,\n removeDocumentFromView,\n addDocumentToView,\n} from './actions';\n\nexport class ViewManagerPlugin extends BasePlugin<\n ViewManagerPluginConfig,\n ViewManagerCapability,\n ViewManagerState,\n ViewManagerAction\n> {\n static readonly id = 'view-manager' as const;\n\n private readonly viewCreated$ = createBehaviorEmitter<string>();\n private readonly viewRemoved$ = createBehaviorEmitter<string>();\n private readonly viewFocusChanged$ = createBehaviorEmitter<ViewChangeEvent>();\n private readonly documentAddedToView$ = createBehaviorEmitter<ViewDocumentAddedEvent>();\n private readonly documentRemovedFromView$ = createBehaviorEmitter<ViewDocumentRemovedEvent>();\n private readonly documentReordered$ = createBehaviorEmitter<ViewDocumentReorderedEvent>();\n private readonly viewActiveDocumentChanged$ =\n createBehaviorEmitter<ViewActiveDocumentChangedEvent>();\n\n // Optional integration with DocumentManager\n private docManagerCapability?: DocumentManagerCapability;\n\n constructor(\n public readonly id: string,\n registry: PluginRegistry,\n config?: ViewManagerPluginConfig,\n ) {\n super(id, registry);\n }\n\n protected buildCapability(): ViewManagerCapability {\n return {\n // View lifecycle\n createView: (viewId) => this.createView(viewId),\n removeView: (viewId) => this.removeView(viewId),\n getAllViews: () => this.getAllViews(),\n getViewCount: () => this.getViewCount(),\n\n // Document management\n addDocumentToView: (viewId, documentId, index) =>\n this.addDocumentToView(viewId, documentId, index),\n removeDocumentFromView: (viewId, documentId) =>\n this.removeDocumentFromView(viewId, documentId),\n moveDocumentWithinView: (viewId, documentId, toIndex) =>\n this.moveDocumentWithinView(viewId, documentId, toIndex),\n moveDocumentBetweenViews: (fromViewId, toViewId, documentId, toIndex) =>\n this.moveDocumentBetweenViews(fromViewId, toViewId, documentId, toIndex),\n setViewActiveDocument: (viewId, documentId) => this.setViewActiveDocument(viewId, documentId),\n\n // Focus management\n setFocusedView: (viewId) => this.setFocusedView(viewId),\n getFocusedViewId: () => this.state.focusedViewId,\n getFocusedView: () => this.getFocusedView(),\n\n // Queries\n getView: (viewId) => this.getView(viewId),\n getViewDocuments: (viewId) => this.getViewDocuments(viewId),\n getViewActiveDocument: (viewId) => this.getViewActiveDocument(viewId),\n getDocumentView: (documentId) => this.getDocumentView(documentId),\n isDocumentInAnyView: (documentId) => this.isDocumentInAnyView(documentId),\n getUnassignedDocuments: (documentStates) => this.getUnassignedDocuments(documentStates),\n\n // Events\n onViewCreated: this.viewCreated$.on,\n onViewRemoved: this.viewRemoved$.on,\n onViewFocusChanged: this.viewFocusChanged$.on,\n onDocumentAddedToView: this.documentAddedToView$.on,\n onDocumentRemovedFromView: this.documentRemovedFromView$.on,\n onDocumentReordered: this.documentReordered$.on,\n onViewActiveDocumentChanged: this.viewActiveDocumentChanged$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Plugin Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(config: ViewManagerPluginConfig): Promise<void> {\n // Try to get DocumentManager if it exists (optional dependency)\n const docManager = this.registry.getPlugin<DocumentManagerPlugin>('document-manager');\n if (docManager && docManager.provides) {\n this.docManagerCapability = docManager.provides();\n\n this.docManagerCapability.onDocumentClosed((documentId) => {\n const viewId = this.getDocumentView(documentId);\n if (viewId) {\n this.removeDocumentFromView(viewId, documentId);\n }\n });\n }\n\n // Create default views if configured\n if (config.defaultViewCount && config.defaultViewCount > 0) {\n for (let i = 0; i < config.defaultViewCount; i++) {\n this.createView(`view-${i + 1}`);\n }\n }\n\n this.logger.info('ViewManagerPlugin', 'Initialize', 'View Manager Plugin initialized', {\n defaultViewCount: config.defaultViewCount,\n hasDocumentManager: !!this.docManagerCapability,\n });\n }\n\n async destroy(): Promise<void> {\n // Clear all emitters\n this.viewCreated$.clear();\n this.viewRemoved$.clear();\n this.viewFocusChanged$.clear();\n this.documentAddedToView$.clear();\n this.documentRemovedFromView$.clear();\n this.documentReordered$.clear();\n this.viewActiveDocumentChanged$.clear();\n\n super.destroy();\n }\n\n // ─────────────────────────────────────────────────────────\n // View Lifecycle\n // ─────────────────────────────────────────────────────────\n\n private createView(viewId?: string): string {\n const id = viewId || this.generateViewId();\n\n if (this.state.views[id]) {\n this.logger.warn('ViewManagerPlugin', 'CreateView', `View ${id} already exists`);\n return id;\n }\n\n this.dispatch(createViewAction(id, Date.now()));\n this.viewCreated$.emit(id);\n\n this.logger.info('ViewManagerPlugin', 'CreateView', `View ${id} created`);\n\n return id;\n }\n\n private removeView(viewId: string): void {\n const view = this.state.views[viewId];\n\n if (!view) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', `View ${viewId} not found`);\n return;\n }\n\n // Don't allow removing the last view\n if (this.getViewCount() === 1) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', 'Cannot remove the last view');\n return;\n }\n\n this.dispatch(removeViewAction(viewId));\n this.viewRemoved$.emit(viewId);\n\n this.logger.info('ViewManagerPlugin', 'RemoveView', `View ${viewId} removed`);\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Assignment\n // ─────────────────────────────────────────────────────────\n\n // Document Management Methods\n private addDocumentToView(viewId: string, documentId: string, index?: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n // Validate document exists if DocumentManager is present\n if (this.docManagerCapability) {\n if (!this.docManagerCapability.isDocumentOpen(documentId)) {\n throw new Error(`Document ${documentId} is not open`);\n }\n }\n\n // Check if document is already in another view (before state update)\n const previousViewId = this.getDocumentView(documentId);\n\n // Calculate next active document for the previous view if needed\n let nextActiveDocumentIdForPreviousView: string | null | undefined;\n if (previousViewId && previousViewId !== viewId) {\n nextActiveDocumentIdForPreviousView = this.calculateNextActiveDocumentInView(\n previousViewId,\n documentId,\n );\n }\n\n // Calculate the actual index - must account for the document being removed from this view\n // if it was already here (though we checked above, the reducer also handles this)\n const actualIndex = index ?? view.documentIds.length;\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Adding document ${documentId} to view ${viewId}`,\n {\n requestedIndex: index,\n calculatedIndex: actualIndex,\n currentDocumentIds: view.documentIds,\n previousViewId,\n },\n );\n\n this.dispatch(addDocumentToView(viewId, documentId, actualIndex));\n\n // Handle the previous view if document was moved\n if (previousViewId && previousViewId !== viewId) {\n // Set the next active document in the previous view if needed\n if (nextActiveDocumentIdForPreviousView !== undefined) {\n this.dispatch(setViewActiveDocument(previousViewId, nextActiveDocumentIdForPreviousView));\n\n // Emit active document changed event for the previous view\n this.viewActiveDocumentChanged$.emit({\n viewId: previousViewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentIdForPreviousView,\n });\n }\n\n // Emit removal event\n this.documentRemovedFromView$.emit({\n viewId: previousViewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} moved from view ${previousViewId} to ${viewId}`,\n );\n }\n\n // Emit addition event\n this.documentAddedToView$.emit({\n viewId,\n documentId,\n index: actualIndex,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} added to view ${viewId} at index ${actualIndex}`,\n );\n }\n\n private removeDocumentFromView(viewId: string, documentId: string): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (!view.documentIds.includes(documentId)) {\n this.logger.warn(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} not in view ${viewId}`,\n );\n return;\n }\n\n // Calculate next active document if we're removing the currently active one\n const nextActiveDocumentId = this.calculateNextActiveDocumentInView(viewId, documentId);\n\n this.dispatch(removeDocumentFromView(viewId, documentId));\n\n // Set the next active document if needed\n if (nextActiveDocumentId !== undefined) {\n this.dispatch(setViewActiveDocument(viewId, nextActiveDocumentId));\n\n // Emit active document changed event\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentId,\n });\n }\n\n this.documentRemovedFromView$.emit({\n viewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} removed from view ${viewId}`,\n );\n }\n\n private moveDocumentWithinView(viewId: string, documentId: string, toIndex: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === -1) {\n throw new Error(`Document ${documentId} not found in view ${viewId}`);\n }\n\n if (toIndex < 0 || toIndex >= view.documentIds.length) {\n throw new Error(`Invalid index ${toIndex}`);\n }\n\n this.dispatch(moveDocumentWithinView(viewId, documentId, toIndex));\n\n this.documentReordered$.emit({\n viewId,\n documentId,\n fromIndex,\n toIndex,\n });\n }\n\n private moveDocumentBetweenViews(\n fromViewId: string,\n toViewId: string,\n documentId: string,\n toIndex?: number,\n ): void {\n // Just use addDocumentToView - it handles removing from the source view\n // and all the next active document calculations\n this.addDocumentToView(toViewId, documentId, toIndex);\n }\n\n private setViewActiveDocument(viewId: string, documentId: string | null): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (documentId !== null && !view.documentIds.includes(documentId)) {\n throw new Error(`Document ${documentId} not in view ${viewId}`);\n }\n\n const previousDocumentId = view.activeDocumentId;\n if (previousDocumentId === documentId) return;\n\n this.dispatch(setViewActiveDocument(viewId, documentId));\n\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId,\n currentDocumentId: documentId,\n });\n }\n\n // Query Methods\n private getViewDocuments(viewId: string): string[] {\n return this.state.views[viewId]?.documentIds ?? [];\n }\n\n private getViewActiveDocument(viewId: string): string | null {\n return this.state.views[viewId]?.activeDocumentId ?? null;\n }\n\n private getDocumentView(documentId: string): string | null {\n for (const viewId in this.state.views) {\n if (this.state.views[viewId].documentIds.includes(documentId)) {\n return viewId;\n }\n }\n return null;\n }\n\n private isDocumentInAnyView(documentId: string): boolean {\n return this.getDocumentView(documentId) !== null;\n }\n\n private getUnassignedDocuments(documentStates: DocumentState[]): DocumentState[] {\n const assignedDocIds = new Set(Object.values(this.state.views).flatMap((v) => v.documentIds));\n\n return documentStates.filter((doc) => !assignedDocIds.has(doc.id));\n }\n\n // ─────────────────────────────────────────────────────────\n // Focus Management\n // ─────────────────────────────────────────────────────────\n\n private setFocusedView(viewId: string): void {\n if (!this.state.views[viewId]) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const previousViewId = this.state.focusedViewId;\n\n if (previousViewId === viewId) {\n return; // Already focused\n }\n\n this.dispatch(setFocusedViewAction(viewId));\n\n this.viewFocusChanged$.emit({\n previousViewId,\n currentViewId: viewId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'SetFocusedView',\n `Focus changed from ${previousViewId} to ${viewId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Queries\n // ─────────────────────────────────────────────────────────\n\n private getView(viewId: string): View | null {\n return this.state.views[viewId] ?? null;\n }\n\n private getFocusedView(): View | null {\n const focusedViewId = this.state.focusedViewId;\n if (!focusedViewId) return null;\n return this.getView(focusedViewId);\n }\n\n private getAllViews(): View[] {\n return this.state.viewOrder\n .map((viewId) => this.state.views[viewId])\n .filter((view): view is View => view !== undefined);\n }\n\n private getViewCount(): number {\n return Object.keys(this.state.views).length;\n }\n\n // ─────────────────────────────────────────────────────────\n // Helper Methods\n // ─────────────────────────────────────────────────────────\n\n /**\n * Calculate the next active document when removing a document from a view\n * Returns undefined if the document being removed is not the active document\n * Returns the next document ID (left first, then right) or null if no documents remain\n */\n private calculateNextActiveDocumentInView(\n viewId: string,\n removingDocumentId: string,\n ): string | null | undefined {\n const view = this.state.views[viewId];\n if (!view) return undefined;\n\n const currentActiveId = view.activeDocumentId;\n\n // Only calculate if we're removing the active document\n if (currentActiveId !== removingDocumentId) {\n return undefined;\n }\n\n const documentIds = view.documentIds;\n const removingIndex = documentIds.indexOf(removingDocumentId);\n\n if (removingIndex === -1) return undefined;\n\n // Try left first, then right, then null\n if (removingIndex > 0) {\n return documentIds[removingIndex - 1];\n } else if (removingIndex < documentIds.length - 1) {\n return documentIds[removingIndex + 1];\n } else {\n return null;\n }\n }\n\n private generateViewId(): string {\n return `view-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { ViewManagerPluginConfig } from './types';\n\nexport const VIEW_MANAGER_PLUGIN_ID = 'view-manager';\n\nexport const manifest: PluginManifest<ViewManagerPluginConfig> = {\n id: VIEW_MANAGER_PLUGIN_ID,\n name: 'View Manager Plugin',\n version: '1.0.0',\n provides: ['view-manager'],\n requires: [],\n optional: ['document-manager'],\n defaultConfig: {\n defaultViewCount: 1,\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { ViewManagerState } from './types';\nimport {\n ViewManagerAction,\n CREATE_VIEW,\n REMOVE_VIEW,\n SET_FOCUSED_VIEW,\n ADD_DOCUMENT_TO_VIEW,\n REMOVE_DOCUMENT_FROM_VIEW,\n MOVE_DOCUMENT_WITHIN_VIEW,\n SET_VIEW_ACTIVE_DOCUMENT,\n} from './actions';\n\nexport const initialState: ViewManagerState = {\n views: {},\n viewOrder: [],\n focusedViewId: null,\n};\n\nexport const viewManagerReducer: Reducer<ViewManagerState, ViewManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case CREATE_VIEW: {\n const { viewId, createdAt } = action.payload;\n\n if (state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n id: viewId,\n documentIds: [],\n activeDocumentId: null,\n createdAt,\n },\n },\n viewOrder: [...state.viewOrder, viewId],\n focusedViewId: state.focusedViewId ?? viewId,\n };\n }\n\n case REMOVE_VIEW: {\n const viewId = action.payload;\n const { [viewId]: removed, ...remainingViews } = state.views;\n\n let newFocusedViewId = state.focusedViewId;\n if (state.focusedViewId === viewId) {\n const remainingIds = state.viewOrder.filter((id) => id !== viewId);\n newFocusedViewId = remainingIds.length > 0 ? remainingIds[0] : null;\n }\n\n return {\n ...state,\n views: remainingViews,\n viewOrder: state.viewOrder.filter((id) => id !== viewId),\n focusedViewId: newFocusedViewId,\n };\n }\n\n case ADD_DOCUMENT_TO_VIEW: {\n const { viewId, documentId, index } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n\n // Remove document from any other view first\n const updatedViews = { ...state.views };\n for (const vid in updatedViews) {\n if (updatedViews[vid].documentIds.includes(documentId)) {\n updatedViews[vid] = {\n ...updatedViews[vid],\n documentIds: updatedViews[vid].documentIds.filter((id) => id !== documentId),\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n };\n }\n }\n\n // Add to target view\n const newDocumentIds = [...updatedViews[viewId].documentIds];\n if (index !== undefined && index >= 0 && index <= newDocumentIds.length) {\n newDocumentIds.splice(index, 0, documentId);\n } else {\n newDocumentIds.push(documentId);\n }\n\n updatedViews[viewId] = {\n ...updatedViews[viewId],\n documentIds: newDocumentIds,\n // Auto-set as active if it's the first document or no active document\n activeDocumentId: updatedViews[viewId].activeDocumentId || documentId,\n };\n\n return {\n ...state,\n views: updatedViews,\n };\n }\n\n case REMOVE_DOCUMENT_FROM_VIEW: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const newDocumentIds = view.documentIds.filter((id) => id !== documentId);\n\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case MOVE_DOCUMENT_WITHIN_VIEW: {\n const { viewId, documentId, toIndex } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === toIndex) return state;\n\n const newDocumentIds = [...view.documentIds];\n newDocumentIds.splice(fromIndex, 1);\n newDocumentIds.splice(toIndex, 0, documentId);\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case SET_VIEW_ACTIVE_DOCUMENT: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n if (documentId !== null && !view.documentIds.includes(documentId)) return state;\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n activeDocumentId: documentId,\n },\n },\n };\n }\n\n case SET_FOCUSED_VIEW: {\n const viewId = action.payload;\n\n if (viewId !== null && !state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n focusedViewId: viewId,\n };\n }\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { ViewManagerPlugin } from './view-manager-plugin';\nimport { manifest, VIEW_MANAGER_PLUGIN_ID } from './manifest';\nimport { ViewManagerPluginConfig, ViewManagerState } from './types';\nimport { viewManagerReducer, initialState } from './reducer';\nimport { ViewManagerAction } from './actions';\n\nexport const ViewManagerPluginPackage: PluginPackage<\n ViewManagerPlugin,\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerAction\n> = {\n manifest,\n create: (registry, config) => new ViewManagerPlugin(VIEW_MANAGER_PLUGIN_ID, registry, config),\n reducer: viewManagerReducer,\n initialState,\n};\n\nexport * from './view-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\n"],"names":["CREATE_VIEW","REMOVE_VIEW","ADD_DOCUMENT_TO_VIEW","REMOVE_DOCUMENT_FROM_VIEW","MOVE_DOCUMENT_WITHIN_VIEW","SET_VIEW_ACTIVE_DOCUMENT","SET_FOCUSED_VIEW","createView","viewId","createdAt","type","payload","removeView","addDocumentToView","documentId","index","removeDocumentFromView","moveDocumentWithinView","toIndex","setViewActiveDocument","setFocusedView","_ViewManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","viewCreated$","createBehaviorEmitter","viewRemoved$","viewFocusChanged$","documentAddedToView$","documentRemovedFromView$","documentReordered$","viewActiveDocumentChanged$","buildCapability","getAllViews","getViewCount","moveDocumentBetweenViews","fromViewId","toViewId","getFocusedViewId","state","focusedViewId","getFocusedView","getView","getViewDocuments","getViewActiveDocument","getDocumentView","isDocumentInAnyView","getUnassignedDocuments","documentStates","onViewCreated","on","onViewRemoved","onViewFocusChanged","onDocumentAddedToView","onDocumentRemovedFromView","onDocumentReordered","onViewActiveDocumentChanged","initialize","docManager","getPlugin","provides","docManagerCapability","onDocumentClosed","defaultViewCount","i","logger","info","hasDocumentManager","destroy","clear","generateViewId","views","warn","dispatch","createViewAction","Date","now","emit","removeViewAction","view","Error","isDocumentOpen","previousViewId","nextActiveDocumentIdForPreviousView","calculateNextActiveDocumentInView","actualIndex","documentIds","length","requestedIndex","calculatedIndex","currentDocumentIds","previousDocumentId","currentDocumentId","includes","nextActiveDocumentId","fromIndex","indexOf","activeDocumentId","_a","assignedDocIds","Set","Object","values","flatMap","v","filter","doc","has","setFocusedViewAction","currentViewId","viewOrder","map","keys","removingDocumentId","removingIndex","Math","random","toString","substr","ViewManagerPlugin","VIEW_MANAGER_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","initialState","ViewManagerPluginPackage","create","reducer","action","removed","remainingViews","newFocusedViewId","remainingIds","updatedViews","vid","newDocumentIds","splice","push"],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/actions.ts","../src/lib/view-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\n\nexport const CREATE_VIEW = 'CREATE_VIEW';\nexport const REMOVE_VIEW = 'REMOVE_VIEW';\nexport const ADD_DOCUMENT_TO_VIEW = 'ADD_DOCUMENT_TO_VIEW';\nexport const REMOVE_DOCUMENT_FROM_VIEW = 'REMOVE_DOCUMENT_FROM_VIEW';\nexport const MOVE_DOCUMENT_WITHIN_VIEW = 'MOVE_DOCUMENT_WITHIN_VIEW';\nexport const SET_VIEW_ACTIVE_DOCUMENT = 'SET_VIEW_ACTIVE_DOCUMENT';\nexport const SET_FOCUSED_VIEW = 'SET_FOCUSED_VIEW';\n\nexport interface CreateViewAction extends Action {\n type: typeof CREATE_VIEW;\n payload: {\n viewId: string;\n createdAt: number;\n };\n}\n\nexport interface RemoveViewAction extends Action {\n type: typeof REMOVE_VIEW;\n payload: string; // viewId\n}\n\nexport interface AddDocumentToViewAction extends Action {\n type: typeof ADD_DOCUMENT_TO_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n index?: number;\n };\n}\n\nexport interface RemoveDocumentFromViewAction extends Action {\n type: typeof REMOVE_DOCUMENT_FROM_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n };\n}\n\nexport interface MoveDocumentWithinViewAction extends Action {\n type: typeof MOVE_DOCUMENT_WITHIN_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n toIndex: number;\n };\n}\n\nexport interface SetViewActiveDocumentAction extends Action {\n type: typeof SET_VIEW_ACTIVE_DOCUMENT;\n payload: {\n viewId: string;\n documentId: string | null;\n };\n}\n\nexport interface SetFocusedViewAction extends Action {\n type: typeof SET_FOCUSED_VIEW;\n payload: string | null; // viewId or null\n}\n\nexport type ViewManagerAction =\n | CreateViewAction\n | RemoveViewAction\n | AddDocumentToViewAction\n | RemoveDocumentFromViewAction\n | MoveDocumentWithinViewAction\n | SetViewActiveDocumentAction\n | SetFocusedViewAction;\n\nexport function createView(viewId: string, createdAt: number): CreateViewAction {\n return { type: CREATE_VIEW, payload: { viewId, createdAt } };\n}\n\nexport function removeView(viewId: string): RemoveViewAction {\n return { type: REMOVE_VIEW, payload: viewId };\n}\n\nexport function addDocumentToView(\n viewId: string,\n documentId: string,\n index?: number,\n): AddDocumentToViewAction {\n return { type: ADD_DOCUMENT_TO_VIEW, payload: { viewId, documentId, index } };\n}\n\nexport function removeDocumentFromView(\n viewId: string,\n documentId: string,\n): RemoveDocumentFromViewAction {\n return { type: REMOVE_DOCUMENT_FROM_VIEW, payload: { viewId, documentId } };\n}\n\nexport function moveDocumentWithinView(\n viewId: string,\n documentId: string,\n toIndex: number,\n): MoveDocumentWithinViewAction {\n return { type: MOVE_DOCUMENT_WITHIN_VIEW, payload: { viewId, documentId, toIndex } };\n}\n\nexport function setViewActiveDocument(\n viewId: string,\n documentId: string | null,\n): SetViewActiveDocumentAction {\n return { type: SET_VIEW_ACTIVE_DOCUMENT, payload: { viewId, documentId } };\n}\n\nexport function setFocusedView(viewId: string | null): SetFocusedViewAction {\n return { type: SET_FOCUSED_VIEW, payload: viewId };\n}\n","import { BasePlugin, PluginRegistry, createBehaviorEmitter, DocumentState } from '@embedpdf/core';\nimport type {\n DocumentManagerCapability,\n DocumentManagerPlugin,\n} from '@embedpdf/plugin-document-manager';\n\nimport {\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerCapability,\n View,\n ViewChangeEvent,\n ViewActiveDocumentChangedEvent,\n ViewDocumentReorderedEvent,\n ViewDocumentRemovedEvent,\n ViewDocumentAddedEvent,\n} from './types';\nimport {\n ViewManagerAction,\n createView as createViewAction,\n removeView as removeViewAction,\n setFocusedView as setFocusedViewAction,\n setViewActiveDocument,\n moveDocumentWithinView,\n removeDocumentFromView,\n addDocumentToView,\n} from './actions';\n\nexport class ViewManagerPlugin extends BasePlugin<\n ViewManagerPluginConfig,\n ViewManagerCapability,\n ViewManagerState,\n ViewManagerAction\n> {\n static readonly id = 'view-manager' as const;\n\n private readonly viewCreated$ = createBehaviorEmitter<string>();\n private readonly viewRemoved$ = createBehaviorEmitter<string>();\n private readonly viewFocusChanged$ = createBehaviorEmitter<ViewChangeEvent>();\n private readonly documentAddedToView$ = createBehaviorEmitter<ViewDocumentAddedEvent>();\n private readonly documentRemovedFromView$ = createBehaviorEmitter<ViewDocumentRemovedEvent>();\n private readonly documentReordered$ = createBehaviorEmitter<ViewDocumentReorderedEvent>();\n private readonly viewActiveDocumentChanged$ =\n createBehaviorEmitter<ViewActiveDocumentChangedEvent>();\n\n // Optional integration with DocumentManager\n private docManagerCapability?: DocumentManagerCapability;\n\n constructor(\n public readonly id: string,\n registry: PluginRegistry,\n config?: ViewManagerPluginConfig,\n ) {\n super(id, registry);\n }\n\n protected buildCapability(): ViewManagerCapability {\n return {\n // View lifecycle\n createView: (viewId) => this.createView(viewId),\n removeView: (viewId) => this.removeView(viewId),\n getAllViews: () => this.getAllViews(),\n getViewCount: () => this.getViewCount(),\n\n // Document management\n addDocumentToView: (viewId, documentId, index) =>\n this.addDocumentToView(viewId, documentId, index),\n removeDocumentFromView: (viewId, documentId) =>\n this.removeDocumentFromView(viewId, documentId),\n moveDocumentWithinView: (viewId, documentId, toIndex) =>\n this.moveDocumentWithinView(viewId, documentId, toIndex),\n moveDocumentBetweenViews: (fromViewId, toViewId, documentId, toIndex) =>\n this.moveDocumentBetweenViews(fromViewId, toViewId, documentId, toIndex),\n setViewActiveDocument: (viewId, documentId) => this.setViewActiveDocument(viewId, documentId),\n\n // Focus management\n setFocusedView: (viewId) => this.setFocusedView(viewId),\n getFocusedViewId: () => this.state.focusedViewId,\n getFocusedView: () => this.getFocusedView(),\n\n // Queries\n getView: (viewId) => this.getView(viewId),\n getViewDocuments: (viewId) => this.getViewDocuments(viewId),\n getViewActiveDocument: (viewId) => this.getViewActiveDocument(viewId),\n getDocumentView: (documentId) => this.getDocumentView(documentId),\n isDocumentInAnyView: (documentId) => this.isDocumentInAnyView(documentId),\n getUnassignedDocuments: (documentStates) => this.getUnassignedDocuments(documentStates),\n\n // Events\n onViewCreated: this.viewCreated$.on,\n onViewRemoved: this.viewRemoved$.on,\n onViewFocusChanged: this.viewFocusChanged$.on,\n onDocumentAddedToView: this.documentAddedToView$.on,\n onDocumentRemovedFromView: this.documentRemovedFromView$.on,\n onDocumentReordered: this.documentReordered$.on,\n onViewActiveDocumentChanged: this.viewActiveDocumentChanged$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Plugin Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(config: ViewManagerPluginConfig): Promise<void> {\n // Try to get DocumentManager if it exists (optional dependency)\n const docManager = this.registry.getPlugin<DocumentManagerPlugin>('document-manager');\n if (docManager && docManager.provides) {\n this.docManagerCapability = docManager.provides();\n\n this.docManagerCapability.onDocumentClosed((documentId) => {\n const viewId = this.getDocumentView(documentId);\n if (viewId) {\n this.removeDocumentFromView(viewId, documentId);\n }\n });\n }\n\n // Create default views if configured\n if (config.defaultViewCount && config.defaultViewCount > 0) {\n for (let i = 0; i < config.defaultViewCount; i++) {\n this.createView(`view-${i + 1}`);\n }\n }\n\n this.logger.info('ViewManagerPlugin', 'Initialize', 'View Manager Plugin initialized', {\n defaultViewCount: config.defaultViewCount,\n hasDocumentManager: !!this.docManagerCapability,\n });\n }\n\n async destroy(): Promise<void> {\n // Clear all emitters\n this.viewCreated$.clear();\n this.viewRemoved$.clear();\n this.viewFocusChanged$.clear();\n this.documentAddedToView$.clear();\n this.documentRemovedFromView$.clear();\n this.documentReordered$.clear();\n this.viewActiveDocumentChanged$.clear();\n\n super.destroy();\n }\n\n // ─────────────────────────────────────────────────────────\n // View Lifecycle\n // ─────────────────────────────────────────────────────────\n\n private createView(viewId?: string): string {\n const id = viewId || this.generateViewId();\n\n if (this.state.views[id]) {\n this.logger.warn('ViewManagerPlugin', 'CreateView', `View ${id} already exists`);\n return id;\n }\n\n this.dispatch(createViewAction(id, Date.now()));\n this.viewCreated$.emit(id);\n\n this.logger.info('ViewManagerPlugin', 'CreateView', `View ${id} created`);\n\n return id;\n }\n\n private removeView(viewId: string): void {\n const view = this.state.views[viewId];\n\n if (!view) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', `View ${viewId} not found`);\n return;\n }\n\n // Don't allow removing the last view\n if (this.getViewCount() === 1) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', 'Cannot remove the last view');\n return;\n }\n\n this.dispatch(removeViewAction(viewId));\n this.viewRemoved$.emit(viewId);\n\n this.logger.info('ViewManagerPlugin', 'RemoveView', `View ${viewId} removed`);\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Assignment\n // ─────────────────────────────────────────────────────────\n\n // Document Management Methods\n private addDocumentToView(viewId: string, documentId: string, index?: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n // Validate document exists if DocumentManager is present\n if (this.docManagerCapability) {\n if (!this.docManagerCapability.isDocumentOpen(documentId)) {\n throw new Error(`Document ${documentId} is not open`);\n }\n }\n\n // Check if document is already in another view (before state update)\n const previousViewId = this.getDocumentView(documentId);\n\n // Calculate next active document for the previous view if needed\n let nextActiveDocumentIdForPreviousView: string | null | undefined;\n if (previousViewId && previousViewId !== viewId) {\n nextActiveDocumentIdForPreviousView = this.calculateNextActiveDocumentInView(\n previousViewId,\n documentId,\n );\n }\n\n // Calculate the actual index - must account for the document being removed from this view\n // if it was already here (though we checked above, the reducer also handles this)\n const actualIndex = index ?? view.documentIds.length;\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Adding document ${documentId} to view ${viewId}`,\n {\n requestedIndex: index,\n calculatedIndex: actualIndex,\n currentDocumentIds: view.documentIds,\n previousViewId,\n },\n );\n\n this.dispatch(addDocumentToView(viewId, documentId, actualIndex));\n\n // Handle the previous view if document was moved\n if (previousViewId && previousViewId !== viewId) {\n // Set the next active document in the previous view if needed\n if (nextActiveDocumentIdForPreviousView !== undefined) {\n this.dispatch(setViewActiveDocument(previousViewId, nextActiveDocumentIdForPreviousView));\n\n // Emit active document changed event for the previous view\n this.viewActiveDocumentChanged$.emit({\n viewId: previousViewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentIdForPreviousView,\n });\n }\n\n // Emit removal event\n this.documentRemovedFromView$.emit({\n viewId: previousViewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} moved from view ${previousViewId} to ${viewId}`,\n );\n }\n\n // Emit addition event\n this.documentAddedToView$.emit({\n viewId,\n documentId,\n index: actualIndex,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} added to view ${viewId} at index ${actualIndex}`,\n );\n }\n\n private removeDocumentFromView(viewId: string, documentId: string): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (!view.documentIds.includes(documentId)) {\n this.logger.warn(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} not in view ${viewId}`,\n );\n return;\n }\n\n // Calculate next active document if we're removing the currently active one\n const nextActiveDocumentId = this.calculateNextActiveDocumentInView(viewId, documentId);\n\n this.dispatch(removeDocumentFromView(viewId, documentId));\n\n // Set the next active document if needed\n if (nextActiveDocumentId !== undefined) {\n this.dispatch(setViewActiveDocument(viewId, nextActiveDocumentId));\n\n // Emit active document changed event\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentId,\n });\n }\n\n this.documentRemovedFromView$.emit({\n viewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} removed from view ${viewId}`,\n );\n }\n\n private moveDocumentWithinView(viewId: string, documentId: string, toIndex: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === -1) {\n throw new Error(`Document ${documentId} not found in view ${viewId}`);\n }\n\n if (toIndex < 0 || toIndex >= view.documentIds.length) {\n throw new Error(`Invalid index ${toIndex}`);\n }\n\n this.dispatch(moveDocumentWithinView(viewId, documentId, toIndex));\n\n this.documentReordered$.emit({\n viewId,\n documentId,\n fromIndex,\n toIndex,\n });\n }\n\n private moveDocumentBetweenViews(\n fromViewId: string,\n toViewId: string,\n documentId: string,\n toIndex?: number,\n ): void {\n // Just use addDocumentToView - it handles removing from the source view\n // and all the next active document calculations\n this.addDocumentToView(toViewId, documentId, toIndex);\n }\n\n private setViewActiveDocument(viewId: string, documentId: string | null): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (documentId !== null && !view.documentIds.includes(documentId)) {\n throw new Error(`Document ${documentId} not in view ${viewId}`);\n }\n\n const previousDocumentId = view.activeDocumentId;\n if (previousDocumentId === documentId) return;\n\n this.dispatch(setViewActiveDocument(viewId, documentId));\n\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId,\n currentDocumentId: documentId,\n });\n }\n\n // Query Methods\n private getViewDocuments(viewId: string): string[] {\n return this.state.views[viewId]?.documentIds ?? [];\n }\n\n private getViewActiveDocument(viewId: string): string | null {\n return this.state.views[viewId]?.activeDocumentId ?? null;\n }\n\n private getDocumentView(documentId: string): string | null {\n for (const viewId in this.state.views) {\n if (this.state.views[viewId].documentIds.includes(documentId)) {\n return viewId;\n }\n }\n return null;\n }\n\n private isDocumentInAnyView(documentId: string): boolean {\n return this.getDocumentView(documentId) !== null;\n }\n\n private getUnassignedDocuments(documentStates: DocumentState[]): DocumentState[] {\n const assignedDocIds = new Set(Object.values(this.state.views).flatMap((v) => v.documentIds));\n\n return documentStates.filter((doc) => !assignedDocIds.has(doc.id));\n }\n\n // ─────────────────────────────────────────────────────────\n // Focus Management\n // ─────────────────────────────────────────────────────────\n\n private setFocusedView(viewId: string): void {\n if (!this.state.views[viewId]) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const previousViewId = this.state.focusedViewId;\n\n if (previousViewId === viewId) {\n return; // Already focused\n }\n\n this.dispatch(setFocusedViewAction(viewId));\n\n this.viewFocusChanged$.emit({\n previousViewId,\n currentViewId: viewId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'SetFocusedView',\n `Focus changed from ${previousViewId} to ${viewId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Queries\n // ─────────────────────────────────────────────────────────\n\n private getView(viewId: string): View | null {\n return this.state.views[viewId] ?? null;\n }\n\n private getFocusedView(): View | null {\n const focusedViewId = this.state.focusedViewId;\n if (!focusedViewId) return null;\n return this.getView(focusedViewId);\n }\n\n private getAllViews(): View[] {\n return this.state.viewOrder\n .map((viewId) => this.state.views[viewId])\n .filter((view): view is View => view !== undefined);\n }\n\n private getViewCount(): number {\n return Object.keys(this.state.views).length;\n }\n\n // ─────────────────────────────────────────────────────────\n // Helper Methods\n // ─────────────────────────────────────────────────────────\n\n /**\n * Calculate the next active document when removing a document from a view\n * Returns undefined if the document being removed is not the active document\n * Returns the next document ID (left first, then right) or null if no documents remain\n */\n private calculateNextActiveDocumentInView(\n viewId: string,\n removingDocumentId: string,\n ): string | null | undefined {\n const view = this.state.views[viewId];\n if (!view) return undefined;\n\n const currentActiveId = view.activeDocumentId;\n\n // Only calculate if we're removing the active document\n if (currentActiveId !== removingDocumentId) {\n return undefined;\n }\n\n const documentIds = view.documentIds;\n const removingIndex = documentIds.indexOf(removingDocumentId);\n\n if (removingIndex === -1) return undefined;\n\n // Try left first, then right, then null\n if (removingIndex > 0) {\n return documentIds[removingIndex - 1];\n } else if (removingIndex < documentIds.length - 1) {\n return documentIds[removingIndex + 1];\n } else {\n return null;\n }\n }\n\n private generateViewId(): string {\n return `view-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { ViewManagerPluginConfig } from './types';\n\nexport const VIEW_MANAGER_PLUGIN_ID = 'view-manager';\n\nexport const manifest: PluginManifest<ViewManagerPluginConfig> = {\n id: VIEW_MANAGER_PLUGIN_ID,\n name: 'View Manager Plugin',\n version: '1.0.0',\n provides: ['view-manager'],\n requires: [],\n optional: ['document-manager'],\n defaultConfig: {\n enabled: true,\n defaultViewCount: 1,\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { ViewManagerState } from './types';\nimport {\n ViewManagerAction,\n CREATE_VIEW,\n REMOVE_VIEW,\n SET_FOCUSED_VIEW,\n ADD_DOCUMENT_TO_VIEW,\n REMOVE_DOCUMENT_FROM_VIEW,\n MOVE_DOCUMENT_WITHIN_VIEW,\n SET_VIEW_ACTIVE_DOCUMENT,\n} from './actions';\n\nexport const initialState: ViewManagerState = {\n views: {},\n viewOrder: [],\n focusedViewId: null,\n};\n\nexport const viewManagerReducer: Reducer<ViewManagerState, ViewManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case CREATE_VIEW: {\n const { viewId, createdAt } = action.payload;\n\n if (state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n id: viewId,\n documentIds: [],\n activeDocumentId: null,\n createdAt,\n },\n },\n viewOrder: [...state.viewOrder, viewId],\n focusedViewId: state.focusedViewId ?? viewId,\n };\n }\n\n case REMOVE_VIEW: {\n const viewId = action.payload;\n const { [viewId]: removed, ...remainingViews } = state.views;\n\n let newFocusedViewId = state.focusedViewId;\n if (state.focusedViewId === viewId) {\n const remainingIds = state.viewOrder.filter((id) => id !== viewId);\n newFocusedViewId = remainingIds.length > 0 ? remainingIds[0] : null;\n }\n\n return {\n ...state,\n views: remainingViews,\n viewOrder: state.viewOrder.filter((id) => id !== viewId),\n focusedViewId: newFocusedViewId,\n };\n }\n\n case ADD_DOCUMENT_TO_VIEW: {\n const { viewId, documentId, index } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n\n // Remove document from any other view first\n const updatedViews = { ...state.views };\n for (const vid in updatedViews) {\n if (updatedViews[vid].documentIds.includes(documentId)) {\n updatedViews[vid] = {\n ...updatedViews[vid],\n documentIds: updatedViews[vid].documentIds.filter((id) => id !== documentId),\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n };\n }\n }\n\n // Add to target view\n const newDocumentIds = [...updatedViews[viewId].documentIds];\n if (index !== undefined && index >= 0 && index <= newDocumentIds.length) {\n newDocumentIds.splice(index, 0, documentId);\n } else {\n newDocumentIds.push(documentId);\n }\n\n updatedViews[viewId] = {\n ...updatedViews[viewId],\n documentIds: newDocumentIds,\n // Auto-set as active if it's the first document or no active document\n activeDocumentId: updatedViews[viewId].activeDocumentId || documentId,\n };\n\n return {\n ...state,\n views: updatedViews,\n };\n }\n\n case REMOVE_DOCUMENT_FROM_VIEW: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const newDocumentIds = view.documentIds.filter((id) => id !== documentId);\n\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case MOVE_DOCUMENT_WITHIN_VIEW: {\n const { viewId, documentId, toIndex } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === toIndex) return state;\n\n const newDocumentIds = [...view.documentIds];\n newDocumentIds.splice(fromIndex, 1);\n newDocumentIds.splice(toIndex, 0, documentId);\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case SET_VIEW_ACTIVE_DOCUMENT: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n if (documentId !== null && !view.documentIds.includes(documentId)) return state;\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n activeDocumentId: documentId,\n },\n },\n };\n }\n\n case SET_FOCUSED_VIEW: {\n const viewId = action.payload;\n\n if (viewId !== null && !state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n focusedViewId: viewId,\n };\n }\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { ViewManagerPlugin } from './view-manager-plugin';\nimport { manifest, VIEW_MANAGER_PLUGIN_ID } from './manifest';\nimport { ViewManagerPluginConfig, ViewManagerState } from './types';\nimport { viewManagerReducer, initialState } from './reducer';\nimport { ViewManagerAction } from './actions';\n\nexport const ViewManagerPluginPackage: PluginPackage<\n ViewManagerPlugin,\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerAction\n> = {\n manifest,\n create: (registry, config) => new ViewManagerPlugin(VIEW_MANAGER_PLUGIN_ID, registry, config),\n reducer: viewManagerReducer,\n initialState,\n};\n\nexport * from './view-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\n"],"names":["createViewAction","removeViewAction","setFocusedViewAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/actions.ts","../src/lib/view-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\n\nexport const CREATE_VIEW = 'CREATE_VIEW';\nexport const REMOVE_VIEW = 'REMOVE_VIEW';\nexport const ADD_DOCUMENT_TO_VIEW = 'ADD_DOCUMENT_TO_VIEW';\nexport const REMOVE_DOCUMENT_FROM_VIEW = 'REMOVE_DOCUMENT_FROM_VIEW';\nexport const MOVE_DOCUMENT_WITHIN_VIEW = 'MOVE_DOCUMENT_WITHIN_VIEW';\nexport const SET_VIEW_ACTIVE_DOCUMENT = 'SET_VIEW_ACTIVE_DOCUMENT';\nexport const SET_FOCUSED_VIEW = 'SET_FOCUSED_VIEW';\n\nexport interface CreateViewAction extends Action {\n type: typeof CREATE_VIEW;\n payload: {\n viewId: string;\n createdAt: number;\n };\n}\n\nexport interface RemoveViewAction extends Action {\n type: typeof REMOVE_VIEW;\n payload: string; // viewId\n}\n\nexport interface AddDocumentToViewAction extends Action {\n type: typeof ADD_DOCUMENT_TO_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n index?: number;\n };\n}\n\nexport interface RemoveDocumentFromViewAction extends Action {\n type: typeof REMOVE_DOCUMENT_FROM_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n };\n}\n\nexport interface MoveDocumentWithinViewAction extends Action {\n type: typeof MOVE_DOCUMENT_WITHIN_VIEW;\n payload: {\n viewId: string;\n documentId: string;\n toIndex: number;\n };\n}\n\nexport interface SetViewActiveDocumentAction extends Action {\n type: typeof SET_VIEW_ACTIVE_DOCUMENT;\n payload: {\n viewId: string;\n documentId: string | null;\n };\n}\n\nexport interface SetFocusedViewAction extends Action {\n type: typeof SET_FOCUSED_VIEW;\n payload: string | null; // viewId or null\n}\n\nexport type ViewManagerAction =\n | CreateViewAction\n | RemoveViewAction\n | AddDocumentToViewAction\n | RemoveDocumentFromViewAction\n | MoveDocumentWithinViewAction\n | SetViewActiveDocumentAction\n | SetFocusedViewAction;\n\nexport function createView(viewId: string, createdAt: number): CreateViewAction {\n return { type: CREATE_VIEW, payload: { viewId, createdAt } };\n}\n\nexport function removeView(viewId: string): RemoveViewAction {\n return { type: REMOVE_VIEW, payload: viewId };\n}\n\nexport function addDocumentToView(\n viewId: string,\n documentId: string,\n index?: number,\n): AddDocumentToViewAction {\n return { type: ADD_DOCUMENT_TO_VIEW, payload: { viewId, documentId, index } };\n}\n\nexport function removeDocumentFromView(\n viewId: string,\n documentId: string,\n): RemoveDocumentFromViewAction {\n return { type: REMOVE_DOCUMENT_FROM_VIEW, payload: { viewId, documentId } };\n}\n\nexport function moveDocumentWithinView(\n viewId: string,\n documentId: string,\n toIndex: number,\n): MoveDocumentWithinViewAction {\n return { type: MOVE_DOCUMENT_WITHIN_VIEW, payload: { viewId, documentId, toIndex } };\n}\n\nexport function setViewActiveDocument(\n viewId: string,\n documentId: string | null,\n): SetViewActiveDocumentAction {\n return { type: SET_VIEW_ACTIVE_DOCUMENT, payload: { viewId, documentId } };\n}\n\nexport function setFocusedView(viewId: string | null): SetFocusedViewAction {\n return { type: SET_FOCUSED_VIEW, payload: viewId };\n}\n","import { BasePlugin, PluginRegistry, createBehaviorEmitter, DocumentState } from '@embedpdf/core';\nimport type {\n DocumentManagerCapability,\n DocumentManagerPlugin,\n} from '@embedpdf/plugin-document-manager';\n\nimport {\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerCapability,\n View,\n ViewChangeEvent,\n ViewActiveDocumentChangedEvent,\n ViewDocumentReorderedEvent,\n ViewDocumentRemovedEvent,\n ViewDocumentAddedEvent,\n} from './types';\nimport {\n ViewManagerAction,\n createView as createViewAction,\n removeView as removeViewAction,\n setFocusedView as setFocusedViewAction,\n setViewActiveDocument,\n moveDocumentWithinView,\n removeDocumentFromView,\n addDocumentToView,\n} from './actions';\n\nexport class ViewManagerPlugin extends BasePlugin<\n ViewManagerPluginConfig,\n ViewManagerCapability,\n ViewManagerState,\n ViewManagerAction\n> {\n static readonly id = 'view-manager' as const;\n\n private readonly viewCreated$ = createBehaviorEmitter<string>();\n private readonly viewRemoved$ = createBehaviorEmitter<string>();\n private readonly viewFocusChanged$ = createBehaviorEmitter<ViewChangeEvent>();\n private readonly documentAddedToView$ = createBehaviorEmitter<ViewDocumentAddedEvent>();\n private readonly documentRemovedFromView$ = createBehaviorEmitter<ViewDocumentRemovedEvent>();\n private readonly documentReordered$ = createBehaviorEmitter<ViewDocumentReorderedEvent>();\n private readonly viewActiveDocumentChanged$ =\n createBehaviorEmitter<ViewActiveDocumentChangedEvent>();\n\n // Optional integration with DocumentManager\n private docManagerCapability?: DocumentManagerCapability;\n\n constructor(\n public readonly id: string,\n registry: PluginRegistry,\n config?: ViewManagerPluginConfig,\n ) {\n super(id, registry);\n }\n\n protected buildCapability(): ViewManagerCapability {\n return {\n // View lifecycle\n createView: (viewId) => this.createView(viewId),\n removeView: (viewId) => this.removeView(viewId),\n getAllViews: () => this.getAllViews(),\n getViewCount: () => this.getViewCount(),\n\n // Document management\n addDocumentToView: (viewId, documentId, index) =>\n this.addDocumentToView(viewId, documentId, index),\n removeDocumentFromView: (viewId, documentId) =>\n this.removeDocumentFromView(viewId, documentId),\n moveDocumentWithinView: (viewId, documentId, toIndex) =>\n this.moveDocumentWithinView(viewId, documentId, toIndex),\n moveDocumentBetweenViews: (fromViewId, toViewId, documentId, toIndex) =>\n this.moveDocumentBetweenViews(fromViewId, toViewId, documentId, toIndex),\n setViewActiveDocument: (viewId, documentId) => this.setViewActiveDocument(viewId, documentId),\n\n // Focus management\n setFocusedView: (viewId) => this.setFocusedView(viewId),\n getFocusedViewId: () => this.state.focusedViewId,\n getFocusedView: () => this.getFocusedView(),\n\n // Queries\n getView: (viewId) => this.getView(viewId),\n getViewDocuments: (viewId) => this.getViewDocuments(viewId),\n getViewActiveDocument: (viewId) => this.getViewActiveDocument(viewId),\n getDocumentView: (documentId) => this.getDocumentView(documentId),\n isDocumentInAnyView: (documentId) => this.isDocumentInAnyView(documentId),\n getUnassignedDocuments: (documentStates) => this.getUnassignedDocuments(documentStates),\n\n // Events\n onViewCreated: this.viewCreated$.on,\n onViewRemoved: this.viewRemoved$.on,\n onViewFocusChanged: this.viewFocusChanged$.on,\n onDocumentAddedToView: this.documentAddedToView$.on,\n onDocumentRemovedFromView: this.documentRemovedFromView$.on,\n onDocumentReordered: this.documentReordered$.on,\n onViewActiveDocumentChanged: this.viewActiveDocumentChanged$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Plugin Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(config: ViewManagerPluginConfig): Promise<void> {\n // Try to get DocumentManager if it exists (optional dependency)\n const docManager = this.registry.getPlugin<DocumentManagerPlugin>('document-manager');\n if (docManager && docManager.provides) {\n this.docManagerCapability = docManager.provides();\n\n this.docManagerCapability.onDocumentClosed((documentId) => {\n const viewId = this.getDocumentView(documentId);\n if (viewId) {\n this.removeDocumentFromView(viewId, documentId);\n }\n });\n }\n\n // Create default views if configured\n if (config.defaultViewCount && config.defaultViewCount > 0) {\n for (let i = 0; i < config.defaultViewCount; i++) {\n this.createView(`view-${i + 1}`);\n }\n }\n\n this.logger.info('ViewManagerPlugin', 'Initialize', 'View Manager Plugin initialized', {\n defaultViewCount: config.defaultViewCount,\n hasDocumentManager: !!this.docManagerCapability,\n });\n }\n\n async destroy(): Promise<void> {\n // Clear all emitters\n this.viewCreated$.clear();\n this.viewRemoved$.clear();\n this.viewFocusChanged$.clear();\n this.documentAddedToView$.clear();\n this.documentRemovedFromView$.clear();\n this.documentReordered$.clear();\n this.viewActiveDocumentChanged$.clear();\n\n super.destroy();\n }\n\n // ─────────────────────────────────────────────────────────\n // View Lifecycle\n // ─────────────────────────────────────────────────────────\n\n private createView(viewId?: string): string {\n const id = viewId || this.generateViewId();\n\n if (this.state.views[id]) {\n this.logger.warn('ViewManagerPlugin', 'CreateView', `View ${id} already exists`);\n return id;\n }\n\n this.dispatch(createViewAction(id, Date.now()));\n this.viewCreated$.emit(id);\n\n this.logger.info('ViewManagerPlugin', 'CreateView', `View ${id} created`);\n\n return id;\n }\n\n private removeView(viewId: string): void {\n const view = this.state.views[viewId];\n\n if (!view) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', `View ${viewId} not found`);\n return;\n }\n\n // Don't allow removing the last view\n if (this.getViewCount() === 1) {\n this.logger.warn('ViewManagerPlugin', 'RemoveView', 'Cannot remove the last view');\n return;\n }\n\n this.dispatch(removeViewAction(viewId));\n this.viewRemoved$.emit(viewId);\n\n this.logger.info('ViewManagerPlugin', 'RemoveView', `View ${viewId} removed`);\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Assignment\n // ─────────────────────────────────────────────────────────\n\n // Document Management Methods\n private addDocumentToView(viewId: string, documentId: string, index?: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n // Validate document exists if DocumentManager is present\n if (this.docManagerCapability) {\n if (!this.docManagerCapability.isDocumentOpen(documentId)) {\n throw new Error(`Document ${documentId} is not open`);\n }\n }\n\n // Check if document is already in another view (before state update)\n const previousViewId = this.getDocumentView(documentId);\n\n // Calculate next active document for the previous view if needed\n let nextActiveDocumentIdForPreviousView: string | null | undefined;\n if (previousViewId && previousViewId !== viewId) {\n nextActiveDocumentIdForPreviousView = this.calculateNextActiveDocumentInView(\n previousViewId,\n documentId,\n );\n }\n\n // Calculate the actual index - must account for the document being removed from this view\n // if it was already here (though we checked above, the reducer also handles this)\n const actualIndex = index ?? view.documentIds.length;\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Adding document ${documentId} to view ${viewId}`,\n {\n requestedIndex: index,\n calculatedIndex: actualIndex,\n currentDocumentIds: view.documentIds,\n previousViewId,\n },\n );\n\n this.dispatch(addDocumentToView(viewId, documentId, actualIndex));\n\n // Handle the previous view if document was moved\n if (previousViewId && previousViewId !== viewId) {\n // Set the next active document in the previous view if needed\n if (nextActiveDocumentIdForPreviousView !== undefined) {\n this.dispatch(setViewActiveDocument(previousViewId, nextActiveDocumentIdForPreviousView));\n\n // Emit active document changed event for the previous view\n this.viewActiveDocumentChanged$.emit({\n viewId: previousViewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentIdForPreviousView,\n });\n }\n\n // Emit removal event\n this.documentRemovedFromView$.emit({\n viewId: previousViewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} moved from view ${previousViewId} to ${viewId}`,\n );\n }\n\n // Emit addition event\n this.documentAddedToView$.emit({\n viewId,\n documentId,\n index: actualIndex,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'AddDocumentToView',\n `Document ${documentId} added to view ${viewId} at index ${actualIndex}`,\n );\n }\n\n private removeDocumentFromView(viewId: string, documentId: string): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (!view.documentIds.includes(documentId)) {\n this.logger.warn(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} not in view ${viewId}`,\n );\n return;\n }\n\n // Calculate next active document if we're removing the currently active one\n const nextActiveDocumentId = this.calculateNextActiveDocumentInView(viewId, documentId);\n\n this.dispatch(removeDocumentFromView(viewId, documentId));\n\n // Set the next active document if needed\n if (nextActiveDocumentId !== undefined) {\n this.dispatch(setViewActiveDocument(viewId, nextActiveDocumentId));\n\n // Emit active document changed event\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId: documentId,\n currentDocumentId: nextActiveDocumentId,\n });\n }\n\n this.documentRemovedFromView$.emit({\n viewId,\n documentId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'RemoveDocumentFromView',\n `Document ${documentId} removed from view ${viewId}`,\n );\n }\n\n private moveDocumentWithinView(viewId: string, documentId: string, toIndex: number): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === -1) {\n throw new Error(`Document ${documentId} not found in view ${viewId}`);\n }\n\n if (toIndex < 0 || toIndex >= view.documentIds.length) {\n throw new Error(`Invalid index ${toIndex}`);\n }\n\n this.dispatch(moveDocumentWithinView(viewId, documentId, toIndex));\n\n this.documentReordered$.emit({\n viewId,\n documentId,\n fromIndex,\n toIndex,\n });\n }\n\n private moveDocumentBetweenViews(\n fromViewId: string,\n toViewId: string,\n documentId: string,\n toIndex?: number,\n ): void {\n // Just use addDocumentToView - it handles removing from the source view\n // and all the next active document calculations\n this.addDocumentToView(toViewId, documentId, toIndex);\n }\n\n private setViewActiveDocument(viewId: string, documentId: string | null): void {\n const view = this.state.views[viewId];\n if (!view) {\n throw new Error(`View ${viewId} not found`);\n }\n\n if (documentId !== null && !view.documentIds.includes(documentId)) {\n throw new Error(`Document ${documentId} not in view ${viewId}`);\n }\n\n const previousDocumentId = view.activeDocumentId;\n if (previousDocumentId === documentId) return;\n\n this.dispatch(setViewActiveDocument(viewId, documentId));\n\n this.viewActiveDocumentChanged$.emit({\n viewId,\n previousDocumentId,\n currentDocumentId: documentId,\n });\n }\n\n // Query Methods\n private getViewDocuments(viewId: string): string[] {\n return this.state.views[viewId]?.documentIds ?? [];\n }\n\n private getViewActiveDocument(viewId: string): string | null {\n return this.state.views[viewId]?.activeDocumentId ?? null;\n }\n\n private getDocumentView(documentId: string): string | null {\n for (const viewId in this.state.views) {\n if (this.state.views[viewId].documentIds.includes(documentId)) {\n return viewId;\n }\n }\n return null;\n }\n\n private isDocumentInAnyView(documentId: string): boolean {\n return this.getDocumentView(documentId) !== null;\n }\n\n private getUnassignedDocuments(documentStates: DocumentState[]): DocumentState[] {\n const assignedDocIds = new Set(Object.values(this.state.views).flatMap((v) => v.documentIds));\n\n return documentStates.filter((doc) => !assignedDocIds.has(doc.id));\n }\n\n // ─────────────────────────────────────────────────────────\n // Focus Management\n // ─────────────────────────────────────────────────────────\n\n private setFocusedView(viewId: string): void {\n if (!this.state.views[viewId]) {\n throw new Error(`View ${viewId} not found`);\n }\n\n const previousViewId = this.state.focusedViewId;\n\n if (previousViewId === viewId) {\n return; // Already focused\n }\n\n this.dispatch(setFocusedViewAction(viewId));\n\n this.viewFocusChanged$.emit({\n previousViewId,\n currentViewId: viewId,\n });\n\n this.logger.info(\n 'ViewManagerPlugin',\n 'SetFocusedView',\n `Focus changed from ${previousViewId} to ${viewId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Queries\n // ─────────────────────────────────────────────────────────\n\n private getView(viewId: string): View | null {\n return this.state.views[viewId] ?? null;\n }\n\n private getFocusedView(): View | null {\n const focusedViewId = this.state.focusedViewId;\n if (!focusedViewId) return null;\n return this.getView(focusedViewId);\n }\n\n private getAllViews(): View[] {\n return this.state.viewOrder\n .map((viewId) => this.state.views[viewId])\n .filter((view): view is View => view !== undefined);\n }\n\n private getViewCount(): number {\n return Object.keys(this.state.views).length;\n }\n\n // ─────────────────────────────────────────────────────────\n // Helper Methods\n // ─────────────────────────────────────────────────────────\n\n /**\n * Calculate the next active document when removing a document from a view\n * Returns undefined if the document being removed is not the active document\n * Returns the next document ID (left first, then right) or null if no documents remain\n */\n private calculateNextActiveDocumentInView(\n viewId: string,\n removingDocumentId: string,\n ): string | null | undefined {\n const view = this.state.views[viewId];\n if (!view) return undefined;\n\n const currentActiveId = view.activeDocumentId;\n\n // Only calculate if we're removing the active document\n if (currentActiveId !== removingDocumentId) {\n return undefined;\n }\n\n const documentIds = view.documentIds;\n const removingIndex = documentIds.indexOf(removingDocumentId);\n\n if (removingIndex === -1) return undefined;\n\n // Try left first, then right, then null\n if (removingIndex > 0) {\n return documentIds[removingIndex - 1];\n } else if (removingIndex < documentIds.length - 1) {\n return documentIds[removingIndex + 1];\n } else {\n return null;\n }\n }\n\n private generateViewId(): string {\n return `view-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { ViewManagerPluginConfig } from './types';\n\nexport const VIEW_MANAGER_PLUGIN_ID = 'view-manager';\n\nexport const manifest: PluginManifest<ViewManagerPluginConfig> = {\n id: VIEW_MANAGER_PLUGIN_ID,\n name: 'View Manager Plugin',\n version: '1.0.0',\n provides: ['view-manager'],\n requires: [],\n optional: ['document-manager'],\n defaultConfig: {\n defaultViewCount: 1,\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { ViewManagerState } from './types';\nimport {\n ViewManagerAction,\n CREATE_VIEW,\n REMOVE_VIEW,\n SET_FOCUSED_VIEW,\n ADD_DOCUMENT_TO_VIEW,\n REMOVE_DOCUMENT_FROM_VIEW,\n MOVE_DOCUMENT_WITHIN_VIEW,\n SET_VIEW_ACTIVE_DOCUMENT,\n} from './actions';\n\nexport const initialState: ViewManagerState = {\n views: {},\n viewOrder: [],\n focusedViewId: null,\n};\n\nexport const viewManagerReducer: Reducer<ViewManagerState, ViewManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case CREATE_VIEW: {\n const { viewId, createdAt } = action.payload;\n\n if (state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n id: viewId,\n documentIds: [],\n activeDocumentId: null,\n createdAt,\n },\n },\n viewOrder: [...state.viewOrder, viewId],\n focusedViewId: state.focusedViewId ?? viewId,\n };\n }\n\n case REMOVE_VIEW: {\n const viewId = action.payload;\n const { [viewId]: removed, ...remainingViews } = state.views;\n\n let newFocusedViewId = state.focusedViewId;\n if (state.focusedViewId === viewId) {\n const remainingIds = state.viewOrder.filter((id) => id !== viewId);\n newFocusedViewId = remainingIds.length > 0 ? remainingIds[0] : null;\n }\n\n return {\n ...state,\n views: remainingViews,\n viewOrder: state.viewOrder.filter((id) => id !== viewId),\n focusedViewId: newFocusedViewId,\n };\n }\n\n case ADD_DOCUMENT_TO_VIEW: {\n const { viewId, documentId, index } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n\n // Remove document from any other view first\n const updatedViews = { ...state.views };\n for (const vid in updatedViews) {\n if (updatedViews[vid].documentIds.includes(documentId)) {\n updatedViews[vid] = {\n ...updatedViews[vid],\n documentIds: updatedViews[vid].documentIds.filter((id) => id !== documentId),\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n };\n }\n }\n\n // Add to target view\n const newDocumentIds = [...updatedViews[viewId].documentIds];\n if (index !== undefined && index >= 0 && index <= newDocumentIds.length) {\n newDocumentIds.splice(index, 0, documentId);\n } else {\n newDocumentIds.push(documentId);\n }\n\n updatedViews[viewId] = {\n ...updatedViews[viewId],\n documentIds: newDocumentIds,\n // Auto-set as active if it's the first document or no active document\n activeDocumentId: updatedViews[viewId].activeDocumentId || documentId,\n };\n\n return {\n ...state,\n views: updatedViews,\n };\n }\n\n case REMOVE_DOCUMENT_FROM_VIEW: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const newDocumentIds = view.documentIds.filter((id) => id !== documentId);\n\n // Don't modify activeDocumentId here - let the plugin handle it explicitly\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case MOVE_DOCUMENT_WITHIN_VIEW: {\n const { viewId, documentId, toIndex } = action.payload;\n const view = state.views[viewId];\n\n if (!view || !view.documentIds.includes(documentId)) return state;\n\n const fromIndex = view.documentIds.indexOf(documentId);\n if (fromIndex === toIndex) return state;\n\n const newDocumentIds = [...view.documentIds];\n newDocumentIds.splice(fromIndex, 1);\n newDocumentIds.splice(toIndex, 0, documentId);\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n documentIds: newDocumentIds,\n },\n },\n };\n }\n\n case SET_VIEW_ACTIVE_DOCUMENT: {\n const { viewId, documentId } = action.payload;\n const view = state.views[viewId];\n\n if (!view) return state;\n if (documentId !== null && !view.documentIds.includes(documentId)) return state;\n\n return {\n ...state,\n views: {\n ...state.views,\n [viewId]: {\n ...view,\n activeDocumentId: documentId,\n },\n },\n };\n }\n\n case SET_FOCUSED_VIEW: {\n const viewId = action.payload;\n\n if (viewId !== null && !state.views[viewId]) {\n return state;\n }\n\n return {\n ...state,\n focusedViewId: viewId,\n };\n }\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { ViewManagerPlugin } from './view-manager-plugin';\nimport { manifest, VIEW_MANAGER_PLUGIN_ID } from './manifest';\nimport { ViewManagerPluginConfig, ViewManagerState } from './types';\nimport { viewManagerReducer, initialState } from './reducer';\nimport { ViewManagerAction } from './actions';\n\nexport const ViewManagerPluginPackage: PluginPackage<\n ViewManagerPlugin,\n ViewManagerPluginConfig,\n ViewManagerState,\n ViewManagerAction\n> = {\n manifest,\n create: (registry, config) => new ViewManagerPlugin(VIEW_MANAGER_PLUGIN_ID, registry, config),\n reducer: viewManagerReducer,\n initialState,\n};\n\nexport * from './view-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './actions';\n"],"names":["createViewAction","removeViewAction","setFocusedViewAction"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embedpdf/plugin-view-manager",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@embedpdf/models": "2.0.0-next.
|
|
38
|
+
"@embedpdf/models": "2.0.0-next.3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/react": "^18.2.0",
|
|
42
42
|
"typescript": "^5.0.0",
|
|
43
|
-
"@embedpdf/core": "2.0.0-next.
|
|
43
|
+
"@embedpdf/core": "2.0.0-next.3",
|
|
44
44
|
"@embedpdf/build": "1.1.0",
|
|
45
|
-
"@embedpdf/plugin-document-manager": "2.0.0-next.
|
|
45
|
+
"@embedpdf/plugin-document-manager": "2.0.0-next.3"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"react": ">=16.8.0",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"preact": "^10.26.4",
|
|
51
51
|
"vue": ">=3.2.0",
|
|
52
52
|
"svelte": ">=5 <6",
|
|
53
|
-
"@embedpdf/core": "2.0.0-next.
|
|
53
|
+
"@embedpdf/core": "2.0.0-next.3"
|
|
54
54
|
},
|
|
55
55
|
"files": [
|
|
56
56
|
"dist",
|