@embedpdf/plugin-render 1.3.11 → 1.3.12

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r=require("@embedpdf/models"),n=require("@embedpdf/core/vue"),t=require("@embedpdf/plugin-render"),l=()=>n.usePlugin(t.RenderPlugin.id),a=()=>n.useCapability(t.RenderPlugin.id),o=["src"],d=e.defineComponent({__name:"render-layer",props:{pageIndex:{},scale:{},scaleFactor:{},dpr:{}},setup(n){const t=n,d=e.computed((()=>t.scale??t.scaleFactor??1)),{provides:u}=a(),{plugin:i}=l(),c=e.ref(null),s=e.ref(0);let p=null,g=null;function m(){g&&!p&&g.abort({code:r.PdfErrorCode.Cancelled,message:"canceled render task"})}function f(){p&&(URL.revokeObjectURL(p),p=null)}return e.watch(i,((e,r,n)=>{if(e){n(e.onRefreshPages((e=>{e.includes(t.pageIndex)&&s.value++})))}}),{immediate:!0}),e.watch((()=>[t.pageIndex,d.value,t.dpr,u.value,s.value]),(function(){if(m(),f(),g=null,!u.value)return;const e=u.value.renderPage({pageIndex:t.pageIndex,options:{scaleFactor:d.value,dpr:t.dpr||window.devicePixelRatio}});g=e,e.wait((e=>{p=URL.createObjectURL(e),c.value=p,g=null}),r.ignore)}),{immediate:!0}),e.onBeforeUnmount((()=>{m(),f()})),(r,n)=>c.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:c.value,style:{width:"100%",height:"100%"},onLoad:f},null,40,o)):e.createCommentVNode("",!0)}});exports.RenderLayer=d,exports.useRenderCapability=a,exports.useRenderPlugin=l,Object.keys(t).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})}));
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),r=require("@embedpdf/models"),n=require("@embedpdf/core/vue"),t=require("@embedpdf/plugin-render"),l=()=>n.usePlugin(t.RenderPlugin.id),a=()=>n.useCapability(t.RenderPlugin.id),o=["src"],u=e.defineComponent({__name:"render-layer",props:{pageIndex:{},scale:{},scaleFactor:{},dpr:{}},setup(n){const t=n,u=e.computed((()=>t.scale??t.scaleFactor??1)),{provides:d}=a(),{plugin:c}=l(),i=e.ref(null),s=e.ref(0);let p=null,f=null;function g(){f&&!p&&f.abort({code:r.PdfErrorCode.Cancelled,message:"canceled render task"})}function v(){p&&(URL.revokeObjectURL(p),p=null)}return e.watchEffect((e=>{if(!c.value)return;e(c.value.onRefreshPages((e=>{e.includes(t.pageIndex)&&s.value++})))})),e.watch((()=>[t.pageIndex,u.value,t.dpr,d.value,s.value]),(function(){if(g(),v(),f=null,!d.value)return;const e=d.value.renderPage({pageIndex:t.pageIndex,options:{scaleFactor:u.value,dpr:t.dpr||window.devicePixelRatio}});f=e,e.wait((e=>{p=URL.createObjectURL(e),i.value=p,f=null}),r.ignore)}),{immediate:!0}),e.onBeforeUnmount((()=>{g(),v()})),(r,n)=>i.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:i.value,style:{width:"100%",height:"100%"},onLoad:v},null,40,o)):e.createCommentVNode("",!0)}});exports.RenderLayer=u,exports.useRenderCapability=a,exports.useRenderPlugin=l,Object.keys(t).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})}));
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-render.ts","../../src/vue/components/render-layer.vue"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { RenderPlugin } from '@embedpdf/plugin-render';\n\nexport const useRenderPlugin = () => usePlugin<RenderPlugin>(RenderPlugin.id);\nexport const useRenderCapability = () => useCapability<RenderPlugin>(RenderPlugin.id);\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport { ignore, PdfErrorCode, PdfErrorReason, Task } from '@embedpdf/models';\n\nimport { useRenderCapability, useRenderPlugin } from '../hooks';\n\ninterface Props {\n pageIndex: number;\n /**\n * The scale factor for rendering the page.\n */\n scale?: number;\n /**\n * @deprecated Use `scale` instead. Will be removed in the next major release.\n */\n scaleFactor?: number;\n dpr?: number;\n}\n\nconst props = defineProps<Props>();\n\n// Handle deprecation: prefer scale over scaleFactor, but fall back to scaleFactor if scale is not provided\nconst actualScale = computed(() => props.scale ?? props.scaleFactor ?? 1);\n\nconst { provides: renderProvides } = useRenderCapability();\nconst { plugin: renderPlugin } = useRenderPlugin();\n\nconst imageUrl = ref<string | null>(null);\nconst refreshTick = ref(0);\n\nlet currentBlobUrl: string | null = null;\nlet currentTask: Task<Blob, PdfErrorReason> | null = null;\n\n/* ------------------------------------------ */\n/* Helper function to abort current task */\n/* ------------------------------------------ */\nfunction abortCurrentTask() {\n if (currentTask && !currentBlobUrl) {\n currentTask.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n}\n\n/* ------------------------------------------ */\n/* render whenever pageIndex/scale/dpr/tick change */\n/* ------------------------------------------ */\nfunction revoke() {\n if (currentBlobUrl) {\n URL.revokeObjectURL(currentBlobUrl);\n currentBlobUrl = null;\n }\n}\n\nfunction startRender() {\n abortCurrentTask();\n revoke();\n currentTask = null;\n\n if (!renderProvides.value) return;\n\n const task = renderProvides.value.renderPage({\n pageIndex: props.pageIndex,\n options: {\n scaleFactor: actualScale.value,\n dpr: props.dpr || window.devicePixelRatio,\n },\n });\n\n currentTask = task;\n\n task.wait((blob) => {\n currentBlobUrl = URL.createObjectURL(blob);\n imageUrl.value = currentBlobUrl;\n currentTask = null;\n }, ignore);\n}\n\n// Watch for external refresh events\nwatch(\n renderPlugin,\n (pluginInstance, _, onCleanup) => {\n if (pluginInstance) {\n const unsubscribe = pluginInstance.onRefreshPages((pages: number[]) => {\n if (pages.includes(props.pageIndex)) {\n refreshTick.value++;\n }\n });\n onCleanup(unsubscribe);\n }\n },\n { immediate: true },\n);\n\n// Watch for changes that require a re-render\nwatch(\n () => [props.pageIndex, actualScale.value, props.dpr, renderProvides.value, refreshTick.value],\n startRender,\n { immediate: true },\n);\n\n/* ------------------------------------------ */\nonBeforeUnmount(() => {\n abortCurrentTask();\n revoke();\n});\n</script>\n\n<template>\n <img v-if=\"imageUrl\" :src=\"imageUrl\" :style=\"{ width: '100%', height: '100%' }\" @load=\"revoke\" />\n</template>\n"],"names":["useRenderPlugin","usePlugin","RenderPlugin","id","useRenderCapability","useCapability","props","__props","actualScale","computed","scale","scaleFactor","provides","renderProvides","plugin","renderPlugin","imageUrl","ref","refreshTick","currentBlobUrl","currentTask","abortCurrentTask","abort","code","PdfErrorCode","Cancelled","message","revoke","URL","revokeObjectURL","vue$1","watch","pluginInstance","_","onCleanup","onRefreshPages","pages","includes","pageIndex","value","immediate","dpr","task","renderPage","options","window","devicePixelRatio","wait","blob","createObjectURL","ignore","onBeforeUnmount","_createElementBlock","src","style","width","height","onLoad"],"mappings":"0MAGaA,EAAkB,IAAMC,YAAwBC,EAAAA,aAAaC,IAC7DC,EAAsB,IAAMC,gBAA4BH,EAAAA,aAAaC,sHCelF,MAAMG,EAAQC,EAGRC,EAAcC,EAAAA,UAAS,IAAMH,EAAMI,OAASJ,EAAMK,aAAe,KAE/DC,SAAUC,GAAmBT,KAC7BU,OAAQC,GAAiBf,IAE3BgB,EAAWC,MAAmB,MAC9BC,EAAcD,MAAI,GAExB,IAAIE,EAAgC,KAChCC,EAAiD,KAKrD,SAASC,IACHD,IAAgBD,GAClBC,EAAYE,MAAM,CAChBC,KAAMC,EAAaA,aAAAC,UACnBC,QAAS,wBAEb,CAMF,SAASC,IACHR,IACFS,IAAIC,gBAAgBV,GACHA,EAAA,KACnB,QA4BFW,EAAAC,MACEhB,GACA,CAACiB,EAAgBC,EAAGC,KAClB,GAAIF,EAAgB,CAMlBE,EALoBF,EAAeG,gBAAgBC,IAC7CA,EAAMC,SAAS/B,EAAMgC,YACXpB,EAAAqB,OAAA,IAGK,IAGzB,CAAEC,WAAW,IAIfV,EAAAC,OACE,IAAM,CAACzB,EAAMgC,UAAW9B,EAAY+B,MAAOjC,EAAMmC,IAAK5B,EAAe0B,MAAOrB,EAAYqB,SA1C1F,WAKM,GAJalB,IACVM,IACOP,EAAA,MAETP,EAAe0B,MAAO,OAErB,MAAAG,EAAO7B,EAAe0B,MAAMI,WAAW,CAC3CL,UAAWhC,EAAMgC,UACjBM,QAAS,CACPjC,YAAaH,EAAY+B,MACzBE,IAAKnC,EAAMmC,KAAOI,OAAOC,oBAIf1B,EAAAsB,EAETA,EAAAK,MAAMC,IACQ7B,EAAAS,IAAIqB,gBAAgBD,GACrChC,EAASuB,MAAQpB,EACHC,EAAA,IAAA,GACb8B,SAAM,GAuBT,CAAEV,WAAW,IAIfW,EAAAA,iBAAgB,KACG9B,IACVM,GAAA,WAKIX,EAAQuB,qBAAnBa,EAAAA,mBAAiG,MAAA,OAA3EC,IAAKrC,EAAQuB,MAAGe,MAAO,CAAiCC,MAAA,OAAAC,OAAA,QAAGC,OAAM9B"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-render.ts","../../src/vue/components/render-layer.vue"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { RenderPlugin } from '@embedpdf/plugin-render';\n\nexport const useRenderPlugin = () => usePlugin<RenderPlugin>(RenderPlugin.id);\nexport const useRenderCapability = () => useCapability<RenderPlugin>(RenderPlugin.id);\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed, watchEffect } from 'vue';\nimport { ignore, PdfErrorCode, PdfErrorReason, Task } from '@embedpdf/models';\n\nimport { useRenderCapability, useRenderPlugin } from '../hooks';\n\ninterface Props {\n pageIndex: number;\n /**\n * The scale factor for rendering the page.\n */\n scale?: number;\n /**\n * @deprecated Use `scale` instead. Will be removed in the next major release.\n */\n scaleFactor?: number;\n dpr?: number;\n}\n\nconst props = defineProps<Props>();\n\n// Handle deprecation: prefer scale over scaleFactor, but fall back to scaleFactor if scale is not provided\nconst actualScale = computed(() => props.scale ?? props.scaleFactor ?? 1);\n\nconst { provides: renderProvides } = useRenderCapability();\nconst { plugin: renderPlugin } = useRenderPlugin();\n\nconst imageUrl = ref<string | null>(null);\nconst refreshTick = ref(0);\n\nlet currentBlobUrl: string | null = null;\nlet currentTask: Task<Blob, PdfErrorReason> | null = null;\n\n/* ------------------------------------------ */\n/* Helper function to abort current task */\n/* ------------------------------------------ */\nfunction abortCurrentTask() {\n if (currentTask && !currentBlobUrl) {\n currentTask.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n}\n\n/* ------------------------------------------ */\n/* render whenever pageIndex/scale/dpr/tick change */\n/* ------------------------------------------ */\nfunction revoke() {\n if (currentBlobUrl) {\n URL.revokeObjectURL(currentBlobUrl);\n currentBlobUrl = null;\n }\n}\n\nfunction startRender() {\n abortCurrentTask();\n revoke();\n currentTask = null;\n\n if (!renderProvides.value) return;\n\n const task = renderProvides.value.renderPage({\n pageIndex: props.pageIndex,\n options: {\n scaleFactor: actualScale.value,\n dpr: props.dpr || window.devicePixelRatio,\n },\n });\n\n currentTask = task;\n\n task.wait((blob) => {\n currentBlobUrl = URL.createObjectURL(blob);\n imageUrl.value = currentBlobUrl;\n currentTask = null;\n }, ignore);\n}\n\n// Watch for external refresh events\nwatchEffect((onCleanup) => {\n if (!renderPlugin.value) return;\n const unsubscribe = renderPlugin.value.onRefreshPages((pages: number[]) => {\n if (pages.includes(props.pageIndex)) {\n refreshTick.value++;\n }\n });\n onCleanup(unsubscribe);\n});\n\n// Watch for changes that require a re-render\nwatch(\n () => [props.pageIndex, actualScale.value, props.dpr, renderProvides.value, refreshTick.value],\n startRender,\n { immediate: true },\n);\n\n/* ------------------------------------------ */\nonBeforeUnmount(() => {\n abortCurrentTask();\n revoke();\n});\n</script>\n\n<template>\n <img v-if=\"imageUrl\" :src=\"imageUrl\" :style=\"{ width: '100%', height: '100%' }\" @load=\"revoke\" />\n</template>\n"],"names":["useRenderPlugin","usePlugin","RenderPlugin","id","useRenderCapability","useCapability","props","__props","actualScale","computed","scale","scaleFactor","provides","renderProvides","plugin","renderPlugin","imageUrl","ref","refreshTick","currentBlobUrl","currentTask","abortCurrentTask","abort","code","PdfErrorCode","Cancelled","message","revoke","URL","revokeObjectURL","vue$1","watchEffect","onCleanup","value","onRefreshPages","pages","includes","pageIndex","watch","dpr","task","renderPage","options","window","devicePixelRatio","wait","blob","createObjectURL","ignore","immediate","onBeforeUnmount","_createElementBlock","src","style","width","height","onLoad"],"mappings":"0MAGaA,EAAkB,IAAMC,YAAwBC,EAAAA,aAAaC,IAC7DC,EAAsB,IAAMC,gBAA4BH,EAAAA,aAAaC,sHCelF,MAAMG,EAAQC,EAGRC,EAAcC,EAAAA,UAAS,IAAMH,EAAMI,OAASJ,EAAMK,aAAe,KAE/DC,SAAUC,GAAmBT,KAC7BU,OAAQC,GAAiBf,IAE3BgB,EAAWC,MAAmB,MAC9BC,EAAcD,MAAI,GAExB,IAAIE,EAAgC,KAChCC,EAAiD,KAKrD,SAASC,IACHD,IAAgBD,GAClBC,EAAYE,MAAM,CAChBC,KAAMC,EAAaA,aAAAC,UACnBC,QAAS,wBAEb,CAMF,SAASC,IACHR,IACFS,IAAIC,gBAAgBV,GACHA,EAAA,KACnB,QA4BFW,EAAAC,aAAaC,IACP,IAACjB,EAAakB,MAAO,OAMzBD,EALoBjB,EAAakB,MAAMC,gBAAgBC,IACjDA,EAAMC,SAAS9B,EAAM+B,YACXnB,EAAAe,OAAA,IAGK,IAIvBH,EAAAQ,OACE,IAAM,CAAChC,EAAM+B,UAAW7B,EAAYyB,MAAO3B,EAAMiC,IAAK1B,EAAeoB,MAAOf,EAAYe,SArC1F,WAKM,GAJaZ,IACVM,IACOP,EAAA,MAETP,EAAeoB,MAAO,OAErB,MAAAO,EAAO3B,EAAeoB,MAAMQ,WAAW,CAC3CJ,UAAW/B,EAAM+B,UACjBK,QAAS,CACP/B,YAAaH,EAAYyB,MACzBM,IAAKjC,EAAMiC,KAAOI,OAAOC,oBAIfxB,EAAAoB,EAETA,EAAAK,MAAMC,IACQ3B,EAAAS,IAAImB,gBAAgBD,GACrC9B,EAASiB,MAAQd,EACHC,EAAA,IAAA,GACb4B,SAAM,GAkBT,CAAEC,WAAW,IAIfC,EAAAA,iBAAgB,KACG7B,IACVM,GAAA,WAKIX,EAAQiB,qBAAnBkB,EAAAA,mBAAiG,MAAA,OAA3EC,IAAKpC,EAAQiB,MAAGoB,MAAO,CAAiCC,MAAA,OAAAC,OAAA,QAAGC,OAAM7B"}
package/dist/vue/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defineComponent, computed, ref, watch, onBeforeUnmount, createElementBlock, createCommentVNode, openBlock } from "vue";
1
+ import { defineComponent, computed, ref, watchEffect, watch, onBeforeUnmount, createElementBlock, createCommentVNode, openBlock } from "vue";
2
2
  import { ignore, PdfErrorCode } from "@embedpdf/models";
