@pdfme/ui 5.5.6-dev.1 → 5.5.6

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.umd.js CHANGED
@@ -1038,4 +1038,4 @@ canvas {
1038
1038
  transform: rotate(360deg);
1039
1039
  }
1040
1040
  }
1041
- `}),jsxRuntimeExports.jsx("div",{style:s,children:jsxRuntimeExports.jsx(LoaderCircle,{size:50,style:c})})]})},Root$1=({size:a,scale:s,children:c},u)=>{const d=reactExports.useContext(FontContext);return reactExports.useEffect(()=>{if(!document||!document.fonts)return;const v=Object.entries(d).map(([A,{data:x}])=>new FontFace(A,typeof x=="string"?`url(${x})`:x,{display:"swap"})).filter(A=>!document.fonts.has(A));Promise.allSettled(v.map(A=>A.load())).then(A=>{A.forEach(x=>{x.status==="fulfilled"&&document.fonts.add(x.value)})})},[d]),jsxRuntimeExports.jsx("div",{className:DESIGNER_CLASSNAME+"root",ref:u,style:{position:"relative",background:BACKGROUND_COLOR,...a},children:jsxRuntimeExports.jsx("div",{className:DESIGNER_CLASSNAME+"background",style:{margin:"0 auto",...a},children:s===0?jsxRuntimeExports.jsx(Spinner,{}):c})})},Root=reactExports.forwardRef(Root$1),ErrorScreen=({size:a,error:s})=>{const c=reactExports.useContext(I18nContext),{token:u}=theme.useToken();return jsxRuntimeExports.jsx("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",background:BACKGROUND_COLOR,...a},children:jsxRuntimeExports.jsx("div",{style:{width:300,margin:"0 auto",background:u.colorBgLayout},children:jsxRuntimeExports.jsx(Result$1,{icon:null,title:"ERROR",subTitle:c("errorOccurred"),extra:jsxRuntimeExports.jsx("span",{children:s.message})})})})},{Text:Text$1}=Typography,Zoom=({zoomLevel:a,setZoomLevel:s,style:c})=>{const d=useMaxZoom(),p=.25,v=a-.25,A=a+.25;return jsxRuntimeExports.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"zoom-out",type:"text",disabled:p>=v,onClick:()=>s(v),icon:jsxRuntimeExports.jsx(Minus,{size:16,color:c.textStyle.color})}),jsxRuntimeExports.jsxs(Text$1,{strong:!0,style:c.textStyle,children:[Math.round(a*100),"%"]}),jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"zoom-in",type:"text",disabled:d<A,onClick:()=>s(A),icon:jsxRuntimeExports.jsx(Plus,{size:16,color:c.textStyle.color})})]})},Pager=({pageCursor:a,pageNum:s,setPageCursor:c,style:u})=>jsxRuntimeExports.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"page-prev",type:"text",disabled:a<=0,onClick:()=>c(a-1),children:jsxRuntimeExports.jsx(ChevronLeft,{size:16,color:u.textStyle.color})}),jsxRuntimeExports.jsxs(Text$1,{strong:!0,style:u.textStyle,children:[a+1,"/",s]}),jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"page-next",type:"text",disabled:a+1>=s,onClick:()=>c(a+1),children:jsxRuntimeExports.jsx(ChevronRight,{size:16,color:u.textStyle.color})})]}),ContextMenu=({items:a,style:s})=>jsxRuntimeExports.jsx(Dropdown,{menu:{items:a},placement:"top",arrow:!0,trigger:["click"],children:jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"context-menu",type:"text",children:jsxRuntimeExports.jsx(Ellipsis,{size:16,color:s.textStyle.color})})}),CtlBar=a=>{const{token:s}=theme.useToken(),c=reactExports.useContext(I18nContext),{size:u,pageCursor:d,pageNum:p,setPageCursor:v,zoomLevel:A,setZoomLevel:x,addPageAfter:g,removePage:b}=a,y=[];g&&y.push({key:"1",label:jsxRuntimeExports.jsx("div",{onClick:g,children:c("addPageAfter")})}),b&&p>1&&d!==0&&y.push({key:"2",label:jsxRuntimeExports.jsx("div",{onClick:b,children:c("removePage")})});const f=300,m=y.length>0?50:0,E=(p>1?f:f/2)+m,w={color:s.colorWhite,fontSize:s.fontSize,margin:s.marginXS};return jsxRuntimeExports.jsx("div",{style:{position:"absolute",top:"auto",bottom:"6%",width:u.width},children:jsxRuntimeExports.jsxs("div",{className:UI_CLASSNAME+"control-bar",style:{display:"flex",alignItems:"center",justifyContent:"space-evenly",position:"relative",zIndex:1,left:`calc(50% - ${E/2}px)`,width:E,height:40,boxSizing:"border-box",padding:s.paddingSM,borderRadius:s.borderRadius,backgroundColor:s.colorBgMask},children:[p>1&&jsxRuntimeExports.jsx("div",{className:UI_CLASSNAME+"pager",children:jsxRuntimeExports.jsx(Pager,{style:{textStyle:w},pageCursor:d,pageNum:p,setPageCursor:v})}),jsxRuntimeExports.jsx("div",{className:UI_CLASSNAME+"zoom",children:jsxRuntimeExports.jsx(Zoom,{style:{textStyle:w},zoomLevel:A,setZoomLevel:x})}),y.length>0&&jsxRuntimeExports.jsx(ContextMenu,{items:y,style:{textStyle:w}})]})})},scaleDragPosAdjustment=(a,s)=>s>1?a*(s-1):s<1?a*-(1-s):0,TemplateEditor=({template:a,size:s,onSaveTemplate:c,onChangeTemplate:u,onPageCursorChange:d})=>{const p=reactExports.useRef([]),v=reactExports.useRef([]),A=reactExports.useRef(null),x=reactExports.useRef([]),g=reactExports.useContext(I18nContext),b=reactExports.useContext(PluginsRegistry),y=reactExports.useContext(OptionsContext),f=useMaxZoom(),[m,E]=reactExports.useState(null),[w,S]=reactExports.useState([]),[$,T]=reactExports.useState([[]]),[I,_]=reactExports.useState(0),[C,P]=reactExports.useState(y.zoomLevel??1),[O,L]=reactExports.useState(y.sidebarOpen??!0),[B,F]=reactExports.useState(null),{backgrounds:D,pageSizes:V,scale:j,error:G,refresh:U}=useUIPreProcessor({template:a,size:s,zoomLevel:C,maxZoom:f}),M=ae=>{S(ae),E(null)},N=()=>{S([]),E(null)};reactExports.useEffect(()=>{typeof y.zoomLevel=="number"&&y.zoomLevel!==C&&P(y.zoomLevel),typeof y.sidebarOpen=="boolean"&&y.sidebarOpen!==O&&L(y.sidebarOpen)},[y]),useScrollPageCursor({ref:A,pageSizes:V,scale:j,pageCursor:I,onChangePageCursor:ae=>{_(ae),d(ae,$.length),N()}});const R=reactExports.useCallback(ae=>{v.current=[],p.current.push(cloneDeep$1($[I]));const oe=cloneDeep$1($);oe[I]=ae,T(oe),u(schemasList2template(oe,a.basePdf))},[a,$,I,u]),k=reactExports.useCallback(ae=>{R($[I].filter(oe=>!ae.includes(oe.id))),N()},[$,I,R]),H=reactExports.useCallback(ae=>{changeSchemas({objs:ae,schemas:$[I],basePdf:a.basePdf,pluginsRegistry:b,pageSize:V[I],commitSchemas:R})},[R,I,$,b,V,a.basePdf]);useInitEvents({pageCursor:I,pageSizes:V,activeElements:w,template:a,schemasList:$,changeSchemas:H,commitSchemas:R,removeSchemas:k,onSaveTemplate:c,past:p,future:v,setSchemasList:T,onEdit:M,onEditEnd:N});const W=reactExports.useCallback(async ae=>{const oe=await template2SchemasList(ae);T(oe),N(),_(0),A.current?.scroll&&A.current.scroll({top:0,behavior:"smooth"})},[]),J=ae=>{const[oe,se,fe,pe]=isBlankPdf(a.basePdf)?a.basePdf.padding:[0,0,0,0],ge=V[I],me=ve=>{let he=$.reduce((Ee,xe)=>Ee+xe.length,1),ye=ve+he;for(;$.some(Ee=>Ee.find(xe=>xe.name===ye));)he++,ye=ve+he;return ye},be=(ve,he,ye)=>Math.min(Math.max(ve,he),ye),le={id:uuid$6(),...ae,name:me(g("field")),position:{x:be(pe,ae.position.x,ge.width-se-ae.width),y:be(oe,ae.position.y,ge.height-fe-ae.height)},required:ae.readOnly?!1:y.requiredByDefault||ae.required||!1};if(ae.position.y===0){const ve=x.current[I],he=ve?ve.getBoundingClientRect().top:0;le.position.y=he>0?oe:V[I].height/2}R($[I].concat(le)),setTimeout(()=>M([document.getElementById(le.id)]))},re=ae=>{R(ae)},K=ae=>{E(ae)},q=async(ae,oe)=>{_(oe);const se=schemasList2template(ae,a.basePdf);u(se),await W(se),U(se),d(oe,ae.length),setTimeout(()=>{A.current&&(A.current.scrollTop=getPagesScrollTopByIndex(V,oe,j))},0)},Q=()=>{if(I===0||!window.confirm(g("removePageConfirm")))return;const ae=cloneDeep$1($);ae.splice(I,1),q(ae,I-1)},ee=()=>{const ae=cloneDeep$1($);ae.splice(I+1,0,[]),q(ae,I+1)};B!==a&&(F(a),W(a));const Y=s.width-LEFT_SIDEBAR_WIDTH,Z={width:O?Y-RIGHT_SIDEBAR_WIDTH:Y,height:s.height};if(G)return jsxRuntimeExports.jsx(ErrorScreen,{size:s,error:G});const te=isBlankPdf(a.basePdf)?{addPageAfter:ee,removePage:Q}:{};return jsxRuntimeExports.jsx(Root,{size:s,scale:j,children:jsxRuntimeExports.jsxs(DndContext,{onDragEnd:ae=>{if(!ae.active)return;const oe=ae.active,se=x.current[I].getBoundingClientRect(),fe=oe.rect.current.initial?.left||0,pe=oe.rect.current.initial?.top||0,ge=se.left-fe+scaleDragPosAdjustment(20,j),me=se.top-pe,be=(ae.delta.y-me)/j,le=(ae.delta.x-ge)/j,ve={x:round$1(px2mm(Math.max(0,le)),2),y:round$1(px2mm(Math.max(0,be)),2)};J({...oe.data.current,position:ve})},onDragStart:N,children:[jsxRuntimeExports.jsx(LeftSidebar,{height:A.current?A.current.clientHeight:0,scale:j,basePdf:a.basePdf}),jsxRuntimeExports.jsxs("div",{style:{position:"absolute",width:Y,marginLeft:LEFT_SIDEBAR_WIDTH},children:[jsxRuntimeExports.jsx(CtlBar,{size:Z,pageCursor:I,pageNum:$.length,setPageCursor:ae=>{A.current&&(A.current.scrollTop=getPagesScrollTopByIndex(V,ae,j),_(ae),d(ae,$.length),N())},zoomLevel:C,setZoomLevel:P,...te}),jsxRuntimeExports.jsx(Sidebar,{hoveringSchemaId:m,onChangeHoveringSchemaId:K,height:A.current?A.current.clientHeight:0,size:s,pageSize:V[I]??[],basePdf:a.basePdf,activeElements:w,schemasList:$,schemas:$[I]??[],changeSchemas:H,onSortEnd:re,onEdit:ae=>{const oe=document.getElementById(ae);oe&&M([oe])},onEditEnd:N,deselectSchema:N,sidebarOpen:O,setSidebarOpen:L}),jsxRuntimeExports.jsx(Canvas,{ref:A,paperRefs:x,basePdf:a.basePdf,hoveringSchemaId:m,onChangeHoveringSchemaId:K,height:s.height-RULER_HEIGHT*ZOOM,pageCursor:I,scale:j,size:Z,pageSizes:V,backgrounds:D,activeElements:w,schemasList:$,changeSchemas:H,removeSchemas:k,sidebarOpen:O,onEdit:M})]})]})})},defaultTheme={token:{colorPrimary:"#38a0ff"},components:{Form:{fontSize:12,margin:8,marginLG:12,marginXS:4,padding:8,paddingLG:12,paddingXS:4,itemMarginBottom:4,verticalLabelPadding:"0 0 2px"}}},isObject=a=>!!a&&typeof a=="object"&&!Array.isArray(a),deepMerge=(a,s)=>{let c={...a};return isObject(a)&&isObject(s)&&Object.keys(s).forEach(u=>{const d=s[u];if(isObject(d))if(!(u in a))Object.assign(c,{[u]:d});else{const p=a[u];isObject(p)?c[u]=deepMerge(p,d):Object.assign(c,{[u]:d})}else Object.assign(c,{[u]:d})}),c},AppContextProvider=({children:a,lang:s,font:c,plugins:u,options:d})=>{let p=defaultTheme;d.theme&&(p=deepMerge(p,d.theme));let v=getDict(s);return d.labels&&(v=deepMerge(v,d.labels)),jsxRuntimeExports.jsx(ConfigProvider,{theme:p,children:jsxRuntimeExports.jsx(I18nContext.Provider,{value:A=>i18n(A,v),children:jsxRuntimeExports.jsx(FontContext.Provider,{value:c,children:jsxRuntimeExports.jsx(PluginsRegistry.Provider,{value:u,children:jsxRuntimeExports.jsx(OptionsContext.Provider,{value:d,children:a})})})})})};class Designer extends BaseUIClass{constructor(s){super(s),this.pageCursor=0,checkDesignerProps(s)}saveTemplate(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);this.onSaveTemplateCallback&&this.onSaveTemplateCallback(this.template)}updateTemplate(s){if(checkTemplate(s),!this.domContainer)throw Error(DESTROYED_ERR_MSG);this.template=cloneDeep$1(s),this.onChangeTemplateCallback&&this.onChangeTemplateCallback(s),this.render()}onSaveTemplate(s){this.onSaveTemplateCallback=s}onChangeTemplate(s){this.onChangeTemplateCallback=s}onPageChange(s){this.onPageChangeCallback=s}getPageCursor(){return this.pageCursor}getTotalPages(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);return this.template.schemas.length}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(TemplateEditor,{template:this.template,onSaveTemplate:s=>{this.template=s,this.template.pdfmeVersion=PDFME_VERSION,this.onSaveTemplateCallback&&this.onSaveTemplateCallback(s)},onChangeTemplate:s=>{this.template=s,this.template.pdfmeVersion=PDFME_VERSION,this.onChangeTemplateCallback&&this.onChangeTemplateCallback(s)},onPageCursorChange:(s,c)=>{this.pageCursor=s,this.onPageChangeCallback&&this.onPageChangeCallback({currentPage:s,totalPages:c})},size:this.size})}),this.domContainer)}}const{Text}=Typography,icons={left:ChevronLeft,right:ChevronRight,doubleLeft:ChevronsLeft,doubleRight:ChevronsRight},UnitButton=({type:a,onClick:s,disabled:c,textStyle:u})=>{const d=icons[a];return jsxRuntimeExports.jsx(Button$1,{type:"text",onClick:s,disabled:c,children:jsxRuntimeExports.jsx(d,{style:{color:u.color}})})},UnitPager=({size:a,unitCursor:s,unitNum:c,setUnitCursor:u})=>{if(c<=1)return null;const{token:d}=theme.useToken(),p={pointerEvents:"initial",position:"sticky",zIndex:1,display:"flex",alignItems:"center",boxSizing:"border-box",height:40,padding:d.paddingSM,borderRadius:d.borderRadius,backgroundColor:d.colorBgMask},v={color:d.colorWhite,fontSize:d.fontSize,margin:d.marginXS};return jsxRuntimeExports.jsx("div",{style:{position:"absolute",...a},children:jsxRuntimeExports.jsxs("div",{style:{position:"sticky",width:"100%",zIndex:1,top:`calc(50% - ${p.height/2}px)`,display:"flex",alignItems:"center"},children:[s>0&&jsxRuntimeExports.jsxs("div",{style:{left:"1rem",marginLeft:"1rem",...p},children:[jsxRuntimeExports.jsx(UnitButton,{type:"doubleLeft",onClick:()=>u(0),disabled:s<=0,textStyle:v}),jsxRuntimeExports.jsx(UnitButton,{type:"left",onClick:()=>u(s-1),disabled:s<=0,textStyle:v}),jsxRuntimeExports.jsxs(Text,{strong:!0,style:v,children:[s+1,"/",c]})]}),s+1<c&&jsxRuntimeExports.jsxs("div",{style:{right:"1rem",marginLeft:"auto",marginRight:"1rem",...p},children:[jsxRuntimeExports.jsxs(Text,{strong:!0,style:v,children:[s+1,"/",c]}),jsxRuntimeExports.jsx(UnitButton,{type:"right",onClick:()=>u(s+1),disabled:s+1>=c,textStyle:v}),jsxRuntimeExports.jsx(UnitButton,{type:"doubleRight",onClick:()=>u(c-1),disabled:s+1>=c,textStyle:v})]})]})})},_cache=new Map,Preview=({template:a,inputs:s,size:c,onChangeInput:u,onPageChange:d})=>{const{token:p}=theme.useToken(),v=reactExports.useContext(FontContext),A=reactExports.useContext(OptionsContext),x=useMaxZoom(),g=reactExports.useRef(null),b=reactExports.useRef([]),[y,f]=reactExports.useState(0),[m,E]=reactExports.useState(0),[w,S]=reactExports.useState(A.zoomLevel??1),[$,T]=reactExports.useState([[]]),{backgrounds:I,pageSizes:_,scale:C,error:P,refresh:O}=useUIPreProcessor({template:a,size:c,zoomLevel:w,maxZoom:x}),L=!!u,B=s[y],F=j=>{getDynamicTemplate({template:j,input:B,options:{font:v},_cache,getDynamicHeights:(U,M)=>{switch(M.schema.type){case"table":return getDynamicHeightsForTable(U,M);default:return Promise.resolve([M.schema.height])}}}).then(async U=>{const M=await template2SchemasList(U);T(M),await O(U)}).catch(U=>console.error("[@pdfme/ui] ",U))};reactExports.useEffect(()=>{typeof A.zoomLevel=="number"&&A.zoomLevel!==w&&S(A.zoomLevel)},[A]),reactExports.useEffect(()=>{y>s.length-1&&f(s.length-1),F(a)},[a,s,c]),useScrollPageCursor({ref:g,pageSizes:_,scale:C,pageCursor:m,onChangePageCursor:j=>{E(j),d&&d({currentPage:j,totalPages:$.length})}});const D=({name:j,value:G})=>u&&u({index:y,name:j,value:G}),V=(j,G)=>{let U=!1;j.forEach(({key:M,value:N})=>{if(M==="content"){const R=N,k=B?.[G.name]||"";if(R===k)return;D({name:G.name,value:R}),G.type==="table"&&(U=!0)}else{const R=$[m].find(k=>k.id===G.id);if(!R)return;R[M]=N}}),U&&F(a),T([...$])};return P?jsxRuntimeExports.jsx(ErrorScreen,{size:c,error:P}):jsxRuntimeExports.jsxs(Root,{size:c,scale:C,children:[jsxRuntimeExports.jsx(CtlBar,{size:c,pageCursor:m,pageNum:$.length,setPageCursor:j=>{g.current&&(g.current.scrollTop=getPagesScrollTopByIndex(_,j,C),E(j),d&&d({currentPage:j,totalPages:$.length}))},zoomLevel:w,setZoomLevel:S}),jsxRuntimeExports.jsx(UnitPager,{size:c,unitCursor:y,unitNum:s.length,setUnitCursor:f}),jsxRuntimeExports.jsx("div",{ref:g,style:{...c,position:"relative",overflow:"auto"},children:jsxRuntimeExports.jsx(Paper,{paperRefs:b,scale:C,size:c,schemasList:$,pageSizes:_,backgrounds:I,renderSchema:({schema:j,index:G})=>{const U=j.readOnly?replacePlaceholders({content:j.content||"",variables:{...B,totalPages:$.length,currentPage:G+1},schemas:$}):String(B&&B[j.name]||"");return jsxRuntimeExports.jsx(Renderer,{schema:j,basePdf:a.basePdf,value:U,mode:L?"form":"viewer",placeholder:j.content,tabIndex:G+100,onChange:M=>{const N=Array.isArray(M)?M:[M];V(N,j)},outline:L&&!j.readOnly?`1px dashed ${p.colorPrimary}`:"transparent",scale:C},j.id)},renderPaper:({index:j})=>jsxRuntimeExports.jsx(StaticSchema,{template:a,scale:C,input:B,totalPages:$.length,currentPage:j+1})})})]})};class Form extends PreviewUI{constructor(s){super(s),this.pageCursor=0}onChangeInput(s){this.onChangeInputCallback=s}onPageChange(s){this.onPageChangeCallback=s}getPageCursor(){return this.pageCursor}getTotalPages(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);return this.template.schemas.length}setInputs(s){const c=this.getInputs();super.setInputs(s);const u=[];s.forEach((d,p)=>{const v=c[p]||{};new Set([...Object.keys(d),...Object.keys(v)]).forEach(x=>{const g=d[x],b=v[x];g!==b&&u.push({index:p,name:x,value:g})})}),u.forEach(d=>{this.onChangeInputCallback&&this.onChangeInputCallback(d)})}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(Preview,{template:this.template,size:this.size,inputs:this.inputs,onChangeInput:s=>{const{index:c,value:u,name:d}=s;this.onChangeInputCallback&&this.onChangeInputCallback({index:c,value:u,name:d}),this.inputs&&this.inputs[c]&&this.inputs[c][d]!==u&&(this.inputs[c][d]=u,this.render())},onPageChange:s=>{this.pageCursor=s.currentPage,this.onPageChangeCallback&&this.onPageChangeCallback(s)}})}),this.domContainer)}}class Viewer extends PreviewUI{constructor(s){super(s),this.pageCursor=0,console.warn("[@pdfme/ui] Viewer component is deprecated and will be removed in a future version.")}onPageChange(s){this.onPageChangeCallback=s}getPageCursor(){return this.pageCursor}getTotalPages(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);return this.template.schemas.length}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(Preview,{template:this.template,size:this.size,inputs:this.inputs,onPageChange:s=>{this.pageCursor=s.currentPage,this.onPageChangeCallback&&this.onPageChangeCallback(s)}})}),this.domContainer)}}exports.Designer=Designer,exports.Form=Form,exports.Viewer=Viewer,Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})}));
1041
+ `}),jsxRuntimeExports.jsx("div",{style:s,children:jsxRuntimeExports.jsx(LoaderCircle,{size:50,style:c})})]})},Root$1=({size:a,scale:s,children:c},u)=>{const d=reactExports.useContext(FontContext);return reactExports.useEffect(()=>{if(!document||!document.fonts)return;const v=Object.entries(d).map(([A,{data:x}])=>new FontFace(A,typeof x=="string"?`url(${x})`:x,{display:"swap"})).filter(A=>!document.fonts.has(A));Promise.allSettled(v.map(A=>A.load())).then(A=>{A.forEach(x=>{x.status==="fulfilled"&&document.fonts.add(x.value)})})},[d]),jsxRuntimeExports.jsx("div",{className:DESIGNER_CLASSNAME+"root",ref:u,style:{position:"relative",background:BACKGROUND_COLOR,...a},children:jsxRuntimeExports.jsx("div",{className:DESIGNER_CLASSNAME+"background",style:{margin:"0 auto",...a},children:s===0?jsxRuntimeExports.jsx(Spinner,{}):c})})},Root=reactExports.forwardRef(Root$1),ErrorScreen=({size:a,error:s})=>{const c=reactExports.useContext(I18nContext),{token:u}=theme.useToken();return jsxRuntimeExports.jsx("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",background:BACKGROUND_COLOR,...a},children:jsxRuntimeExports.jsx("div",{style:{width:300,margin:"0 auto",background:u.colorBgLayout},children:jsxRuntimeExports.jsx(Result$1,{icon:null,title:"ERROR",subTitle:c("errorOccurred"),extra:jsxRuntimeExports.jsx("span",{children:s.message})})})})},{Text:Text$1}=Typography,Zoom=({zoomLevel:a,setZoomLevel:s,style:c})=>{const d=useMaxZoom(),p=.25,v=a-.25,A=a+.25;return jsxRuntimeExports.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"zoom-out",type:"text",disabled:p>=v,onClick:()=>s(v),icon:jsxRuntimeExports.jsx(Minus,{size:16,color:c.textStyle.color})}),jsxRuntimeExports.jsxs(Text$1,{strong:!0,style:c.textStyle,children:[Math.round(a*100),"%"]}),jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"zoom-in",type:"text",disabled:d<A,onClick:()=>s(A),icon:jsxRuntimeExports.jsx(Plus,{size:16,color:c.textStyle.color})})]})},Pager=({pageCursor:a,pageNum:s,setPageCursor:c,style:u})=>jsxRuntimeExports.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"page-prev",type:"text",disabled:a<=0,onClick:()=>c(a-1),children:jsxRuntimeExports.jsx(ChevronLeft,{size:16,color:u.textStyle.color})}),jsxRuntimeExports.jsxs(Text$1,{strong:!0,style:u.textStyle,children:[a+1,"/",s]}),jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"page-next",type:"text",disabled:a+1>=s,onClick:()=>c(a+1),children:jsxRuntimeExports.jsx(ChevronRight,{size:16,color:u.textStyle.color})})]}),ContextMenu=({items:a,style:s})=>jsxRuntimeExports.jsx(Dropdown,{menu:{items:a},placement:"top",arrow:!0,trigger:["click"],children:jsxRuntimeExports.jsx(Button$1,{className:UI_CLASSNAME+"context-menu",type:"text",children:jsxRuntimeExports.jsx(Ellipsis,{size:16,color:s.textStyle.color})})}),CtlBar=a=>{const{token:s}=theme.useToken(),c=reactExports.useContext(I18nContext),{size:u,pageCursor:d,pageNum:p,setPageCursor:v,zoomLevel:A,setZoomLevel:x,addPageAfter:g,removePage:b}=a,y=[];g&&y.push({key:"1",label:jsxRuntimeExports.jsx("div",{onClick:g,children:c("addPageAfter")})}),b&&p>1&&d!==0&&y.push({key:"2",label:jsxRuntimeExports.jsx("div",{onClick:b,children:c("removePage")})});const f=300,m=y.length>0?50:0,E=(p>1?f:f/2)+m,w={color:s.colorWhite,fontSize:s.fontSize,margin:s.marginXS};return jsxRuntimeExports.jsx("div",{style:{position:"absolute",top:"auto",bottom:"6%",width:u.width},children:jsxRuntimeExports.jsxs("div",{className:UI_CLASSNAME+"control-bar",style:{display:"flex",alignItems:"center",justifyContent:"space-evenly",position:"relative",zIndex:1,left:`calc(50% - ${E/2}px)`,width:E,height:40,boxSizing:"border-box",padding:s.paddingSM,borderRadius:s.borderRadius,backgroundColor:s.colorBgMask},children:[p>1&&jsxRuntimeExports.jsx("div",{className:UI_CLASSNAME+"pager",children:jsxRuntimeExports.jsx(Pager,{style:{textStyle:w},pageCursor:d,pageNum:p,setPageCursor:v})}),jsxRuntimeExports.jsx("div",{className:UI_CLASSNAME+"zoom",children:jsxRuntimeExports.jsx(Zoom,{style:{textStyle:w},zoomLevel:A,setZoomLevel:x})}),y.length>0&&jsxRuntimeExports.jsx(ContextMenu,{items:y,style:{textStyle:w}})]})})},scaleDragPosAdjustment=(a,s)=>s>1?a*(s-1):s<1?a*-(1-s):0,TemplateEditor=({template:a,size:s,onSaveTemplate:c,onChangeTemplate:u,onPageCursorChange:d})=>{const p=reactExports.useRef([]),v=reactExports.useRef([]),A=reactExports.useRef(null),x=reactExports.useRef([]),g=reactExports.useContext(I18nContext),b=reactExports.useContext(PluginsRegistry),y=reactExports.useContext(OptionsContext),f=useMaxZoom(),[m,E]=reactExports.useState(null),[w,S]=reactExports.useState([]),[$,T]=reactExports.useState([[]]),[I,_]=reactExports.useState(0),[C,P]=reactExports.useState(y.zoomLevel??1),[O,L]=reactExports.useState(y.sidebarOpen??!0),[B,F]=reactExports.useState(null),{backgrounds:D,pageSizes:V,scale:j,error:G,refresh:U}=useUIPreProcessor({template:a,size:s,zoomLevel:C,maxZoom:f}),M=ae=>{S(ae),E(null)},N=()=>{S([]),E(null)};reactExports.useEffect(()=>{typeof y.zoomLevel=="number"&&y.zoomLevel!==C&&P(y.zoomLevel),typeof y.sidebarOpen=="boolean"&&y.sidebarOpen!==O&&L(y.sidebarOpen)},[y]),useScrollPageCursor({ref:A,pageSizes:V,scale:j,pageCursor:I,onChangePageCursor:ae=>{_(ae),d(ae),N()}});const R=reactExports.useCallback(ae=>{v.current=[],p.current.push(cloneDeep$1($[I]));const oe=cloneDeep$1($);oe[I]=ae,T(oe),u(schemasList2template(oe,a.basePdf))},[a,$,I,u]),k=reactExports.useCallback(ae=>{R($[I].filter(oe=>!ae.includes(oe.id))),N()},[$,I,R]),H=reactExports.useCallback(ae=>{changeSchemas({objs:ae,schemas:$[I],basePdf:a.basePdf,pluginsRegistry:b,pageSize:V[I],commitSchemas:R})},[R,I,$,b,V,a.basePdf]);useInitEvents({pageCursor:I,pageSizes:V,activeElements:w,template:a,schemasList:$,changeSchemas:H,commitSchemas:R,removeSchemas:k,onSaveTemplate:c,past:p,future:v,setSchemasList:T,onEdit:M,onEditEnd:N});const W=reactExports.useCallback(async ae=>{const oe=await template2SchemasList(ae);T(oe),N(),_(0),A.current?.scroll&&A.current.scroll({top:0,behavior:"smooth"})},[]),J=ae=>{const[oe,se,fe,pe]=isBlankPdf(a.basePdf)?a.basePdf.padding:[0,0,0,0],ge=V[I],me=ve=>{let he=$.reduce((Ee,xe)=>Ee+xe.length,1),ye=ve+he;for(;$.some(Ee=>Ee.find(xe=>xe.name===ye));)he++,ye=ve+he;return ye},be=(ve,he,ye)=>Math.min(Math.max(ve,he),ye),le={id:uuid$6(),...ae,name:me(g("field")),position:{x:be(pe,ae.position.x,ge.width-se-ae.width),y:be(oe,ae.position.y,ge.height-fe-ae.height)},required:ae.readOnly?!1:y.requiredByDefault||ae.required||!1};if(ae.position.y===0){const ve=x.current[I],he=ve?ve.getBoundingClientRect().top:0;le.position.y=he>0?oe:V[I].height/2}R($[I].concat(le)),setTimeout(()=>M([document.getElementById(le.id)]))},re=ae=>{R(ae)},K=ae=>{E(ae)},q=async(ae,oe)=>{_(oe);const se=schemasList2template(ae,a.basePdf);u(se),await W(se),U(se),setTimeout(()=>{A.current&&(A.current.scrollTop=getPagesScrollTopByIndex(V,oe,j))},0)},Q=()=>{if(I===0||!window.confirm(g("removePageConfirm")))return;const ae=cloneDeep$1($);ae.splice(I,1),q(ae,I-1)},ee=()=>{const ae=cloneDeep$1($);ae.splice(I+1,0,[]),q(ae,I+1)};B!==a&&(F(a),W(a));const Y=s.width-LEFT_SIDEBAR_WIDTH,Z={width:O?Y-RIGHT_SIDEBAR_WIDTH:Y,height:s.height};if(G)return jsxRuntimeExports.jsx(ErrorScreen,{size:s,error:G});const te=isBlankPdf(a.basePdf)?{addPageAfter:ee,removePage:Q}:{};return jsxRuntimeExports.jsx(Root,{size:s,scale:j,children:jsxRuntimeExports.jsxs(DndContext,{onDragEnd:ae=>{if(!ae.active)return;const oe=ae.active,se=x.current[I].getBoundingClientRect(),fe=oe.rect.current.initial?.left||0,pe=oe.rect.current.initial?.top||0,ge=se.left-fe+scaleDragPosAdjustment(20,j),me=se.top-pe,be=(ae.delta.y-me)/j,le=(ae.delta.x-ge)/j,ve={x:round$1(px2mm(Math.max(0,le)),2),y:round$1(px2mm(Math.max(0,be)),2)};J({...oe.data.current,position:ve})},onDragStart:N,children:[jsxRuntimeExports.jsx(LeftSidebar,{height:A.current?A.current.clientHeight:0,scale:j,basePdf:a.basePdf}),jsxRuntimeExports.jsxs("div",{style:{position:"absolute",width:Y,marginLeft:LEFT_SIDEBAR_WIDTH},children:[jsxRuntimeExports.jsx(CtlBar,{size:Z,pageCursor:I,pageNum:$.length,setPageCursor:ae=>{A.current&&(A.current.scrollTop=getPagesScrollTopByIndex(V,ae,j),_(ae),N())},zoomLevel:C,setZoomLevel:P,...te}),jsxRuntimeExports.jsx(Sidebar,{hoveringSchemaId:m,onChangeHoveringSchemaId:K,height:A.current?A.current.clientHeight:0,size:s,pageSize:V[I]??[],basePdf:a.basePdf,activeElements:w,schemasList:$,schemas:$[I]??[],changeSchemas:H,onSortEnd:re,onEdit:ae=>{const oe=document.getElementById(ae);oe&&M([oe])},onEditEnd:N,deselectSchema:N,sidebarOpen:O,setSidebarOpen:L}),jsxRuntimeExports.jsx(Canvas,{ref:A,paperRefs:x,basePdf:a.basePdf,hoveringSchemaId:m,onChangeHoveringSchemaId:K,height:s.height-RULER_HEIGHT*ZOOM,pageCursor:I,scale:j,size:Z,pageSizes:V,backgrounds:D,activeElements:w,schemasList:$,changeSchemas:H,removeSchemas:k,sidebarOpen:O,onEdit:M})]})]})})},defaultTheme={token:{colorPrimary:"#38a0ff"},components:{Form:{fontSize:12,margin:8,marginLG:12,marginXS:4,padding:8,paddingLG:12,paddingXS:4,itemMarginBottom:4,verticalLabelPadding:"0 0 2px"}}},isObject=a=>!!a&&typeof a=="object"&&!Array.isArray(a),deepMerge=(a,s)=>{let c={...a};return isObject(a)&&isObject(s)&&Object.keys(s).forEach(u=>{const d=s[u];if(isObject(d))if(!(u in a))Object.assign(c,{[u]:d});else{const p=a[u];isObject(p)?c[u]=deepMerge(p,d):Object.assign(c,{[u]:d})}else Object.assign(c,{[u]:d})}),c},AppContextProvider=({children:a,lang:s,font:c,plugins:u,options:d})=>{let p=defaultTheme;d.theme&&(p=deepMerge(p,d.theme));let v=getDict(s);return d.labels&&(v=deepMerge(v,d.labels)),jsxRuntimeExports.jsx(ConfigProvider,{theme:p,children:jsxRuntimeExports.jsx(I18nContext.Provider,{value:A=>i18n(A,v),children:jsxRuntimeExports.jsx(FontContext.Provider,{value:c,children:jsxRuntimeExports.jsx(PluginsRegistry.Provider,{value:u,children:jsxRuntimeExports.jsx(OptionsContext.Provider,{value:d,children:a})})})})})};class Designer extends BaseUIClass{constructor(s){super(s),this.pageCursor=0,checkDesignerProps(s)}saveTemplate(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);this.onSaveTemplateCallback&&this.onSaveTemplateCallback(this.template)}updateTemplate(s){if(checkTemplate(s),!this.domContainer)throw Error(DESTROYED_ERR_MSG);this.template=cloneDeep$1(s),this.onChangeTemplateCallback&&this.onChangeTemplateCallback(s),this.render()}onSaveTemplate(s){this.onSaveTemplateCallback=s}onChangeTemplate(s){this.onChangeTemplateCallback=s}getPageCursor(){return this.pageCursor}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(TemplateEditor,{template:this.template,onSaveTemplate:s=>{this.template=s,this.template.pdfmeVersion=PDFME_VERSION,this.onSaveTemplateCallback&&this.onSaveTemplateCallback(s)},onChangeTemplate:s=>{this.template=s,this.template.pdfmeVersion=PDFME_VERSION,this.onChangeTemplateCallback&&this.onChangeTemplateCallback(s)},onPageCursorChange:s=>{this.pageCursor=s},size:this.size})}),this.domContainer)}}const{Text}=Typography,icons={left:ChevronLeft,right:ChevronRight,doubleLeft:ChevronsLeft,doubleRight:ChevronsRight},UnitButton=({type:a,onClick:s,disabled:c,textStyle:u})=>{const d=icons[a];return jsxRuntimeExports.jsx(Button$1,{type:"text",onClick:s,disabled:c,children:jsxRuntimeExports.jsx(d,{style:{color:u.color}})})},UnitPager=({size:a,unitCursor:s,unitNum:c,setUnitCursor:u})=>{if(c<=1)return null;const{token:d}=theme.useToken(),p={pointerEvents:"initial",position:"sticky",zIndex:1,display:"flex",alignItems:"center",boxSizing:"border-box",height:40,padding:d.paddingSM,borderRadius:d.borderRadius,backgroundColor:d.colorBgMask},v={color:d.colorWhite,fontSize:d.fontSize,margin:d.marginXS};return jsxRuntimeExports.jsx("div",{style:{position:"absolute",...a},children:jsxRuntimeExports.jsxs("div",{style:{position:"sticky",width:"100%",zIndex:1,top:`calc(50% - ${p.height/2}px)`,display:"flex",alignItems:"center"},children:[s>0&&jsxRuntimeExports.jsxs("div",{style:{left:"1rem",marginLeft:"1rem",...p},children:[jsxRuntimeExports.jsx(UnitButton,{type:"doubleLeft",onClick:()=>u(0),disabled:s<=0,textStyle:v}),jsxRuntimeExports.jsx(UnitButton,{type:"left",onClick:()=>u(s-1),disabled:s<=0,textStyle:v}),jsxRuntimeExports.jsxs(Text,{strong:!0,style:v,children:[s+1,"/",c]})]}),s+1<c&&jsxRuntimeExports.jsxs("div",{style:{right:"1rem",marginLeft:"auto",marginRight:"1rem",...p},children:[jsxRuntimeExports.jsxs(Text,{strong:!0,style:v,children:[s+1,"/",c]}),jsxRuntimeExports.jsx(UnitButton,{type:"right",onClick:()=>u(s+1),disabled:s+1>=c,textStyle:v}),jsxRuntimeExports.jsx(UnitButton,{type:"doubleRight",onClick:()=>u(c-1),disabled:s+1>=c,textStyle:v})]})]})})},_cache=new Map,Preview=({template:a,inputs:s,size:c,onChangeInput:u})=>{const{token:d}=theme.useToken(),p=reactExports.useContext(FontContext),v=reactExports.useContext(OptionsContext),A=useMaxZoom(),x=reactExports.useRef(null),g=reactExports.useRef([]),[b,y]=reactExports.useState(0),[f,m]=reactExports.useState(0),[E,w]=reactExports.useState(v.zoomLevel??1),[S,$]=reactExports.useState([[]]),{backgrounds:T,pageSizes:I,scale:_,error:C,refresh:P}=useUIPreProcessor({template:a,size:c,zoomLevel:E,maxZoom:A}),O=!!u,L=s[b],B=V=>{getDynamicTemplate({template:V,input:L,options:{font:p},_cache,getDynamicHeights:(G,U)=>{switch(U.schema.type){case"table":return getDynamicHeightsForTable(G,U);default:return Promise.resolve([U.schema.height])}}}).then(async G=>{const U=await template2SchemasList(G);$(U),await P(G)}).catch(G=>console.error("[@pdfme/ui] ",G))};reactExports.useEffect(()=>{typeof v.zoomLevel=="number"&&v.zoomLevel!==E&&w(v.zoomLevel)},[v]),reactExports.useEffect(()=>{b>s.length-1&&y(s.length-1),B(a)},[a,s,c]),useScrollPageCursor({ref:x,pageSizes:I,scale:_,pageCursor:f,onChangePageCursor:m});const F=({name:V,value:j})=>u&&u({index:b,name:V,value:j}),D=(V,j)=>{let G=!1;V.forEach(({key:U,value:M})=>{if(U==="content"){const N=M,R=L?.[j.name]||"";if(N===R)return;F({name:j.name,value:N}),j.type==="table"&&(G=!0)}else{const N=S[f].find(R=>R.id===j.id);if(!N)return;N[U]=M}}),G&&B(a),$([...S])};return C?jsxRuntimeExports.jsx(ErrorScreen,{size:c,error:C}):jsxRuntimeExports.jsxs(Root,{size:c,scale:_,children:[jsxRuntimeExports.jsx(CtlBar,{size:c,pageCursor:f,pageNum:S.length,setPageCursor:V=>{x.current&&(x.current.scrollTop=getPagesScrollTopByIndex(I,V,_),m(V))},zoomLevel:E,setZoomLevel:w}),jsxRuntimeExports.jsx(UnitPager,{size:c,unitCursor:b,unitNum:s.length,setUnitCursor:y}),jsxRuntimeExports.jsx("div",{ref:x,style:{...c,position:"relative",overflow:"auto"},children:jsxRuntimeExports.jsx(Paper,{paperRefs:g,scale:_,size:c,schemasList:S,pageSizes:I,backgrounds:T,renderSchema:({schema:V,index:j})=>{const G=V.readOnly?replacePlaceholders({content:V.content||"",variables:{...L,totalPages:S.length,currentPage:j+1},schemas:S}):String(L&&L[V.name]||"");return jsxRuntimeExports.jsx(Renderer,{schema:V,basePdf:a.basePdf,value:G,mode:O?"form":"viewer",placeholder:V.content,tabIndex:j+100,onChange:U=>{const M=Array.isArray(U)?U:[U];D(M,V)},outline:O&&!V.readOnly?`1px dashed ${d.colorPrimary}`:"transparent",scale:_},V.id)},renderPaper:({index:V})=>jsxRuntimeExports.jsx(StaticSchema,{template:a,scale:_,input:L,totalPages:S.length,currentPage:V+1})})})]})};class Form extends PreviewUI{constructor(s){super(s)}onChangeInput(s){this.onChangeInputCallback=s}setInputs(s){const c=this.getInputs();super.setInputs(s);const u=[];s.forEach((d,p)=>{const v=c[p]||{};new Set([...Object.keys(d),...Object.keys(v)]).forEach(x=>{const g=d[x],b=v[x];g!==b&&u.push({index:p,name:x,value:g})})}),u.forEach(d=>{this.onChangeInputCallback&&this.onChangeInputCallback(d)})}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(Preview,{template:this.template,size:this.size,inputs:this.inputs,onChangeInput:s=>{const{index:c,value:u,name:d}=s;this.onChangeInputCallback&&this.onChangeInputCallback({index:c,value:u,name:d}),this.inputs&&this.inputs[c]&&this.inputs[c][d]!==u&&(this.inputs[c][d]=u,this.render())}})}),this.domContainer)}}class Viewer extends PreviewUI{constructor(s){super(s),console.warn("[@pdfme/ui] Viewer component is deprecated and will be removed in a future version.")}render(){if(!this.domContainer)throw Error(DESTROYED_ERR_MSG);ReactDOM.render(jsxRuntimeExports.jsx(AppContextProvider,{lang:this.getLang(),font:this.getFont(),plugins:this.getPluginsRegistry(),options:this.getOptions(),children:jsxRuntimeExports.jsx(Preview,{template:this.template,size:this.size,inputs:this.inputs})}),this.domContainer)}}exports.Designer=Designer,exports.Form=Form,exports.Viewer=Viewer,Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})}));
@@ -3,19 +3,13 @@ import { BaseUIClass } from './class.js';
3
3
  declare class Designer extends BaseUIClass {
4
4
  private onSaveTemplateCallback?;
5
5
  private onChangeTemplateCallback?;
6
- private onPageChangeCallback?;
7
6
  private pageCursor;
8
7
  constructor(props: DesignerProps);
9
8
  saveTemplate(): void;
10
9
  updateTemplate(template: Template): void;
11
10
  onSaveTemplate(cb: (template: Template) => void): void;
12
11
  onChangeTemplate(cb: (template: Template) => void): void;
13
- onPageChange(cb: (pageInfo: {
14
- currentPage: number;
15
- totalPages: number;
16
- }) => void): void;
17
12
  getPageCursor(): number;
18
- getTotalPages(): number;
19
13
  protected render(): void;
20
14
  }
