@embedpdf/plugin-interaction-manager 2.0.0-next.1 → 2.0.0-next.2
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="INTERACTION/INIT_STATE",s="INTERACTION/CLEANUP_STATE",o="INTERACTION/ACTIVATE_MODE",n="INTERACTION/PAUSE",a="INTERACTION/RESUME",r="INTERACTION/SET_CURSOR",i="INTERACTION/SET_DEFAULT_MODE",c="INTERACTION/SET_EXCLUSION_RULES",u="INTERACTION/ADD_EXCLUSION_CLASS",l="INTERACTION/REMOVE_EXCLUSION_CLASS",d="INTERACTION/ADD_EXCLUSION_ATTRIBUTE",h="INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE";function g(e){return{type:i,payload:{mode:e}}}function m(e){return{type:c,payload:{rules:e}}}const p="pointerMode",I=class extends e.BasePlugin{constructor(t,s,o){super(t,s),this.modes=new Map,this.cursorClaims=new Map,this.buckets=new Map,this.alwaysGlobal=new Map,this.alwaysPage=new Map,this.onModeChange$=e.createEmitter(),this.onHandlerChange$=e.createEmitter(),this.onCursorChange$=e.createEmitter(),this.onStateChange$=e.createBehaviorEmitter(),this.registerMode({id:p,scope:"page",exclusive:!1,cursor:"auto"}),this.dispatch(g(p)),o.exclusionRules&&this.dispatch(m(o.exclusionRules))}onDocumentLoadingStarted(e){const s={activeMode:this.state.defaultMode,cursor:"auto",paused:!1};this.dispatch(function(e,s){return{type:t,payload:{documentId:e,state:s}}}(e,s)),this.cursorClaims.set(e,new Map),this.buckets.set(e,new Map),this.alwaysGlobal.set(e,new Set),this.alwaysPage.set(e,new Map);const o=this.buckets.get(e);for(const t of this.modes.keys())o.set(t,{global:new Set,page:new Map});this.logger.debug("InteractionManagerPlugin","DocumentOpened",`Initialized interaction state for document: ${e}`)}onDocumentClosed(e){this.cursorClaims.delete(e),this.buckets.delete(e),this.alwaysGlobal.delete(e),this.alwaysPage.delete(e),this.dispatch(function(e){return{type:s,payload:e}}(e)),this.logger.debug("InteractionManagerPlugin","DocumentClosed",`Cleaned up interaction state for document: ${e}`)}buildCapability(){return{getActiveMode:()=>this.getActiveMode(),getActiveInteractionMode:()=>this.getActiveInteractionMode(),activate:e=>this.activate(e),activateDefaultMode:()=>this.activateDefaultMode(),setCursor:(e,t,s)=>this.setCursor(e,t,s),getCurrentCursor:()=>this.getCurrentCursor(),removeCursor:e=>this.removeCursor(e),getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(),pause:()=>this.pause(),resume:()=>this.resume(),isPaused:()=>this.registry.isDestroyed()||this.isPaused(),getState:()=>this.getDocumentStateOrThrow(),forDocument:e=>this.createInteractionScope(e),registerMode:e=>this.registerMode(e),registerHandlers:e=>this.registerHandlers(e),registerAlways:e=>this.registerAlways(e),setDefaultMode:e=>this.setDefaultMode(e),getDefaultMode:()=>this.state.defaultMode,getExclusionRules:()=>this.state.exclusionRules,setExclusionRules:e=>this.dispatch(m(e)),addExclusionClass:e=>this.dispatch(function(e){return{type:u,payload:{className:e}}}(e)),removeExclusionClass:e=>this.dispatch(function(e){return{type:l,payload:{className:e}}}(e)),addExclusionAttribute:e=>this.dispatch(function(e){return{type:d,payload:{attribute:e}}}(e)),removeExclusionAttribute:e=>this.dispatch(function(e){return{type:h,payload:{attribute:e}}}(e)),onModeChange:this.onModeChange$.on,onCursorChange:this.onCursorChange$.on,onHandlerChange:this.onHandlerChange$.on,onStateChange:this.onStateChange$.on}}createInteractionScope(e){return{getActiveMode:()=>this.getActiveMode(e),getActiveInteractionMode:()=>this.getActiveInteractionMode(e),activate:t=>this.activate(t,e),activateDefaultMode:()=>this.activateDefaultMode(e),setCursor:(t,s,o)=>this.setCursor(t,s,o,e),getCurrentCursor:()=>this.getCurrentCursor(e),removeCursor:t=>this.removeCursor(t,e),getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(e),pause:()=>this.pause(e),resume:()=>this.resume(e),isPaused:()=>this.isPaused(e),getState:()=>this.getDocumentStateOrThrow(e),onModeChange:t=>this.onModeChange$.on(s=>{s.documentId===e&&t(s.activeMode)}),onCursorChange:t=>this.onCursorChange$.on(s=>{s.documentId===e&&t(s.cursor)}),onStateChange:t=>this.onStateChange$.on(s=>{s.documentId===e&&t(s.state)})}}getDocumentState(e){const t=e??this.getActiveDocumentId();return this.state.documents[t]??null}getDocumentStateOrThrow(e){const t=this.getDocumentState(e);if(!t)throw new Error(`Interaction state not found for document: ${e??"active"}`);return t}activate(e,t){var s;const n=t??this.getActiveDocumentId(),a=this.getDocumentStateOrThrow(n);if(!this.modes.has(e))throw new Error(`[interaction] unknown mode '${e}'`);if(e===a.activeMode)return;const r=a.activeMode;null==(s=this.cursorClaims.get(n))||s.clear(),this.notifyHandlersInactive(n,r),this.dispatch(function(e,t){return{type:o,payload:{documentId:e,mode:t}}}(n,e)),this.emitCursor(n),this.notifyHandlersActive(n,e),this.onModeChange$.emit({documentId:n,activeMode:e,previousMode:r})}activateDefaultMode(e){const t=e??this.getActiveDocumentId();this.activate(this.state.defaultMode,t)}setDefaultMode(e){if(!this.modes.has(e))throw new Error(`[interaction] cannot set unknown mode '${e}' as default`);this.dispatch(g(e))}getActiveMode(e){return this.getDocumentStateOrThrow(e).activeMode}getActiveInteractionMode(e){const t=this.getDocumentState(e);return t?this.modes.get(t.activeMode)??null:null}activeModeIsExclusive(e){const t=this.getActiveInteractionMode(e);return!!(null==t?void 0:t.exclusive)}pause(e){const t=e??this.getActiveDocumentId();this.dispatch(function(e){return{type:n,payload:e}}(t))}resume(e){const t=e??this.getActiveDocumentId();this.dispatch(function(e){return{type:a,payload:e}}(t))}isPaused(e){return this.getDocumentStateOrThrow(e).paused}registerMode(e){this.modes.set(e.id,e);for(const t of this.buckets.keys()){const s=this.buckets.get(t);s.has(e.id)||s.set(e.id,{global:new Set,page:new Map})}}registerHandlers({documentId:e,modeId:t,handlers:s,pageIndex:o}){const n=Array.isArray(t)?t:[t],a=[],r=this.buckets.get(e);if(!r)throw new Error(`No buckets found for document: ${e}`);for(const i of n){const e=r.get(i);if(!e)throw new Error(`unknown mode '${i}'`);if(null==o)e.global.add(s);else{const t=e.page.get(o)??new Set;t.add(s),e.page.set(o,t)}a.push(()=>{if(null==o)e.global.delete(s);else{const t=e.page.get(o);t&&(t.delete(s),0===t.size&&e.page.delete(o))}})}return this.onHandlerChange$.emit({...this.state}),()=>{a.forEach(e=>e()),this.onHandlerChange$.emit({...this.state})}}registerAlways({scope:e,handlers:t}){if("global"===e.type){const s=this.alwaysGlobal.get(e.documentId)??new Set;return s.add(t),this.alwaysGlobal.set(e.documentId,s),this.onHandlerChange$.emit({...this.state}),()=>{s.delete(t),this.onHandlerChange$.emit({...this.state})}}const s=this.alwaysPage.get(e.documentId)??new Map,o=s.get(e.pageIndex)??new Set;return o.add(t),s.set(e.pageIndex,o),this.alwaysPage.set(e.documentId,s),this.onHandlerChange$.emit({...this.state}),()=>{o.delete(t),this.onHandlerChange$.emit({...this.state})}}getHandlersForScope(e){var t;const s=this.getDocumentState(e.documentId);if(!s)return null;const o=this.modes.get(s.activeMode);if(!o)return null;const n=this.buckets.get(e.documentId);if(!n)return null;const a=n.get(o.id);if(!a)return null;const r=(e,t)=>e.size||t.size?function(e){const t=["onPointerDown","onPointerUp","onPointerMove","onPointerEnter","onPointerLeave","onPointerCancel","onMouseDown","onMouseUp","onMouseMove","onMouseEnter","onMouseLeave","onMouseCancel","onClick","onDoubleClick"],s={};for(const o of t)s[o]=(t,s,n)=>{var a;for(const r of e)null==(a=r[o])||a.call(r,t,s,n)};return s}([...e,...t]):null;if("global"===e.type){return r(this.alwaysGlobal.get(e.documentId)??new Set,"global"===o.scope?a.global:new Set)}return r((null==(t=this.alwaysPage.get(e.documentId))?void 0:t.get(e.pageIndex))??new Set,"page"===o.scope?a.page.get(e.pageIndex)??new Set:new Set)}setCursor(e,t,s=0,o){const n=o??this.getActiveDocumentId(),a=this.cursorClaims.get(n);a&&(a.set(e,{cursor:t,priority:s}),this.emitCursor(n))}removeCursor(e,t){const s=t??this.getActiveDocumentId(),o=this.cursorClaims.get(s);o&&(o.delete(e),this.emitCursor(s))}getCurrentCursor(e){return this.getDocumentStateOrThrow(e).cursor}emitCursor(e){var t;const s=this.cursorClaims.get(e);if(!s)return;const o=this.getDocumentState(e);if(!o)return;const n=[...s.values()].sort((e,t)=>t.priority-e.priority)[0]??{cursor:(null==(t=this.modes.get(o.activeMode))?void 0:t.cursor)??"auto"};n.cursor!==o.cursor&&(this.dispatch(function(e,t){return{type:r,payload:{documentId:e,cursor:t}}}(e,n.cursor)),this.onCursorChange$.emit({documentId:e,cursor:n.cursor}))}notifyHandlersActive(e,t){var s,o;null==(s=this.alwaysGlobal.get(e))||s.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)}),null==(o=this.alwaysPage.get(e))||o.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)})});const n=this.modes.get(t);if(!n)return;const a=this.buckets.get(e);if(!a)return;const r=a.get(t);r&&("global"===n.scope&&r.global.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)}),"page"===n.scope&&r.page.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)})}))}notifyHandlersInactive(e,t){var s,o;null==(s=this.alwaysGlobal.get(e))||s.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)}),null==(o=this.alwaysPage.get(e))||o.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)})});const n=this.modes.get(t);if(!n)return;const a=this.buckets.get(e);if(!a)return;const r=a.get(t);r&&("global"===n.scope&&r.global.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)}),"page"===n.scope&&r.page.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)})}))}onStoreUpdated(e,t){for(const s in t.documents){const o=e.documents[s],n=t.documents[s];o!==n&&this.onStateChange$.emit({documentId:s,state:n})}}async initialize(e){this.logger.info("InteractionManagerPlugin","Initialize","Interaction Manager Plugin initialized")}async destroy(){this.onModeChange$.clear(),this.onCursorChange$.clear(),this.onHandlerChange$.clear(),this.onStateChange$.clear(),await super.destroy()}};I.id="interaction-manager";let v=I;const C="interaction-manager",f={id:C,name:"Interaction Manager Plugin",version:"1.0.0",provides:["interaction-manager"],requires:[],optional:[],defaultConfig:{enabled:!0,exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]}}},M="pointerMode",E={activeMode:M,cursor:"auto",paused:!1},y={defaultMode:M,exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]},documents:{},activeDocumentId:null},A=(e=y,g)=>{switch(g.type){case t:{const{documentId:t,state:s}=g.payload;return{...e,documents:{...e.documents,[t]:s},activeDocumentId:e.activeDocumentId??t}}case s:{const t=g.payload,{[t]:s,...o}=e.documents;return{...e,documents:o,activeDocumentId:e.activeDocumentId===t?null:e.activeDocumentId}}case"INTERACTION/SET_ACTIVE_DOCUMENT":return{...e,activeDocumentId:g.payload};case o:{const{documentId:t,mode:s}=g.payload,o=e.documents[t];return o?{...e,documents:{...e.documents,[t]:{...o,activeMode:s}}}:e}case r:{const{documentId:t,cursor:s}=g.payload,o=e.documents[t];return o?{...e,documents:{...e.documents,[t]:{...o,cursor:s}}}:e}case n:{const t=g.payload,s=e.documents[t];return s?{...e,documents:{...e.documents,[t]:{...s,paused:!0}}}:e}case a:{const t=g.payload,s=e.documents[t];return s?{...e,documents:{...e.documents,[t]:{...s,paused:!1}}}:e}case i:return{...e,defaultMode:g.payload.mode};case c:return{...e,exclusionRules:g.payload.rules};case u:return{...e,exclusionRules:{...e.exclusionRules,classes:[...e.exclusionRules.classes||[],g.payload.className].filter((e,t,s)=>s.indexOf(e)===t)}};case l:return{...e,exclusionRules:{...e.exclusionRules,classes:(e.exclusionRules.classes||[]).filter(e=>e!==g.payload.className)}};case d:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:[...e.exclusionRules.dataAttributes||[],g.payload.attribute].filter((e,t,s)=>s.indexOf(e)===t)}};case h:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:(e.exclusionRules.dataAttributes||[]).filter(e=>e!==g.payload.attribute)}};default:return e}},S={manifest:f,create:(e,t)=>new v(C,e,t),reducer:A,initialState:y};exports.INTERACTION_MANAGER_PLUGIN_ID=C,exports.InteractionManagerPlugin=v,exports.InteractionManagerPluginPackage=S,exports.initialDocumentState=E,exports.initialState=y,exports.manifest=f,exports.reducer=A;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t="INTERACTION/INIT_STATE",s="INTERACTION/CLEANUP_STATE",o="INTERACTION/ACTIVATE_MODE",n="INTERACTION/PAUSE",a="INTERACTION/RESUME",r="INTERACTION/SET_CURSOR",i="INTERACTION/SET_DEFAULT_MODE",c="INTERACTION/SET_EXCLUSION_RULES",u="INTERACTION/ADD_EXCLUSION_CLASS",l="INTERACTION/REMOVE_EXCLUSION_CLASS",d="INTERACTION/ADD_EXCLUSION_ATTRIBUTE",h="INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE";function g(e){return{type:i,payload:{mode:e}}}function m(e){return{type:c,payload:{rules:e}}}const p="pointerMode",I=class extends e.BasePlugin{constructor(t,s,o){super(t,s),this.modes=new Map,this.cursorClaims=new Map,this.buckets=new Map,this.alwaysGlobal=new Map,this.alwaysPage=new Map,this.onModeChange$=e.createEmitter(),this.onHandlerChange$=e.createEmitter(),this.onCursorChange$=e.createEmitter(),this.onStateChange$=e.createBehaviorEmitter(),this.registerMode({id:p,scope:"page",exclusive:!1,cursor:"auto"}),this.dispatch(g(p)),o.exclusionRules&&this.dispatch(m(o.exclusionRules))}onDocumentLoadingStarted(e){const s={activeMode:this.state.defaultMode,cursor:"auto",paused:!1};this.dispatch(function(e,s){return{type:t,payload:{documentId:e,state:s}}}(e,s)),this.cursorClaims.set(e,new Map),this.buckets.set(e,new Map),this.alwaysGlobal.set(e,new Set),this.alwaysPage.set(e,new Map);const o=this.buckets.get(e);for(const t of this.modes.keys())o.set(t,{global:new Set,page:new Map});this.logger.debug("InteractionManagerPlugin","DocumentOpened",`Initialized interaction state for document: ${e}`)}onDocumentClosed(e){this.cursorClaims.delete(e),this.buckets.delete(e),this.alwaysGlobal.delete(e),this.alwaysPage.delete(e),this.dispatch(function(e){return{type:s,payload:e}}(e)),this.logger.debug("InteractionManagerPlugin","DocumentClosed",`Cleaned up interaction state for document: ${e}`)}buildCapability(){return{getActiveMode:()=>this.getActiveMode(),getActiveInteractionMode:()=>this.getActiveInteractionMode(),activate:e=>this.activate(e),activateDefaultMode:()=>this.activateDefaultMode(),setCursor:(e,t,s)=>this.setCursor(e,t,s),getCurrentCursor:()=>this.getCurrentCursor(),removeCursor:e=>this.removeCursor(e),getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(),pause:()=>this.pause(),resume:()=>this.resume(),isPaused:()=>this.registry.isDestroyed()||this.isPaused(),getState:()=>this.getDocumentStateOrThrow(),forDocument:e=>this.createInteractionScope(e),registerMode:e=>this.registerMode(e),registerHandlers:e=>this.registerHandlers(e),registerAlways:e=>this.registerAlways(e),setDefaultMode:e=>this.setDefaultMode(e),getDefaultMode:()=>this.state.defaultMode,getExclusionRules:()=>this.state.exclusionRules,setExclusionRules:e=>this.dispatch(m(e)),addExclusionClass:e=>this.dispatch(function(e){return{type:u,payload:{className:e}}}(e)),removeExclusionClass:e=>this.dispatch(function(e){return{type:l,payload:{className:e}}}(e)),addExclusionAttribute:e=>this.dispatch(function(e){return{type:d,payload:{attribute:e}}}(e)),removeExclusionAttribute:e=>this.dispatch(function(e){return{type:h,payload:{attribute:e}}}(e)),onModeChange:this.onModeChange$.on,onCursorChange:this.onCursorChange$.on,onHandlerChange:this.onHandlerChange$.on,onStateChange:this.onStateChange$.on}}createInteractionScope(e){return{getActiveMode:()=>this.getActiveMode(e),getActiveInteractionMode:()=>this.getActiveInteractionMode(e),activate:t=>this.activate(t,e),activateDefaultMode:()=>this.activateDefaultMode(e),setCursor:(t,s,o)=>this.setCursor(t,s,o,e),getCurrentCursor:()=>this.getCurrentCursor(e),removeCursor:t=>this.removeCursor(t,e),getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(e),pause:()=>this.pause(e),resume:()=>this.resume(e),isPaused:()=>this.isPaused(e),getState:()=>this.getDocumentStateOrThrow(e),onModeChange:t=>this.onModeChange$.on(s=>{s.documentId===e&&t(s.activeMode)}),onCursorChange:t=>this.onCursorChange$.on(s=>{s.documentId===e&&t(s.cursor)}),onStateChange:t=>this.onStateChange$.on(s=>{s.documentId===e&&t(s.state)})}}getDocumentState(e){const t=e??this.getActiveDocumentId();return this.state.documents[t]??null}getDocumentStateOrThrow(e){const t=this.getDocumentState(e);if(!t)throw new Error(`Interaction state not found for document: ${e??"active"}`);return t}activate(e,t){var s;const n=t??this.getActiveDocumentId(),a=this.getDocumentStateOrThrow(n);if(!this.modes.has(e))throw new Error(`[interaction] unknown mode '${e}'`);if(e===a.activeMode)return;const r=a.activeMode;null==(s=this.cursorClaims.get(n))||s.clear(),this.notifyHandlersInactive(n,r),this.dispatch(function(e,t){return{type:o,payload:{documentId:e,mode:t}}}(n,e)),this.emitCursor(n),this.notifyHandlersActive(n,e),this.onModeChange$.emit({documentId:n,activeMode:e,previousMode:r})}activateDefaultMode(e){const t=e??this.getActiveDocumentId();this.activate(this.state.defaultMode,t)}setDefaultMode(e){if(!this.modes.has(e))throw new Error(`[interaction] cannot set unknown mode '${e}' as default`);this.dispatch(g(e))}getActiveMode(e){return this.getDocumentStateOrThrow(e).activeMode}getActiveInteractionMode(e){const t=this.getDocumentState(e);return t?this.modes.get(t.activeMode)??null:null}activeModeIsExclusive(e){const t=this.getActiveInteractionMode(e);return!!(null==t?void 0:t.exclusive)}pause(e){const t=e??this.getActiveDocumentId();this.dispatch(function(e){return{type:n,payload:e}}(t))}resume(e){const t=e??this.getActiveDocumentId();this.dispatch(function(e){return{type:a,payload:e}}(t))}isPaused(e){return this.getDocumentStateOrThrow(e).paused}registerMode(e){this.modes.set(e.id,e);for(const t of this.buckets.keys()){const s=this.buckets.get(t);s.has(e.id)||s.set(e.id,{global:new Set,page:new Map})}}registerHandlers({documentId:e,modeId:t,handlers:s,pageIndex:o}){const n=Array.isArray(t)?t:[t],a=[],r=this.buckets.get(e);if(!r)throw new Error(`No buckets found for document: ${e}`);for(const i of n){const e=r.get(i);if(!e)throw new Error(`unknown mode '${i}'`);if(null==o)e.global.add(s);else{const t=e.page.get(o)??new Set;t.add(s),e.page.set(o,t)}a.push(()=>{if(null==o)e.global.delete(s);else{const t=e.page.get(o);t&&(t.delete(s),0===t.size&&e.page.delete(o))}})}return this.onHandlerChange$.emit({...this.state}),()=>{a.forEach(e=>e()),this.onHandlerChange$.emit({...this.state})}}registerAlways({scope:e,handlers:t}){if("global"===e.type){const s=this.alwaysGlobal.get(e.documentId)??new Set;return s.add(t),this.alwaysGlobal.set(e.documentId,s),this.onHandlerChange$.emit({...this.state}),()=>{s.delete(t),this.onHandlerChange$.emit({...this.state})}}const s=this.alwaysPage.get(e.documentId)??new Map,o=s.get(e.pageIndex)??new Set;return o.add(t),s.set(e.pageIndex,o),this.alwaysPage.set(e.documentId,s),this.onHandlerChange$.emit({...this.state}),()=>{o.delete(t),this.onHandlerChange$.emit({...this.state})}}getHandlersForScope(e){var t;const s=this.getDocumentState(e.documentId);if(!s)return null;const o=this.modes.get(s.activeMode);if(!o)return null;const n=this.buckets.get(e.documentId);if(!n)return null;const a=n.get(o.id);if(!a)return null;const r=(e,t)=>e.size||t.size?function(e){const t=["onPointerDown","onPointerUp","onPointerMove","onPointerEnter","onPointerLeave","onPointerCancel","onMouseDown","onMouseUp","onMouseMove","onMouseEnter","onMouseLeave","onMouseCancel","onClick","onDoubleClick"],s={};for(const o of t)s[o]=(t,s,n)=>{var a;for(const r of e)null==(a=r[o])||a.call(r,t,s,n)};return s}([...e,...t]):null;if("global"===e.type){return r(this.alwaysGlobal.get(e.documentId)??new Set,"global"===o.scope?a.global:new Set)}return r((null==(t=this.alwaysPage.get(e.documentId))?void 0:t.get(e.pageIndex))??new Set,"page"===o.scope?a.page.get(e.pageIndex)??new Set:new Set)}setCursor(e,t,s=0,o){const n=o??this.getActiveDocumentId(),a=this.cursorClaims.get(n);a&&(a.set(e,{cursor:t,priority:s}),this.emitCursor(n))}removeCursor(e,t){const s=t??this.getActiveDocumentId(),o=this.cursorClaims.get(s);o&&(o.delete(e),this.emitCursor(s))}getCurrentCursor(e){return this.getDocumentStateOrThrow(e).cursor}emitCursor(e){var t;const s=this.cursorClaims.get(e);if(!s)return;const o=this.getDocumentState(e);if(!o)return;const n=[...s.values()].sort((e,t)=>t.priority-e.priority)[0]??{cursor:(null==(t=this.modes.get(o.activeMode))?void 0:t.cursor)??"auto"};n.cursor!==o.cursor&&(this.dispatch(function(e,t){return{type:r,payload:{documentId:e,cursor:t}}}(e,n.cursor)),this.onCursorChange$.emit({documentId:e,cursor:n.cursor}))}notifyHandlersActive(e,t){var s,o;null==(s=this.alwaysGlobal.get(e))||s.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)}),null==(o=this.alwaysPage.get(e))||o.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)})});const n=this.modes.get(t);if(!n)return;const a=this.buckets.get(e);if(!a)return;const r=a.get(t);r&&("global"===n.scope&&r.global.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)}),"page"===n.scope&&r.page.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveStart)||s.call(e,t)})}))}notifyHandlersInactive(e,t){var s,o;null==(s=this.alwaysGlobal.get(e))||s.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)}),null==(o=this.alwaysPage.get(e))||o.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)})});const n=this.modes.get(t);if(!n)return;const a=this.buckets.get(e);if(!a)return;const r=a.get(t);r&&("global"===n.scope&&r.global.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)}),"page"===n.scope&&r.page.forEach(e=>{e.forEach(e=>{var s;null==(s=e.onHandlerActiveEnd)||s.call(e,t)})}))}onStoreUpdated(e,t){for(const s in t.documents){const o=e.documents[s],n=t.documents[s];o!==n&&this.onStateChange$.emit({documentId:s,state:n})}}async initialize(e){this.logger.info("InteractionManagerPlugin","Initialize","Interaction Manager Plugin initialized")}async destroy(){this.onModeChange$.clear(),this.onCursorChange$.clear(),this.onHandlerChange$.clear(),this.onStateChange$.clear(),await super.destroy()}};I.id="interaction-manager";let v=I;const C="interaction-manager",f={id:C,name:"Interaction Manager Plugin",version:"1.0.0",provides:["interaction-manager"],requires:[],optional:[],defaultConfig:{exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]}}},M="pointerMode",E={activeMode:M,cursor:"auto",paused:!1},y={defaultMode:M,exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]},documents:{},activeDocumentId:null},A=(e=y,g)=>{switch(g.type){case t:{const{documentId:t,state:s}=g.payload;return{...e,documents:{...e.documents,[t]:s},activeDocumentId:e.activeDocumentId??t}}case s:{const t=g.payload,{[t]:s,...o}=e.documents;return{...e,documents:o,activeDocumentId:e.activeDocumentId===t?null:e.activeDocumentId}}case"INTERACTION/SET_ACTIVE_DOCUMENT":return{...e,activeDocumentId:g.payload};case o:{const{documentId:t,mode:s}=g.payload,o=e.documents[t];return o?{...e,documents:{...e.documents,[t]:{...o,activeMode:s}}}:e}case r:{const{documentId:t,cursor:s}=g.payload,o=e.documents[t];return o?{...e,documents:{...e.documents,[t]:{...o,cursor:s}}}:e}case n:{const t=g.payload,s=e.documents[t];return s?{...e,documents:{...e.documents,[t]:{...s,paused:!0}}}:e}case a:{const t=g.payload,s=e.documents[t];return s?{...e,documents:{...e.documents,[t]:{...s,paused:!1}}}:e}case i:return{...e,defaultMode:g.payload.mode};case c:return{...e,exclusionRules:g.payload.rules};case u:return{...e,exclusionRules:{...e.exclusionRules,classes:[...e.exclusionRules.classes||[],g.payload.className].filter((e,t,s)=>s.indexOf(e)===t)}};case l:return{...e,exclusionRules:{...e.exclusionRules,classes:(e.exclusionRules.classes||[]).filter(e=>e!==g.payload.className)}};case d:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:[...e.exclusionRules.dataAttributes||[],g.payload.attribute].filter((e,t,s)=>s.indexOf(e)===t)}};case h:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:(e.exclusionRules.dataAttributes||[]).filter(e=>e!==g.payload.attribute)}};default:return e}},S={manifest:f,create:(e,t)=>new v(C,e,t),reducer:A,initialState:y};exports.INTERACTION_MANAGER_PLUGIN_ID=C,exports.InteractionManagerPlugin=v,exports.InteractionManagerPluginPackage=S,exports.initialDocumentState=E,exports.initialState=y,exports.manifest=f,exports.reducer=A;
|
|
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/interaction-manager-plugin.ts","../src/lib/helper.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\nimport { InteractionExclusionRules, InteractionDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_INTERACTION_STATE = 'INTERACTION/INIT_STATE';\nexport const CLEANUP_INTERACTION_STATE = 'INTERACTION/CLEANUP_STATE';\n\n// Per-document actions\nexport const ACTIVATE_MODE = 'INTERACTION/ACTIVATE_MODE';\nexport const PAUSE_INTERACTION = 'INTERACTION/PAUSE';\nexport const RESUME_INTERACTION = 'INTERACTION/RESUME';\nexport const SET_CURSOR = 'INTERACTION/SET_CURSOR';\nexport const SET_ACTIVE_DOCUMENT = 'INTERACTION/SET_ACTIVE_DOCUMENT';\n\n// Global actions\nexport const SET_DEFAULT_MODE = 'INTERACTION/SET_DEFAULT_MODE';\nexport const SET_EXCLUSION_RULES = 'INTERACTION/SET_EXCLUSION_RULES';\nexport const ADD_EXCLUSION_CLASS = 'INTERACTION/ADD_EXCLUSION_CLASS';\nexport const REMOVE_EXCLUSION_CLASS = 'INTERACTION/REMOVE_EXCLUSION_CLASS';\nexport const ADD_EXCLUSION_ATTRIBUTE = 'INTERACTION/ADD_EXCLUSION_ATTRIBUTE';\nexport const REMOVE_EXCLUSION_ATTRIBUTE = 'INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE';\n\n// Document lifecycle actions\nexport interface InitInteractionStateAction extends Action {\n type: typeof INIT_INTERACTION_STATE;\n payload: {\n documentId: string;\n state: InteractionDocumentState;\n };\n}\n\nexport interface CleanupInteractionStateAction extends Action {\n type: typeof CLEANUP_INTERACTION_STATE;\n payload: string; // documentId\n}\n\nexport interface SetActiveDocumentAction extends Action {\n type: typeof SET_ACTIVE_DOCUMENT;\n payload: string | null; // documentId\n}\n\n// Per-document actions\nexport interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: {\n documentId: string;\n mode: string;\n };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: {\n documentId: string;\n cursor: string;\n };\n}\n\n// Global actions\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport interface SetExclusionRulesAction extends Action {\n type: typeof SET_EXCLUSION_RULES;\n payload: { rules: InteractionExclusionRules };\n}\n\nexport interface AddExclusionClassAction extends Action {\n type: typeof ADD_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface RemoveExclusionClassAction extends Action {\n type: typeof REMOVE_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface AddExclusionAttributeAction extends Action {\n type: typeof ADD_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport interface RemoveExclusionAttributeAction extends Action {\n type: typeof REMOVE_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport type InteractionManagerAction =\n | InitInteractionStateAction\n | CleanupInteractionStateAction\n | SetActiveDocumentAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction;\n\n// Action creators\nexport function initInteractionState(\n documentId: string,\n state: InteractionDocumentState,\n): InitInteractionStateAction {\n return { type: INIT_INTERACTION_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupInteractionState(documentId: string): CleanupInteractionStateAction {\n return { type: CLEANUP_INTERACTION_STATE, payload: documentId };\n}\n\nexport function setActiveDocument(documentId: string | null): SetActiveDocumentAction {\n return { type: SET_ACTIVE_DOCUMENT, payload: documentId };\n}\n\nexport function activateMode(documentId: string, mode: string): ActivateModeAction {\n return { type: ACTIVATE_MODE, payload: { documentId, mode } };\n}\n\nexport function pauseInteraction(documentId: string): PauseInteractionAction {\n return { type: PAUSE_INTERACTION, payload: documentId };\n}\n\nexport function resumeInteraction(documentId: string): ResumeInteractionAction {\n return { type: RESUME_INTERACTION, payload: documentId };\n}\n\nexport function setCursor(documentId: string, cursor: string): SetCursorAction {\n return { type: SET_CURSOR, payload: { documentId, cursor } };\n}\n\nexport function setDefaultMode(mode: string): SetDefaultModeAction {\n return { type: SET_DEFAULT_MODE, payload: { mode } };\n}\n\nexport function setExclusionRules(rules: InteractionExclusionRules): SetExclusionRulesAction {\n return { type: SET_EXCLUSION_RULES, payload: { rules } };\n}\n\nexport function addExclusionClass(className: string): AddExclusionClassAction {\n return { type: ADD_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function removeExclusionClass(className: string): RemoveExclusionClassAction {\n return { type: REMOVE_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function addExclusionAttribute(attribute: string): AddExclusionAttributeAction {\n return { type: ADD_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n\nexport function removeExclusionAttribute(attribute: string): RemoveExclusionAttributeAction {\n return { type: REMOVE_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n","import {\n BasePlugin,\n createBehaviorEmitter,\n createEmitter,\n Listener,\n PluginRegistry,\n} from '@embedpdf/core';\n\nimport {\n InteractionExclusionRules,\n InteractionManagerCapability,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionMode,\n InteractionScope,\n PointerEventHandlers,\n PointerEventHandlersWithLifecycle,\n RegisterAlwaysOptions,\n RegisterHandlersOptions,\n ModeChangeEvent,\n CursorChangeEvent,\n StateChangeEvent,\n InteractionDocumentState,\n InteractionManagerScope,\n} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n cleanupInteractionState,\n initInteractionState,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\n InteractionManagerAction,\n} from './actions';\nimport { mergeHandlers } from './helper';\n\ninterface CursorClaim {\n cursor: string;\n priority: number;\n}\n\ntype HandlerSet = Set<PointerEventHandlersWithLifecycle>;\ntype PageHandlerMap = Map<number /*pageIdx*/, HandlerSet>;\n\ninterface ModeBuckets {\n /** handlers that listen on the global wrapper */\n global: HandlerSet;\n /** handlers that listen on a specific page wrapper */\n page: PageHandlerMap;\n}\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport class InteractionManagerPlugin extends BasePlugin<\n InteractionManagerPluginConfig,\n InteractionManagerCapability,\n InteractionManagerState,\n InteractionManagerAction\n> {\n static readonly id = 'interaction-manager' as const;\n\n // Global mode definitions (shared across documents)\n private modes = new Map<string, InteractionMode>();\n\n // Per-document cursor claims: documentId -> token -> claim\n private cursorClaims = new Map<string, Map<string, CursorClaim>>();\n\n // Per-document handler buckets: documentId -> modeId -> buckets\n private buckets = new Map<string, Map<string, ModeBuckets>>();\n\n // Per-document always-active handlers\n private alwaysGlobal = new Map<string, Set<PointerEventHandlersWithLifecycle>>();\n private alwaysPage = new Map<string, Map<number, Set<PointerEventHandlersWithLifecycle>>>();\n\n // Event emitters\n private readonly onModeChange$ = createEmitter<ModeChangeEvent>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<CursorChangeEvent>();\n private readonly onStateChange$ = createBehaviorEmitter<StateChangeEvent>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n // Register default mode globally\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.dispatch(setDefaultMode(INITIAL_MODE));\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle Hooks (from BasePlugin)\n // ─────────────────────────────────────────────────────────\n\n protected override onDocumentLoadingStarted(documentId: string): void {\n // Initialize interaction state for this document\n const docState: InteractionDocumentState = {\n activeMode: this.state.defaultMode,\n cursor: 'auto',\n paused: false,\n };\n\n this.dispatch(initInteractionState(documentId, docState));\n\n // Initialize per-document data structures\n this.cursorClaims.set(documentId, new Map());\n this.buckets.set(documentId, new Map());\n this.alwaysGlobal.set(documentId, new Set());\n this.alwaysPage.set(documentId, new Map());\n\n // Initialize buckets for all registered modes\n const docBuckets = this.buckets.get(documentId)!;\n for (const modeId of this.modes.keys()) {\n docBuckets.set(modeId, { global: new Set(), page: new Map() });\n }\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentOpened',\n `Initialized interaction state for document: ${documentId}`,\n );\n }\n\n protected override onDocumentClosed(documentId: string): void {\n // Cleanup per-document data structures\n this.cursorClaims.delete(documentId);\n this.buckets.delete(documentId);\n this.alwaysGlobal.delete(documentId);\n this.alwaysPage.delete(documentId);\n\n // Cleanup state\n this.dispatch(cleanupInteractionState(documentId));\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentClosed',\n `Cleaned up interaction state for document: ${documentId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Capability\n // ─────────────────────────────────────────────────────────\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n // Active document operations\n getActiveMode: () => this.getActiveMode(),\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activate: (modeId: string) => this.activate(modeId),\n activateDefaultMode: () => this.activateDefaultMode(),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority),\n getCurrentCursor: () => this.getCurrentCursor(),\n removeCursor: (token: string) => this.removeCursor(token),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.pause(),\n resume: () => this.resume(),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.isPaused(),\n getState: () => this.getDocumentStateOrThrow(),\n\n // Document-scoped operations\n forDocument: (documentId: string) => this.createInteractionScope(documentId),\n\n // Global management\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setDefaultMode: (id: string) => this.setDefaultMode(id),\n getDefaultMode: () => this.state.defaultMode,\n getExclusionRules: () => this.state.exclusionRules,\n setExclusionRules: (rules: InteractionExclusionRules) =>\n this.dispatch(setExclusionRules(rules)),\n addExclusionClass: (className: string) => this.dispatch(addExclusionClass(className)),\n removeExclusionClass: (className: string) => this.dispatch(removeExclusionClass(className)),\n addExclusionAttribute: (attribute: string) => this.dispatch(addExclusionAttribute(attribute)),\n removeExclusionAttribute: (attribute: string) =>\n this.dispatch(removeExclusionAttribute(attribute)),\n\n // Events\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Scoping\n // ─────────────────────────────────────────────────────────\n\n private createInteractionScope(documentId: string): InteractionManagerScope {\n return {\n getActiveMode: () => this.getActiveMode(documentId),\n getActiveInteractionMode: () => this.getActiveInteractionMode(documentId),\n activate: (modeId: string) => this.activate(modeId, documentId),\n activateDefaultMode: () => this.activateDefaultMode(documentId),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority, documentId),\n getCurrentCursor: () => this.getCurrentCursor(documentId),\n removeCursor: (token: string) => this.removeCursor(token, documentId),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(documentId),\n pause: () => this.pause(documentId),\n resume: () => this.resume(documentId),\n isPaused: () => this.isPaused(documentId),\n getState: () => this.getDocumentStateOrThrow(documentId),\n onModeChange: (listener: Listener<string>) =>\n this.onModeChange$.on((event) => {\n if (event.documentId === documentId) listener(event.activeMode);\n }),\n onCursorChange: (listener: Listener<string>) =>\n this.onCursorChange$.on((event) => {\n if (event.documentId === documentId) listener(event.cursor);\n }),\n onStateChange: (listener: Listener<InteractionDocumentState>) =>\n this.onStateChange$.on((event) => {\n if (event.documentId === documentId) listener(event.state);\n }),\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // State Helpers\n // ─────────────────────────────────────────────────────────\n\n private getDocumentState(documentId?: string): InteractionDocumentState | null {\n const id = documentId ?? this.getActiveDocumentId();\n return this.state.documents[id] ?? null;\n }\n\n private getDocumentStateOrThrow(documentId?: string): InteractionDocumentState {\n const state = this.getDocumentState(documentId);\n if (!state) {\n throw new Error(`Interaction state not found for document: ${documentId ?? 'active'}`);\n }\n return state;\n }\n\n // ─────────────────────────────────────────────────────────\n // Core Operations\n // ─────────────────────────────────────────────────────────\n\n private activate(modeId: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const docState = this.getDocumentStateOrThrow(id);\n\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] unknown mode '${modeId}'`);\n }\n if (modeId === docState.activeMode) return;\n\n const previousMode = docState.activeMode;\n\n // Clear cursor claims for this document\n this.cursorClaims.get(id)?.clear();\n\n // Notify handlers going inactive\n this.notifyHandlersInactive(id, previousMode);\n\n // Update state\n this.dispatch(activateMode(id, modeId));\n\n // Emit cursor\n this.emitCursor(id);\n\n // Notify handlers going active\n this.notifyHandlersActive(id, modeId);\n\n // Emit mode change event\n this.onModeChange$.emit({\n documentId: id,\n activeMode: modeId,\n previousMode,\n });\n }\n\n private activateDefaultMode(documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n this.activate(this.state.defaultMode, id);\n }\n\n private setDefaultMode(modeId: string) {\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] cannot set unknown mode '${modeId}' as default`);\n }\n this.dispatch(setDefaultMode(modeId));\n }\n\n private getActiveMode(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).activeMode;\n }\n\n private getActiveInteractionMode(documentId?: string): InteractionMode | null {\n const docState = this.getDocumentState(documentId);\n if (!docState) return null;\n return this.modes.get(docState.activeMode) ?? null;\n }\n\n private activeModeIsExclusive(documentId?: string): boolean {\n const mode = this.getActiveInteractionMode(documentId);\n return !!mode?.exclusive;\n }\n\n private pause(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(pauseInteraction(id));\n }\n\n private resume(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(resumeInteraction(id));\n }\n\n private isPaused(documentId?: string): boolean {\n return this.getDocumentStateOrThrow(documentId).paused;\n }\n\n // ─────────────────────────────────────────────────────────\n // Mode Management\n // ─────────────────────────────────────────────────────────\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n\n // Add buckets for this mode in all existing documents\n for (const documentId of this.buckets.keys()) {\n const docBuckets = this.buckets.get(documentId)!;\n if (!docBuckets.has(mode.id)) {\n docBuckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Management\n // ─────────────────────────────────────────────────────────\n\n private registerHandlers({\n documentId,\n modeId,\n handlers,\n pageIndex,\n }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) {\n throw new Error(`No buckets found for document: ${documentId}`);\n }\n\n for (const id of modeIds) {\n const bucket = docBuckets.get(id);\n if (!bucket) throw new Error(`unknown mode '${id}'`);\n\n if (pageIndex == null) {\n bucket.global.add(handlers);\n } else {\n const set = bucket.page.get(pageIndex) ?? new Set();\n set.add(handlers);\n bucket.page.set(pageIndex, set);\n }\n\n cleanupFunctions.push(() => {\n if (pageIndex == null) {\n bucket.global.delete(handlers);\n } else {\n const set = bucket.page.get(pageIndex);\n if (set) {\n set.delete(handlers);\n if (set.size === 0) {\n bucket.page.delete(pageIndex);\n }\n }\n }\n });\n }\n\n this.onHandlerChange$.emit({ ...this.state });\n\n return () => {\n cleanupFunctions.forEach((cleanup) => cleanup());\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n public registerAlways({ scope, handlers }: RegisterAlwaysOptions): () => void {\n if (scope.type === 'global') {\n const set = this.alwaysGlobal.get(scope.documentId) ?? new Set();\n set.add(handlers);\n this.alwaysGlobal.set(scope.documentId, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n const docPageMap = this.alwaysPage.get(scope.documentId) ?? new Map();\n const set = docPageMap.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n docPageMap.set(scope.pageIndex, set);\n this.alwaysPage.set(scope.documentId, docPageMap);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n const docState = this.getDocumentState(scope.documentId);\n if (!docState) return null;\n\n const mode = this.modes.get(docState.activeMode);\n if (!mode) return null;\n\n const docBuckets = this.buckets.get(scope.documentId);\n if (!docBuckets) return null;\n\n const bucket = docBuckets.get(mode.id);\n if (!bucket) return null;\n\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n if (scope.type === 'global') {\n const alwaysSet = this.alwaysGlobal.get(scope.documentId) ?? new Set<PointerEventHandlers>();\n const modeSpecific =\n mode.scope === 'global' ? bucket.global : new Set<PointerEventHandlers>();\n return mergeSets(alwaysSet, modeSpecific);\n }\n\n const alwaysPageSet =\n this.alwaysPage.get(scope.documentId)?.get(scope.pageIndex) ??\n new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>();\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n // ─────────────────────────────────────────────────────────\n // Cursor Management\n // ─────────────────────────────────────────────────────────\n\n private setCursor(token: string, cursor: string, priority = 0, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.set(token, { cursor, priority });\n this.emitCursor(id);\n }\n\n private removeCursor(token: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.delete(token);\n this.emitCursor(id);\n }\n\n private getCurrentCursor(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).cursor;\n }\n\n private emitCursor(documentId: string) {\n const claims = this.cursorClaims.get(documentId);\n if (!claims) return;\n\n const docState = this.getDocumentState(documentId);\n if (!docState) return;\n\n const top = [...claims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(docState.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== docState.cursor) {\n this.dispatch(setCursor(documentId, top.cursor));\n this.onCursorChange$.emit({\n documentId,\n cursor: top.cursor,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Lifecycle Notifications\n // ─────────────────────────────────────────────────────────\n\n private notifyHandlersActive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Store Update Handlers\n // ─────────────────────────────────────────────────────────\n\n override onStoreUpdated(\n prevState: InteractionManagerState,\n newState: InteractionManagerState,\n ): void {\n // Emit state changes for each changed document\n for (const documentId in newState.documents) {\n const prevDoc = prevState.documents[documentId];\n const newDoc = newState.documents[documentId];\n\n if (prevDoc !== newDoc) {\n this.onStateChange$.emit({\n documentId,\n state: newDoc,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {\n this.logger.info(\n 'InteractionManagerPlugin',\n 'Initialize',\n 'Interaction Manager Plugin initialized',\n );\n }\n\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.clear();\n this.onHandlerChange$.clear();\n this.onStateChange$.clear();\n await super.destroy();\n }\n}\n","import { PointerEventHandlers } from './types';\n\nexport function mergeHandlers(list: PointerEventHandlers[]): PointerEventHandlers {\n const keys: (keyof PointerEventHandlers)[] = [\n 'onPointerDown',\n 'onPointerUp',\n 'onPointerMove',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerCancel',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseCancel',\n 'onClick',\n 'onDoubleClick',\n ];\n const out: Partial<PointerEventHandlers> = {};\n for (const k of keys) {\n out[k] = (evt: any, nativeEvt: any, modeId: string) => {\n for (const h of list) h[k]?.(evt, nativeEvt, modeId);\n };\n }\n return out as PointerEventHandlers;\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { InteractionManagerPluginConfig } from './types';\n\nexport const INTERACTION_MANAGER_PLUGIN_ID = 'interaction-manager';\n\nexport const manifest: PluginManifest<InteractionManagerPluginConfig> = {\n id: INTERACTION_MANAGER_PLUGIN_ID,\n name: 'Interaction Manager Plugin',\n version: '1.0.0',\n provides: ['interaction-manager'],\n requires: [],\n optional: [],\n defaultConfig: {\n enabled: true,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport {\n InteractionManagerAction,\n INIT_INTERACTION_STATE,\n CLEANUP_INTERACTION_STATE,\n SET_ACTIVE_DOCUMENT,\n ACTIVATE_MODE,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\n SET_DEFAULT_MODE,\n SET_EXCLUSION_RULES,\n ADD_EXCLUSION_CLASS,\n REMOVE_EXCLUSION_CLASS,\n ADD_EXCLUSION_ATTRIBUTE,\n REMOVE_EXCLUSION_ATTRIBUTE,\n} from './actions';\nimport { InteractionManagerState, InteractionDocumentState } from './types';\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport const initialDocumentState: InteractionDocumentState = {\n activeMode: INITIAL_MODE,\n cursor: 'auto',\n paused: false,\n};\n\nexport const initialState: InteractionManagerState = {\n defaultMode: INITIAL_MODE,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n documents: {},\n activeDocumentId: null,\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle\n // ─────────────────────────────────────────────────────────\n case INIT_INTERACTION_STATE: {\n const { documentId, state: docState } = action.payload;\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: docState,\n },\n // Set as active if no active document\n activeDocumentId: state.activeDocumentId ?? documentId,\n };\n }\n\n case CLEANUP_INTERACTION_STATE: {\n const documentId = action.payload;\n const { [documentId]: removed, ...remainingDocs } = state.documents;\n return {\n ...state,\n documents: remainingDocs,\n activeDocumentId: state.activeDocumentId === documentId ? null : state.activeDocumentId,\n };\n }\n\n case SET_ACTIVE_DOCUMENT: {\n return {\n ...state,\n activeDocumentId: action.payload,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Per-Document Actions\n // ─────────────────────────────────────────────────────────\n case ACTIVATE_MODE: {\n const { documentId, mode } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n activeMode: mode,\n },\n },\n };\n }\n\n case SET_CURSOR: {\n const { documentId, cursor } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n cursor,\n },\n },\n };\n }\n\n case PAUSE_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: true,\n },\n },\n };\n }\n\n case RESUME_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: false,\n },\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Global Actions\n // ─────────────────────────────────────────────────────────\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\n };\n\n case SET_EXCLUSION_RULES:\n return {\n ...state,\n exclusionRules: action.payload.rules,\n };\n\n case ADD_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: [...(state.exclusionRules.classes || []), action.payload.className].filter(\n (v, i, a) => a.indexOf(v) === i,\n ),\n },\n };\n\n case REMOVE_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: (state.exclusionRules.classes || []).filter(\n (c) => c !== action.payload.className,\n ),\n },\n };\n\n case ADD_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: [\n ...(state.exclusionRules.dataAttributes || []),\n action.payload.attribute,\n ].filter((v, i, a) => a.indexOf(v) === i),\n },\n };\n\n case REMOVE_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: (state.exclusionRules.dataAttributes || []).filter(\n (a) => a !== action.payload.attribute,\n ),\n },\n };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { InteractionManagerPlugin } from './interaction-manager-plugin';\nimport { manifest, INTERACTION_MANAGER_PLUGIN_ID } from './manifest';\nimport { InteractionManagerPluginConfig, InteractionManagerState } from './types';\nimport { reducer, initialState } from './reducer';\nimport { InteractionManagerAction } from './actions';\n\nexport const InteractionManagerPluginPackage: PluginPackage<\n InteractionManagerPlugin,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionManagerAction\n> = {\n manifest,\n create: (registry, config) =>\n new InteractionManagerPlugin(INTERACTION_MANAGER_PLUGIN_ID, registry, config),\n reducer,\n initialState,\n};\n\nexport * from './interaction-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './reducer';\n"],"names":["INIT_INTERACTION_STATE","CLEANUP_INTERACTION_STATE","ACTIVATE_MODE","PAUSE_INTERACTION","RESUME_INTERACTION","SET_CURSOR","SET_DEFAULT_MODE","SET_EXCLUSION_RULES","ADD_EXCLUSION_CLASS","REMOVE_EXCLUSION_CLASS","ADD_EXCLUSION_ATTRIBUTE","REMOVE_EXCLUSION_ATTRIBUTE","setDefaultMode","mode","type","payload","setExclusionRules","rules","INITIAL_MODE","_InteractionManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","modes","Map","cursorClaims","buckets","alwaysGlobal","alwaysPage","onModeChange$","createEmitter","onHandlerChange$","onCursorChange$","onStateChange$","createBehaviorEmitter","registerMode","scope","exclusive","cursor","dispatch","exclusionRules","onDocumentLoadingStarted","documentId","docState","activeMode","state","defaultMode","paused","initInteractionState","set","Set","docBuckets","get","modeId","keys","global","page","logger","debug","onDocumentClosed","delete","cleanupInteractionState","buildCapability","getActiveMode","getActiveInteractionMode","activate","activateDefaultMode","setCursor","token","priority","getCurrentCursor","removeCursor","getHandlersForScope","activeModeIsExclusive","pause","resume","isPaused","isDestroyed","getState","getDocumentStateOrThrow","forDocument","createInteractionScope","registerHandlers","options","registerAlways","getDefaultMode","getExclusionRules","addExclusionClass","className","removeExclusionClass","addExclusionAttribute","attribute","removeExclusionAttribute","onModeChange","on","onCursorChange","onHandlerChange","onStateChange","listener","event","getDocumentState","getActiveDocumentId","documents","Error","has","previousMode","_a","clear","notifyHandlersInactive","activateMode","emitCursor","notifyHandlersActive","emit","pauseInteraction","resumeInteraction","handlers","pageIndex","modeIds","Array","isArray","cleanupFunctions","bucket","add","push","size","forEach","cleanup","docPageMap","mergeSets","a","b","list","out","k","evt","nativeEvt","h","call","mergeHandlers","claims","top","values","sort","handler","onHandlerActiveStart","_b","handlerSet","onHandlerActiveEnd","onStoreUpdated","prevState","newState","prevDoc","newDoc","initialize","_","info","destroy","InteractionManagerPlugin","INTERACTION_MANAGER_PLUGIN_ID","manifest","name","version","provides","requires","optional","defaultConfig","enabled","classes","dataAttributes","initialDocumentState","initialState","activeDocumentId","reducer","action","removed","remainingDocs","filter","v","i","indexOf","c","InteractionManagerPluginPackage","create"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/actions.ts","../src/lib/interaction-manager-plugin.ts","../src/lib/helper.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\nimport { InteractionExclusionRules, InteractionDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_INTERACTION_STATE = 'INTERACTION/INIT_STATE';\nexport const CLEANUP_INTERACTION_STATE = 'INTERACTION/CLEANUP_STATE';\n\n// Per-document actions\nexport const ACTIVATE_MODE = 'INTERACTION/ACTIVATE_MODE';\nexport const PAUSE_INTERACTION = 'INTERACTION/PAUSE';\nexport const RESUME_INTERACTION = 'INTERACTION/RESUME';\nexport const SET_CURSOR = 'INTERACTION/SET_CURSOR';\nexport const SET_ACTIVE_DOCUMENT = 'INTERACTION/SET_ACTIVE_DOCUMENT';\n\n// Global actions\nexport const SET_DEFAULT_MODE = 'INTERACTION/SET_DEFAULT_MODE';\nexport const SET_EXCLUSION_RULES = 'INTERACTION/SET_EXCLUSION_RULES';\nexport const ADD_EXCLUSION_CLASS = 'INTERACTION/ADD_EXCLUSION_CLASS';\nexport const REMOVE_EXCLUSION_CLASS = 'INTERACTION/REMOVE_EXCLUSION_CLASS';\nexport const ADD_EXCLUSION_ATTRIBUTE = 'INTERACTION/ADD_EXCLUSION_ATTRIBUTE';\nexport const REMOVE_EXCLUSION_ATTRIBUTE = 'INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE';\n\n// Document lifecycle actions\nexport interface InitInteractionStateAction extends Action {\n type: typeof INIT_INTERACTION_STATE;\n payload: {\n documentId: string;\n state: InteractionDocumentState;\n };\n}\n\nexport interface CleanupInteractionStateAction extends Action {\n type: typeof CLEANUP_INTERACTION_STATE;\n payload: string; // documentId\n}\n\nexport interface SetActiveDocumentAction extends Action {\n type: typeof SET_ACTIVE_DOCUMENT;\n payload: string | null; // documentId\n}\n\n// Per-document actions\nexport interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: {\n documentId: string;\n mode: string;\n };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: {\n documentId: string;\n cursor: string;\n };\n}\n\n// Global actions\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport interface SetExclusionRulesAction extends Action {\n type: typeof SET_EXCLUSION_RULES;\n payload: { rules: InteractionExclusionRules };\n}\n\nexport interface AddExclusionClassAction extends Action {\n type: typeof ADD_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface RemoveExclusionClassAction extends Action {\n type: typeof REMOVE_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface AddExclusionAttributeAction extends Action {\n type: typeof ADD_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport interface RemoveExclusionAttributeAction extends Action {\n type: typeof REMOVE_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport type InteractionManagerAction =\n | InitInteractionStateAction\n | CleanupInteractionStateAction\n | SetActiveDocumentAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction;\n\n// Action creators\nexport function initInteractionState(\n documentId: string,\n state: InteractionDocumentState,\n): InitInteractionStateAction {\n return { type: INIT_INTERACTION_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupInteractionState(documentId: string): CleanupInteractionStateAction {\n return { type: CLEANUP_INTERACTION_STATE, payload: documentId };\n}\n\nexport function setActiveDocument(documentId: string | null): SetActiveDocumentAction {\n return { type: SET_ACTIVE_DOCUMENT, payload: documentId };\n}\n\nexport function activateMode(documentId: string, mode: string): ActivateModeAction {\n return { type: ACTIVATE_MODE, payload: { documentId, mode } };\n}\n\nexport function pauseInteraction(documentId: string): PauseInteractionAction {\n return { type: PAUSE_INTERACTION, payload: documentId };\n}\n\nexport function resumeInteraction(documentId: string): ResumeInteractionAction {\n return { type: RESUME_INTERACTION, payload: documentId };\n}\n\nexport function setCursor(documentId: string, cursor: string): SetCursorAction {\n return { type: SET_CURSOR, payload: { documentId, cursor } };\n}\n\nexport function setDefaultMode(mode: string): SetDefaultModeAction {\n return { type: SET_DEFAULT_MODE, payload: { mode } };\n}\n\nexport function setExclusionRules(rules: InteractionExclusionRules): SetExclusionRulesAction {\n return { type: SET_EXCLUSION_RULES, payload: { rules } };\n}\n\nexport function addExclusionClass(className: string): AddExclusionClassAction {\n return { type: ADD_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function removeExclusionClass(className: string): RemoveExclusionClassAction {\n return { type: REMOVE_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function addExclusionAttribute(attribute: string): AddExclusionAttributeAction {\n return { type: ADD_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n\nexport function removeExclusionAttribute(attribute: string): RemoveExclusionAttributeAction {\n return { type: REMOVE_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n","import {\n BasePlugin,\n createBehaviorEmitter,\n createEmitter,\n Listener,\n PluginRegistry,\n} from '@embedpdf/core';\n\nimport {\n InteractionExclusionRules,\n InteractionManagerCapability,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionMode,\n InteractionScope,\n PointerEventHandlers,\n PointerEventHandlersWithLifecycle,\n RegisterAlwaysOptions,\n RegisterHandlersOptions,\n ModeChangeEvent,\n CursorChangeEvent,\n StateChangeEvent,\n InteractionDocumentState,\n InteractionManagerScope,\n} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n cleanupInteractionState,\n initInteractionState,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\n InteractionManagerAction,\n} from './actions';\nimport { mergeHandlers } from './helper';\n\ninterface CursorClaim {\n cursor: string;\n priority: number;\n}\n\ntype HandlerSet = Set<PointerEventHandlersWithLifecycle>;\ntype PageHandlerMap = Map<number /*pageIdx*/, HandlerSet>;\n\ninterface ModeBuckets {\n /** handlers that listen on the global wrapper */\n global: HandlerSet;\n /** handlers that listen on a specific page wrapper */\n page: PageHandlerMap;\n}\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport class InteractionManagerPlugin extends BasePlugin<\n InteractionManagerPluginConfig,\n InteractionManagerCapability,\n InteractionManagerState,\n InteractionManagerAction\n> {\n static readonly id = 'interaction-manager' as const;\n\n // Global mode definitions (shared across documents)\n private modes = new Map<string, InteractionMode>();\n\n // Per-document cursor claims: documentId -> token -> claim\n private cursorClaims = new Map<string, Map<string, CursorClaim>>();\n\n // Per-document handler buckets: documentId -> modeId -> buckets\n private buckets = new Map<string, Map<string, ModeBuckets>>();\n\n // Per-document always-active handlers\n private alwaysGlobal = new Map<string, Set<PointerEventHandlersWithLifecycle>>();\n private alwaysPage = new Map<string, Map<number, Set<PointerEventHandlersWithLifecycle>>>();\n\n // Event emitters\n private readonly onModeChange$ = createEmitter<ModeChangeEvent>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<CursorChangeEvent>();\n private readonly onStateChange$ = createBehaviorEmitter<StateChangeEvent>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n // Register default mode globally\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.dispatch(setDefaultMode(INITIAL_MODE));\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle Hooks (from BasePlugin)\n // ─────────────────────────────────────────────────────────\n\n protected override onDocumentLoadingStarted(documentId: string): void {\n // Initialize interaction state for this document\n const docState: InteractionDocumentState = {\n activeMode: this.state.defaultMode,\n cursor: 'auto',\n paused: false,\n };\n\n this.dispatch(initInteractionState(documentId, docState));\n\n // Initialize per-document data structures\n this.cursorClaims.set(documentId, new Map());\n this.buckets.set(documentId, new Map());\n this.alwaysGlobal.set(documentId, new Set());\n this.alwaysPage.set(documentId, new Map());\n\n // Initialize buckets for all registered modes\n const docBuckets = this.buckets.get(documentId)!;\n for (const modeId of this.modes.keys()) {\n docBuckets.set(modeId, { global: new Set(), page: new Map() });\n }\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentOpened',\n `Initialized interaction state for document: ${documentId}`,\n );\n }\n\n protected override onDocumentClosed(documentId: string): void {\n // Cleanup per-document data structures\n this.cursorClaims.delete(documentId);\n this.buckets.delete(documentId);\n this.alwaysGlobal.delete(documentId);\n this.alwaysPage.delete(documentId);\n\n // Cleanup state\n this.dispatch(cleanupInteractionState(documentId));\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentClosed',\n `Cleaned up interaction state for document: ${documentId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Capability\n // ─────────────────────────────────────────────────────────\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n // Active document operations\n getActiveMode: () => this.getActiveMode(),\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activate: (modeId: string) => this.activate(modeId),\n activateDefaultMode: () => this.activateDefaultMode(),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority),\n getCurrentCursor: () => this.getCurrentCursor(),\n removeCursor: (token: string) => this.removeCursor(token),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.pause(),\n resume: () => this.resume(),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.isPaused(),\n getState: () => this.getDocumentStateOrThrow(),\n\n // Document-scoped operations\n forDocument: (documentId: string) => this.createInteractionScope(documentId),\n\n // Global management\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setDefaultMode: (id: string) => this.setDefaultMode(id),\n getDefaultMode: () => this.state.defaultMode,\n getExclusionRules: () => this.state.exclusionRules,\n setExclusionRules: (rules: InteractionExclusionRules) =>\n this.dispatch(setExclusionRules(rules)),\n addExclusionClass: (className: string) => this.dispatch(addExclusionClass(className)),\n removeExclusionClass: (className: string) => this.dispatch(removeExclusionClass(className)),\n addExclusionAttribute: (attribute: string) => this.dispatch(addExclusionAttribute(attribute)),\n removeExclusionAttribute: (attribute: string) =>\n this.dispatch(removeExclusionAttribute(attribute)),\n\n // Events\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Scoping\n // ─────────────────────────────────────────────────────────\n\n private createInteractionScope(documentId: string): InteractionManagerScope {\n return {\n getActiveMode: () => this.getActiveMode(documentId),\n getActiveInteractionMode: () => this.getActiveInteractionMode(documentId),\n activate: (modeId: string) => this.activate(modeId, documentId),\n activateDefaultMode: () => this.activateDefaultMode(documentId),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority, documentId),\n getCurrentCursor: () => this.getCurrentCursor(documentId),\n removeCursor: (token: string) => this.removeCursor(token, documentId),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(documentId),\n pause: () => this.pause(documentId),\n resume: () => this.resume(documentId),\n isPaused: () => this.isPaused(documentId),\n getState: () => this.getDocumentStateOrThrow(documentId),\n onModeChange: (listener: Listener<string>) =>\n this.onModeChange$.on((event) => {\n if (event.documentId === documentId) listener(event.activeMode);\n }),\n onCursorChange: (listener: Listener<string>) =>\n this.onCursorChange$.on((event) => {\n if (event.documentId === documentId) listener(event.cursor);\n }),\n onStateChange: (listener: Listener<InteractionDocumentState>) =>\n this.onStateChange$.on((event) => {\n if (event.documentId === documentId) listener(event.state);\n }),\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // State Helpers\n // ─────────────────────────────────────────────────────────\n\n private getDocumentState(documentId?: string): InteractionDocumentState | null {\n const id = documentId ?? this.getActiveDocumentId();\n return this.state.documents[id] ?? null;\n }\n\n private getDocumentStateOrThrow(documentId?: string): InteractionDocumentState {\n const state = this.getDocumentState(documentId);\n if (!state) {\n throw new Error(`Interaction state not found for document: ${documentId ?? 'active'}`);\n }\n return state;\n }\n\n // ─────────────────────────────────────────────────────────\n // Core Operations\n // ─────────────────────────────────────────────────────────\n\n private activate(modeId: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const docState = this.getDocumentStateOrThrow(id);\n\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] unknown mode '${modeId}'`);\n }\n if (modeId === docState.activeMode) return;\n\n const previousMode = docState.activeMode;\n\n // Clear cursor claims for this document\n this.cursorClaims.get(id)?.clear();\n\n // Notify handlers going inactive\n this.notifyHandlersInactive(id, previousMode);\n\n // Update state\n this.dispatch(activateMode(id, modeId));\n\n // Emit cursor\n this.emitCursor(id);\n\n // Notify handlers going active\n this.notifyHandlersActive(id, modeId);\n\n // Emit mode change event\n this.onModeChange$.emit({\n documentId: id,\n activeMode: modeId,\n previousMode,\n });\n }\n\n private activateDefaultMode(documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n this.activate(this.state.defaultMode, id);\n }\n\n private setDefaultMode(modeId: string) {\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] cannot set unknown mode '${modeId}' as default`);\n }\n this.dispatch(setDefaultMode(modeId));\n }\n\n private getActiveMode(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).activeMode;\n }\n\n private getActiveInteractionMode(documentId?: string): InteractionMode | null {\n const docState = this.getDocumentState(documentId);\n if (!docState) return null;\n return this.modes.get(docState.activeMode) ?? null;\n }\n\n private activeModeIsExclusive(documentId?: string): boolean {\n const mode = this.getActiveInteractionMode(documentId);\n return !!mode?.exclusive;\n }\n\n private pause(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(pauseInteraction(id));\n }\n\n private resume(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(resumeInteraction(id));\n }\n\n private isPaused(documentId?: string): boolean {\n return this.getDocumentStateOrThrow(documentId).paused;\n }\n\n // ─────────────────────────────────────────────────────────\n // Mode Management\n // ─────────────────────────────────────────────────────────\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n\n // Add buckets for this mode in all existing documents\n for (const documentId of this.buckets.keys()) {\n const docBuckets = this.buckets.get(documentId)!;\n if (!docBuckets.has(mode.id)) {\n docBuckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Management\n // ─────────────────────────────────────────────────────────\n\n private registerHandlers({\n documentId,\n modeId,\n handlers,\n pageIndex,\n }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) {\n throw new Error(`No buckets found for document: ${documentId}`);\n }\n\n for (const id of modeIds) {\n const bucket = docBuckets.get(id);\n if (!bucket) throw new Error(`unknown mode '${id}'`);\n\n if (pageIndex == null) {\n bucket.global.add(handlers);\n } else {\n const set = bucket.page.get(pageIndex) ?? new Set();\n set.add(handlers);\n bucket.page.set(pageIndex, set);\n }\n\n cleanupFunctions.push(() => {\n if (pageIndex == null) {\n bucket.global.delete(handlers);\n } else {\n const set = bucket.page.get(pageIndex);\n if (set) {\n set.delete(handlers);\n if (set.size === 0) {\n bucket.page.delete(pageIndex);\n }\n }\n }\n });\n }\n\n this.onHandlerChange$.emit({ ...this.state });\n\n return () => {\n cleanupFunctions.forEach((cleanup) => cleanup());\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n public registerAlways({ scope, handlers }: RegisterAlwaysOptions): () => void {\n if (scope.type === 'global') {\n const set = this.alwaysGlobal.get(scope.documentId) ?? new Set();\n set.add(handlers);\n this.alwaysGlobal.set(scope.documentId, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n const docPageMap = this.alwaysPage.get(scope.documentId) ?? new Map();\n const set = docPageMap.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n docPageMap.set(scope.pageIndex, set);\n this.alwaysPage.set(scope.documentId, docPageMap);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n const docState = this.getDocumentState(scope.documentId);\n if (!docState) return null;\n\n const mode = this.modes.get(docState.activeMode);\n if (!mode) return null;\n\n const docBuckets = this.buckets.get(scope.documentId);\n if (!docBuckets) return null;\n\n const bucket = docBuckets.get(mode.id);\n if (!bucket) return null;\n\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n if (scope.type === 'global') {\n const alwaysSet = this.alwaysGlobal.get(scope.documentId) ?? new Set<PointerEventHandlers>();\n const modeSpecific =\n mode.scope === 'global' ? bucket.global : new Set<PointerEventHandlers>();\n return mergeSets(alwaysSet, modeSpecific);\n }\n\n const alwaysPageSet =\n this.alwaysPage.get(scope.documentId)?.get(scope.pageIndex) ??\n new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>();\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n // ─────────────────────────────────────────────────────────\n // Cursor Management\n // ─────────────────────────────────────────────────────────\n\n private setCursor(token: string, cursor: string, priority = 0, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.set(token, { cursor, priority });\n this.emitCursor(id);\n }\n\n private removeCursor(token: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.delete(token);\n this.emitCursor(id);\n }\n\n private getCurrentCursor(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).cursor;\n }\n\n private emitCursor(documentId: string) {\n const claims = this.cursorClaims.get(documentId);\n if (!claims) return;\n\n const docState = this.getDocumentState(documentId);\n if (!docState) return;\n\n const top = [...claims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(docState.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== docState.cursor) {\n this.dispatch(setCursor(documentId, top.cursor));\n this.onCursorChange$.emit({\n documentId,\n cursor: top.cursor,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Lifecycle Notifications\n // ─────────────────────────────────────────────────────────\n\n private notifyHandlersActive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Store Update Handlers\n // ─────────────────────────────────────────────────────────\n\n override onStoreUpdated(\n prevState: InteractionManagerState,\n newState: InteractionManagerState,\n ): void {\n // Emit state changes for each changed document\n for (const documentId in newState.documents) {\n const prevDoc = prevState.documents[documentId];\n const newDoc = newState.documents[documentId];\n\n if (prevDoc !== newDoc) {\n this.onStateChange$.emit({\n documentId,\n state: newDoc,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {\n this.logger.info(\n 'InteractionManagerPlugin',\n 'Initialize',\n 'Interaction Manager Plugin initialized',\n );\n }\n\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.clear();\n this.onHandlerChange$.clear();\n this.onStateChange$.clear();\n await super.destroy();\n }\n}\n","import { PointerEventHandlers } from './types';\n\nexport function mergeHandlers(list: PointerEventHandlers[]): PointerEventHandlers {\n const keys: (keyof PointerEventHandlers)[] = [\n 'onPointerDown',\n 'onPointerUp',\n 'onPointerMove',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerCancel',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseCancel',\n 'onClick',\n 'onDoubleClick',\n ];\n const out: Partial<PointerEventHandlers> = {};\n for (const k of keys) {\n out[k] = (evt: any, nativeEvt: any, modeId: string) => {\n for (const h of list) h[k]?.(evt, nativeEvt, modeId);\n };\n }\n return out as PointerEventHandlers;\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { InteractionManagerPluginConfig } from './types';\n\nexport const INTERACTION_MANAGER_PLUGIN_ID = 'interaction-manager';\n\nexport const manifest: PluginManifest<InteractionManagerPluginConfig> = {\n id: INTERACTION_MANAGER_PLUGIN_ID,\n name: 'Interaction Manager Plugin',\n version: '1.0.0',\n provides: ['interaction-manager'],\n requires: [],\n optional: [],\n defaultConfig: {\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport {\n InteractionManagerAction,\n INIT_INTERACTION_STATE,\n CLEANUP_INTERACTION_STATE,\n SET_ACTIVE_DOCUMENT,\n ACTIVATE_MODE,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\n SET_DEFAULT_MODE,\n SET_EXCLUSION_RULES,\n ADD_EXCLUSION_CLASS,\n REMOVE_EXCLUSION_CLASS,\n ADD_EXCLUSION_ATTRIBUTE,\n REMOVE_EXCLUSION_ATTRIBUTE,\n} from './actions';\nimport { InteractionManagerState, InteractionDocumentState } from './types';\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport const initialDocumentState: InteractionDocumentState = {\n activeMode: INITIAL_MODE,\n cursor: 'auto',\n paused: false,\n};\n\nexport const initialState: InteractionManagerState = {\n defaultMode: INITIAL_MODE,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n documents: {},\n activeDocumentId: null,\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle\n // ─────────────────────────────────────────────────────────\n case INIT_INTERACTION_STATE: {\n const { documentId, state: docState } = action.payload;\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: docState,\n },\n // Set as active if no active document\n activeDocumentId: state.activeDocumentId ?? documentId,\n };\n }\n\n case CLEANUP_INTERACTION_STATE: {\n const documentId = action.payload;\n const { [documentId]: removed, ...remainingDocs } = state.documents;\n return {\n ...state,\n documents: remainingDocs,\n activeDocumentId: state.activeDocumentId === documentId ? null : state.activeDocumentId,\n };\n }\n\n case SET_ACTIVE_DOCUMENT: {\n return {\n ...state,\n activeDocumentId: action.payload,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Per-Document Actions\n // ─────────────────────────────────────────────────────────\n case ACTIVATE_MODE: {\n const { documentId, mode } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n activeMode: mode,\n },\n },\n };\n }\n\n case SET_CURSOR: {\n const { documentId, cursor } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n cursor,\n },\n },\n };\n }\n\n case PAUSE_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: true,\n },\n },\n };\n }\n\n case RESUME_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: false,\n },\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Global Actions\n // ─────────────────────────────────────────────────────────\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\n };\n\n case SET_EXCLUSION_RULES:\n return {\n ...state,\n exclusionRules: action.payload.rules,\n };\n\n case ADD_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: [...(state.exclusionRules.classes || []), action.payload.className].filter(\n (v, i, a) => a.indexOf(v) === i,\n ),\n },\n };\n\n case REMOVE_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: (state.exclusionRules.classes || []).filter(\n (c) => c !== action.payload.className,\n ),\n },\n };\n\n case ADD_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: [\n ...(state.exclusionRules.dataAttributes || []),\n action.payload.attribute,\n ].filter((v, i, a) => a.indexOf(v) === i),\n },\n };\n\n case REMOVE_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: (state.exclusionRules.dataAttributes || []).filter(\n (a) => a !== action.payload.attribute,\n ),\n },\n };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { InteractionManagerPlugin } from './interaction-manager-plugin';\nimport { manifest, INTERACTION_MANAGER_PLUGIN_ID } from './manifest';\nimport { InteractionManagerPluginConfig, InteractionManagerState } from './types';\nimport { reducer, initialState } from './reducer';\nimport { InteractionManagerAction } from './actions';\n\nexport const InteractionManagerPluginPackage: PluginPackage<\n InteractionManagerPlugin,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionManagerAction\n> = {\n manifest,\n create: (registry, config) =>\n new InteractionManagerPlugin(INTERACTION_MANAGER_PLUGIN_ID, registry, config),\n reducer,\n initialState,\n};\n\nexport * from './interaction-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './reducer';\n"],"names":["INIT_INTERACTION_STATE","CLEANUP_INTERACTION_STATE","ACTIVATE_MODE","PAUSE_INTERACTION","RESUME_INTERACTION","SET_CURSOR","SET_DEFAULT_MODE","SET_EXCLUSION_RULES","ADD_EXCLUSION_CLASS","REMOVE_EXCLUSION_CLASS","ADD_EXCLUSION_ATTRIBUTE","REMOVE_EXCLUSION_ATTRIBUTE","setDefaultMode","mode","type","payload","setExclusionRules","rules","INITIAL_MODE","_InteractionManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","modes","Map","cursorClaims","buckets","alwaysGlobal","alwaysPage","onModeChange$","createEmitter","onHandlerChange$","onCursorChange$","onStateChange$","createBehaviorEmitter","registerMode","scope","exclusive","cursor","dispatch","exclusionRules","onDocumentLoadingStarted","documentId","docState","activeMode","state","defaultMode","paused","initInteractionState","set","Set","docBuckets","get","modeId","keys","global","page","logger","debug","onDocumentClosed","delete","cleanupInteractionState","buildCapability","getActiveMode","getActiveInteractionMode","activate","activateDefaultMode","setCursor","token","priority","getCurrentCursor","removeCursor","getHandlersForScope","activeModeIsExclusive","pause","resume","isPaused","isDestroyed","getState","getDocumentStateOrThrow","forDocument","createInteractionScope","registerHandlers","options","registerAlways","getDefaultMode","getExclusionRules","addExclusionClass","className","removeExclusionClass","addExclusionAttribute","attribute","removeExclusionAttribute","onModeChange","on","onCursorChange","onHandlerChange","onStateChange","listener","event","getDocumentState","getActiveDocumentId","documents","Error","has","previousMode","_a","clear","notifyHandlersInactive","activateMode","emitCursor","notifyHandlersActive","emit","pauseInteraction","resumeInteraction","handlers","pageIndex","modeIds","Array","isArray","cleanupFunctions","bucket","add","push","size","forEach","cleanup","docPageMap","mergeSets","a","b","list","out","k","evt","nativeEvt","h","call","mergeHandlers","claims","top","values","sort","handler","onHandlerActiveStart","_b","handlerSet","onHandlerActiveEnd","onStoreUpdated","prevState","newState","prevDoc","newDoc","initialize","_","info","destroy","InteractionManagerPlugin","INTERACTION_MANAGER_PLUGIN_ID","manifest","name","version","provides","requires","optional","defaultConfig","classes","dataAttributes","initialDocumentState","initialState","activeDocumentId","reducer","action","removed","remainingDocs","filter","v","i","indexOf","c","InteractionManagerPluginPackage","create"],"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/helper.ts","../src/lib/interaction-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\nimport { InteractionExclusionRules, InteractionDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_INTERACTION_STATE = 'INTERACTION/INIT_STATE';\nexport const CLEANUP_INTERACTION_STATE = 'INTERACTION/CLEANUP_STATE';\n\n// Per-document actions\nexport const ACTIVATE_MODE = 'INTERACTION/ACTIVATE_MODE';\nexport const PAUSE_INTERACTION = 'INTERACTION/PAUSE';\nexport const RESUME_INTERACTION = 'INTERACTION/RESUME';\nexport const SET_CURSOR = 'INTERACTION/SET_CURSOR';\nexport const SET_ACTIVE_DOCUMENT = 'INTERACTION/SET_ACTIVE_DOCUMENT';\n\n// Global actions\nexport const SET_DEFAULT_MODE = 'INTERACTION/SET_DEFAULT_MODE';\nexport const SET_EXCLUSION_RULES = 'INTERACTION/SET_EXCLUSION_RULES';\nexport const ADD_EXCLUSION_CLASS = 'INTERACTION/ADD_EXCLUSION_CLASS';\nexport const REMOVE_EXCLUSION_CLASS = 'INTERACTION/REMOVE_EXCLUSION_CLASS';\nexport const ADD_EXCLUSION_ATTRIBUTE = 'INTERACTION/ADD_EXCLUSION_ATTRIBUTE';\nexport const REMOVE_EXCLUSION_ATTRIBUTE = 'INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE';\n\n// Document lifecycle actions\nexport interface InitInteractionStateAction extends Action {\n type: typeof INIT_INTERACTION_STATE;\n payload: {\n documentId: string;\n state: InteractionDocumentState;\n };\n}\n\nexport interface CleanupInteractionStateAction extends Action {\n type: typeof CLEANUP_INTERACTION_STATE;\n payload: string; // documentId\n}\n\nexport interface SetActiveDocumentAction extends Action {\n type: typeof SET_ACTIVE_DOCUMENT;\n payload: string | null; // documentId\n}\n\n// Per-document actions\nexport interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: {\n documentId: string;\n mode: string;\n };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: {\n documentId: string;\n cursor: string;\n };\n}\n\n// Global actions\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport interface SetExclusionRulesAction extends Action {\n type: typeof SET_EXCLUSION_RULES;\n payload: { rules: InteractionExclusionRules };\n}\n\nexport interface AddExclusionClassAction extends Action {\n type: typeof ADD_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface RemoveExclusionClassAction extends Action {\n type: typeof REMOVE_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface AddExclusionAttributeAction extends Action {\n type: typeof ADD_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport interface RemoveExclusionAttributeAction extends Action {\n type: typeof REMOVE_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport type InteractionManagerAction =\n | InitInteractionStateAction\n | CleanupInteractionStateAction\n | SetActiveDocumentAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction;\n\n// Action creators\nexport function initInteractionState(\n documentId: string,\n state: InteractionDocumentState,\n): InitInteractionStateAction {\n return { type: INIT_INTERACTION_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupInteractionState(documentId: string): CleanupInteractionStateAction {\n return { type: CLEANUP_INTERACTION_STATE, payload: documentId };\n}\n\nexport function setActiveDocument(documentId: string | null): SetActiveDocumentAction {\n return { type: SET_ACTIVE_DOCUMENT, payload: documentId };\n}\n\nexport function activateMode(documentId: string, mode: string): ActivateModeAction {\n return { type: ACTIVATE_MODE, payload: { documentId, mode } };\n}\n\nexport function pauseInteraction(documentId: string): PauseInteractionAction {\n return { type: PAUSE_INTERACTION, payload: documentId };\n}\n\nexport function resumeInteraction(documentId: string): ResumeInteractionAction {\n return { type: RESUME_INTERACTION, payload: documentId };\n}\n\nexport function setCursor(documentId: string, cursor: string): SetCursorAction {\n return { type: SET_CURSOR, payload: { documentId, cursor } };\n}\n\nexport function setDefaultMode(mode: string): SetDefaultModeAction {\n return { type: SET_DEFAULT_MODE, payload: { mode } };\n}\n\nexport function setExclusionRules(rules: InteractionExclusionRules): SetExclusionRulesAction {\n return { type: SET_EXCLUSION_RULES, payload: { rules } };\n}\n\nexport function addExclusionClass(className: string): AddExclusionClassAction {\n return { type: ADD_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function removeExclusionClass(className: string): RemoveExclusionClassAction {\n return { type: REMOVE_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function addExclusionAttribute(attribute: string): AddExclusionAttributeAction {\n return { type: ADD_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n\nexport function removeExclusionAttribute(attribute: string): RemoveExclusionAttributeAction {\n return { type: REMOVE_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n","import { PointerEventHandlers } from './types';\n\nexport function mergeHandlers(list: PointerEventHandlers[]): PointerEventHandlers {\n const keys: (keyof PointerEventHandlers)[] = [\n 'onPointerDown',\n 'onPointerUp',\n 'onPointerMove',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerCancel',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseCancel',\n 'onClick',\n 'onDoubleClick',\n ];\n const out: Partial<PointerEventHandlers> = {};\n for (const k of keys) {\n out[k] = (evt: any, nativeEvt: any, modeId: string) => {\n for (const h of list) h[k]?.(evt, nativeEvt, modeId);\n };\n }\n return out as PointerEventHandlers;\n}\n","import {\n BasePlugin,\n createBehaviorEmitter,\n createEmitter,\n Listener,\n PluginRegistry,\n} from '@embedpdf/core';\n\nimport {\n InteractionExclusionRules,\n InteractionManagerCapability,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionMode,\n InteractionScope,\n PointerEventHandlers,\n PointerEventHandlersWithLifecycle,\n RegisterAlwaysOptions,\n RegisterHandlersOptions,\n ModeChangeEvent,\n CursorChangeEvent,\n StateChangeEvent,\n InteractionDocumentState,\n InteractionManagerScope,\n} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n cleanupInteractionState,\n initInteractionState,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\n InteractionManagerAction,\n} from './actions';\nimport { mergeHandlers } from './helper';\n\ninterface CursorClaim {\n cursor: string;\n priority: number;\n}\n\ntype HandlerSet = Set<PointerEventHandlersWithLifecycle>;\ntype PageHandlerMap = Map<number /*pageIdx*/, HandlerSet>;\n\ninterface ModeBuckets {\n /** handlers that listen on the global wrapper */\n global: HandlerSet;\n /** handlers that listen on a specific page wrapper */\n page: PageHandlerMap;\n}\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport class InteractionManagerPlugin extends BasePlugin<\n InteractionManagerPluginConfig,\n InteractionManagerCapability,\n InteractionManagerState,\n InteractionManagerAction\n> {\n static readonly id = 'interaction-manager' as const;\n\n // Global mode definitions (shared across documents)\n private modes = new Map<string, InteractionMode>();\n\n // Per-document cursor claims: documentId -> token -> claim\n private cursorClaims = new Map<string, Map<string, CursorClaim>>();\n\n // Per-document handler buckets: documentId -> modeId -> buckets\n private buckets = new Map<string, Map<string, ModeBuckets>>();\n\n // Per-document always-active handlers\n private alwaysGlobal = new Map<string, Set<PointerEventHandlersWithLifecycle>>();\n private alwaysPage = new Map<string, Map<number, Set<PointerEventHandlersWithLifecycle>>>();\n\n // Event emitters\n private readonly onModeChange$ = createEmitter<ModeChangeEvent>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<CursorChangeEvent>();\n private readonly onStateChange$ = createBehaviorEmitter<StateChangeEvent>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n // Register default mode globally\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.dispatch(setDefaultMode(INITIAL_MODE));\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle Hooks (from BasePlugin)\n // ─────────────────────────────────────────────────────────\n\n protected override onDocumentLoadingStarted(documentId: string): void {\n // Initialize interaction state for this document\n const docState: InteractionDocumentState = {\n activeMode: this.state.defaultMode,\n cursor: 'auto',\n paused: false,\n };\n\n this.dispatch(initInteractionState(documentId, docState));\n\n // Initialize per-document data structures\n this.cursorClaims.set(documentId, new Map());\n this.buckets.set(documentId, new Map());\n this.alwaysGlobal.set(documentId, new Set());\n this.alwaysPage.set(documentId, new Map());\n\n // Initialize buckets for all registered modes\n const docBuckets = this.buckets.get(documentId)!;\n for (const modeId of this.modes.keys()) {\n docBuckets.set(modeId, { global: new Set(), page: new Map() });\n }\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentOpened',\n `Initialized interaction state for document: ${documentId}`,\n );\n }\n\n protected override onDocumentClosed(documentId: string): void {\n // Cleanup per-document data structures\n this.cursorClaims.delete(documentId);\n this.buckets.delete(documentId);\n this.alwaysGlobal.delete(documentId);\n this.alwaysPage.delete(documentId);\n\n // Cleanup state\n this.dispatch(cleanupInteractionState(documentId));\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentClosed',\n `Cleaned up interaction state for document: ${documentId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Capability\n // ─────────────────────────────────────────────────────────\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n // Active document operations\n getActiveMode: () => this.getActiveMode(),\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activate: (modeId: string) => this.activate(modeId),\n activateDefaultMode: () => this.activateDefaultMode(),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority),\n getCurrentCursor: () => this.getCurrentCursor(),\n removeCursor: (token: string) => this.removeCursor(token),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.pause(),\n resume: () => this.resume(),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.isPaused(),\n getState: () => this.getDocumentStateOrThrow(),\n\n // Document-scoped operations\n forDocument: (documentId: string) => this.createInteractionScope(documentId),\n\n // Global management\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setDefaultMode: (id: string) => this.setDefaultMode(id),\n getDefaultMode: () => this.state.defaultMode,\n getExclusionRules: () => this.state.exclusionRules,\n setExclusionRules: (rules: InteractionExclusionRules) =>\n this.dispatch(setExclusionRules(rules)),\n addExclusionClass: (className: string) => this.dispatch(addExclusionClass(className)),\n removeExclusionClass: (className: string) => this.dispatch(removeExclusionClass(className)),\n addExclusionAttribute: (attribute: string) => this.dispatch(addExclusionAttribute(attribute)),\n removeExclusionAttribute: (attribute: string) =>\n this.dispatch(removeExclusionAttribute(attribute)),\n\n // Events\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Scoping\n // ─────────────────────────────────────────────────────────\n\n private createInteractionScope(documentId: string): InteractionManagerScope {\n return {\n getActiveMode: () => this.getActiveMode(documentId),\n getActiveInteractionMode: () => this.getActiveInteractionMode(documentId),\n activate: (modeId: string) => this.activate(modeId, documentId),\n activateDefaultMode: () => this.activateDefaultMode(documentId),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority, documentId),\n getCurrentCursor: () => this.getCurrentCursor(documentId),\n removeCursor: (token: string) => this.removeCursor(token, documentId),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(documentId),\n pause: () => this.pause(documentId),\n resume: () => this.resume(documentId),\n isPaused: () => this.isPaused(documentId),\n getState: () => this.getDocumentStateOrThrow(documentId),\n onModeChange: (listener: Listener<string>) =>\n this.onModeChange$.on((event) => {\n if (event.documentId === documentId) listener(event.activeMode);\n }),\n onCursorChange: (listener: Listener<string>) =>\n this.onCursorChange$.on((event) => {\n if (event.documentId === documentId) listener(event.cursor);\n }),\n onStateChange: (listener: Listener<InteractionDocumentState>) =>\n this.onStateChange$.on((event) => {\n if (event.documentId === documentId) listener(event.state);\n }),\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // State Helpers\n // ─────────────────────────────────────────────────────────\n\n private getDocumentState(documentId?: string): InteractionDocumentState | null {\n const id = documentId ?? this.getActiveDocumentId();\n return this.state.documents[id] ?? null;\n }\n\n private getDocumentStateOrThrow(documentId?: string): InteractionDocumentState {\n const state = this.getDocumentState(documentId);\n if (!state) {\n throw new Error(`Interaction state not found for document: ${documentId ?? 'active'}`);\n }\n return state;\n }\n\n // ─────────────────────────────────────────────────────────\n // Core Operations\n // ─────────────────────────────────────────────────────────\n\n private activate(modeId: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const docState = this.getDocumentStateOrThrow(id);\n\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] unknown mode '${modeId}'`);\n }\n if (modeId === docState.activeMode) return;\n\n const previousMode = docState.activeMode;\n\n // Clear cursor claims for this document\n this.cursorClaims.get(id)?.clear();\n\n // Notify handlers going inactive\n this.notifyHandlersInactive(id, previousMode);\n\n // Update state\n this.dispatch(activateMode(id, modeId));\n\n // Emit cursor\n this.emitCursor(id);\n\n // Notify handlers going active\n this.notifyHandlersActive(id, modeId);\n\n // Emit mode change event\n this.onModeChange$.emit({\n documentId: id,\n activeMode: modeId,\n previousMode,\n });\n }\n\n private activateDefaultMode(documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n this.activate(this.state.defaultMode, id);\n }\n\n private setDefaultMode(modeId: string) {\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] cannot set unknown mode '${modeId}' as default`);\n }\n this.dispatch(setDefaultMode(modeId));\n }\n\n private getActiveMode(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).activeMode;\n }\n\n private getActiveInteractionMode(documentId?: string): InteractionMode | null {\n const docState = this.getDocumentState(documentId);\n if (!docState) return null;\n return this.modes.get(docState.activeMode) ?? null;\n }\n\n private activeModeIsExclusive(documentId?: string): boolean {\n const mode = this.getActiveInteractionMode(documentId);\n return !!mode?.exclusive;\n }\n\n private pause(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(pauseInteraction(id));\n }\n\n private resume(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(resumeInteraction(id));\n }\n\n private isPaused(documentId?: string): boolean {\n return this.getDocumentStateOrThrow(documentId).paused;\n }\n\n // ─────────────────────────────────────────────────────────\n // Mode Management\n // ─────────────────────────────────────────────────────────\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n\n // Add buckets for this mode in all existing documents\n for (const documentId of this.buckets.keys()) {\n const docBuckets = this.buckets.get(documentId)!;\n if (!docBuckets.has(mode.id)) {\n docBuckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Management\n // ─────────────────────────────────────────────────────────\n\n private registerHandlers({\n documentId,\n modeId,\n handlers,\n pageIndex,\n }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) {\n throw new Error(`No buckets found for document: ${documentId}`);\n }\n\n for (const id of modeIds) {\n const bucket = docBuckets.get(id);\n if (!bucket) throw new Error(`unknown mode '${id}'`);\n\n if (pageIndex == null) {\n bucket.global.add(handlers);\n } else {\n const set = bucket.page.get(pageIndex) ?? new Set();\n set.add(handlers);\n bucket.page.set(pageIndex, set);\n }\n\n cleanupFunctions.push(() => {\n if (pageIndex == null) {\n bucket.global.delete(handlers);\n } else {\n const set = bucket.page.get(pageIndex);\n if (set) {\n set.delete(handlers);\n if (set.size === 0) {\n bucket.page.delete(pageIndex);\n }\n }\n }\n });\n }\n\n this.onHandlerChange$.emit({ ...this.state });\n\n return () => {\n cleanupFunctions.forEach((cleanup) => cleanup());\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n public registerAlways({ scope, handlers }: RegisterAlwaysOptions): () => void {\n if (scope.type === 'global') {\n const set = this.alwaysGlobal.get(scope.documentId) ?? new Set();\n set.add(handlers);\n this.alwaysGlobal.set(scope.documentId, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n const docPageMap = this.alwaysPage.get(scope.documentId) ?? new Map();\n const set = docPageMap.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n docPageMap.set(scope.pageIndex, set);\n this.alwaysPage.set(scope.documentId, docPageMap);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n const docState = this.getDocumentState(scope.documentId);\n if (!docState) return null;\n\n const mode = this.modes.get(docState.activeMode);\n if (!mode) return null;\n\n const docBuckets = this.buckets.get(scope.documentId);\n if (!docBuckets) return null;\n\n const bucket = docBuckets.get(mode.id);\n if (!bucket) return null;\n\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n if (scope.type === 'global') {\n const alwaysSet = this.alwaysGlobal.get(scope.documentId) ?? new Set<PointerEventHandlers>();\n const modeSpecific =\n mode.scope === 'global' ? bucket.global : new Set<PointerEventHandlers>();\n return mergeSets(alwaysSet, modeSpecific);\n }\n\n const alwaysPageSet =\n this.alwaysPage.get(scope.documentId)?.get(scope.pageIndex) ??\n new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>();\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n // ─────────────────────────────────────────────────────────\n // Cursor Management\n // ─────────────────────────────────────────────────────────\n\n private setCursor(token: string, cursor: string, priority = 0, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.set(token, { cursor, priority });\n this.emitCursor(id);\n }\n\n private removeCursor(token: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.delete(token);\n this.emitCursor(id);\n }\n\n private getCurrentCursor(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).cursor;\n }\n\n private emitCursor(documentId: string) {\n const claims = this.cursorClaims.get(documentId);\n if (!claims) return;\n\n const docState = this.getDocumentState(documentId);\n if (!docState) return;\n\n const top = [...claims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(docState.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== docState.cursor) {\n this.dispatch(setCursor(documentId, top.cursor));\n this.onCursorChange$.emit({\n documentId,\n cursor: top.cursor,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Lifecycle Notifications\n // ─────────────────────────────────────────────────────────\n\n private notifyHandlersActive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Store Update Handlers\n // ─────────────────────────────────────────────────────────\n\n override onStoreUpdated(\n prevState: InteractionManagerState,\n newState: InteractionManagerState,\n ): void {\n // Emit state changes for each changed document\n for (const documentId in newState.documents) {\n const prevDoc = prevState.documents[documentId];\n const newDoc = newState.documents[documentId];\n\n if (prevDoc !== newDoc) {\n this.onStateChange$.emit({\n documentId,\n state: newDoc,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {\n this.logger.info(\n 'InteractionManagerPlugin',\n 'Initialize',\n 'Interaction Manager Plugin initialized',\n );\n }\n\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.clear();\n this.onHandlerChange$.clear();\n this.onStateChange$.clear();\n await super.destroy();\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { InteractionManagerPluginConfig } from './types';\n\nexport const INTERACTION_MANAGER_PLUGIN_ID = 'interaction-manager';\n\nexport const manifest: PluginManifest<InteractionManagerPluginConfig> = {\n id: INTERACTION_MANAGER_PLUGIN_ID,\n name: 'Interaction Manager Plugin',\n version: '1.0.0',\n provides: ['interaction-manager'],\n requires: [],\n optional: [],\n defaultConfig: {\n enabled: true,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport {\n InteractionManagerAction,\n INIT_INTERACTION_STATE,\n CLEANUP_INTERACTION_STATE,\n SET_ACTIVE_DOCUMENT,\n ACTIVATE_MODE,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\n SET_DEFAULT_MODE,\n SET_EXCLUSION_RULES,\n ADD_EXCLUSION_CLASS,\n REMOVE_EXCLUSION_CLASS,\n ADD_EXCLUSION_ATTRIBUTE,\n REMOVE_EXCLUSION_ATTRIBUTE,\n} from './actions';\nimport { InteractionManagerState, InteractionDocumentState } from './types';\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport const initialDocumentState: InteractionDocumentState = {\n activeMode: INITIAL_MODE,\n cursor: 'auto',\n paused: false,\n};\n\nexport const initialState: InteractionManagerState = {\n defaultMode: INITIAL_MODE,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n documents: {},\n activeDocumentId: null,\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle\n // ─────────────────────────────────────────────────────────\n case INIT_INTERACTION_STATE: {\n const { documentId, state: docState } = action.payload;\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: docState,\n },\n // Set as active if no active document\n activeDocumentId: state.activeDocumentId ?? documentId,\n };\n }\n\n case CLEANUP_INTERACTION_STATE: {\n const documentId = action.payload;\n const { [documentId]: removed, ...remainingDocs } = state.documents;\n return {\n ...state,\n documents: remainingDocs,\n activeDocumentId: state.activeDocumentId === documentId ? null : state.activeDocumentId,\n };\n }\n\n case SET_ACTIVE_DOCUMENT: {\n return {\n ...state,\n activeDocumentId: action.payload,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Per-Document Actions\n // ─────────────────────────────────────────────────────────\n case ACTIVATE_MODE: {\n const { documentId, mode } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n activeMode: mode,\n },\n },\n };\n }\n\n case SET_CURSOR: {\n const { documentId, cursor } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n cursor,\n },\n },\n };\n }\n\n case PAUSE_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: true,\n },\n },\n };\n }\n\n case RESUME_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: false,\n },\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Global Actions\n // ─────────────────────────────────────────────────────────\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\n };\n\n case SET_EXCLUSION_RULES:\n return {\n ...state,\n exclusionRules: action.payload.rules,\n };\n\n case ADD_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: [...(state.exclusionRules.classes || []), action.payload.className].filter(\n (v, i, a) => a.indexOf(v) === i,\n ),\n },\n };\n\n case REMOVE_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: (state.exclusionRules.classes || []).filter(\n (c) => c !== action.payload.className,\n ),\n },\n };\n\n case ADD_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: [\n ...(state.exclusionRules.dataAttributes || []),\n action.payload.attribute,\n ].filter((v, i, a) => a.indexOf(v) === i),\n },\n };\n\n case REMOVE_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: (state.exclusionRules.dataAttributes || []).filter(\n (a) => a !== action.payload.attribute,\n ),\n },\n };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { InteractionManagerPlugin } from './interaction-manager-plugin';\nimport { manifest, INTERACTION_MANAGER_PLUGIN_ID } from './manifest';\nimport { InteractionManagerPluginConfig, InteractionManagerState } from './types';\nimport { reducer, initialState } from './reducer';\nimport { InteractionManagerAction } from './actions';\n\nexport const InteractionManagerPluginPackage: PluginPackage<\n InteractionManagerPlugin,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionManagerAction\n> = {\n manifest,\n create: (registry, config) =>\n new InteractionManagerPlugin(INTERACTION_MANAGER_PLUGIN_ID, registry, config),\n reducer,\n initialState,\n};\n\nexport * from './interaction-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './reducer';\n"],"names":["INITIAL_MODE","set","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/actions.ts","../src/lib/helper.ts","../src/lib/interaction-manager-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\nimport { InteractionExclusionRules, InteractionDocumentState } from './types';\n\n// Document lifecycle\nexport const INIT_INTERACTION_STATE = 'INTERACTION/INIT_STATE';\nexport const CLEANUP_INTERACTION_STATE = 'INTERACTION/CLEANUP_STATE';\n\n// Per-document actions\nexport const ACTIVATE_MODE = 'INTERACTION/ACTIVATE_MODE';\nexport const PAUSE_INTERACTION = 'INTERACTION/PAUSE';\nexport const RESUME_INTERACTION = 'INTERACTION/RESUME';\nexport const SET_CURSOR = 'INTERACTION/SET_CURSOR';\nexport const SET_ACTIVE_DOCUMENT = 'INTERACTION/SET_ACTIVE_DOCUMENT';\n\n// Global actions\nexport const SET_DEFAULT_MODE = 'INTERACTION/SET_DEFAULT_MODE';\nexport const SET_EXCLUSION_RULES = 'INTERACTION/SET_EXCLUSION_RULES';\nexport const ADD_EXCLUSION_CLASS = 'INTERACTION/ADD_EXCLUSION_CLASS';\nexport const REMOVE_EXCLUSION_CLASS = 'INTERACTION/REMOVE_EXCLUSION_CLASS';\nexport const ADD_EXCLUSION_ATTRIBUTE = 'INTERACTION/ADD_EXCLUSION_ATTRIBUTE';\nexport const REMOVE_EXCLUSION_ATTRIBUTE = 'INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE';\n\n// Document lifecycle actions\nexport interface InitInteractionStateAction extends Action {\n type: typeof INIT_INTERACTION_STATE;\n payload: {\n documentId: string;\n state: InteractionDocumentState;\n };\n}\n\nexport interface CleanupInteractionStateAction extends Action {\n type: typeof CLEANUP_INTERACTION_STATE;\n payload: string; // documentId\n}\n\nexport interface SetActiveDocumentAction extends Action {\n type: typeof SET_ACTIVE_DOCUMENT;\n payload: string | null; // documentId\n}\n\n// Per-document actions\nexport interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: {\n documentId: string;\n mode: string;\n };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n payload: string; // documentId\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: {\n documentId: string;\n cursor: string;\n };\n}\n\n// Global actions\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport interface SetExclusionRulesAction extends Action {\n type: typeof SET_EXCLUSION_RULES;\n payload: { rules: InteractionExclusionRules };\n}\n\nexport interface AddExclusionClassAction extends Action {\n type: typeof ADD_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface RemoveExclusionClassAction extends Action {\n type: typeof REMOVE_EXCLUSION_CLASS;\n payload: { className: string };\n}\n\nexport interface AddExclusionAttributeAction extends Action {\n type: typeof ADD_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport interface RemoveExclusionAttributeAction extends Action {\n type: typeof REMOVE_EXCLUSION_ATTRIBUTE;\n payload: { attribute: string };\n}\n\nexport type InteractionManagerAction =\n | InitInteractionStateAction\n | CleanupInteractionStateAction\n | SetActiveDocumentAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction;\n\n// Action creators\nexport function initInteractionState(\n documentId: string,\n state: InteractionDocumentState,\n): InitInteractionStateAction {\n return { type: INIT_INTERACTION_STATE, payload: { documentId, state } };\n}\n\nexport function cleanupInteractionState(documentId: string): CleanupInteractionStateAction {\n return { type: CLEANUP_INTERACTION_STATE, payload: documentId };\n}\n\nexport function setActiveDocument(documentId: string | null): SetActiveDocumentAction {\n return { type: SET_ACTIVE_DOCUMENT, payload: documentId };\n}\n\nexport function activateMode(documentId: string, mode: string): ActivateModeAction {\n return { type: ACTIVATE_MODE, payload: { documentId, mode } };\n}\n\nexport function pauseInteraction(documentId: string): PauseInteractionAction {\n return { type: PAUSE_INTERACTION, payload: documentId };\n}\n\nexport function resumeInteraction(documentId: string): ResumeInteractionAction {\n return { type: RESUME_INTERACTION, payload: documentId };\n}\n\nexport function setCursor(documentId: string, cursor: string): SetCursorAction {\n return { type: SET_CURSOR, payload: { documentId, cursor } };\n}\n\nexport function setDefaultMode(mode: string): SetDefaultModeAction {\n return { type: SET_DEFAULT_MODE, payload: { mode } };\n}\n\nexport function setExclusionRules(rules: InteractionExclusionRules): SetExclusionRulesAction {\n return { type: SET_EXCLUSION_RULES, payload: { rules } };\n}\n\nexport function addExclusionClass(className: string): AddExclusionClassAction {\n return { type: ADD_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function removeExclusionClass(className: string): RemoveExclusionClassAction {\n return { type: REMOVE_EXCLUSION_CLASS, payload: { className } };\n}\n\nexport function addExclusionAttribute(attribute: string): AddExclusionAttributeAction {\n return { type: ADD_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n\nexport function removeExclusionAttribute(attribute: string): RemoveExclusionAttributeAction {\n return { type: REMOVE_EXCLUSION_ATTRIBUTE, payload: { attribute } };\n}\n","import { PointerEventHandlers } from './types';\n\nexport function mergeHandlers(list: PointerEventHandlers[]): PointerEventHandlers {\n const keys: (keyof PointerEventHandlers)[] = [\n 'onPointerDown',\n 'onPointerUp',\n 'onPointerMove',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerCancel',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseCancel',\n 'onClick',\n 'onDoubleClick',\n ];\n const out: Partial<PointerEventHandlers> = {};\n for (const k of keys) {\n out[k] = (evt: any, nativeEvt: any, modeId: string) => {\n for (const h of list) h[k]?.(evt, nativeEvt, modeId);\n };\n }\n return out as PointerEventHandlers;\n}\n","import {\n BasePlugin,\n createBehaviorEmitter,\n createEmitter,\n Listener,\n PluginRegistry,\n} from '@embedpdf/core';\n\nimport {\n InteractionExclusionRules,\n InteractionManagerCapability,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionMode,\n InteractionScope,\n PointerEventHandlers,\n PointerEventHandlersWithLifecycle,\n RegisterAlwaysOptions,\n RegisterHandlersOptions,\n ModeChangeEvent,\n CursorChangeEvent,\n StateChangeEvent,\n InteractionDocumentState,\n InteractionManagerScope,\n} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n cleanupInteractionState,\n initInteractionState,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\n InteractionManagerAction,\n} from './actions';\nimport { mergeHandlers } from './helper';\n\ninterface CursorClaim {\n cursor: string;\n priority: number;\n}\n\ntype HandlerSet = Set<PointerEventHandlersWithLifecycle>;\ntype PageHandlerMap = Map<number /*pageIdx*/, HandlerSet>;\n\ninterface ModeBuckets {\n /** handlers that listen on the global wrapper */\n global: HandlerSet;\n /** handlers that listen on a specific page wrapper */\n page: PageHandlerMap;\n}\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport class InteractionManagerPlugin extends BasePlugin<\n InteractionManagerPluginConfig,\n InteractionManagerCapability,\n InteractionManagerState,\n InteractionManagerAction\n> {\n static readonly id = 'interaction-manager' as const;\n\n // Global mode definitions (shared across documents)\n private modes = new Map<string, InteractionMode>();\n\n // Per-document cursor claims: documentId -> token -> claim\n private cursorClaims = new Map<string, Map<string, CursorClaim>>();\n\n // Per-document handler buckets: documentId -> modeId -> buckets\n private buckets = new Map<string, Map<string, ModeBuckets>>();\n\n // Per-document always-active handlers\n private alwaysGlobal = new Map<string, Set<PointerEventHandlersWithLifecycle>>();\n private alwaysPage = new Map<string, Map<number, Set<PointerEventHandlersWithLifecycle>>>();\n\n // Event emitters\n private readonly onModeChange$ = createEmitter<ModeChangeEvent>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<CursorChangeEvent>();\n private readonly onStateChange$ = createBehaviorEmitter<StateChangeEvent>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n // Register default mode globally\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.dispatch(setDefaultMode(INITIAL_MODE));\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle Hooks (from BasePlugin)\n // ─────────────────────────────────────────────────────────\n\n protected override onDocumentLoadingStarted(documentId: string): void {\n // Initialize interaction state for this document\n const docState: InteractionDocumentState = {\n activeMode: this.state.defaultMode,\n cursor: 'auto',\n paused: false,\n };\n\n this.dispatch(initInteractionState(documentId, docState));\n\n // Initialize per-document data structures\n this.cursorClaims.set(documentId, new Map());\n this.buckets.set(documentId, new Map());\n this.alwaysGlobal.set(documentId, new Set());\n this.alwaysPage.set(documentId, new Map());\n\n // Initialize buckets for all registered modes\n const docBuckets = this.buckets.get(documentId)!;\n for (const modeId of this.modes.keys()) {\n docBuckets.set(modeId, { global: new Set(), page: new Map() });\n }\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentOpened',\n `Initialized interaction state for document: ${documentId}`,\n );\n }\n\n protected override onDocumentClosed(documentId: string): void {\n // Cleanup per-document data structures\n this.cursorClaims.delete(documentId);\n this.buckets.delete(documentId);\n this.alwaysGlobal.delete(documentId);\n this.alwaysPage.delete(documentId);\n\n // Cleanup state\n this.dispatch(cleanupInteractionState(documentId));\n\n this.logger.debug(\n 'InteractionManagerPlugin',\n 'DocumentClosed',\n `Cleaned up interaction state for document: ${documentId}`,\n );\n }\n\n // ─────────────────────────────────────────────────────────\n // Capability\n // ─────────────────────────────────────────────────────────\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n // Active document operations\n getActiveMode: () => this.getActiveMode(),\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activate: (modeId: string) => this.activate(modeId),\n activateDefaultMode: () => this.activateDefaultMode(),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority),\n getCurrentCursor: () => this.getCurrentCursor(),\n removeCursor: (token: string) => this.removeCursor(token),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.pause(),\n resume: () => this.resume(),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.isPaused(),\n getState: () => this.getDocumentStateOrThrow(),\n\n // Document-scoped operations\n forDocument: (documentId: string) => this.createInteractionScope(documentId),\n\n // Global management\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setDefaultMode: (id: string) => this.setDefaultMode(id),\n getDefaultMode: () => this.state.defaultMode,\n getExclusionRules: () => this.state.exclusionRules,\n setExclusionRules: (rules: InteractionExclusionRules) =>\n this.dispatch(setExclusionRules(rules)),\n addExclusionClass: (className: string) => this.dispatch(addExclusionClass(className)),\n removeExclusionClass: (className: string) => this.dispatch(removeExclusionClass(className)),\n addExclusionAttribute: (attribute: string) => this.dispatch(addExclusionAttribute(attribute)),\n removeExclusionAttribute: (attribute: string) =>\n this.dispatch(removeExclusionAttribute(attribute)),\n\n // Events\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Document Scoping\n // ─────────────────────────────────────────────────────────\n\n private createInteractionScope(documentId: string): InteractionManagerScope {\n return {\n getActiveMode: () => this.getActiveMode(documentId),\n getActiveInteractionMode: () => this.getActiveInteractionMode(documentId),\n activate: (modeId: string) => this.activate(modeId, documentId),\n activateDefaultMode: () => this.activateDefaultMode(documentId),\n setCursor: (token: string, cursor: string, priority?: number) =>\n this.setCursor(token, cursor, priority, documentId),\n getCurrentCursor: () => this.getCurrentCursor(documentId),\n removeCursor: (token: string) => this.removeCursor(token, documentId),\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(documentId),\n pause: () => this.pause(documentId),\n resume: () => this.resume(documentId),\n isPaused: () => this.isPaused(documentId),\n getState: () => this.getDocumentStateOrThrow(documentId),\n onModeChange: (listener: Listener<string>) =>\n this.onModeChange$.on((event) => {\n if (event.documentId === documentId) listener(event.activeMode);\n }),\n onCursorChange: (listener: Listener<string>) =>\n this.onCursorChange$.on((event) => {\n if (event.documentId === documentId) listener(event.cursor);\n }),\n onStateChange: (listener: Listener<InteractionDocumentState>) =>\n this.onStateChange$.on((event) => {\n if (event.documentId === documentId) listener(event.state);\n }),\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // State Helpers\n // ─────────────────────────────────────────────────────────\n\n private getDocumentState(documentId?: string): InteractionDocumentState | null {\n const id = documentId ?? this.getActiveDocumentId();\n return this.state.documents[id] ?? null;\n }\n\n private getDocumentStateOrThrow(documentId?: string): InteractionDocumentState {\n const state = this.getDocumentState(documentId);\n if (!state) {\n throw new Error(`Interaction state not found for document: ${documentId ?? 'active'}`);\n }\n return state;\n }\n\n // ─────────────────────────────────────────────────────────\n // Core Operations\n // ─────────────────────────────────────────────────────────\n\n private activate(modeId: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const docState = this.getDocumentStateOrThrow(id);\n\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] unknown mode '${modeId}'`);\n }\n if (modeId === docState.activeMode) return;\n\n const previousMode = docState.activeMode;\n\n // Clear cursor claims for this document\n this.cursorClaims.get(id)?.clear();\n\n // Notify handlers going inactive\n this.notifyHandlersInactive(id, previousMode);\n\n // Update state\n this.dispatch(activateMode(id, modeId));\n\n // Emit cursor\n this.emitCursor(id);\n\n // Notify handlers going active\n this.notifyHandlersActive(id, modeId);\n\n // Emit mode change event\n this.onModeChange$.emit({\n documentId: id,\n activeMode: modeId,\n previousMode,\n });\n }\n\n private activateDefaultMode(documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n this.activate(this.state.defaultMode, id);\n }\n\n private setDefaultMode(modeId: string) {\n if (!this.modes.has(modeId)) {\n throw new Error(`[interaction] cannot set unknown mode '${modeId}' as default`);\n }\n this.dispatch(setDefaultMode(modeId));\n }\n\n private getActiveMode(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).activeMode;\n }\n\n private getActiveInteractionMode(documentId?: string): InteractionMode | null {\n const docState = this.getDocumentState(documentId);\n if (!docState) return null;\n return this.modes.get(docState.activeMode) ?? null;\n }\n\n private activeModeIsExclusive(documentId?: string): boolean {\n const mode = this.getActiveInteractionMode(documentId);\n return !!mode?.exclusive;\n }\n\n private pause(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(pauseInteraction(id));\n }\n\n private resume(documentId?: string): void {\n const id = documentId ?? this.getActiveDocumentId();\n this.dispatch(resumeInteraction(id));\n }\n\n private isPaused(documentId?: string): boolean {\n return this.getDocumentStateOrThrow(documentId).paused;\n }\n\n // ─────────────────────────────────────────────────────────\n // Mode Management\n // ─────────────────────────────────────────────────────────\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n\n // Add buckets for this mode in all existing documents\n for (const documentId of this.buckets.keys()) {\n const docBuckets = this.buckets.get(documentId)!;\n if (!docBuckets.has(mode.id)) {\n docBuckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Management\n // ─────────────────────────────────────────────────────────\n\n private registerHandlers({\n documentId,\n modeId,\n handlers,\n pageIndex,\n }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) {\n throw new Error(`No buckets found for document: ${documentId}`);\n }\n\n for (const id of modeIds) {\n const bucket = docBuckets.get(id);\n if (!bucket) throw new Error(`unknown mode '${id}'`);\n\n if (pageIndex == null) {\n bucket.global.add(handlers);\n } else {\n const set = bucket.page.get(pageIndex) ?? new Set();\n set.add(handlers);\n bucket.page.set(pageIndex, set);\n }\n\n cleanupFunctions.push(() => {\n if (pageIndex == null) {\n bucket.global.delete(handlers);\n } else {\n const set = bucket.page.get(pageIndex);\n if (set) {\n set.delete(handlers);\n if (set.size === 0) {\n bucket.page.delete(pageIndex);\n }\n }\n }\n });\n }\n\n this.onHandlerChange$.emit({ ...this.state });\n\n return () => {\n cleanupFunctions.forEach((cleanup) => cleanup());\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n public registerAlways({ scope, handlers }: RegisterAlwaysOptions): () => void {\n if (scope.type === 'global') {\n const set = this.alwaysGlobal.get(scope.documentId) ?? new Set();\n set.add(handlers);\n this.alwaysGlobal.set(scope.documentId, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n const docPageMap = this.alwaysPage.get(scope.documentId) ?? new Map();\n const set = docPageMap.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n docPageMap.set(scope.pageIndex, set);\n this.alwaysPage.set(scope.documentId, docPageMap);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n const docState = this.getDocumentState(scope.documentId);\n if (!docState) return null;\n\n const mode = this.modes.get(docState.activeMode);\n if (!mode) return null;\n\n const docBuckets = this.buckets.get(scope.documentId);\n if (!docBuckets) return null;\n\n const bucket = docBuckets.get(mode.id);\n if (!bucket) return null;\n\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n if (scope.type === 'global') {\n const alwaysSet = this.alwaysGlobal.get(scope.documentId) ?? new Set<PointerEventHandlers>();\n const modeSpecific =\n mode.scope === 'global' ? bucket.global : new Set<PointerEventHandlers>();\n return mergeSets(alwaysSet, modeSpecific);\n }\n\n const alwaysPageSet =\n this.alwaysPage.get(scope.documentId)?.get(scope.pageIndex) ??\n new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>();\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n // ─────────────────────────────────────────────────────────\n // Cursor Management\n // ─────────────────────────────────────────────────────────\n\n private setCursor(token: string, cursor: string, priority = 0, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.set(token, { cursor, priority });\n this.emitCursor(id);\n }\n\n private removeCursor(token: string, documentId?: string) {\n const id = documentId ?? this.getActiveDocumentId();\n const claims = this.cursorClaims.get(id);\n if (!claims) return;\n\n claims.delete(token);\n this.emitCursor(id);\n }\n\n private getCurrentCursor(documentId?: string): string {\n return this.getDocumentStateOrThrow(documentId).cursor;\n }\n\n private emitCursor(documentId: string) {\n const claims = this.cursorClaims.get(documentId);\n if (!claims) return;\n\n const docState = this.getDocumentState(documentId);\n if (!docState) return;\n\n const top = [...claims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(docState.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== docState.cursor) {\n this.dispatch(setCursor(documentId, top.cursor));\n this.onCursorChange$.emit({\n documentId,\n cursor: top.cursor,\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Handler Lifecycle Notifications\n // ─────────────────────────────────────────────────────────\n\n private notifyHandlersActive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(documentId: string, modeId: string) {\n // Notify always-active handlers\n this.alwaysGlobal.get(documentId)?.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.get(documentId)?.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n\n const mode = this.modes.get(modeId);\n if (!mode) return;\n\n const docBuckets = this.buckets.get(documentId);\n if (!docBuckets) return;\n\n const bucket = docBuckets.get(modeId);\n if (!bucket) return;\n\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Store Update Handlers\n // ─────────────────────────────────────────────────────────\n\n override onStoreUpdated(\n prevState: InteractionManagerState,\n newState: InteractionManagerState,\n ): void {\n // Emit state changes for each changed document\n for (const documentId in newState.documents) {\n const prevDoc = prevState.documents[documentId];\n const newDoc = newState.documents[documentId];\n\n if (prevDoc !== newDoc) {\n this.onStateChange$.emit({\n documentId,\n state: newDoc,\n });\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {\n this.logger.info(\n 'InteractionManagerPlugin',\n 'Initialize',\n 'Interaction Manager Plugin initialized',\n );\n }\n\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.clear();\n this.onHandlerChange$.clear();\n this.onStateChange$.clear();\n await super.destroy();\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { InteractionManagerPluginConfig } from './types';\n\nexport const INTERACTION_MANAGER_PLUGIN_ID = 'interaction-manager';\n\nexport const manifest: PluginManifest<InteractionManagerPluginConfig> = {\n id: INTERACTION_MANAGER_PLUGIN_ID,\n name: 'Interaction Manager Plugin',\n version: '1.0.0',\n provides: ['interaction-manager'],\n requires: [],\n optional: [],\n defaultConfig: {\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport {\n InteractionManagerAction,\n INIT_INTERACTION_STATE,\n CLEANUP_INTERACTION_STATE,\n SET_ACTIVE_DOCUMENT,\n ACTIVATE_MODE,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\n SET_DEFAULT_MODE,\n SET_EXCLUSION_RULES,\n ADD_EXCLUSION_CLASS,\n REMOVE_EXCLUSION_CLASS,\n ADD_EXCLUSION_ATTRIBUTE,\n REMOVE_EXCLUSION_ATTRIBUTE,\n} from './actions';\nimport { InteractionManagerState, InteractionDocumentState } from './types';\n\nconst INITIAL_MODE = 'pointerMode';\n\nexport const initialDocumentState: InteractionDocumentState = {\n activeMode: INITIAL_MODE,\n cursor: 'auto',\n paused: false,\n};\n\nexport const initialState: InteractionManagerState = {\n defaultMode: INITIAL_MODE,\n exclusionRules: {\n classes: [],\n dataAttributes: ['data-no-interaction'],\n },\n documents: {},\n activeDocumentId: null,\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n // ─────────────────────────────────────────────────────────\n // Document Lifecycle\n // ─────────────────────────────────────────────────────────\n case INIT_INTERACTION_STATE: {\n const { documentId, state: docState } = action.payload;\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: docState,\n },\n // Set as active if no active document\n activeDocumentId: state.activeDocumentId ?? documentId,\n };\n }\n\n case CLEANUP_INTERACTION_STATE: {\n const documentId = action.payload;\n const { [documentId]: removed, ...remainingDocs } = state.documents;\n return {\n ...state,\n documents: remainingDocs,\n activeDocumentId: state.activeDocumentId === documentId ? null : state.activeDocumentId,\n };\n }\n\n case SET_ACTIVE_DOCUMENT: {\n return {\n ...state,\n activeDocumentId: action.payload,\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Per-Document Actions\n // ─────────────────────────────────────────────────────────\n case ACTIVATE_MODE: {\n const { documentId, mode } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n activeMode: mode,\n },\n },\n };\n }\n\n case SET_CURSOR: {\n const { documentId, cursor } = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n cursor,\n },\n },\n };\n }\n\n case PAUSE_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: true,\n },\n },\n };\n }\n\n case RESUME_INTERACTION: {\n const documentId = action.payload;\n const docState = state.documents[documentId];\n if (!docState) return state;\n\n return {\n ...state,\n documents: {\n ...state.documents,\n [documentId]: {\n ...docState,\n paused: false,\n },\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────\n // Global Actions\n // ─────────────────────────────────────────────────────────\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\n };\n\n case SET_EXCLUSION_RULES:\n return {\n ...state,\n exclusionRules: action.payload.rules,\n };\n\n case ADD_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: [...(state.exclusionRules.classes || []), action.payload.className].filter(\n (v, i, a) => a.indexOf(v) === i,\n ),\n },\n };\n\n case REMOVE_EXCLUSION_CLASS:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n classes: (state.exclusionRules.classes || []).filter(\n (c) => c !== action.payload.className,\n ),\n },\n };\n\n case ADD_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: [\n ...(state.exclusionRules.dataAttributes || []),\n action.payload.attribute,\n ].filter((v, i, a) => a.indexOf(v) === i),\n },\n };\n\n case REMOVE_EXCLUSION_ATTRIBUTE:\n return {\n ...state,\n exclusionRules: {\n ...state.exclusionRules,\n dataAttributes: (state.exclusionRules.dataAttributes || []).filter(\n (a) => a !== action.payload.attribute,\n ),\n },\n };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { InteractionManagerPlugin } from './interaction-manager-plugin';\nimport { manifest, INTERACTION_MANAGER_PLUGIN_ID } from './manifest';\nimport { InteractionManagerPluginConfig, InteractionManagerState } from './types';\nimport { reducer, initialState } from './reducer';\nimport { InteractionManagerAction } from './actions';\n\nexport const InteractionManagerPluginPackage: PluginPackage<\n InteractionManagerPlugin,\n InteractionManagerPluginConfig,\n InteractionManagerState,\n InteractionManagerAction\n> = {\n manifest,\n create: (registry, config) =>\n new InteractionManagerPlugin(INTERACTION_MANAGER_PLUGIN_ID, registry, config),\n reducer,\n initialState,\n};\n\nexport * from './interaction-manager-plugin';\nexport * from './types';\nexport * from './manifest';\nexport * from './reducer';\n"],"names":["INITIAL_MODE","set","_a"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embedpdf/plugin-interaction-manager",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@embedpdf/models": "2.0.0-next.
|
|
38
|
+
"@embedpdf/models": "2.0.0-next.2"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/react": "^18.2.0",
|
|
42
42
|
"typescript": "^5.0.0",
|
|
43
|
-
"@embedpdf/
|
|
44
|
-
"@embedpdf/
|
|
43
|
+
"@embedpdf/build": "1.1.0",
|
|
44
|
+
"@embedpdf/core": "2.0.0-next.2"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"react": ">=16.8.0",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"preact": "^10.26.4",
|
|
50
50
|
"vue": ">=3.2.0",
|
|
51
51
|
"svelte": ">=5 <6",
|
|
52
|
-
"@embedpdf/core": "2.0.0-next.
|
|
52
|
+
"@embedpdf/core": "2.0.0-next.2"
|
|
53
53
|
},
|
|
54
54
|
"files": [
|
|
55
55
|
"dist",
|