3
3
  import { useCapability, usePlugin } from "@embedpdf/core/vue";
4
4
  import { RenderPlugin } from "@embedpdf/plugin-render";
@@ -56,20 +56,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
56
56
  currentTask = null;
57
57
  }, ignore);
58
58
  }
59
- watch(
60
- renderPlugin,
61
- (pluginInstance, _, onCleanup) => {
62
- if (pluginInstance) {
63
- const unsubscribe = pluginInstance.onRefreshPages((pages) => {
64
- if (pages.includes(props.pageIndex)) {
65
- refreshTick.value++;
66
- }
67
- });
68
- onCleanup(unsubscribe);
59
+ watchEffect((onCleanup) => {
60
+ if (!renderPlugin.value) return;
61
+ const unsubscribe = renderPlugin.value.onRefreshPages((pages) => {
62
+ if (pages.includes(props.pageIndex)) {
63
+ refreshTick.value++;
69
64
  }
70
- },
71
- { immediate: true }
72
- );
65
+ });
66
+ onCleanup(unsubscribe);
67
+ });
73
68
  watch(
74
69
  () => [props.pageIndex, actualScale.value, props.dpr, renderProvides.value, refreshTick.value],
75
70
  startRender,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-render.ts","../../src/vue/components/render-layer.vue"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { RenderPlugin } from '@embedpdf/plugin-render';\n\nexport const useRenderPlugin = () => usePlugin<RenderPlugin>(RenderPlugin.id);\nexport const useRenderCapability = () => useCapability<RenderPlugin>(RenderPlugin.id);\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed } from 'vue';\nimport { ignore, PdfErrorCode, PdfErrorReason, Task } from '@embedpdf/models';\n\nimport { useRenderCapability, useRenderPlugin } from '../hooks';\n\ninterface Props {\n pageIndex: number;\n /**\n * The scale factor for rendering the page.\n */\n scale?: number;\n /**\n * @deprecated Use `scale` instead. Will be removed in the next major release.\n */\n scaleFactor?: number;\n dpr?: number;\n}\n\nconst props = defineProps<Props>();\n\n// Handle deprecation: prefer scale over scaleFactor, but fall back to scaleFactor if scale is not provided\nconst actualScale = computed(() => props.scale ?? props.scaleFactor ?? 1);\n\nconst { provides: renderProvides } = useRenderCapability();\nconst { plugin: renderPlugin } = useRenderPlugin();\n\nconst imageUrl = ref<string | null>(null);\nconst refreshTick = ref(0);\n\nlet currentBlobUrl: string | null = null;\nlet currentTask: Task<Blob, PdfErrorReason> | null = null;\n\n/* ------------------------------------------ */\n/* Helper function to abort current task */\n/* ------------------------------------------ */\nfunction abortCurrentTask() {\n if (currentTask && !currentBlobUrl) {\n currentTask.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n}\n\n/* ------------------------------------------ */\n/* render whenever pageIndex/scale/dpr/tick change */\n/* ------------------------------------------ */\nfunction revoke() {\n if (currentBlobUrl) {\n URL.revokeObjectURL(currentBlobUrl);\n currentBlobUrl = null;\n }\n}\n\nfunction startRender() {\n abortCurrentTask();\n revoke();\n currentTask = null;\n\n if (!renderProvides.value) return;\n\n const task = renderProvides.value.renderPage({\n pageIndex: props.pageIndex,\n options: {\n scaleFactor: actualScale.value,\n dpr: props.dpr || window.devicePixelRatio,\n },\n });\n\n currentTask = task;\n\n task.wait((blob) => {\n currentBlobUrl = URL.createObjectURL(blob);\n imageUrl.value = currentBlobUrl;\n currentTask = null;\n }, ignore);\n}\n\n// Watch for external refresh events\nwatch(\n renderPlugin,\n (pluginInstance, _, onCleanup) => {\n if (pluginInstance) {\n const unsubscribe = pluginInstance.onRefreshPages((pages: number[]) => {\n if (pages.includes(props.pageIndex)) {\n refreshTick.value++;\n }\n });\n onCleanup(unsubscribe);\n }\n },\n { immediate: true },\n);\n\n// Watch for changes that require a re-render\nwatch(\n () => [props.pageIndex, actualScale.value, props.dpr, renderProvides.value, refreshTick.value],\n startRender,\n { immediate: true },\n);\n\n/* ------------------------------------------ */\nonBeforeUnmount(() => {\n abortCurrentTask();\n revoke();\n});\n</script>\n\n<template>\n <img v-if=\"imageUrl\" :src=\"imageUrl\" :style=\"{ width: '100%', height: '100%' }\" @load=\"revoke\" />\n</template>\n"],"names":["_createElementBlock"],"mappings":";;;;;AAGO,MAAM,kBAAkB,MAAM,UAAwB,aAAa,EAAE;AACrE,MAAM,sBAAsB,MAAM,cAA4B,aAAa,EAAE;;;;;;;;;;;ACepF,UAAM,QAAQ;AAGd,UAAM,cAAc,SAAS,MAAM,MAAM,SAAS,MAAM,eAAe,CAAC;AAExE,UAAM,EAAE,UAAU,eAAe,IAAI,oBAAoB;AACzD,UAAM,EAAE,QAAQ,aAAa,IAAI,gBAAgB;AAE3C,UAAA,WAAW,IAAmB,IAAI;AAClC,UAAA,cAAc,IAAI,CAAC;AAEzB,QAAI,iBAAgC;AACpC,QAAI,cAAiD;AAKrD,aAAS,mBAAmB;AACtB,UAAA,eAAe,CAAC,gBAAgB;AAClC,oBAAY,MAAM;AAAA,UAChB,MAAM,aAAa;AAAA,UACnB,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IACH;AAMF,aAAS,SAAS;AAChB,UAAI,gBAAgB;AAClB,YAAI,gBAAgB,cAAc;AACjB,yBAAA;AAAA,MAAA;AAAA,IACnB;AAGF,aAAS,cAAc;AACJ,uBAAA;AACV,aAAA;AACO,oBAAA;AAEV,UAAA,CAAC,eAAe,MAAO;AAErB,YAAA,OAAO,eAAe,MAAM,WAAW;AAAA,QAC3C,WAAW,MAAM;AAAA,QACjB,SAAS;AAAA,UACP,aAAa,YAAY;AAAA,UACzB,KAAK,MAAM,OAAO,OAAO;AAAA,QAAA;AAAA,MAC3B,CACD;AAEa,oBAAA;AAET,WAAA,KAAK,CAAC,SAAS;AACD,yBAAA,IAAI,gBAAgB,IAAI;AACzC,iBAAS,QAAQ;AACH,sBAAA;AAAA,SACb,MAAM;AAAA,IAAA;AAIX;AAAA,MACE;AAAA,MACA,CAAC,gBAAgB,GAAG,cAAc;AAChC,YAAI,gBAAgB;AAClB,gBAAM,cAAc,eAAe,eAAe,CAAC,UAAoB;AACrE,gBAAI,MAAM,SAAS,MAAM,SAAS,GAAG;AACvB,0BAAA;AAAA,YAAA;AAAA,UACd,CACD;AACD,oBAAU,WAAW;AAAA,QAAA;AAAA,MAEzB;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAGA;AAAA,MACE,MAAM,CAAC,MAAM,WAAW,YAAY,OAAO,MAAM,KAAK,eAAe,OAAO,YAAY,KAAK;AAAA,MAC7F;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAGA,oBAAgB,MAAM;AACH,uBAAA;AACV,aAAA;AAAA,IAAA,CACR;;aAIY,SAAQ,sBAAnBA,mBAAiG,OAAA;AAAA;QAA3E,KAAK,SAAQ;AAAA,QAAG,OAAO,EAAiC,OAAA,QAAA,QAAA,OAAA;AAAA,QAAG,QAAM;AAAA,MAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-render.ts","../../src/vue/components/render-layer.vue"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { RenderPlugin } from '@embedpdf/plugin-render';\n\nexport const useRenderPlugin = () => usePlugin<RenderPlugin>(RenderPlugin.id);\nexport const useRenderCapability = () => useCapability<RenderPlugin>(RenderPlugin.id);\n","<script setup lang=\"ts\">\nimport { ref, watch, onBeforeUnmount, computed, watchEffect } from 'vue';\nimport { ignore, PdfErrorCode, PdfErrorReason, Task } from '@embedpdf/models';\n\nimport { useRenderCapability, useRenderPlugin } from '../hooks';\n\ninterface Props {\n pageIndex: number;\n /**\n * The scale factor for rendering the page.\n */\n scale?: number;\n /**\n * @deprecated Use `scale` instead. Will be removed in the next major release.\n */\n scaleFactor?: number;\n dpr?: number;\n}\n\nconst props = defineProps<Props>();\n\n// Handle deprecation: prefer scale over scaleFactor, but fall back to scaleFactor if scale is not provided\nconst actualScale = computed(() => props.scale ?? props.scaleFactor ?? 1);\n\nconst { provides: renderProvides } = useRenderCapability();\nconst { plugin: renderPlugin } = useRenderPlugin();\n\nconst imageUrl = ref<string | null>(null);\nconst refreshTick = ref(0);\n\nlet currentBlobUrl: string | null = null;\nlet currentTask: Task<Blob, PdfErrorReason> | null = null;\n\n/* ------------------------------------------ */\n/* Helper function to abort current task */\n/* ------------------------------------------ */\nfunction abortCurrentTask() {\n if (currentTask && !currentBlobUrl) {\n currentTask.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n}\n\n/* ------------------------------------------ */\n/* render whenever pageIndex/scale/dpr/tick change */\n/* ------------------------------------------ */\nfunction revoke() {\n if (currentBlobUrl) {\n URL.revokeObjectURL(currentBlobUrl);\n currentBlobUrl = null;\n }\n}\n\nfunction startRender() {\n abortCurrentTask();\n revoke();\n currentTask = null;\n\n if (!renderProvides.value) return;\n\n const task = renderProvides.value.renderPage({\n pageIndex: props.pageIndex,\n options: {\n scaleFactor: actualScale.value,\n dpr: props.dpr || window.devicePixelRatio,\n },\n });\n\n currentTask = task;\n\n task.wait((blob) => {\n currentBlobUrl = URL.createObjectURL(blob);\n imageUrl.value = currentBlobUrl;\n currentTask = null;\n }, ignore);\n}\n\n// Watch for external refresh events\nwatchEffect((onCleanup) => {\n if (!renderPlugin.value) return;\n const unsubscribe = renderPlugin.value.onRefreshPages((pages: number[]) => {\n if (pages.includes(props.pageIndex)) {\n refreshTick.value++;\n }\n });\n onCleanup(unsubscribe);\n});\n\n// Watch for changes that require a re-render\nwatch(\n () => [props.pageIndex, actualScale.value, props.dpr, renderProvides.value, refreshTick.value],\n startRender,\n { immediate: true },\n);\n\n/* ------------------------------------------ */\nonBeforeUnmount(() => {\n abortCurrentTask();\n revoke();\n});\n</script>\n\n<template>\n <img v-if=\"imageUrl\" :src=\"imageUrl\" :style=\"{ width: '100%', height: '100%' }\" @load=\"revoke\" />\n</template>\n"],"names":["_createElementBlock"],"mappings":";;;;;AAGO,MAAM,kBAAkB,MAAM,UAAwB,aAAa,EAAE;AACrE,MAAM,sBAAsB,MAAM,cAA4B,aAAa,EAAE;;;;;;;;;;;ACepF,UAAM,QAAQ;AAGd,UAAM,cAAc,SAAS,MAAM,MAAM,SAAS,MAAM,eAAe,CAAC;AAExE,UAAM,EAAE,UAAU,eAAe,IAAI,oBAAoB;AACzD,UAAM,EAAE,QAAQ,aAAa,IAAI,gBAAgB;AAE3C,UAAA,WAAW,IAAmB,IAAI;AAClC,UAAA,cAAc,IAAI,CAAC;AAEzB,QAAI,iBAAgC;AACpC,QAAI,cAAiD;AAKrD,aAAS,mBAAmB;AACtB,UAAA,eAAe,CAAC,gBAAgB;AAClC,oBAAY,MAAM;AAAA,UAChB,MAAM,aAAa;AAAA,UACnB,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IACH;AAMF,aAAS,SAAS;AAChB,UAAI,gBAAgB;AAClB,YAAI,gBAAgB,cAAc;AACjB,yBAAA;AAAA,MAAA;AAAA,IACnB;AAGF,aAAS,cAAc;AACJ,uBAAA;AACV,aAAA;AACO,oBAAA;AAEV,UAAA,CAAC,eAAe,MAAO;AAErB,YAAA,OAAO,eAAe,MAAM,WAAW;AAAA,QAC3C,WAAW,MAAM;AAAA,QACjB,SAAS;AAAA,UACP,aAAa,YAAY;AAAA,UACzB,KAAK,MAAM,OAAO,OAAO;AAAA,QAAA;AAAA,MAC3B,CACD;AAEa,oBAAA;AAET,WAAA,KAAK,CAAC,SAAS;AACD,yBAAA,IAAI,gBAAgB,IAAI;AACzC,iBAAS,QAAQ;AACH,sBAAA;AAAA,SACb,MAAM;AAAA,IAAA;AAIX,gBAAY,CAAC,cAAc;AACrB,UAAA,CAAC,aAAa,MAAO;AACzB,YAAM,cAAc,aAAa,MAAM,eAAe,CAAC,UAAoB;AACzE,YAAI,MAAM,SAAS,MAAM,SAAS,GAAG;AACvB,sBAAA;AAAA,QAAA;AAAA,MACd,CACD;AACD,gBAAU,WAAW;AAAA,IAAA,CACtB;AAGD;AAAA,MACE,MAAM,CAAC,MAAM,WAAW,YAAY,OAAO,MAAM,KAAK,eAAe,OAAO,YAAY,KAAK;AAAA,MAC7F;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAGA,oBAAgB,MAAM;AACH,uBAAA;AACV,aAAA;AAAA,IAAA,CACR;;aAIY,SAAQ,sBAAnBA,mBAAiG,OAAA;AAAA;QAA3E,KAAK,SAAQ;AAAA,QAAG,OAAO,EAAiC,OAAA,QAAA,QAAA,OAAA;AAAA,QAAG,QAAM;AAAA,MAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/plugin-render",
3
- "version": "1.3.11",
3
+ "version": "1.3.12",
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.11"
32
+ "@embedpdf/models": "1.3.12"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/react": "^18.2.0",
36
36
  "typescript": "^5.0.0",
37
- "@embedpdf/core": "1.3.11",
38
- "@embedpdf/build": "1.0.1"
37
+ "@embedpdf/build": "1.0.1",
38
+ "@embedpdf/core": "1.3.12"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "preact": "^10.26.4",
42
42
  "react": ">=16.8.0",
43
43
  "react-dom": ">=16.8.0",
44
44
  "vue": ">=3.2.0",
45
- "@embedpdf/core": "1.3.11"
45
+ "@embedpdf/core": "1.3.12"
46
46
  },
47
47
  "files": [
48
48
  "dist",