21
15
  export default Designer;
@@ -2,20 +2,12 @@ import { PreviewProps } from '@pdfme/common';
2
2
  import { PreviewUI } from './class.js';
3
3
  declare class Form extends PreviewUI {
4
4
  private onChangeInputCallback?;
5
- private onPageChangeCallback?;
6
- private pageCursor;
7
5
  constructor(props: PreviewProps);
8
6
  onChangeInput(cb: (arg: {
9
7
  index: number;
10
8
  value: string;
11
9
  name: string;
12
10
  }) => void): void;
13
- onPageChange(cb: (pageInfo: {
14
- currentPage: number;
15
- totalPages: number;
16
- }) => void): void;
17
- getPageCursor(): number;
18
- getTotalPages(): number;
19
11
  setInputs(inputs: {
20
12
  [key: string]: string;
21
13
  }[]): void;
@@ -1,15 +1,7 @@
1
1
  import { PreviewProps } from '@pdfme/common';
2
2
  import { PreviewUI } from './class.js';
3
3
  declare class Viewer extends PreviewUI {
4
- private onPageChangeCallback?;
5
- private pageCursor;
6
4
  constructor(props: PreviewProps);
7
- onPageChange(cb: (pageInfo: {
8
- currentPage: number;
9
- totalPages: number;
10
- }) => void): void;
11
- getPageCursor(): number;
12
- getTotalPages(): number;
13
5
  protected render(): void;
14
6
  }
15
7
  export default Viewer;
@@ -6,6 +6,6 @@ declare const TemplateEditor: ({ template, size, onSaveTemplate, onChangeTemplat
6
6
  onChangeTemplate: (t: Template) => void;
7
7
  } & {
8
8
  onChangeTemplate: (t: Template) => void;
9
- onPageCursorChange: (newPageCursor: number, totalPages: number) => void;
9
+ onPageCursorChange: (newPageCursor: number) => void;
10
10
  }) => React.JSX.Element;
11
11
  export default TemplateEditor;
@@ -1,15 +1,11 @@
1
1
  import React from 'react';
2
2
  import { PreviewProps, Size } from '@pdfme/common';
3
- declare const Preview: ({ template, inputs, size, onChangeInput, onPageChange, }: Omit<PreviewProps, "domContainer"> & {
3
+ declare const Preview: ({ template, inputs, size, onChangeInput, }: Omit<PreviewProps, "domContainer"> & {
4
4
  onChangeInput?: (args: {
5
5
  index: number;
6
6
  value: string;
7
7
  name: string;
8
8
  }) => void;
9
- onPageChange?: (pageInfo: {
10
- currentPage: number;
11
- totalPages: number;
12
- }) => void;
13
9
  size: Size;
14
10
  }) => React.JSX.Element;
15
11
  export default Preview;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/ui",
3
- "version": "5.5.6-dev.1",
3
+ "version": "5.5.6",
4
4
  "sideEffects": false,
5
5
  "author": "hand-dot",
6
6
  "license": "MIT",
package/src/Designer.tsx CHANGED
@@ -16,7 +16,6 @@ import AppContextProvider from './components/AppContextProvider.js';
16
16
  class Designer extends BaseUIClass {
17
17
  private onSaveTemplateCallback?: (template: Template) => void;
18
18
  private onChangeTemplateCallback?: (template: Template) => void;
19
- private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
20
19
  private pageCursor: number = 0;
21
20
 
22
21
  constructor(props: DesignerProps) {
@@ -49,19 +48,10 @@ class Designer extends BaseUIClass {
49
48
  this.onChangeTemplateCallback = cb;
50
49
  }
51
50
 
52
- public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
53
- this.onPageChangeCallback = cb;
54
- }
55
-
56
51
  public getPageCursor() {
57
52
  return this.pageCursor;
58
53
  }
59
54
 
60
- public getTotalPages() {
61
- if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
62
- return this.template.schemas.length;
63
- }
64
-
65
55
  protected render() {
66
56
  if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
67
57
  ReactDOM.render(
@@ -87,14 +77,8 @@ class Designer extends BaseUIClass {
87
77
  this.onChangeTemplateCallback(template);
88
78
  }
89
79
  }}
90
- onPageCursorChange={(newPageCursor: number, totalPages: number) => {
80
+ onPageCursorChange={(newPageCursor: number) => {
91
81
  this.pageCursor = newPageCursor;
92
- if (this.onPageChangeCallback) {
93
- this.onPageChangeCallback({
94
- currentPage: newPageCursor,
95
- totalPages: totalPages,
96
- });
97
- }
98
82
  }}
99
83
  size={this.size}
100
84
  />
package/src/Form.tsx CHANGED
@@ -8,8 +8,6 @@ import Preview from './components/Preview.js';
8
8
 
9
9
  class Form extends PreviewUI {
10
10
  private onChangeInputCallback?: (arg: { index: number; value: string; name: string }) => void;
11
- private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
12
- private pageCursor: number = 0;
13
11
 
14
12
  constructor(props: PreviewProps) {
15
13
  super(props);
@@ -19,19 +17,6 @@ class Form extends PreviewUI {
19
17
  this.onChangeInputCallback = cb;
20
18
  }
21
19
 
22
- public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
23
- this.onPageChangeCallback = cb;
24
- }
25
-
26
- public getPageCursor() {
27
- return this.pageCursor;
28
- }
29
-
30
- public getTotalPages() {
31
- if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
32
- return this.template.schemas.length;
33
- }
34
-
35
20
  public setInputs(inputs: { [key: string]: string }[]): void {
36
21
  const previousInputs = this.getInputs();
37
22
 
@@ -86,12 +71,6 @@ class Form extends PreviewUI {
86
71
  }
87
72
  }
88
73
  }}
89
- onPageChange={(pageInfo) => {
90
- this.pageCursor = pageInfo.currentPage;
91
- if (this.onPageChangeCallback) {
92
- this.onPageChangeCallback(pageInfo);
93
- }
94
- }}
95
74
  />
96
75
  </AppContextProvider>,
97
76
  this.domContainer,
package/src/Viewer.tsx CHANGED
@@ -7,9 +7,6 @@ import Preview from './components/Preview.js';
7
7
  import AppContextProvider from './components/AppContextProvider.js';
8
8
 
9
9
  class Viewer extends PreviewUI {
10
- private onPageChangeCallback?: (pageInfo: { currentPage: number; totalPages: number }) => void;
11
- private pageCursor: number = 0;
12
-
13
10
  constructor(props: PreviewProps) {
14
11
  super(props);
15
12
  console.warn(
@@ -17,19 +14,6 @@ class Viewer extends PreviewUI {
17
14
  );
18
15
  }
19
16
 
20
- public onPageChange(cb: (pageInfo: { currentPage: number; totalPages: number }) => void) {
21
- this.onPageChangeCallback = cb;
22
- }
23
-
24
- public getPageCursor() {
25
- return this.pageCursor;
26
- }
27
-
28
- public getTotalPages() {
29
- if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
30
- return this.template.schemas.length;
31
- }
32
-
33
17
  protected render() {
34
18
  if (!this.domContainer) throw Error(DESTROYED_ERR_MSG);
35
19
  ReactDOM.render(
@@ -39,17 +23,7 @@ class Viewer extends PreviewUI {
39
23
  plugins={this.getPluginsRegistry()}
40
24
  options={this.getOptions()}
41
25
  >
42
- <Preview
43
- template={this.template}
44
- size={this.size}
45
- inputs={this.inputs}
46
- onPageChange={(pageInfo) => {
47
- this.pageCursor = pageInfo.currentPage;
48
- if (this.onPageChangeCallback) {
49
- this.onPageChangeCallback(pageInfo);
50
- }
51
- }}
52
- />
26
+ <Preview template={this.template} size={this.size} inputs={this.inputs} />
53
27
  </AppContextProvider>,
54
28
  this.domContainer,
55
29
  );
@@ -54,7 +54,7 @@ const TemplateEditor = ({
54
54
  onChangeTemplate: (t: Template) => void;
55
55
  } & {
56
56
  onChangeTemplate: (t: Template) => void;
57
- onPageCursorChange: (newPageCursor: number, totalPages: number) => void;
57
+ onPageCursorChange: (newPageCursor: number) => void;
58
58
  }) => {
59
59
  const past = useRef<SchemaForUI[][]>([]);
60
60
  const future = useRef<SchemaForUI[][]>([]);
@@ -110,7 +110,7 @@ const TemplateEditor = ({
110
110
  pageCursor,
111
111
  onChangePageCursor: (p) => {
112
112
  setPageCursor(p);
113
- onPageCursorChange(p, schemasList.length);
113
+ onPageCursorChange(p);
114
114
  onEditEnd();
115
115
  },
116
116
  });
@@ -239,9 +239,6 @@ const TemplateEditor = ({
239
239
  onChangeTemplate(newTemplate);
240
240
  await updateTemplate(newTemplate);
241
241
  void refresh(newTemplate);
242
-
243
- // Notify page change with updated total pages
244
- onPageCursorChange(newPageCursor, sl.length);
245
242
 
246
243
  // Use setTimeout to update scroll position after render
247
244
  setTimeout(() => {
@@ -329,7 +326,6 @@ const TemplateEditor = ({
329
326
  // Update scroll position and state
330
327
  canvasRef.current.scrollTop = getPagesScrollTopByIndex(pageSizes, p, scale);
331
328
  setPageCursor(p);
332
- onPageCursorChange(p, schemasList.length);
333
329
  onEditEnd();
334
330
  }}
335
331
  zoomLevel={zoomLevel}
@@ -27,10 +27,8 @@ const Preview = ({
27
27
  inputs,
28
28
  size,
29
29
  onChangeInput,
30
- onPageChange,
31
30
  }: Omit<PreviewProps, 'domContainer'> & {
32
31
  onChangeInput?: (args: { index: number; value: string; name: string }) => void;
33
- onPageChange?: (pageInfo: { currentPage: number; totalPages: number }) => void;
34
32
  size: Size;
35
33
  }) => {
36
34
  const { token } = theme.useToken();
@@ -104,12 +102,7 @@ const Preview = ({
104
102
  pageSizes,
105
103
  scale,
106
104
  pageCursor,
107
- onChangePageCursor: (p) => {
108
- setPageCursor(p);
109
- if (onPageChange) {
110
- onPageChange({ currentPage: p, totalPages: schemasList.length });
111
- }
112
- },
105
+ onChangePageCursor: setPageCursor,
113
106
  });
114
107
 
115
108
  const handleChangeInput = ({ name, value }: { name: string; value: string }) =>
@@ -153,9 +146,6 @@ const Preview = ({
153
146
  if (!containerRef.current) return;
154
147
  containerRef.current.scrollTop = getPagesScrollTopByIndex(pageSizes, p, scale);
155
148
  setPageCursor(p);
156
- if (onPageChange) {
157
- onPageChange({ currentPage: p, totalPages: schemasList.length });
158
- }
159
149
  }}
160
150
  zoomLevel={zoomLevel}
161
151
  setZoomLevel={setZoomLevel}