@embedpdf/plugin-interaction-manager 1.3.14 → 1.3.16

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 CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t="INTERACTION/ACTIVATE_MODE",s="INTERACTION/PAUSE",a="INTERACTION/RESUME",o="INTERACTION/SET_CURSOR",i="INTERACTION/SET_DEFAULT_MODE",r="INTERACTION/SET_EXCLUSION_RULES",n="INTERACTION/ADD_EXCLUSION_CLASS",l="INTERACTION/REMOVE_EXCLUSION_CLASS",c="INTERACTION/ADD_EXCLUSION_ATTRIBUTE",u="INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE",d=e=>({type:r,payload:{rules:e}});const h="pointerMode",g=class extends e.BasePlugin{constructor(t,s,a){super(t,s),this.modes=new Map,this.cursorClaims=new Map,this.buckets=new Map,this.alwaysGlobal=new Set,this.alwaysPage=new Map,this.onModeChange$=e.createEmitter(),this.onHandlerChange$=e.createEmitter(),this.onCursorChange$=e.createEmitter(),this.onStateChange$=e.createBehaviorEmitter(),this.registerMode({id:h,scope:"page",exclusive:!1,cursor:"auto"}),this.setDefaultMode(h),this.activate(h),a.exclusionRules&&this.dispatch(d(a.exclusionRules))}async initialize(e){}buildCapability(){return{activate:e=>this.activate(e),onModeChange:this.onModeChange$.on,onCursorChange:this.onCursorChange$.on,onHandlerChange:this.onHandlerChange$.on,onStateChange:this.onStateChange$.on,getActiveMode:()=>this.state.activeMode,getActiveInteractionMode:()=>this.getActiveInteractionMode(),activateDefaultMode:()=>this.activate(this.state.defaultMode),registerMode:e=>this.registerMode(e),registerHandlers:e=>this.registerHandlers(e),registerAlways:e=>this.registerAlways(e),setCursor:(e,t,s=0)=>this.setCursor(e,t,s),removeCursor:e=>this.removeCursor(e),getCurrentCursor:()=>this.state.cursor,getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(),pause:()=>this.dispatch({type:s}),resume:()=>this.dispatch({type:a}),isPaused:()=>this.state.paused,setDefaultMode:e=>this.setDefaultMode(e),getDefaultMode:()=>this.state.defaultMode,getExclusionRules:()=>this.state.exclusionRules,setExclusionRules:e=>this.dispatch(d(e)),addExclusionClass:e=>this.dispatch((e=>({type:n,payload:{className:e}}))(e)),removeExclusionClass:e=>this.dispatch((e=>({type:l,payload:{className:e}}))(e)),addExclusionAttribute:e=>this.dispatch((e=>({type:c,payload:{attribute:e}}))(e)),removeExclusionAttribute:e=>this.dispatch((e=>({type:u,payload:{attribute:e}}))(e))}}activate(e){if(!this.modes.has(e))throw new Error(`[interaction] unknown mode '${e}'`);if(e===this.state.activeMode)return;const s=this.state.activeMode;this.cursorClaims.clear(),this.notifyHandlersInactive(s),this.dispatch((e=>({type:t,payload:{mode:e}}))(e)),this.emitCursor(),this.notifyHandlersActive(e),this.onModeChange$.emit({...this.state,activeMode:e})}setDefaultMode(e){if(!this.modes.has(e))throw new Error(`[interaction] cannot set unknown mode '${e}' as default`);this.dispatch({type:i,payload:{mode:e}})}notifyHandlersActive(e){this.alwaysGlobal.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)})),this.alwaysPage.forEach((t=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)}))}));const t=this.modes.get(e);if(!t)return;const s=this.buckets.get(e);s&&("global"===t.scope&&s.global.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)})),"page"===t.scope&&s.page.forEach(((t,s)=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)}))})))}notifyHandlersInactive(e){this.alwaysGlobal.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)})),this.alwaysPage.forEach((t=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)}))}));const t=this.modes.get(e);if(!t)return;const s=this.buckets.get(e);s&&("global"===t.scope&&s.global.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)})),"page"===t.scope&&s.page.forEach(((t,s)=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)}))})))}registerMode(e){this.modes.set(e.id,e),this.buckets.has(e.id)||this.buckets.set(e.id,{global:new Set,page:new Map})}registerHandlers({modeId:e,handlers:t,pageIndex:s}){const a=Array.isArray(e)?e:[e],o=[];for(const i of a){const e=this.buckets.get(i);if(!e)throw new Error(`unknown mode '${i}'`);if(null==s)e.global.add(t);else{const a=e.page.get(s)??new Set;a.add(t),e.page.set(s,a)}o.push((()=>{if(null==s)e.global.delete(t);else{const a=e.page.get(s);a&&(a.delete(t),0===a.size&&e.page.delete(s))}}))}return this.onHandlerChange$.emit({...this.state}),()=>{o.forEach((e=>e())),this.onHandlerChange$.emit({...this.state})}}registerAlways({scope:e,handlers:t}){if("global"===e.type)return this.alwaysGlobal.add(t),this.onHandlerChange$.emit({...this.state}),()=>this.alwaysGlobal.delete(t);const s=this.alwaysPage.get(e.pageIndex)??new Set;return s.add(t),this.alwaysPage.set(e.pageIndex,s),this.onHandlerChange$.emit({...this.state}),()=>{s.delete(t),this.onHandlerChange$.emit({...this.state})}}getHandlersForScope(e){if(!this.state)return null;const t=this.modes.get(this.state.activeMode);if(!t)return null;const s=this.buckets.get(t.id);if(!s)return null;const a=(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 a of t)s[a]=(t,s,o)=>{var i;for(const r of e)null==(i=r[a])||i.call(r,t,s,o)};return s}([...e,...t]):null;if("global"===e.type){const e="global"===t.scope?s.global:new Set;return a(this.alwaysGlobal,e)}return a(this.alwaysPage.get(e.pageIndex)??new Set,"page"===t.scope?s.page.get(e.pageIndex)??new Set:new Set)}setCursor(e,t,s=0){this.cursorClaims.set(e,{cursor:t,priority:s}),this.emitCursor()}removeCursor(e){this.cursorClaims.delete(e),this.emitCursor()}emitCursor(){var e;const t=[...this.cursorClaims.values()].sort(((e,t)=>t.priority-e.priority))[0]??{cursor:(null==(e=this.modes.get(this.state.activeMode))?void 0:e.cursor)??"auto"};var s;t.cursor!==this.state.cursor&&(this.dispatch((s=t.cursor,{type:o,payload:{cursor:s}})),this.onCursorChange$.emit(t.cursor))}onStoreUpdated(e,t){this.onStateChange$.emit(t)}activeModeIsExclusive(){const e=this.modes.get(this.state.activeMode);return!!(null==e?void 0:e.exclusive)}getActiveInteractionMode(){return this.modes.get(this.state.activeMode)??null}async destroy(){this.onModeChange$.clear(),this.onCursorChange$.clear(),await super.destroy()}};g.id="interaction-manager";let p=g;const C="interaction-manager",E={id:C,name:"Interaction Manager Plugin",version:"1.0.0",provides:["interaction-manager"],requires:[],optional:[],defaultConfig:{enabled:!0,exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]}}},v={activeMode:"pointerMode",defaultMode:"pointerMode",cursor:"auto",paused:!1,exclusionRules:{classes:[],dataAttributes:[]}},M=(e,d)=>{switch(d.type){case t:return{...e,activeMode:d.payload.mode};case o:return{...e,cursor:d.payload.cursor};case s:return{...e,paused:!0};case a:return{...e,paused:!1};case i:return{...e,defaultMode:d.payload.mode};case r:return{...e,exclusionRules:d.payload.rules};case n:return{...e,exclusionRules:{...e.exclusionRules,classes:[...e.exclusionRules.classes||[],d.payload.className].filter(((e,t,s)=>s.indexOf(e)===t))}};case l:return{...e,exclusionRules:{...e.exclusionRules,classes:(e.exclusionRules.classes||[]).filter((e=>e!==d.payload.className))}};case c:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:[...e.exclusionRules.dataAttributes||[],d.payload.attribute].filter(((e,t,s)=>s.indexOf(e)===t))}};case u:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:(e.exclusionRules.dataAttributes||[]).filter((e=>e!==d.payload.attribute))}};default:return e}},f={manifest:E,create:(e,t)=>new p(C,e,t),reducer:M,initialState:v};exports.INTERACTION_MANAGER_PLUGIN_ID=C,exports.InteractionManagerPlugin=p,exports.InteractionManagerPluginPackage=f,exports.initialState=v,exports.manifest=E,exports.reducer=M;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t="INTERACTION/ACTIVATE_MODE",s="INTERACTION/PAUSE",a="INTERACTION/RESUME",o="INTERACTION/SET_CURSOR",i="INTERACTION/SET_DEFAULT_MODE",r="INTERACTION/SET_EXCLUSION_RULES",n="INTERACTION/ADD_EXCLUSION_CLASS",l="INTERACTION/REMOVE_EXCLUSION_CLASS",c="INTERACTION/ADD_EXCLUSION_ATTRIBUTE",u="INTERACTION/REMOVE_EXCLUSION_ATTRIBUTE",d=e=>({type:r,payload:{rules:e}});const h="pointerMode",g=class extends e.BasePlugin{constructor(t,s,a){super(t,s),this.modes=new Map,this.cursorClaims=new Map,this.buckets=new Map,this.alwaysGlobal=new Set,this.alwaysPage=new Map,this.onModeChange$=e.createEmitter(),this.onHandlerChange$=e.createEmitter(),this.onCursorChange$=e.createEmitter(),this.onStateChange$=e.createBehaviorEmitter(),this.registerMode({id:h,scope:"page",exclusive:!1,cursor:"auto"}),this.setDefaultMode(h),this.activate(h),a.exclusionRules&&this.dispatch(d(a.exclusionRules))}async initialize(e){}buildCapability(){return{activate:e=>this.activate(e),onModeChange:this.onModeChange$.on,onCursorChange:this.onCursorChange$.on,onHandlerChange:this.onHandlerChange$.on,onStateChange:this.onStateChange$.on,getActiveMode:()=>this.state.activeMode,getActiveInteractionMode:()=>this.getActiveInteractionMode(),activateDefaultMode:()=>this.activate(this.state.defaultMode),registerMode:e=>this.registerMode(e),registerHandlers:e=>this.registerHandlers(e),registerAlways:e=>this.registerAlways(e),setCursor:(e,t,s=0)=>this.setCursor(e,t,s),removeCursor:e=>this.removeCursor(e),getCurrentCursor:()=>this.state.cursor,getHandlersForScope:e=>this.getHandlersForScope(e),activeModeIsExclusive:()=>this.activeModeIsExclusive(),pause:()=>this.dispatch({type:s}),resume:()=>this.dispatch({type:a}),isPaused:()=>this.registry.isDestroyed()||this.state.paused,setDefaultMode:e=>this.setDefaultMode(e),getDefaultMode:()=>this.state.defaultMode,getExclusionRules:()=>this.state.exclusionRules,setExclusionRules:e=>this.dispatch(d(e)),addExclusionClass:e=>this.dispatch((e=>({type:n,payload:{className:e}}))(e)),removeExclusionClass:e=>this.dispatch((e=>({type:l,payload:{className:e}}))(e)),addExclusionAttribute:e=>this.dispatch((e=>({type:c,payload:{attribute:e}}))(e)),removeExclusionAttribute:e=>this.dispatch((e=>({type:u,payload:{attribute:e}}))(e))}}activate(e){if(!this.modes.has(e))throw new Error(`[interaction] unknown mode '${e}'`);if(e===this.state.activeMode)return;const s=this.state.activeMode;this.cursorClaims.clear(),this.notifyHandlersInactive(s),this.dispatch((e=>({type:t,payload:{mode:e}}))(e)),this.emitCursor(),this.notifyHandlersActive(e),this.onModeChange$.emit({...this.state,activeMode:e})}setDefaultMode(e){if(!this.modes.has(e))throw new Error(`[interaction] cannot set unknown mode '${e}' as default`);this.dispatch({type:i,payload:{mode:e}})}notifyHandlersActive(e){this.alwaysGlobal.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)})),this.alwaysPage.forEach((t=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)}))}));const t=this.modes.get(e);if(!t)return;const s=this.buckets.get(e);s&&("global"===t.scope&&s.global.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)})),"page"===t.scope&&s.page.forEach(((t,s)=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveStart)||s.call(t,e)}))})))}notifyHandlersInactive(e){this.alwaysGlobal.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)})),this.alwaysPage.forEach((t=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)}))}));const t=this.modes.get(e);if(!t)return;const s=this.buckets.get(e);s&&("global"===t.scope&&s.global.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)})),"page"===t.scope&&s.page.forEach(((t,s)=>{t.forEach((t=>{var s;null==(s=t.onHandlerActiveEnd)||s.call(t,e)}))})))}registerMode(e){this.modes.set(e.id,e),this.buckets.has(e.id)||this.buckets.set(e.id,{global:new Set,page:new Map})}registerHandlers({modeId:e,handlers:t,pageIndex:s}){const a=Array.isArray(e)?e:[e],o=[];for(const i of a){const e=this.buckets.get(i);if(!e)throw new Error(`unknown mode '${i}'`);if(null==s)e.global.add(t);else{const a=e.page.get(s)??new Set;a.add(t),e.page.set(s,a)}o.push((()=>{if(null==s)e.global.delete(t);else{const a=e.page.get(s);a&&(a.delete(t),0===a.size&&e.page.delete(s))}}))}return this.onHandlerChange$.emit({...this.state}),()=>{o.forEach((e=>e())),this.onHandlerChange$.emit({...this.state})}}registerAlways({scope:e,handlers:t}){if("global"===e.type)return this.alwaysGlobal.add(t),this.onHandlerChange$.emit({...this.state}),()=>this.alwaysGlobal.delete(t);const s=this.alwaysPage.get(e.pageIndex)??new Set;return s.add(t),this.alwaysPage.set(e.pageIndex,s),this.onHandlerChange$.emit({...this.state}),()=>{s.delete(t),this.onHandlerChange$.emit({...this.state})}}getHandlersForScope(e){if(!this.state)return null;const t=this.modes.get(this.state.activeMode);if(!t)return null;const s=this.buckets.get(t.id);if(!s)return null;const a=(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 a of t)s[a]=(t,s,o)=>{var i;for(const r of e)null==(i=r[a])||i.call(r,t,s,o)};return s}([...e,...t]):null;if("global"===e.type){const e="global"===t.scope?s.global:new Set;return a(this.alwaysGlobal,e)}return a(this.alwaysPage.get(e.pageIndex)??new Set,"page"===t.scope?s.page.get(e.pageIndex)??new Set:new Set)}setCursor(e,t,s=0){this.cursorClaims.set(e,{cursor:t,priority:s}),this.emitCursor()}removeCursor(e){this.cursorClaims.delete(e),this.emitCursor()}emitCursor(){var e;const t=[...this.cursorClaims.values()].sort(((e,t)=>t.priority-e.priority))[0]??{cursor:(null==(e=this.modes.get(this.state.activeMode))?void 0:e.cursor)??"auto"};var s;t.cursor!==this.state.cursor&&(this.dispatch((s=t.cursor,{type:o,payload:{cursor:s}})),this.onCursorChange$.emit(t.cursor))}onStoreUpdated(e,t){this.onStateChange$.emit(t)}activeModeIsExclusive(){const e=this.modes.get(this.state.activeMode);return!!(null==e?void 0:e.exclusive)}getActiveInteractionMode(){return this.modes.get(this.state.activeMode)??null}async destroy(){this.onModeChange$.clear(),this.onCursorChange$.clear(),await super.destroy()}};g.id="interaction-manager";let p=g;const C="interaction-manager",E={id:C,name:"Interaction Manager Plugin",version:"1.0.0",provides:["interaction-manager"],requires:[],optional:[],defaultConfig:{enabled:!0,exclusionRules:{classes:[],dataAttributes:["data-no-interaction"]}}},v={activeMode:"pointerMode",defaultMode:"pointerMode",cursor:"auto",paused:!1,exclusionRules:{classes:[],dataAttributes:[]}},y=(e,d)=>{switch(d.type){case t:return{...e,activeMode:d.payload.mode};case o:return{...e,cursor:d.payload.cursor};case s:return{...e,paused:!0};case a:return{...e,paused:!1};case i:return{...e,defaultMode:d.payload.mode};case r:return{...e,exclusionRules:d.payload.rules};case n:return{...e,exclusionRules:{...e.exclusionRules,classes:[...e.exclusionRules.classes||[],d.payload.className].filter(((e,t,s)=>s.indexOf(e)===t))}};case l:return{...e,exclusionRules:{...e.exclusionRules,classes:(e.exclusionRules.classes||[]).filter((e=>e!==d.payload.className))}};case c:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:[...e.exclusionRules.dataAttributes||[],d.payload.attribute].filter(((e,t,s)=>s.indexOf(e)===t))}};case u:return{...e,exclusionRules:{...e.exclusionRules,dataAttributes:(e.exclusionRules.dataAttributes||[]).filter((e=>e!==d.payload.attribute))}};default:return e}},M={manifest:E,create:(e,t)=>new p(C,e,t),reducer:y,initialState:v};exports.INTERACTION_MANAGER_PLUGIN_ID=C,exports.InteractionManagerPlugin=p,exports.InteractionManagerPluginPackage=M,exports.initialState=v,exports.manifest=E,exports.reducer=y;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -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 } from './types';\n\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_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\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 interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: { mode: string };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: { cursor: string };\n}\n\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport const setExclusionRules = (rules: InteractionExclusionRules): SetExclusionRulesAction => ({\n type: SET_EXCLUSION_RULES,\n payload: { rules },\n});\n\nexport const addExclusionClass = (className: string): AddExclusionClassAction => ({\n type: ADD_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const removeExclusionClass = (className: string): RemoveExclusionClassAction => ({\n type: REMOVE_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const addExclusionAttribute = (attribute: string): AddExclusionAttributeAction => ({\n type: ADD_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const removeExclusionAttribute = (attribute: string): RemoveExclusionAttributeAction => ({\n type: REMOVE_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const activateMode = (mode: string): ActivateModeAction => ({\n type: ACTIVATE_MODE,\n payload: { mode },\n});\n\nexport const setCursor = (cursor: string): SetCursorAction => ({\n type: SET_CURSOR,\n payload: { cursor },\n});\n\nexport const setDefaultMode = (mode: string): SetDefaultModeAction => ({\n type: SET_DEFAULT_MODE,\n payload: { mode },\n});\n\nexport const pauseInteraction = (): PauseInteractionAction => ({\n type: PAUSE_INTERACTION,\n});\n\nexport const resumeInteraction = (): ResumeInteractionAction => ({\n type: RESUME_INTERACTION,\n});\n\nexport type InteractionManagerAction =\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction;\n","import { BasePlugin, createBehaviorEmitter, createEmitter, PluginRegistry } 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} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\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 (only once per viewer) */\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> {\n static readonly id = 'interaction-manager' as const;\n\n private modes = new Map<string, InteractionMode>();\n private cursorClaims = new Map<string, CursorClaim>();\n private buckets = new Map<string, ModeBuckets>();\n\n private alwaysGlobal = new Set<PointerEventHandlersWithLifecycle>();\n private alwaysPage = new Map<number, Set<PointerEventHandlersWithLifecycle>>();\n\n private readonly onModeChange$ = createEmitter<InteractionManagerState>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<string>();\n private readonly onStateChange$ = createBehaviorEmitter<InteractionManagerState>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.setDefaultMode(INITIAL_MODE);\n this.activate(INITIAL_MODE);\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {}\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n activate: (modeId: string) => this.activate(modeId),\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n getActiveMode: () => this.state.activeMode,\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activateDefaultMode: () => this.activate(this.state.defaultMode),\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setCursor: (token: string, cursor: string, priority = 0) =>\n this.setCursor(token, cursor, priority),\n removeCursor: (token: string) => this.removeCursor(token),\n getCurrentCursor: () => this.state.cursor,\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.dispatch(pauseInteraction()),\n resume: () => this.dispatch(resumeInteraction()),\n isPaused: () => this.state.paused,\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 }\n\n private activate(mode: string) {\n if (!this.modes.has(mode)) {\n throw new Error(`[interaction] unknown mode '${mode}'`);\n }\n if (mode === this.state.activeMode) return;\n\n const previousMode = this.state.activeMode;\n this.cursorClaims.clear(); // prevent cursor leaks\n\n this.notifyHandlersInactive(previousMode);\n\n this.dispatch(activateMode(mode));\n this.emitCursor();\n\n // Call lifecycle hooks for handlers going active\n this.notifyHandlersActive(mode);\n\n this.onModeChange$.emit({ ...this.state, activeMode: mode });\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 notifyHandlersActive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n if (!this.buckets.has(mode.id)) {\n this.buckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n\n /** ---------- pointer-handler handling ------------ */\n private registerHandlers({ modeId, handlers, pageIndex }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n for (const id of modeIds) {\n const bucket = this.buckets.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 // Create cleanup function for this specific mode\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 a cleanup function that removes handlers from all registered modes\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 this.alwaysGlobal.add(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n return () => this.alwaysGlobal.delete(handlers);\n }\n const set = this.alwaysPage.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n this.alwaysPage.set(scope.pageIndex, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n /** Returns the *merged* handler set that should be active for the given\n * provider (`global` wrapper or a single page wrapper).\n * – `alwaysGlobal` / `alwaysPage` are **always** active.\n * – Handlers that belong to the current mode are added on top **iff**\n * the mode’s own scope matches the provider’s scope. */\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n if (!this.state) return null;\n\n const mode = this.modes.get(this.state.activeMode);\n if (!mode) return null;\n\n const bucket = this.buckets.get(mode.id);\n if (!bucket) return null;\n\n /** helper – merge two handler sets into one object (or `null` if both are empty) */\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n /* ───────────────────── GLOBAL PROVIDER ─────────────────────── */\n if (scope.type === 'global') {\n const modeSpecific =\n mode.scope === 'global' // only include mode handlers if the\n ? bucket.global // mode itself is global-scoped\n : new Set<PointerEventHandlers>();\n return mergeSets(this.alwaysGlobal, modeSpecific);\n }\n\n /* ─────────────────────── PAGE PROVIDER ──────────────────────── */\n const alwaysPageSet = this.alwaysPage.get(scope.pageIndex) ?? new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>(); // global-scoped mode → ignore page buckets\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n /** ---------- cursor handling --------------------- */\n private setCursor(token: string, cursor: string, priority = 0) {\n this.cursorClaims.set(token, { cursor, priority });\n this.emitCursor();\n }\n private removeCursor(token: string) {\n this.cursorClaims.delete(token);\n this.emitCursor();\n }\n\n private emitCursor() {\n /* pick highest priority claim, else mode baseline */\n const top = [...this.cursorClaims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(this.state.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== this.state.cursor) {\n this.dispatch(setCursor(top.cursor));\n this.onCursorChange$.emit(top.cursor);\n }\n }\n\n override onStoreUpdated(_: InteractionManagerState, newState: InteractionManagerState): void {\n this.onStateChange$.emit(newState);\n }\n\n private activeModeIsExclusive(): boolean {\n const mode = this.modes.get(this.state.activeMode);\n return !!mode?.exclusive;\n }\n\n private getActiveInteractionMode(): InteractionMode | null {\n return this.modes.get(this.state.activeMode) ?? null;\n }\n\n // keep emitter clean\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.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 ACTIVATE_MODE,\n SET_DEFAULT_MODE,\n InteractionManagerAction,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\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 } from './types';\n\nexport const initialState: InteractionManagerState = {\n activeMode: 'pointerMode',\n defaultMode: 'pointerMode',\n cursor: 'auto',\n paused: false,\n exclusionRules: {\n classes: [],\n dataAttributes: [],\n },\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state,\n action,\n) => {\n switch (action.type) {\n case ACTIVATE_MODE:\n return {\n ...state,\n activeMode: action.payload.mode,\n };\n case SET_CURSOR:\n return {\n ...state,\n cursor: action.payload.cursor,\n };\n case PAUSE_INTERACTION:\n return {\n ...state,\n paused: true,\n };\n case RESUME_INTERACTION:\n return {\n ...state,\n paused: false,\n };\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\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 ), // Remove duplicates\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 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":["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","setExclusionRules","rules","type","payload","INITIAL_MODE","_InteractionManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","modes","Map","cursorClaims","buckets","alwaysGlobal","Set","alwaysPage","onModeChange$","createEmitter","onHandlerChange$","onCursorChange$","onStateChange$","createBehaviorEmitter","registerMode","scope","exclusive","cursor","setDefaultMode","activate","exclusionRules","dispatch","initialize","_","buildCapability","modeId","onModeChange","on","onCursorChange","onHandlerChange","onStateChange","getActiveMode","state","activeMode","getActiveInteractionMode","activateDefaultMode","defaultMode","mode","registerHandlers","options","registerAlways","setCursor","token","priority","removeCursor","getCurrentCursor","getHandlersForScope","activeModeIsExclusive","pause","resume","isPaused","paused","getDefaultMode","getExclusionRules","addExclusionClass","className","removeExclusionClass","addExclusionAttribute","attribute","removeExclusionAttribute","has","Error","previousMode","clear","notifyHandlersInactive","activateMode","emitCursor","notifyHandlersActive","emit","forEach","handler","_a","onHandlerActiveStart","call","handlerSet","get","bucket","global","page","pageIndex","onHandlerActiveEnd","set","handlers","modeIds","Array","isArray","cleanupFunctions","add","push","delete","size","cleanup","mergeSets","a","b","list","keys","out","k","evt","nativeEvt","h","mergeHandlers","modeSpecific","top","values","sort","onStoreUpdated","newState","destroy","InteractionManagerPlugin","INTERACTION_MANAGER_PLUGIN_ID","manifest","name","version","provides","requires","optional","defaultConfig","enabled","classes","dataAttributes","initialState","reducer","action","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 } from './types';\n\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_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\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 interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: { mode: string };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: { cursor: string };\n}\n\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport const setExclusionRules = (rules: InteractionExclusionRules): SetExclusionRulesAction => ({\n type: SET_EXCLUSION_RULES,\n payload: { rules },\n});\n\nexport const addExclusionClass = (className: string): AddExclusionClassAction => ({\n type: ADD_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const removeExclusionClass = (className: string): RemoveExclusionClassAction => ({\n type: REMOVE_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const addExclusionAttribute = (attribute: string): AddExclusionAttributeAction => ({\n type: ADD_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const removeExclusionAttribute = (attribute: string): RemoveExclusionAttributeAction => ({\n type: REMOVE_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const activateMode = (mode: string): ActivateModeAction => ({\n type: ACTIVATE_MODE,\n payload: { mode },\n});\n\nexport const setCursor = (cursor: string): SetCursorAction => ({\n type: SET_CURSOR,\n payload: { cursor },\n});\n\nexport const setDefaultMode = (mode: string): SetDefaultModeAction => ({\n type: SET_DEFAULT_MODE,\n payload: { mode },\n});\n\nexport const pauseInteraction = (): PauseInteractionAction => ({\n type: PAUSE_INTERACTION,\n});\n\nexport const resumeInteraction = (): ResumeInteractionAction => ({\n type: RESUME_INTERACTION,\n});\n\nexport type InteractionManagerAction =\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction;\n","import { BasePlugin, createBehaviorEmitter, createEmitter, PluginRegistry } 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} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\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 (only once per viewer) */\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> {\n static readonly id = 'interaction-manager' as const;\n\n private modes = new Map<string, InteractionMode>();\n private cursorClaims = new Map<string, CursorClaim>();\n private buckets = new Map<string, ModeBuckets>();\n\n private alwaysGlobal = new Set<PointerEventHandlersWithLifecycle>();\n private alwaysPage = new Map<number, Set<PointerEventHandlersWithLifecycle>>();\n\n private readonly onModeChange$ = createEmitter<InteractionManagerState>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<string>();\n private readonly onStateChange$ = createBehaviorEmitter<InteractionManagerState>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.setDefaultMode(INITIAL_MODE);\n this.activate(INITIAL_MODE);\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {}\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n activate: (modeId: string) => this.activate(modeId),\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n getActiveMode: () => this.state.activeMode,\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activateDefaultMode: () => this.activate(this.state.defaultMode),\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setCursor: (token: string, cursor: string, priority = 0) =>\n this.setCursor(token, cursor, priority),\n removeCursor: (token: string) => this.removeCursor(token),\n getCurrentCursor: () => this.state.cursor,\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.dispatch(pauseInteraction()),\n resume: () => this.dispatch(resumeInteraction()),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.state.paused,\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 }\n\n private activate(mode: string) {\n if (!this.modes.has(mode)) {\n throw new Error(`[interaction] unknown mode '${mode}'`);\n }\n if (mode === this.state.activeMode) return;\n\n const previousMode = this.state.activeMode;\n this.cursorClaims.clear(); // prevent cursor leaks\n\n this.notifyHandlersInactive(previousMode);\n\n this.dispatch(activateMode(mode));\n this.emitCursor();\n\n // Call lifecycle hooks for handlers going active\n this.notifyHandlersActive(mode);\n\n this.onModeChange$.emit({ ...this.state, activeMode: mode });\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 notifyHandlersActive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n if (!this.buckets.has(mode.id)) {\n this.buckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n\n /** ---------- pointer-handler handling ------------ */\n private registerHandlers({ modeId, handlers, pageIndex }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n for (const id of modeIds) {\n const bucket = this.buckets.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 // Create cleanup function for this specific mode\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 a cleanup function that removes handlers from all registered modes\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 this.alwaysGlobal.add(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n return () => this.alwaysGlobal.delete(handlers);\n }\n const set = this.alwaysPage.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n this.alwaysPage.set(scope.pageIndex, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n /** Returns the *merged* handler set that should be active for the given\n * provider (`global` wrapper or a single page wrapper).\n * – `alwaysGlobal` / `alwaysPage` are **always** active.\n * – Handlers that belong to the current mode are added on top **iff**\n * the mode’s own scope matches the provider’s scope. */\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n if (!this.state) return null;\n\n const mode = this.modes.get(this.state.activeMode);\n if (!mode) return null;\n\n const bucket = this.buckets.get(mode.id);\n if (!bucket) return null;\n\n /** helper – merge two handler sets into one object (or `null` if both are empty) */\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n /* ───────────────────── GLOBAL PROVIDER ─────────────────────── */\n if (scope.type === 'global') {\n const modeSpecific =\n mode.scope === 'global' // only include mode handlers if the\n ? bucket.global // mode itself is global-scoped\n : new Set<PointerEventHandlers>();\n return mergeSets(this.alwaysGlobal, modeSpecific);\n }\n\n /* ─────────────────────── PAGE PROVIDER ──────────────────────── */\n const alwaysPageSet = this.alwaysPage.get(scope.pageIndex) ?? new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>(); // global-scoped mode → ignore page buckets\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n /** ---------- cursor handling --------------------- */\n private setCursor(token: string, cursor: string, priority = 0) {\n this.cursorClaims.set(token, { cursor, priority });\n this.emitCursor();\n }\n private removeCursor(token: string) {\n this.cursorClaims.delete(token);\n this.emitCursor();\n }\n\n private emitCursor() {\n /* pick highest priority claim, else mode baseline */\n const top = [...this.cursorClaims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(this.state.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== this.state.cursor) {\n this.dispatch(setCursor(top.cursor));\n this.onCursorChange$.emit(top.cursor);\n }\n }\n\n override onStoreUpdated(_: InteractionManagerState, newState: InteractionManagerState): void {\n this.onStateChange$.emit(newState);\n }\n\n private activeModeIsExclusive(): boolean {\n const mode = this.modes.get(this.state.activeMode);\n return !!mode?.exclusive;\n }\n\n private getActiveInteractionMode(): InteractionMode | null {\n return this.modes.get(this.state.activeMode) ?? null;\n }\n\n // keep emitter clean\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.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 ACTIVATE_MODE,\n SET_DEFAULT_MODE,\n InteractionManagerAction,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\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 } from './types';\n\nexport const initialState: InteractionManagerState = {\n activeMode: 'pointerMode',\n defaultMode: 'pointerMode',\n cursor: 'auto',\n paused: false,\n exclusionRules: {\n classes: [],\n dataAttributes: [],\n },\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state,\n action,\n) => {\n switch (action.type) {\n case ACTIVATE_MODE:\n return {\n ...state,\n activeMode: action.payload.mode,\n };\n case SET_CURSOR:\n return {\n ...state,\n cursor: action.payload.cursor,\n };\n case PAUSE_INTERACTION:\n return {\n ...state,\n paused: true,\n };\n case RESUME_INTERACTION:\n return {\n ...state,\n paused: false,\n };\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\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 ), // Remove duplicates\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 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":["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","setExclusionRules","rules","type","payload","INITIAL_MODE","_InteractionManagerPlugin","BasePlugin","constructor","id","registry","config","super","this","modes","Map","cursorClaims","buckets","alwaysGlobal","Set","alwaysPage","onModeChange$","createEmitter","onHandlerChange$","onCursorChange$","onStateChange$","createBehaviorEmitter","registerMode","scope","exclusive","cursor","setDefaultMode","activate","exclusionRules","dispatch","initialize","_","buildCapability","modeId","onModeChange","on","onCursorChange","onHandlerChange","onStateChange","getActiveMode","state","activeMode","getActiveInteractionMode","activateDefaultMode","defaultMode","mode","registerHandlers","options","registerAlways","setCursor","token","priority","removeCursor","getCurrentCursor","getHandlersForScope","activeModeIsExclusive","pause","resume","isPaused","isDestroyed","paused","getDefaultMode","getExclusionRules","addExclusionClass","className","removeExclusionClass","addExclusionAttribute","attribute","removeExclusionAttribute","has","Error","previousMode","clear","notifyHandlersInactive","activateMode","emitCursor","notifyHandlersActive","emit","forEach","handler","_a","onHandlerActiveStart","call","handlerSet","get","bucket","global","page","pageIndex","onHandlerActiveEnd","set","handlers","modeIds","Array","isArray","cleanupFunctions","add","push","delete","size","cleanup","mergeSets","a","b","list","keys","out","k","evt","nativeEvt","h","mergeHandlers","modeSpecific","top","values","sort","onStoreUpdated","newState","destroy","InteractionManagerPlugin","INTERACTION_MANAGER_PLUGIN_ID","manifest","name","version","provides","requires","optional","defaultConfig","enabled","classes","dataAttributes","initialState","reducer","action","filter","v","i","indexOf","c","InteractionManagerPluginPackage","create"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -120,7 +120,8 @@ const _InteractionManagerPlugin = class _InteractionManagerPlugin extends BasePl
120
120
  activeModeIsExclusive: () => this.activeModeIsExclusive(),
121
121
  pause: () => this.dispatch(pauseInteraction()),
122
122
  resume: () => this.dispatch(resumeInteraction()),
123
- isPaused: () => this.state.paused,
123
+ // Treat a destroyed registry as "paused" so late DOM events are ignored during teardown.
124
+ isPaused: () => this.registry.isDestroyed() || this.state.paused,
124
125
  setDefaultMode: (id) => this.setDefaultMode(id),
125
126
  getDefaultMode: () => this.state.defaultMode,
126
127
  getExclusionRules: () => this.state.exclusionRules,
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 } from './types';\n\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_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\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 interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: { mode: string };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: { cursor: string };\n}\n\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport const setExclusionRules = (rules: InteractionExclusionRules): SetExclusionRulesAction => ({\n type: SET_EXCLUSION_RULES,\n payload: { rules },\n});\n\nexport const addExclusionClass = (className: string): AddExclusionClassAction => ({\n type: ADD_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const removeExclusionClass = (className: string): RemoveExclusionClassAction => ({\n type: REMOVE_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const addExclusionAttribute = (attribute: string): AddExclusionAttributeAction => ({\n type: ADD_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const removeExclusionAttribute = (attribute: string): RemoveExclusionAttributeAction => ({\n type: REMOVE_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const activateMode = (mode: string): ActivateModeAction => ({\n type: ACTIVATE_MODE,\n payload: { mode },\n});\n\nexport const setCursor = (cursor: string): SetCursorAction => ({\n type: SET_CURSOR,\n payload: { cursor },\n});\n\nexport const setDefaultMode = (mode: string): SetDefaultModeAction => ({\n type: SET_DEFAULT_MODE,\n payload: { mode },\n});\n\nexport const pauseInteraction = (): PauseInteractionAction => ({\n type: PAUSE_INTERACTION,\n});\n\nexport const resumeInteraction = (): ResumeInteractionAction => ({\n type: RESUME_INTERACTION,\n});\n\nexport type InteractionManagerAction =\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction;\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 { BasePlugin, createBehaviorEmitter, createEmitter, PluginRegistry } 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} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\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 (only once per viewer) */\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> {\n static readonly id = 'interaction-manager' as const;\n\n private modes = new Map<string, InteractionMode>();\n private cursorClaims = new Map<string, CursorClaim>();\n private buckets = new Map<string, ModeBuckets>();\n\n private alwaysGlobal = new Set<PointerEventHandlersWithLifecycle>();\n private alwaysPage = new Map<number, Set<PointerEventHandlersWithLifecycle>>();\n\n private readonly onModeChange$ = createEmitter<InteractionManagerState>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<string>();\n private readonly onStateChange$ = createBehaviorEmitter<InteractionManagerState>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.setDefaultMode(INITIAL_MODE);\n this.activate(INITIAL_MODE);\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {}\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n activate: (modeId: string) => this.activate(modeId),\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n getActiveMode: () => this.state.activeMode,\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activateDefaultMode: () => this.activate(this.state.defaultMode),\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setCursor: (token: string, cursor: string, priority = 0) =>\n this.setCursor(token, cursor, priority),\n removeCursor: (token: string) => this.removeCursor(token),\n getCurrentCursor: () => this.state.cursor,\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.dispatch(pauseInteraction()),\n resume: () => this.dispatch(resumeInteraction()),\n isPaused: () => this.state.paused,\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 }\n\n private activate(mode: string) {\n if (!this.modes.has(mode)) {\n throw new Error(`[interaction] unknown mode '${mode}'`);\n }\n if (mode === this.state.activeMode) return;\n\n const previousMode = this.state.activeMode;\n this.cursorClaims.clear(); // prevent cursor leaks\n\n this.notifyHandlersInactive(previousMode);\n\n this.dispatch(activateMode(mode));\n this.emitCursor();\n\n // Call lifecycle hooks for handlers going active\n this.notifyHandlersActive(mode);\n\n this.onModeChange$.emit({ ...this.state, activeMode: mode });\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 notifyHandlersActive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n if (!this.buckets.has(mode.id)) {\n this.buckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n\n /** ---------- pointer-handler handling ------------ */\n private registerHandlers({ modeId, handlers, pageIndex }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n for (const id of modeIds) {\n const bucket = this.buckets.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 // Create cleanup function for this specific mode\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 a cleanup function that removes handlers from all registered modes\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 this.alwaysGlobal.add(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n return () => this.alwaysGlobal.delete(handlers);\n }\n const set = this.alwaysPage.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n this.alwaysPage.set(scope.pageIndex, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n /** Returns the *merged* handler set that should be active for the given\n * provider (`global` wrapper or a single page wrapper).\n * – `alwaysGlobal` / `alwaysPage` are **always** active.\n * – Handlers that belong to the current mode are added on top **iff**\n * the mode’s own scope matches the provider’s scope. */\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n if (!this.state) return null;\n\n const mode = this.modes.get(this.state.activeMode);\n if (!mode) return null;\n\n const bucket = this.buckets.get(mode.id);\n if (!bucket) return null;\n\n /** helper – merge two handler sets into one object (or `null` if both are empty) */\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n /* ───────────────────── GLOBAL PROVIDER ─────────────────────── */\n if (scope.type === 'global') {\n const modeSpecific =\n mode.scope === 'global' // only include mode handlers if the\n ? bucket.global // mode itself is global-scoped\n : new Set<PointerEventHandlers>();\n return mergeSets(this.alwaysGlobal, modeSpecific);\n }\n\n /* ─────────────────────── PAGE PROVIDER ──────────────────────── */\n const alwaysPageSet = this.alwaysPage.get(scope.pageIndex) ?? new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>(); // global-scoped mode → ignore page buckets\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n /** ---------- cursor handling --------------------- */\n private setCursor(token: string, cursor: string, priority = 0) {\n this.cursorClaims.set(token, { cursor, priority });\n this.emitCursor();\n }\n private removeCursor(token: string) {\n this.cursorClaims.delete(token);\n this.emitCursor();\n }\n\n private emitCursor() {\n /* pick highest priority claim, else mode baseline */\n const top = [...this.cursorClaims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(this.state.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== this.state.cursor) {\n this.dispatch(setCursor(top.cursor));\n this.onCursorChange$.emit(top.cursor);\n }\n }\n\n override onStoreUpdated(_: InteractionManagerState, newState: InteractionManagerState): void {\n this.onStateChange$.emit(newState);\n }\n\n private activeModeIsExclusive(): boolean {\n const mode = this.modes.get(this.state.activeMode);\n return !!mode?.exclusive;\n }\n\n private getActiveInteractionMode(): InteractionMode | null {\n return this.modes.get(this.state.activeMode) ?? null;\n }\n\n // keep emitter clean\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.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 ACTIVATE_MODE,\n SET_DEFAULT_MODE,\n InteractionManagerAction,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\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 } from './types';\n\nexport const initialState: InteractionManagerState = {\n activeMode: 'pointerMode',\n defaultMode: 'pointerMode',\n cursor: 'auto',\n paused: false,\n exclusionRules: {\n classes: [],\n dataAttributes: [],\n },\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state,\n action,\n) => {\n switch (action.type) {\n case ACTIVATE_MODE:\n return {\n ...state,\n activeMode: action.payload.mode,\n };\n case SET_CURSOR:\n return {\n ...state,\n cursor: action.payload.cursor,\n };\n case PAUSE_INTERACTION:\n return {\n ...state,\n paused: true,\n };\n case RESUME_INTERACTION:\n return {\n ...state,\n paused: false,\n };\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\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 ), // Remove duplicates\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 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":[],"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 } from './types';\n\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_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\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 interface ActivateModeAction extends Action {\n type: typeof ACTIVATE_MODE;\n payload: { mode: string };\n}\n\nexport interface PauseInteractionAction extends Action {\n type: typeof PAUSE_INTERACTION;\n}\n\nexport interface ResumeInteractionAction extends Action {\n type: typeof RESUME_INTERACTION;\n}\n\nexport interface SetCursorAction extends Action {\n type: typeof SET_CURSOR;\n payload: { cursor: string };\n}\n\nexport interface SetDefaultModeAction extends Action {\n type: typeof SET_DEFAULT_MODE;\n payload: { mode: string };\n}\n\nexport const setExclusionRules = (rules: InteractionExclusionRules): SetExclusionRulesAction => ({\n type: SET_EXCLUSION_RULES,\n payload: { rules },\n});\n\nexport const addExclusionClass = (className: string): AddExclusionClassAction => ({\n type: ADD_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const removeExclusionClass = (className: string): RemoveExclusionClassAction => ({\n type: REMOVE_EXCLUSION_CLASS,\n payload: { className },\n});\n\nexport const addExclusionAttribute = (attribute: string): AddExclusionAttributeAction => ({\n type: ADD_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const removeExclusionAttribute = (attribute: string): RemoveExclusionAttributeAction => ({\n type: REMOVE_EXCLUSION_ATTRIBUTE,\n payload: { attribute },\n});\n\nexport const activateMode = (mode: string): ActivateModeAction => ({\n type: ACTIVATE_MODE,\n payload: { mode },\n});\n\nexport const setCursor = (cursor: string): SetCursorAction => ({\n type: SET_CURSOR,\n payload: { cursor },\n});\n\nexport const setDefaultMode = (mode: string): SetDefaultModeAction => ({\n type: SET_DEFAULT_MODE,\n payload: { mode },\n});\n\nexport const pauseInteraction = (): PauseInteractionAction => ({\n type: PAUSE_INTERACTION,\n});\n\nexport const resumeInteraction = (): ResumeInteractionAction => ({\n type: RESUME_INTERACTION,\n});\n\nexport type InteractionManagerAction =\n | SetExclusionRulesAction\n | AddExclusionClassAction\n | RemoveExclusionClassAction\n | AddExclusionAttributeAction\n | RemoveExclusionAttributeAction\n | ActivateModeAction\n | PauseInteractionAction\n | ResumeInteractionAction\n | SetCursorAction\n | SetDefaultModeAction;\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 { BasePlugin, createBehaviorEmitter, createEmitter, PluginRegistry } 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} from './types';\nimport {\n activateMode,\n addExclusionAttribute,\n addExclusionClass,\n pauseInteraction,\n removeExclusionAttribute,\n removeExclusionClass,\n resumeInteraction,\n setCursor,\n setDefaultMode,\n setExclusionRules,\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 (only once per viewer) */\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> {\n static readonly id = 'interaction-manager' as const;\n\n private modes = new Map<string, InteractionMode>();\n private cursorClaims = new Map<string, CursorClaim>();\n private buckets = new Map<string, ModeBuckets>();\n\n private alwaysGlobal = new Set<PointerEventHandlersWithLifecycle>();\n private alwaysPage = new Map<number, Set<PointerEventHandlersWithLifecycle>>();\n\n private readonly onModeChange$ = createEmitter<InteractionManagerState>();\n private readonly onHandlerChange$ = createEmitter<InteractionManagerState>();\n private readonly onCursorChange$ = createEmitter<string>();\n private readonly onStateChange$ = createBehaviorEmitter<InteractionManagerState>();\n\n constructor(id: string, registry: PluginRegistry, config: InteractionManagerPluginConfig) {\n super(id, registry);\n\n this.registerMode({\n id: INITIAL_MODE,\n scope: 'page',\n exclusive: false,\n cursor: 'auto',\n });\n\n this.setDefaultMode(INITIAL_MODE);\n this.activate(INITIAL_MODE);\n if (config.exclusionRules) {\n this.dispatch(setExclusionRules(config.exclusionRules));\n }\n }\n\n async initialize(_: InteractionManagerPluginConfig): Promise<void> {}\n\n protected buildCapability(): InteractionManagerCapability {\n return {\n activate: (modeId: string) => this.activate(modeId),\n onModeChange: this.onModeChange$.on,\n onCursorChange: this.onCursorChange$.on,\n onHandlerChange: this.onHandlerChange$.on,\n onStateChange: this.onStateChange$.on,\n getActiveMode: () => this.state.activeMode,\n getActiveInteractionMode: () => this.getActiveInteractionMode(),\n activateDefaultMode: () => this.activate(this.state.defaultMode),\n registerMode: (mode: InteractionMode) => this.registerMode(mode),\n registerHandlers: (options: RegisterHandlersOptions) => this.registerHandlers(options),\n registerAlways: (options: RegisterAlwaysOptions) => this.registerAlways(options),\n setCursor: (token: string, cursor: string, priority = 0) =>\n this.setCursor(token, cursor, priority),\n removeCursor: (token: string) => this.removeCursor(token),\n getCurrentCursor: () => this.state.cursor,\n getHandlersForScope: (scope: InteractionScope) => this.getHandlersForScope(scope),\n activeModeIsExclusive: () => this.activeModeIsExclusive(),\n pause: () => this.dispatch(pauseInteraction()),\n resume: () => this.dispatch(resumeInteraction()),\n // Treat a destroyed registry as \"paused\" so late DOM events are ignored during teardown.\n isPaused: () => this.registry.isDestroyed() || this.state.paused,\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 }\n\n private activate(mode: string) {\n if (!this.modes.has(mode)) {\n throw new Error(`[interaction] unknown mode '${mode}'`);\n }\n if (mode === this.state.activeMode) return;\n\n const previousMode = this.state.activeMode;\n this.cursorClaims.clear(); // prevent cursor leaks\n\n this.notifyHandlersInactive(previousMode);\n\n this.dispatch(activateMode(mode));\n this.emitCursor();\n\n // Call lifecycle hooks for handlers going active\n this.notifyHandlersActive(mode);\n\n this.onModeChange$.emit({ ...this.state, activeMode: mode });\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 notifyHandlersActive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveStart?.(modeId);\n });\n });\n }\n }\n\n private notifyHandlersInactive(modeId: string) {\n this.alwaysGlobal.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n\n this.alwaysPage.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 bucket = this.buckets.get(modeId);\n if (!bucket) return;\n\n // Notify global handlers if mode is global\n if (mode.scope === 'global') {\n bucket.global.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n }\n\n // Notify page handlers if mode is page\n if (mode.scope === 'page') {\n bucket.page.forEach((handlerSet, pageIndex) => {\n handlerSet.forEach((handler) => {\n handler.onHandlerActiveEnd?.(modeId);\n });\n });\n }\n }\n\n private registerMode(mode: InteractionMode) {\n this.modes.set(mode.id, mode);\n if (!this.buckets.has(mode.id)) {\n this.buckets.set(mode.id, { global: new Set(), page: new Map() });\n }\n }\n\n /** ---------- pointer-handler handling ------------ */\n private registerHandlers({ modeId, handlers, pageIndex }: RegisterHandlersOptions): () => void {\n const modeIds = Array.isArray(modeId) ? modeId : [modeId];\n const cleanupFunctions: (() => void)[] = [];\n\n for (const id of modeIds) {\n const bucket = this.buckets.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 // Create cleanup function for this specific mode\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 a cleanup function that removes handlers from all registered modes\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 this.alwaysGlobal.add(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n return () => this.alwaysGlobal.delete(handlers);\n }\n const set = this.alwaysPage.get(scope.pageIndex) ?? new Set();\n set.add(handlers);\n this.alwaysPage.set(scope.pageIndex, set);\n this.onHandlerChange$.emit({ ...this.state });\n return () => {\n set.delete(handlers);\n this.onHandlerChange$.emit({ ...this.state });\n };\n }\n\n /** Returns the *merged* handler set that should be active for the given\n * provider (`global` wrapper or a single page wrapper).\n * – `alwaysGlobal` / `alwaysPage` are **always** active.\n * – Handlers that belong to the current mode are added on top **iff**\n * the mode’s own scope matches the provider’s scope. */\n private getHandlersForScope(scope: InteractionScope): PointerEventHandlers | null {\n if (!this.state) return null;\n\n const mode = this.modes.get(this.state.activeMode);\n if (!mode) return null;\n\n const bucket = this.buckets.get(mode.id);\n if (!bucket) return null;\n\n /** helper – merge two handler sets into one object (or `null` if both are empty) */\n const mergeSets = (a: HandlerSet, b: HandlerSet) =>\n a.size || b.size ? mergeHandlers([...a, ...b]) : null;\n\n /* ───────────────────── GLOBAL PROVIDER ─────────────────────── */\n if (scope.type === 'global') {\n const modeSpecific =\n mode.scope === 'global' // only include mode handlers if the\n ? bucket.global // mode itself is global-scoped\n : new Set<PointerEventHandlers>();\n return mergeSets(this.alwaysGlobal, modeSpecific);\n }\n\n /* ─────────────────────── PAGE PROVIDER ──────────────────────── */\n const alwaysPageSet = this.alwaysPage.get(scope.pageIndex) ?? new Set<PointerEventHandlers>();\n const modePageSet =\n mode.scope === 'page'\n ? (bucket.page.get(scope.pageIndex) ?? new Set<PointerEventHandlers>())\n : new Set<PointerEventHandlers>(); // global-scoped mode → ignore page buckets\n\n return mergeSets(alwaysPageSet, modePageSet);\n }\n\n /** ---------- cursor handling --------------------- */\n private setCursor(token: string, cursor: string, priority = 0) {\n this.cursorClaims.set(token, { cursor, priority });\n this.emitCursor();\n }\n private removeCursor(token: string) {\n this.cursorClaims.delete(token);\n this.emitCursor();\n }\n\n private emitCursor() {\n /* pick highest priority claim, else mode baseline */\n const top = [...this.cursorClaims.values()].sort((a, b) => b.priority - a.priority)[0] ?? {\n cursor: this.modes.get(this.state.activeMode)?.cursor ?? 'auto',\n };\n\n if (top.cursor !== this.state.cursor) {\n this.dispatch(setCursor(top.cursor));\n this.onCursorChange$.emit(top.cursor);\n }\n }\n\n override onStoreUpdated(_: InteractionManagerState, newState: InteractionManagerState): void {\n this.onStateChange$.emit(newState);\n }\n\n private activeModeIsExclusive(): boolean {\n const mode = this.modes.get(this.state.activeMode);\n return !!mode?.exclusive;\n }\n\n private getActiveInteractionMode(): InteractionMode | null {\n return this.modes.get(this.state.activeMode) ?? null;\n }\n\n // keep emitter clean\n async destroy(): Promise<void> {\n this.onModeChange$.clear();\n this.onCursorChange$.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 ACTIVATE_MODE,\n SET_DEFAULT_MODE,\n InteractionManagerAction,\n PAUSE_INTERACTION,\n RESUME_INTERACTION,\n SET_CURSOR,\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 } from './types';\n\nexport const initialState: InteractionManagerState = {\n activeMode: 'pointerMode',\n defaultMode: 'pointerMode',\n cursor: 'auto',\n paused: false,\n exclusionRules: {\n classes: [],\n dataAttributes: [],\n },\n};\n\nexport const reducer: Reducer<InteractionManagerState, InteractionManagerAction> = (\n state,\n action,\n) => {\n switch (action.type) {\n case ACTIVATE_MODE:\n return {\n ...state,\n activeMode: action.payload.mode,\n };\n case SET_CURSOR:\n return {\n ...state,\n cursor: action.payload.cursor,\n };\n case PAUSE_INTERACTION:\n return {\n ...state,\n paused: true,\n };\n case RESUME_INTERACTION:\n return {\n ...state,\n paused: false,\n };\n case SET_DEFAULT_MODE:\n return {\n ...state,\n defaultMode: action.payload.mode,\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 ), // Remove duplicates\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 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":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/plugin-interaction-manager",
3
- "version": "1.3.14",
3
+ "version": "1.3.16",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.cjs",
@@ -29,20 +29,20 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@embedpdf/models": "1.3.14"
32
+ "@embedpdf/models": "1.3.16"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/react": "^18.2.0",
36
36
  "typescript": "^5.0.0",
37
37
  "@embedpdf/build": "1.0.1",
38
- "@embedpdf/core": "1.3.14"
38
+ "@embedpdf/core": "1.3.16"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=16.8.0",
42
42
  "react-dom": ">=16.8.0",
43
43
  "preact": "^10.26.4",
44
44
  "vue": ">=3.2.0",
45
- "@embedpdf/core": "1.3.14"
45
+ "@embedpdf/core": "1.3.16"
46
46
  },
47
47
  "files": [
48
48
  "dist",