pdf-search-highlight 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/hoangnguyen/Desktop/untitled%20folder/pdf-search-highlight/dist/chunk-OMRGA5I4.cjs"],"names":[],"mappings":"AAAA;AACA,IAAI,aAAa,EAAE,MAAM;AACzB,EAAE,WAAW,CAAC,EAAE;AAChB,IAAI,IAAI,CAAC,UAAU,kBAAkB,IAAI,GAAG,CAAC,CAAC;AAC9C,EAAE;AACF,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE;AACtB,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACpC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,kBAAkB,IAAI,GAAG,CAAC,CAAC,CAAC;AAC1D,IAAI;AACJ,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvB,oBAAI,IAAI,mBAAC,SAAS,qBAAC,GAAG,mBAAC,KAAK,CAAC,6BAAE,MAAM,mBAAC,QAAQ,GAAC;AAC/C,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACpB,oBAAI,IAAI,qBAAC,SAAS,qBAAC,GAAG,mBAAC,KAAK,CAAC,6BAAE,OAAO,qBAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAC;AACxD,EAAE;AACF,EAAE,kBAAkB,CAAC,EAAE;AACvB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,EAAE;AACF,CAAC;AACD;AACA;AACA,IAAI,oBAAoB,EAAE;AAC1B,EAAE,SAAS,EAAE,eAAe;AAC5B,EAAE,IAAI,EAAE,UAAU;AAClB,EAAE,MAAM,EAAE,YAAY;AACtB,EAAE,SAAS,EAAE,gBAAgB;AAC7B,EAAE,SAAS,EAAE,gBAAgB;AAC7B,EAAE,SAAS,EAAE,WAAW;AACxB,EAAE,eAAe,EAAE;AACnB,CAAC;AACD,IAAI,cAAc,EAAE,MAAM;AAC1B,IAAI,iBAAiB,EAAE,EAAE;AACzB;AACA;AACA,IAAI,YAAY,EAAE,MAAM;AACxB,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI;AACtB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AACtB,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI;AACxB,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS;AAC9B,IAAI,IAAI,CAAC,MAAM,mBAAE,OAAO,CAAC,KAAM,UAAG,eAAa;AAC/C,IAAI,IAAI,CAAC,QAAQ,mBAAE,OAAO,CAAC,OAAQ,UAAG,kBAAgB;AACtD,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS;AACtC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,mBAAmB,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;AAChE,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG;AACvB,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,GAAG,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS;AACxD,IAAI;AACJ,EAAE;AACF;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE;AAC7B,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ;AACR,MAAM,CAAC;AACP,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AAClB,IAAI,IAAI,IAAI;AACZ,IAAI,GAAG,CAAC,OAAO,WAAW,IAAI,EAAE;AAChC,MAAM,KAAK,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,OAAO,IAAI,QAAQ,EAAE;AAC3C,MAAM,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5B,IAAI,EAAE,KAAK;AACX,MAAM,KAAK,EAAE,MAAM;AACnB,IAAI;AACJ,IAAI,MAAM,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,WAAW,CAAC,OAAO;AAC3C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,EAAE;AACzB,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AAC/D,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE;AACjC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACxC,MAAM,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;AACzD,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5B,IAAI;AACJ,IAAI,OAAO,IAAI,CAAC,QAAQ;AACxB,EAAE;AACF,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;AAC9C,IAAI,MAAM,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC3C,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1C,IAAI,MAAM,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;AACvC,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU;AACzC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI;AAC3C,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI;AAC7C,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ;AACrC,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI;AACtD,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ;AACvC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;AAC5C,IAAI,MAAM,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;AACtC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;AAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI;AACxC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI;AAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO;AAClC,IAAI,MAAM,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACvC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO;AACnE,IAAI,MAAM,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;AAC5C,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU;AACzC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG;AAC7B,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;AAC9B,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG;AAC/B,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;AAChC,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ;AACvC,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG;AACpC,IAAI,MAAM,GAAG,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1C,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE;AACjC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ;AAC7C,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;AAC3E,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACjD,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE;AACvC,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU;AACtC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI;AACpC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI;AACxC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI;AACrC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa;AACtC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK;AACnC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM;AAChC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO;AAC1C,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ;AAC9D,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;AAC3B,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,MAAM;AACN,MAAM,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;AACjC,MAAM,KAAK,CAAC,IAAI,CAAC;AACjB,QAAQ,EAAE,EAAE,IAAI;AAChB,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE;AAC5B,QAAQ,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AACvB,MAAM,CAAC,CAAC;AACR,IAAI;AACJ,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AACjC,IAAI,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AACpC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AACzC,IAAI,MAAM,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;AACxC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,oBAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/hoangnguyen/Desktop/untitled folder/pdf-search-highlight/dist/chunk-OMRGA5I4.cjs","sourcesContent":[null]}
|
|
1
|
+
{"version":3,"sources":["/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/chunk-OMRGA5I4.cjs","../src/core/EventEmitter.ts","../src/core/constants.ts","../src/core/PDFRenderer.ts","../src/core/SearchEngine.ts","../src/core/HighlightManager.ts","../src/core/PDFSearchViewer.ts","../src/core/SearchController.ts"],"names":[],"mappings":"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","file":"/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/chunk-OMRGA5I4.cjs","sourcesContent":[null,"type Listener<T> = (data: T) => void;\n\nexport class EventEmitter<EventMap extends { [key: string]: unknown }> {\n private listeners = new Map<keyof EventMap, Set<Listener<any>>>();\n\n on<K extends keyof EventMap>(event: K, listener: Listener<EventMap[K]>): this {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(listener);\n return this;\n }\n\n off<K extends keyof EventMap>(event: K, listener: Listener<EventMap[K]>): this {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n\n protected emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void {\n this.listeners.get(event)?.forEach((fn) => fn(data));\n }\n\n removeAllListeners(): void {\n this.listeners.clear();\n }\n}\n","import type { ClassNames } from '../types';\n\nexport const DEFAULT_CLASS_NAMES: Required<ClassNames> = {\n container: 'psh-container',\n page: 'psh-page',\n canvas: 'psh-canvas',\n textLayer: 'psh-text-layer',\n pageLabel: 'psh-page-label',\n highlight: 'highlight',\n activeHighlight: 'active',\n};\n\nexport const DEFAULT_SCALE = 'auto' as number | 'auto';\nexport const DEFAULT_PAGE_GAP = 20;\n","import type { PDFSearchViewerOptions, ClassNames, PageData, SpanData } from '../types';\nimport { DEFAULT_CLASS_NAMES, DEFAULT_SCALE, DEFAULT_PAGE_GAP } from './constants';\n\n// pdfjs-dist types\ntype PDFDocumentProxy = any;\ntype PDFPageProxy = any;\n\n/**\n * Renders PDF pages into a container using canvas + text layer.\n *\n * Text layer approach (matching demo):\n * - Extract text content from each page\n * - Create absolutely-positioned <span> elements overlaying the canvas\n * - Position spans using the transform matrix from pdf.js\n * - Spans are transparent (for text selection) but allow DOM-based search/highlight\n */\nexport class PDFRenderer {\n private container: HTMLElement;\n private scale: number | 'auto';\n private pageGap: number;\n private cls: Required<ClassNames>;\n private workerSrc?: string;\n private pdfDoc: PDFDocumentProxy | null = null;\n private pageData: PageData[] = [];\n private pdfjsLib: any = null;\n\n constructor(container: HTMLElement, options: PDFSearchViewerOptions) {\n this.container = container;\n this.scale = options.scale ?? DEFAULT_SCALE;\n this.pageGap = options.pageGap ?? DEFAULT_PAGE_GAP;\n this.workerSrc = options.workerSrc;\n this.cls = { ...DEFAULT_CLASS_NAMES, ...options.classNames };\n }\n\n /**\n * Set the pdfjs-dist library reference.\n * Must be called before loadDocument.\n */\n setPdfjsLib(lib: any): void {\n this.pdfjsLib = lib;\n if (this.workerSrc) {\n lib.GlobalWorkerOptions.workerSrc = this.workerSrc;\n }\n }\n\n /**\n * Load a PDF from File, ArrayBuffer, URL string, or Uint8Array.\n */\n async loadDocument(\n source: File | ArrayBuffer | Uint8Array | string\n ): Promise<number> {\n if (!this.pdfjsLib) {\n throw new Error(\n 'pdfjs-dist not set. Call setPdfjsLib(pdfjsLib) before loading a document.'\n );\n }\n\n this.cleanup();\n\n let data: ArrayBuffer | Uint8Array | { url: string };\n if (source instanceof File) {\n data = await source.arrayBuffer();\n } else if (typeof source === 'string') {\n data = { url: source };\n } else {\n data = source;\n }\n\n const loadingTask = this.pdfjsLib.getDocument({ data });\n this.pdfDoc = await loadingTask.promise;\n return this.pdfDoc.numPages;\n }\n\n /**\n * Render all pages into the container.\n * Returns PageData[] for search/highlight.\n */\n async renderAllPages(): Promise<PageData[]> {\n if (!this.pdfDoc) throw new Error('No PDF document loaded');\n\n this.container.innerHTML = '';\n this.container.classList.add(this.cls.container);\n this.pageData = [];\n\n const numPages = this.pdfDoc.numPages;\n\n for (let i = 1; i <= numPages; i++) {\n const page = await this.pdfDoc.getPage(i);\n const pd = await this.renderPage(page, i, numPages);\n this.pageData.push(pd);\n }\n\n return this.pageData;\n }\n\n private async renderPage(\n page: PDFPageProxy,\n pageNum: number,\n totalPages: number\n ): Promise<PageData> {\n const scale = this.calculateScale(page);\n const vp = page.getViewport({ scale });\n\n // Page container\n const container = document.createElement('div');\n container.className = this.cls.page;\n container.style.position = 'relative';\n container.style.width = vp.width + 'px';\n container.style.height = vp.height + 'px';\n container.style.margin = '0 auto';\n container.style.marginBottom = this.pageGap + 'px';\n container.style.overflow = 'hidden';\n container.dataset.page = String(pageNum);\n\n // Canvas (2x for retina)\n const canvas = document.createElement('canvas');\n canvas.className = this.cls.canvas;\n canvas.width = vp.width * 2;\n canvas.height = vp.height * 2;\n canvas.style.width = vp.width + 'px';\n canvas.style.height = vp.height + 'px';\n canvas.style.display = 'block';\n const ctx = canvas.getContext('2d')!;\n ctx.scale(2, 2);\n await page.render({ canvasContext: ctx, viewport: vp }).promise;\n\n // Text layer\n const textLayer = document.createElement('div');\n textLayer.className = this.cls.textLayer;\n textLayer.style.position = 'absolute';\n textLayer.style.top = '0';\n textLayer.style.left = '0';\n textLayer.style.right = '0';\n textLayer.style.bottom = '0';\n textLayer.style.overflow = 'hidden';\n textLayer.style.lineHeight = '1';\n\n const tc = await page.getTextContent();\n const spans: SpanData[] = [];\n\n for (const item of tc.items) {\n if (!item.str && !item.hasEOL) continue;\n\n const tx = this.pdfjsLib.Util.transform(vp.transform, item.transform);\n const span = document.createElement('span');\n span.textContent = item.str || '';\n const fh = Math.hypot(tx[2], tx[3]);\n span.style.position = 'absolute';\n span.style.left = tx[4] + 'px';\n span.style.top = (tx[5] - fh) + 'px';\n span.style.fontSize = fh + 'px';\n span.style.color = 'transparent';\n span.style.whiteSpace = 'pre';\n span.style.cursor = 'text';\n span.style.transformOrigin = '0% 0%';\n if (item.fontName) span.style.fontFamily = item.fontName;\n\n const sw = tx[0] / fh;\n if (Math.abs(sw - 1) > 0.01) {\n span.style.transform = `scaleX(${sw})`;\n }\n\n textLayer.appendChild(span);\n spans.push({\n el: span,\n text: item.str || '',\n hasEOL: !!item.hasEOL,\n });\n }\n\n container.appendChild(canvas);\n container.appendChild(textLayer);\n this.container.appendChild(container);\n\n // Page label\n const label = document.createElement('div');\n label.className = this.cls.pageLabel;\n label.textContent = `Page ${pageNum} / ${totalPages}`;\n this.container.appendChild(label);\n\n return { container, spans };\n }\n\n private calculateScale(page: PDFPageProxy): number {\n if (this.scale !== 'auto' && typeof this.scale === 'number') {\n return this.scale;\n }\n const defaultVp = page.getViewport({ scale: 1 });\n const containerWidth = this.container.clientWidth || 800;\n return Math.min(containerWidth / defaultVp.width, 2);\n }\n\n getClassNames(): Required<ClassNames> {\n return this.cls;\n }\n\n getPageData(): PageData[] {\n return this.pageData;\n }\n\n getPageCount(): number {\n return this.pdfDoc?.numPages ?? 0;\n }\n\n cleanup(): void {\n this.pdfDoc?.destroy();\n this.pdfDoc = null;\n this.pageData = [];\n this.container.innerHTML = '';\n }\n}\n","import type { SearchOptions, SpanData } from '../types';\n\nexport interface CharMapEntry {\n spanIdx: number;\n charIdx: number;\n}\n\nexport interface MatchRange {\n spanIdx: number;\n start: number;\n end: number;\n}\n\nexport interface SearchResult {\n /** Array of span ranges for each match */\n matchRanges: MatchRange[][];\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Build a flexible regex from query.\n *\n * For queries < 200 chars (after removing whitespace):\n * - Strip all whitespace from query\n * - Insert \\s* between every character\n * → \"and expensive\" becomes a\\s*n\\s*d\\s*e\\s*x\\s*p\\s*e\\s*n\\s*s\\s*i\\s*v\\s*e\n * → Matches regardless of whitespace differences in PDF text\n *\n * For queries >= 200 chars:\n * - Split by whitespace, join with \\s+\n */\nfunction buildFlexibleRegex(\n query: string,\n options: SearchOptions\n): RegExp | null {\n const trimmed = query.trim();\n if (!trimmed) return null;\n\n const isCaseSensitive = options.caseSensitive ?? false;\n const flexibleWhitespace = options.flexibleWhitespace ?? true;\n\n if (!flexibleWhitespace) {\n // Simple literal search\n const pattern = escapeRegex(trimmed);\n return new RegExp(pattern, isCaseSensitive ? 'g' : 'gi');\n }\n\n // Remove all whitespace chars from query\n const chars = [...trimmed].filter((c) => !/\\s/.test(c));\n if (chars.length === 0) return null;\n\n if (chars.length > 200) {\n // Fallback: flexible between tokens only\n const tokens = trimmed.split(/\\s+/);\n const pattern = tokens.map((t) => escapeRegex(t)).join('\\\\s+');\n return new RegExp(pattern, isCaseSensitive ? 'g' : 'gi');\n }\n\n // Insert \\s* between every character\n const pattern = chars.map((c) => escapeRegex(c)).join('\\\\s*');\n return new RegExp(pattern, isCaseSensitive ? 'g' : 'gi');\n}\n\n/**\n * Search for text across page spans using charMap-based matching.\n *\n * Algorithm:\n * 1. Concatenate all span texts into one string (fullText)\n * 2. Build charMap: charMap[i] = { spanIdx, charIdx } for each char in fullText\n * 3. Run regex on fullText\n * 4. Map each match back to span ranges via charMap\n */\nexport function searchPage(\n spans: SpanData[],\n query: string,\n options: SearchOptions = {}\n): MatchRange[][] {\n const regex = buildFlexibleRegex(query, options);\n if (!regex) return [];\n\n // Build fullText and charMap\n let fullText = '';\n const charMap: CharMapEntry[] = [];\n\n spans.forEach((s, si) => {\n for (let ci = 0; ci < s.text.length; ci++) {\n charMap.push({ spanIdx: si, charIdx: ci });\n fullText += s.text[ci];\n }\n });\n\n // Find all regex matches\n const allMatchRanges: MatchRange[][] = [];\n let m: RegExpExecArray | null;\n regex.lastIndex = 0;\n\n while ((m = regex.exec(fullText)) !== null) {\n const start = m.index;\n const end = start + m[0].length;\n\n // Map to span ranges\n const range: MatchRange[] = [];\n for (let k = start; k < end; k++) {\n const cm = charMap[k];\n const last = range[range.length - 1];\n if (last && last.spanIdx === cm.spanIdx && last.end === cm.charIdx) {\n last.end = cm.charIdx + 1;\n } else {\n range.push({ spanIdx: cm.spanIdx, start: cm.charIdx, end: cm.charIdx + 1 });\n }\n }\n allMatchRanges.push(range);\n\n // Prevent infinite loop for zero-length matches\n if (m[0].length === 0) regex.lastIndex++;\n }\n\n return allMatchRanges;\n}\n","import type { SearchMatch, SpanData, PageData } from '../types';\nimport type { MatchRange } from './SearchEngine';\n\n/**\n * Manages cross-span highlighting using the charMap approach.\n *\n * Algorithm (from demo):\n * 1. Group match ranges by spanIdx\n * 2. For each affected span, replace textContent with a DocumentFragment:\n * - Plain text nodes for non-matching parts\n * - <mark> elements for matching parts\n * 3. Collect marks per match for navigation\n */\nexport class HighlightManager {\n private matches: SearchMatch[] = [];\n private currentMatch = -1;\n private highlightClass: string;\n private activeHighlightClass: string;\n\n constructor(highlightClass: string, activeHighlightClass: string) {\n this.highlightClass = highlightClass;\n this.activeHighlightClass = activeHighlightClass;\n }\n\n /**\n * Apply highlights for all matches on a page.\n * Returns the SearchMatch[] (array of mark groups).\n */\n applyHighlights(\n pageSpans: SpanData[],\n matchRanges: MatchRange[][]\n ): SearchMatch[] {\n if (!matchRanges.length) return [];\n\n // Group ranges by spanIdx, keeping track of which match they belong to\n const spanRanges: Record<\n number,\n { start: number; end: number; matchIdx: number }[]\n > = {};\n\n matchRanges.forEach((range, mi) => {\n range.forEach((r) => {\n if (!spanRanges[r.spanIdx]) spanRanges[r.spanIdx] = [];\n spanRanges[r.spanIdx].push({ start: r.start, end: r.end, matchIdx: mi });\n });\n });\n\n // Collect marks per match\n const matchMarks: HTMLElement[][] = matchRanges.map(() => []);\n\n // For each affected span, rebuild DOM with highlights\n for (const siStr of Object.keys(spanRanges)) {\n const si = parseInt(siStr, 10);\n const s = pageSpans[si];\n const ranges = spanRanges[si].sort((a, b) => a.start - b.start);\n\n const frag = document.createDocumentFragment();\n let last = 0;\n\n for (const r of ranges) {\n const actualStart = Math.max(r.start, last);\n\n // Add plain text before highlight\n if (actualStart > last) {\n frag.appendChild(document.createTextNode(s.text.slice(last, actualStart)));\n }\n\n // Add highlight mark\n if (actualStart < r.end) {\n const mark = document.createElement('mark');\n mark.className = this.highlightClass;\n mark.textContent = s.text.slice(actualStart, r.end);\n frag.appendChild(mark);\n matchMarks[r.matchIdx].push(mark);\n }\n\n last = Math.max(last, r.end);\n }\n\n // Add remaining plain text\n if (last < s.text.length) {\n frag.appendChild(document.createTextNode(s.text.slice(last)));\n }\n\n // Replace span content\n s.el.textContent = '';\n s.el.appendChild(frag);\n }\n\n return matchMarks\n .filter((marks) => marks.length > 0)\n .map((marks) => ({ marks }));\n }\n\n /**\n * Add matches to the global list.\n */\n addMatches(newMatches: SearchMatch[]): void {\n this.matches.push(...newMatches);\n }\n\n /**\n * Clear all highlights and restore original span text.\n */\n clearHighlights(allPageData: PageData[]): void {\n allPageData.forEach((pd) => {\n pd.spans.forEach((s) => {\n s.el.textContent = s.text;\n });\n });\n this.matches = [];\n this.currentMatch = -1;\n }\n\n /**\n * Set active match by index. Applies active CSS class and scrolls into view.\n */\n setActiveMatch(index: number): void {\n // Remove active class from previous\n if (this.currentMatch >= 0 && this.currentMatch < this.matches.length) {\n this.matches[this.currentMatch].marks.forEach((m) =>\n m.classList.remove(this.activeHighlightClass)\n );\n }\n\n this.currentMatch = index;\n\n if (index >= 0 && index < this.matches.length) {\n this.matches[index].marks.forEach((m) =>\n m.classList.add(this.activeHighlightClass)\n );\n // Scroll first mark into view\n this.matches[index].marks[0]?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n }\n\n /**\n * Navigate to next match (wraps around).\n */\n next(): number {\n if (this.matches.length === 0) return -1;\n const newIdx = (this.currentMatch + 1) % this.matches.length;\n this.setActiveMatch(newIdx);\n return newIdx;\n }\n\n /**\n * Navigate to previous match (wraps around).\n */\n prev(): number {\n if (this.matches.length === 0) return -1;\n const newIdx =\n (this.currentMatch - 1 + this.matches.length) % this.matches.length;\n this.setActiveMatch(newIdx);\n return newIdx;\n }\n\n getCurrentIndex(): number {\n return this.currentMatch;\n }\n\n getTotal(): number {\n return this.matches.length;\n }\n\n getMatches(): SearchMatch[] {\n return this.matches;\n }\n}\n","import { EventEmitter } from './EventEmitter';\nimport { PDFRenderer } from './PDFRenderer';\nimport { searchPage } from './SearchEngine';\nimport { HighlightManager } from './HighlightManager';\nimport { DEFAULT_CLASS_NAMES } from './constants';\nimport type {\n PDFSearchViewerOptions,\n SearchOptions,\n PDFSearchViewerEventMap,\n PageData,\n} from '../types';\n\nexport type PDFSource = File | ArrayBuffer | Uint8Array | string;\n\n/**\n * Main PDF viewer with search and highlight functionality.\n *\n * Usage:\n * ```js\n * import * as pdfjsLib from 'pdfjs-dist';\n * import { PDFSearchViewer } from 'pdf-search-highlight';\n *\n * const viewer = new PDFSearchViewer(container, pdfjsLib, {\n * classNames: {\n * page: 'my-page',\n * highlight: 'my-highlight',\n * activeHighlight: 'my-active',\n * }\n * });\n * await viewer.loadPDF(file);\n * viewer.search('hello');\n * viewer.nextMatch();\n * ```\n */\nexport class PDFSearchViewer extends EventEmitter<PDFSearchViewerEventMap> {\n private renderer: PDFRenderer;\n private highlightManager: HighlightManager;\n private pageData: PageData[] = [];\n private lastQuery = '';\n private lastSearchOptions: SearchOptions = {};\n private destroyed = false;\n\n constructor(\n container: HTMLElement,\n pdfjsLib: any,\n options: PDFSearchViewerOptions = {}\n ) {\n super();\n\n const cls = { ...DEFAULT_CLASS_NAMES, ...options.classNames };\n\n this.renderer = new PDFRenderer(container, options);\n this.renderer.setPdfjsLib(pdfjsLib);\n this.highlightManager = new HighlightManager(\n cls.highlight,\n cls.activeHighlight\n );\n }\n\n /**\n * Load and render a PDF document.\n */\n async loadPDF(source: PDFSource): Promise<void> {\n if (this.destroyed) throw new Error('PDFSearchViewer has been destroyed');\n\n try {\n await this.renderer.loadDocument(source);\n this.pageData = await this.renderer.renderAllPages();\n const pageCount = this.renderer.getPageCount();\n this.emit('load', { pageCount });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.emit('error', { error, context: 'loadPDF' });\n throw error;\n }\n }\n\n /**\n * Search for text across all pages.\n * Clears previous highlights and creates new ones.\n */\n search(query: string, options: SearchOptions = {}): number {\n if (this.destroyed) throw new Error('PDFSearchViewer has been destroyed');\n\n // Clear previous highlights\n this.highlightManager.clearHighlights(this.pageData);\n this.lastQuery = query;\n this.lastSearchOptions = options;\n\n const trimmed = query.trim();\n if (!trimmed) {\n this.emit('search', { query, total: 0 });\n this.emit('matchchange', { current: -1, total: 0 });\n return 0;\n }\n\n // Search each page and apply highlights\n for (const pd of this.pageData) {\n const matchRanges = searchPage(pd.spans, trimmed, options);\n const matches = this.highlightManager.applyHighlights(pd.spans, matchRanges);\n this.highlightManager.addMatches(matches);\n }\n\n const total = this.highlightManager.getTotal();\n\n // Auto-activate first match\n if (total > 0) {\n this.highlightManager.setActiveMatch(0);\n }\n\n this.emit('search', { query, total });\n this.emit('matchchange', {\n current: total > 0 ? 0 : -1,\n total,\n });\n\n return total;\n }\n\n /**\n * Navigate to next match (wraps around).\n */\n nextMatch(): number {\n const idx = this.highlightManager.next();\n this.emit('matchchange', {\n current: idx,\n total: this.highlightManager.getTotal(),\n });\n return idx;\n }\n\n /**\n * Navigate to previous match (wraps around).\n */\n prevMatch(): number {\n const idx = this.highlightManager.prev();\n this.emit('matchchange', {\n current: idx,\n total: this.highlightManager.getTotal(),\n });\n return idx;\n }\n\n /**\n * Clear all search highlights.\n */\n clearSearch(): void {\n this.highlightManager.clearHighlights(this.pageData);\n this.lastQuery = '';\n this.emit('search', { query: '', total: 0 });\n this.emit('matchchange', { current: -1, total: 0 });\n }\n\n /**\n * Get total number of pages.\n */\n getPageCount(): number {\n return this.renderer.getPageCount();\n }\n\n /**\n * Get current active match index (0-based). -1 if none.\n */\n getCurrentMatchIndex(): number {\n return this.highlightManager.getCurrentIndex();\n }\n\n /**\n * Get total number of matches.\n */\n getMatchCount(): number {\n return this.highlightManager.getTotal();\n }\n\n /**\n * Destroy the viewer, release all resources.\n */\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.highlightManager.clearHighlights(this.pageData);\n this.renderer.cleanup();\n this.removeAllListeners();\n this.pageData = [];\n }\n}\n","import { searchPage } from './SearchEngine';\nimport { HighlightManager } from './HighlightManager';\nimport { DEFAULT_CLASS_NAMES } from './constants';\nimport type { SearchOptions, ClassNames, PageData } from '../types';\n\nexport interface SearchControllerOptions {\n classNames?: Pick<ClassNames, 'highlight' | 'activeHighlight'>;\n}\n\n/**\n * Headless search + highlight controller.\n * Does NOT render PDF — works with any PageData[] you provide.\n *\n * Use this when you want full control over:\n * - Where the PDF is rendered\n * - Where the search UI lives\n * - How search results are displayed\n *\n * Usage:\n * ```js\n * import { PDFRenderer, SearchController } from 'pdf-search-highlight';\n *\n * // Render PDF wherever you want\n * const renderer = new PDFRenderer(pdfContainer, pdfjsLib, {});\n * const pages = await renderer.renderAllPages();\n *\n * // Search controller — no UI, just logic\n * const search = new SearchController();\n * search.setPages(pages);\n *\n * // Wire up your own UI\n * input.oninput = () => search.search(input.value);\n * nextBtn.onclick = () => search.next();\n * prevBtn.onclick = () => search.prev();\n *\n * // React to changes\n * search.onChange = ({ current, total }) => {\n * label.textContent = total > 0 ? `${current + 1}/${total}` : '';\n * };\n * ```\n */\nexport class SearchController {\n private highlightManager: HighlightManager;\n private pages: PageData[] = [];\n private lastQuery = '';\n\n /** Callback fired when match state changes (search, next, prev, clear). */\n onChange: ((state: { current: number; total: number; query: string }) => void) | null = null;\n\n constructor(options: SearchControllerOptions = {}) {\n const cls = { ...DEFAULT_CLASS_NAMES, ...options.classNames };\n this.highlightManager = new HighlightManager(cls.highlight, cls.activeHighlight);\n }\n\n /**\n * Set the pages to search on.\n * Call this after rendering PDF pages.\n */\n setPages(pages: PageData[]): void {\n this.clear();\n this.pages = pages;\n }\n\n /**\n * Search for text across all pages.\n * Returns total number of matches.\n */\n search(query: string, options: SearchOptions = {}): number {\n this.highlightManager.clearHighlights(this.pages);\n this.lastQuery = query;\n\n const trimmed = query.trim();\n if (!trimmed) {\n this.notify();\n return 0;\n }\n\n for (const pd of this.pages) {\n const matchRanges = searchPage(pd.spans, trimmed, options);\n const matches = this.highlightManager.applyHighlights(pd.spans, matchRanges);\n this.highlightManager.addMatches(matches);\n }\n\n const total = this.highlightManager.getTotal();\n if (total > 0) {\n this.highlightManager.setActiveMatch(0);\n }\n\n this.notify();\n return total;\n }\n\n /** Navigate to next match. Returns new index. */\n next(): number {\n const idx = this.highlightManager.next();\n this.notify();\n return idx;\n }\n\n /** Navigate to previous match. Returns new index. */\n prev(): number {\n const idx = this.highlightManager.prev();\n this.notify();\n return idx;\n }\n\n /** Go to a specific match by index. */\n goTo(index: number): void {\n this.highlightManager.setActiveMatch(index);\n this.notify();\n }\n\n /** Clear all highlights. */\n clear(): void {\n this.highlightManager.clearHighlights(this.pages);\n this.lastQuery = '';\n this.notify();\n }\n\n /** Current match index (0-based). -1 if none. */\n get current(): number {\n return this.highlightManager.getCurrentIndex();\n }\n\n /** Total number of matches. */\n get total(): number {\n return this.highlightManager.getTotal();\n }\n\n /** Last searched query. */\n get query(): string {\n return this.lastQuery;\n }\n\n private notify(): void {\n this.onChange?.({\n current: this.highlightManager.getCurrentIndex(),\n total: this.highlightManager.getTotal(),\n query: this.lastQuery,\n });\n }\n}\n"]}
|
package/dist/core/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/hoangnguyen/Desktop/
|
|
1
|
+
{"version":3,"sources":["/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/core/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,shBAAC","file":"/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/core/index.cjs"}
|
package/dist/react/index.cjs
CHANGED
|
@@ -18,15 +18,17 @@ function usePDFRenderer(pdfjsLib, options = {}) {
|
|
|
18
18
|
rendererRef.current = null;
|
|
19
19
|
};
|
|
20
20
|
}, []);
|
|
21
|
+
const optionsRef = _react.useRef.call(void 0, options);
|
|
22
|
+
optionsRef.current = options;
|
|
21
23
|
const getRenderer = _react.useCallback.call(void 0, () => {
|
|
22
24
|
if (!containerRef.current) throw new Error("Container ref not attached");
|
|
23
25
|
if (!rendererRef.current) {
|
|
24
|
-
const r = new (0, _chunkOMRGA5I4cjs.PDFRenderer)(containerRef.current,
|
|
26
|
+
const r = new (0, _chunkOMRGA5I4cjs.PDFRenderer)(containerRef.current, optionsRef.current);
|
|
25
27
|
r.setPdfjsLib(pdfjsLib);
|
|
26
28
|
rendererRef.current = r;
|
|
27
29
|
}
|
|
28
30
|
return rendererRef.current;
|
|
29
|
-
}, [pdfjsLib
|
|
31
|
+
}, [pdfjsLib]);
|
|
30
32
|
const loadPDF = _react.useCallback.call(void 0,
|
|
31
33
|
async (source) => {
|
|
32
34
|
const renderer = getRenderer();
|
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/hoangnguyen/Desktop/untitled%20folder/pdf-search-highlight/dist/react/index.cjs"],"names":[],"mappings":"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","file":"/Users/hoangnguyen/Desktop/untitled folder/pdf-search-highlight/dist/react/index.cjs","sourcesContent":[null]}
|
|
1
|
+
{"version":3,"sources":["/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/react/index.cjs","../../src/react/usePDFRenderer.ts","../../src/react/useSearchController.ts","../../src/react/PDFSearchViewer.tsx"],"names":["useRef","useState","useEffect","useCallback","PDFSearchViewer"],"mappings":"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","file":"/Users/hoangnguyen/Desktop/pdf-search-highlight/dist/react/index.cjs","sourcesContent":[null,"import { useRef, useEffect, useCallback, useState } from 'react';\nimport { PDFRenderer } from '../core/PDFRenderer';\nimport type { PDFSearchViewerOptions, PageData, PDFSource } from '../core';\n\nexport interface UsePDFRendererReturn {\n /** Ref to attach to the container div */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Rendered page data (available after loading) */\n pages: PageData[];\n /** Number of pages */\n pageCount: number;\n /** Whether PDF is currently loading */\n loading: boolean;\n /** Load a PDF source */\n loadPDF: (source: PDFSource) => Promise<PageData[]>;\n /** Clean up renderer */\n cleanup: () => void;\n}\n\n/**\n * Hook for rendering PDF into a container div.\n * Returns pages data that can be passed to useSearchController.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n *\n * return <div ref={containerRef} style={{ height: '80vh', overflow: 'auto' }} />;\n * ```\n */\nexport function usePDFRenderer(\n pdfjsLib: any,\n options: PDFSearchViewerOptions = {}\n): UsePDFRendererReturn {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const rendererRef = useRef<PDFRenderer | null>(null);\n const [pages, setPages] = useState<PageData[]>([]);\n const [pageCount, setPageCount] = useState(0);\n const [loading, setLoading] = useState(false);\n\n // Init renderer when container is available\n useEffect(() => {\n return () => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n };\n }, []);\n\n // Store options in a ref so getRenderer/loadPDF don't depend on object identity\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const getRenderer = useCallback(() => {\n if (!containerRef.current) throw new Error('Container ref not attached');\n if (!rendererRef.current) {\n const r = new PDFRenderer(containerRef.current, optionsRef.current);\n r.setPdfjsLib(pdfjsLib);\n rendererRef.current = r;\n }\n return rendererRef.current;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pdfjsLib]);\n\n const loadPDF = useCallback(\n async (source: PDFSource): Promise<PageData[]> => {\n const renderer = getRenderer();\n setLoading(true);\n try {\n const count = await renderer.loadDocument(source);\n const p = await renderer.renderAllPages();\n setPages(p);\n setPageCount(count);\n return p;\n } finally {\n setLoading(false);\n }\n },\n [getRenderer]\n );\n\n const cleanup = useCallback(() => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n setPages([]);\n setPageCount(0);\n }, []);\n\n return { containerRef, pages, pageCount, loading, loadPDF, cleanup };\n}\n","import { useRef, useEffect, useCallback, useState } from 'react';\nimport { SearchController } from '../core/SearchController';\nimport type { SearchOptions, ClassNames, PageData } from '../core';\n\nexport interface UseSearchControllerReturn {\n /** Run a search query */\n search: (query: string, options?: SearchOptions) => number;\n /** Go to next match */\n next: () => void;\n /** Go to previous match */\n prev: () => void;\n /** Go to specific match index */\n goTo: (index: number) => void;\n /** Clear all highlights */\n clear: () => void;\n /** Current active match index (0-based), -1 if none */\n current: number;\n /** Total number of matches */\n total: number;\n}\n\nexport interface UseSearchControllerOptions {\n classNames?: Pick<ClassNames, 'highlight' | 'activeHighlight'>;\n}\n\n/**\n * Hook for search + highlight logic (headless).\n * Pass pages from usePDFRenderer to connect them.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n * const { search, next, prev, current, total } = useSearchController(pages);\n *\n * return (\n * <>\n * <input onChange={e => search(e.target.value)} />\n * <span>{current + 1}/{total}</span>\n * <button onClick={prev}>Prev</button>\n * <button onClick={next}>Next</button>\n * <div ref={containerRef} />\n * </>\n * );\n * ```\n */\nexport function useSearchController(\n pages: PageData[],\n options: UseSearchControllerOptions = {}\n): UseSearchControllerReturn {\n const controllerRef = useRef<SearchController | null>(null);\n const [current, setCurrent] = useState(-1);\n const [total, setTotal] = useState(0);\n\n // Create controller once\n if (!controllerRef.current) {\n controllerRef.current = new SearchController(options);\n }\n\n // Sync onChange callback\n useEffect(() => {\n const ctrl = controllerRef.current!;\n ctrl.onChange = ({ current: c, total: t }) => {\n setCurrent(c);\n setTotal(t);\n };\n return () => {\n ctrl.onChange = null;\n };\n }, []);\n\n // Update pages when they change\n useEffect(() => {\n controllerRef.current!.setPages(pages);\n }, [pages]);\n\n const search = useCallback((query: string, opts?: SearchOptions) => {\n return controllerRef.current!.search(query, opts);\n }, []);\n\n const next = useCallback(() => {\n controllerRef.current!.next();\n }, []);\n\n const prev = useCallback(() => {\n controllerRef.current!.prev();\n }, []);\n\n const goTo = useCallback((index: number) => {\n controllerRef.current!.goTo(index);\n }, []);\n\n const clear = useCallback(() => {\n controllerRef.current!.clear();\n }, []);\n\n return { search, next, prev, goTo, clear, current, total };\n}\n","import {\n useRef,\n useEffect,\n useImperativeHandle,\n forwardRef,\n type Ref,\n type CSSProperties,\n} from 'react';\nimport {\n PDFSearchViewer as CorePDFSearchViewer,\n type PDFSearchViewerOptions,\n type SearchOptions,\n type PDFSource,\n} from '../core';\n\nexport interface PDFSearchViewerProps {\n /** pdfjs-dist library instance. Must be passed by consumer. */\n pdfjsLib: any;\n\n /** PDF source: URL string, File, ArrayBuffer, or Uint8Array. */\n source?: PDFSource | null;\n\n /** Search query string. Empty/undefined clears the search. */\n searchQuery?: string;\n\n /** Search options. */\n searchOptions?: SearchOptions;\n\n /** Viewer options (applied once on mount). */\n viewerOptions?: PDFSearchViewerOptions;\n\n /** Called when PDF finishes loading. */\n onLoad?: (data: { pageCount: number }) => void;\n\n /** Called when search completes. */\n onSearch?: (data: { query: string; total: number }) => void;\n\n /** Called when active match changes. */\n onMatchChange?: (data: { current: number; total: number }) => void;\n\n /** Called on error. */\n onError?: (data: { error: Error; context: string }) => void;\n\n /** Additional className for the container div. */\n className?: string;\n\n /** Inline style for the container div. */\n style?: CSSProperties;\n}\n\nexport interface PDFSearchViewerHandle {\n /** Navigate to next match. Returns new index. */\n nextMatch: () => number;\n /** Navigate to previous match. Returns new index. */\n prevMatch: () => number;\n /** Clear all search highlights. */\n clearSearch: () => void;\n /** Get total match count. */\n getMatchCount: () => number;\n /** Get current match index. */\n getCurrentMatchIndex: () => number;\n /** Get underlying core instance. */\n getCore: () => CorePDFSearchViewer | null;\n}\n\nexport const PDFSearchViewer = forwardRef(function PDFSearchViewer(\n props: PDFSearchViewerProps,\n ref: Ref<PDFSearchViewerHandle>\n) {\n const {\n pdfjsLib,\n source,\n searchQuery,\n searchOptions,\n viewerOptions,\n onLoad,\n onSearch,\n onMatchChange,\n onError,\n className,\n style,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const coreRef = useRef<CorePDFSearchViewer | null>(null);\n\n // Store latest callbacks in refs to avoid re-subscribing\n const callbackRefs = useRef({ onLoad, onSearch, onMatchChange, onError });\n callbackRefs.current = { onLoad, onSearch, onMatchChange, onError };\n\n // Initialize core on mount\n useEffect(() => {\n if (!containerRef.current || !pdfjsLib) return;\n\n const core = new CorePDFSearchViewer(\n containerRef.current,\n pdfjsLib,\n viewerOptions ?? {}\n );\n\n core.on('load', (data) => callbackRefs.current.onLoad?.(data));\n core.on('search', (data) => callbackRefs.current.onSearch?.(data));\n core.on('matchchange', (data) => callbackRefs.current.onMatchChange?.(data));\n core.on('error', (data) => callbackRefs.current.onError?.(data));\n\n coreRef.current = core;\n\n return () => {\n core.destroy();\n coreRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pdfjsLib]);\n\n // Load PDF when source changes\n useEffect(() => {\n if (!coreRef.current || !source) return;\n coreRef.current.loadPDF(source).catch(() => {\n // Error already emitted via 'error' event\n });\n }, [source]);\n\n // Run search when query or options change\n useEffect(() => {\n if (!coreRef.current) return;\n\n if (searchQuery && searchQuery.trim().length > 0) {\n coreRef.current.search(searchQuery, searchOptions);\n } else {\n coreRef.current.clearSearch();\n }\n }, [searchQuery, searchOptions]);\n\n // Expose imperative methods via ref\n useImperativeHandle(ref, () => ({\n nextMatch: () => coreRef.current?.nextMatch() ?? -1,\n prevMatch: () => coreRef.current?.prevMatch() ?? -1,\n clearSearch: () => coreRef.current?.clearSearch(),\n getMatchCount: () => coreRef.current?.getMatchCount() ?? 0,\n getCurrentMatchIndex: () => coreRef.current?.getCurrentMatchIndex() ?? -1,\n getCore: () => coreRef.current,\n }));\n\n return <div ref={containerRef} className={className} style={style} />;\n});\n"]}
|
package/dist/react/index.js
CHANGED
|
@@ -18,15 +18,17 @@ function usePDFRenderer(pdfjsLib, options = {}) {
|
|
|
18
18
|
rendererRef.current = null;
|
|
19
19
|
};
|
|
20
20
|
}, []);
|
|
21
|
+
const optionsRef = useRef(options);
|
|
22
|
+
optionsRef.current = options;
|
|
21
23
|
const getRenderer = useCallback(() => {
|
|
22
24
|
if (!containerRef.current) throw new Error("Container ref not attached");
|
|
23
25
|
if (!rendererRef.current) {
|
|
24
|
-
const r = new PDFRenderer(containerRef.current,
|
|
26
|
+
const r = new PDFRenderer(containerRef.current, optionsRef.current);
|
|
25
27
|
r.setPdfjsLib(pdfjsLib);
|
|
26
28
|
rendererRef.current = r;
|
|
27
29
|
}
|
|
28
30
|
return rendererRef.current;
|
|
29
|
-
}, [pdfjsLib
|
|
31
|
+
}, [pdfjsLib]);
|
|
30
32
|
const loadPDF = useCallback(
|
|
31
33
|
async (source) => {
|
|
32
34
|
const renderer = getRenderer();
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/usePDFRenderer.ts","../../src/react/useSearchController.ts","../../src/react/PDFSearchViewer.tsx"],"sourcesContent":["import { useRef, useEffect, useCallback, useState } from 'react';\nimport { PDFRenderer } from '../core/PDFRenderer';\nimport type { PDFSearchViewerOptions, PageData, PDFSource } from '../core';\n\nexport interface UsePDFRendererReturn {\n /** Ref to attach to the container div */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Rendered page data (available after loading) */\n pages: PageData[];\n /** Number of pages */\n pageCount: number;\n /** Whether PDF is currently loading */\n loading: boolean;\n /** Load a PDF source */\n loadPDF: (source: PDFSource) => Promise<PageData[]>;\n /** Clean up renderer */\n cleanup: () => void;\n}\n\n/**\n * Hook for rendering PDF into a container div.\n * Returns pages data that can be passed to useSearchController.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n *\n * return <div ref={containerRef} style={{ height: '80vh', overflow: 'auto' }} />;\n * ```\n */\nexport function usePDFRenderer(\n pdfjsLib: any,\n options: PDFSearchViewerOptions = {}\n): UsePDFRendererReturn {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const rendererRef = useRef<PDFRenderer | null>(null);\n const [pages, setPages] = useState<PageData[]>([]);\n const [pageCount, setPageCount] = useState(0);\n const [loading, setLoading] = useState(false);\n\n // Init renderer when container is available\n useEffect(() => {\n return () => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n };\n }, []);\n\n const getRenderer = useCallback(() => {\n if (!containerRef.current) throw new Error('Container ref not attached');\n if (!rendererRef.current) {\n const r = new PDFRenderer(containerRef.current, options);\n r.setPdfjsLib(pdfjsLib);\n rendererRef.current = r;\n }\n return rendererRef.current;\n }, [pdfjsLib, options]);\n\n const loadPDF = useCallback(\n async (source: PDFSource): Promise<PageData[]> => {\n const renderer = getRenderer();\n setLoading(true);\n try {\n const count = await renderer.loadDocument(source);\n const p = await renderer.renderAllPages();\n setPages(p);\n setPageCount(count);\n return p;\n } finally {\n setLoading(false);\n }\n },\n [getRenderer]\n );\n\n const cleanup = useCallback(() => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n setPages([]);\n setPageCount(0);\n }, []);\n\n return { containerRef, pages, pageCount, loading, loadPDF, cleanup };\n}\n","import { useRef, useEffect, useCallback, useState } from 'react';\nimport { SearchController } from '../core/SearchController';\nimport type { SearchOptions, ClassNames, PageData } from '../core';\n\nexport interface UseSearchControllerReturn {\n /** Run a search query */\n search: (query: string, options?: SearchOptions) => number;\n /** Go to next match */\n next: () => void;\n /** Go to previous match */\n prev: () => void;\n /** Go to specific match index */\n goTo: (index: number) => void;\n /** Clear all highlights */\n clear: () => void;\n /** Current active match index (0-based), -1 if none */\n current: number;\n /** Total number of matches */\n total: number;\n}\n\nexport interface UseSearchControllerOptions {\n classNames?: Pick<ClassNames, 'highlight' | 'activeHighlight'>;\n}\n\n/**\n * Hook for search + highlight logic (headless).\n * Pass pages from usePDFRenderer to connect them.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n * const { search, next, prev, current, total } = useSearchController(pages);\n *\n * return (\n * <>\n * <input onChange={e => search(e.target.value)} />\n * <span>{current + 1}/{total}</span>\n * <button onClick={prev}>Prev</button>\n * <button onClick={next}>Next</button>\n * <div ref={containerRef} />\n * </>\n * );\n * ```\n */\nexport function useSearchController(\n pages: PageData[],\n options: UseSearchControllerOptions = {}\n): UseSearchControllerReturn {\n const controllerRef = useRef<SearchController | null>(null);\n const [current, setCurrent] = useState(-1);\n const [total, setTotal] = useState(0);\n\n // Create controller once\n if (!controllerRef.current) {\n controllerRef.current = new SearchController(options);\n }\n\n // Sync onChange callback\n useEffect(() => {\n const ctrl = controllerRef.current!;\n ctrl.onChange = ({ current: c, total: t }) => {\n setCurrent(c);\n setTotal(t);\n };\n return () => {\n ctrl.onChange = null;\n };\n }, []);\n\n // Update pages when they change\n useEffect(() => {\n controllerRef.current!.setPages(pages);\n }, [pages]);\n\n const search = useCallback((query: string, opts?: SearchOptions) => {\n return controllerRef.current!.search(query, opts);\n }, []);\n\n const next = useCallback(() => {\n controllerRef.current!.next();\n }, []);\n\n const prev = useCallback(() => {\n controllerRef.current!.prev();\n }, []);\n\n const goTo = useCallback((index: number) => {\n controllerRef.current!.goTo(index);\n }, []);\n\n const clear = useCallback(() => {\n controllerRef.current!.clear();\n }, []);\n\n return { search, next, prev, goTo, clear, current, total };\n}\n","import {\n useRef,\n useEffect,\n useImperativeHandle,\n forwardRef,\n type Ref,\n type CSSProperties,\n} from 'react';\nimport {\n PDFSearchViewer as CorePDFSearchViewer,\n type PDFSearchViewerOptions,\n type SearchOptions,\n type PDFSource,\n} from '../core';\n\nexport interface PDFSearchViewerProps {\n /** pdfjs-dist library instance. Must be passed by consumer. */\n pdfjsLib: any;\n\n /** PDF source: URL string, File, ArrayBuffer, or Uint8Array. */\n source?: PDFSource | null;\n\n /** Search query string. Empty/undefined clears the search. */\n searchQuery?: string;\n\n /** Search options. */\n searchOptions?: SearchOptions;\n\n /** Viewer options (applied once on mount). */\n viewerOptions?: PDFSearchViewerOptions;\n\n /** Called when PDF finishes loading. */\n onLoad?: (data: { pageCount: number }) => void;\n\n /** Called when search completes. */\n onSearch?: (data: { query: string; total: number }) => void;\n\n /** Called when active match changes. */\n onMatchChange?: (data: { current: number; total: number }) => void;\n\n /** Called on error. */\n onError?: (data: { error: Error; context: string }) => void;\n\n /** Additional className for the container div. */\n className?: string;\n\n /** Inline style for the container div. */\n style?: CSSProperties;\n}\n\nexport interface PDFSearchViewerHandle {\n /** Navigate to next match. Returns new index. */\n nextMatch: () => number;\n /** Navigate to previous match. Returns new index. */\n prevMatch: () => number;\n /** Clear all search highlights. */\n clearSearch: () => void;\n /** Get total match count. */\n getMatchCount: () => number;\n /** Get current match index. */\n getCurrentMatchIndex: () => number;\n /** Get underlying core instance. */\n getCore: () => CorePDFSearchViewer | null;\n}\n\nexport const PDFSearchViewer = forwardRef(function PDFSearchViewer(\n props: PDFSearchViewerProps,\n ref: Ref<PDFSearchViewerHandle>\n) {\n const {\n pdfjsLib,\n source,\n searchQuery,\n searchOptions,\n viewerOptions,\n onLoad,\n onSearch,\n onMatchChange,\n onError,\n className,\n style,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const coreRef = useRef<CorePDFSearchViewer | null>(null);\n\n // Store latest callbacks in refs to avoid re-subscribing\n const callbackRefs = useRef({ onLoad, onSearch, onMatchChange, onError });\n callbackRefs.current = { onLoad, onSearch, onMatchChange, onError };\n\n // Initialize core on mount\n useEffect(() => {\n if (!containerRef.current || !pdfjsLib) return;\n\n const core = new CorePDFSearchViewer(\n containerRef.current,\n pdfjsLib,\n viewerOptions ?? {}\n );\n\n core.on('load', (data) => callbackRefs.current.onLoad?.(data));\n core.on('search', (data) => callbackRefs.current.onSearch?.(data));\n core.on('matchchange', (data) => callbackRefs.current.onMatchChange?.(data));\n core.on('error', (data) => callbackRefs.current.onError?.(data));\n\n coreRef.current = core;\n\n return () => {\n core.destroy();\n coreRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pdfjsLib]);\n\n // Load PDF when source changes\n useEffect(() => {\n if (!coreRef.current || !source) return;\n coreRef.current.loadPDF(source).catch(() => {\n // Error already emitted via 'error' event\n });\n }, [source]);\n\n // Run search when query or options change\n useEffect(() => {\n if (!coreRef.current) return;\n\n if (searchQuery && searchQuery.trim().length > 0) {\n coreRef.current.search(searchQuery, searchOptions);\n } else {\n coreRef.current.clearSearch();\n }\n }, [searchQuery, searchOptions]);\n\n // Expose imperative methods via ref\n useImperativeHandle(ref, () => ({\n nextMatch: () => coreRef.current?.nextMatch() ?? -1,\n prevMatch: () => coreRef.current?.prevMatch() ?? -1,\n clearSearch: () => coreRef.current?.clearSearch(),\n getMatchCount: () => coreRef.current?.getMatchCount() ?? 0,\n getCurrentMatchIndex: () => coreRef.current?.getCurrentMatchIndex() ?? -1,\n getCore: () => coreRef.current,\n }));\n\n return <div ref={containerRef} className={className} style={style} />;\n});\n"],"mappings":";;;;;;;AAAA,SAAS,QAAQ,WAAW,aAAa,gBAAgB;AA6BlD,SAAS,eACd,UACA,UAAkC,CAAC,GACb;AACtB,QAAM,eAAe,OAA8B,IAAI;AACvD,QAAM,cAAc,OAA2B,IAAI;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAqB,CAAC,CAAC;AACjD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAG5C,YAAU,MAAM;AACd,WAAO,MAAM;AACX,kBAAY,SAAS,QAAQ;AAC7B,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,MAAM;AACpC,QAAI,CAAC,aAAa,QAAS,OAAM,IAAI,MAAM,4BAA4B;AACvE,QAAI,CAAC,YAAY,SAAS;AACxB,YAAM,IAAI,IAAI,YAAY,aAAa,SAAS,OAAO;AACvD,QAAE,YAAY,QAAQ;AACtB,kBAAY,UAAU;AAAA,IACxB;AACA,WAAO,YAAY;AAAA,EACrB,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,QAAM,UAAU;AAAA,IACd,OAAO,WAA2C;AAChD,YAAM,WAAW,YAAY;AAC7B,iBAAW,IAAI;AACf,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS,aAAa,MAAM;AAChD,cAAM,IAAI,MAAM,SAAS,eAAe;AACxC,iBAAS,CAAC;AACV,qBAAa,KAAK;AAClB,eAAO;AAAA,MACT,UAAE;AACA,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,UAAU,YAAY,MAAM;AAChC,gBAAY,SAAS,QAAQ;AAC7B,gBAAY,UAAU;AACtB,aAAS,CAAC,CAAC;AACX,iBAAa,CAAC;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,cAAc,OAAO,WAAW,SAAS,SAAS,QAAQ;AACrE;;;AClFA,SAAS,UAAAA,SAAQ,aAAAC,YAAW,eAAAC,cAAa,YAAAC,iBAAgB;AA4ClD,SAAS,oBACd,OACA,UAAsC,CAAC,GACZ;AAC3B,QAAM,gBAAgBC,QAAgC,IAAI;AAC1D,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,EAAE;AACzC,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,CAAC;AAGpC,MAAI,CAAC,cAAc,SAAS;AAC1B,kBAAc,UAAU,IAAI,iBAAiB,OAAO;AAAA,EACtD;AAGA,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,cAAc;AAC3B,SAAK,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM;AAC5C,iBAAW,CAAC;AACZ,eAAS,CAAC;AAAA,IACZ;AACA,WAAO,MAAM;AACX,WAAK,WAAW;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,EAAAA,WAAU,MAAM;AACd,kBAAc,QAAS,SAAS,KAAK;AAAA,EACvC,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,SAASC,aAAY,CAAC,OAAe,SAAyB;AAClE,WAAO,cAAc,QAAS,OAAO,OAAO,IAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,MAAM;AAC7B,kBAAc,QAAS,KAAK;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,MAAM;AAC7B,kBAAc,QAAS,KAAK;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,CAAC,UAAkB;AAC1C,kBAAc,QAAS,KAAK,KAAK;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQA,aAAY,MAAM;AAC9B,kBAAc,QAAS,MAAM;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,MAAM,MAAM,MAAM,OAAO,SAAS,MAAM;AAC3D;;;AC/FA;AAAA,EACE,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAwIE;AA9EF,IAAMC,mBAAkB,WAAW,SAASA,iBACjD,OACA,KACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,UAAUA,QAAmC,IAAI;AAGvD,QAAM,eAAeA,QAAO,EAAE,QAAQ,UAAU,eAAe,QAAQ,CAAC;AACxE,eAAa,UAAU,EAAE,QAAQ,UAAU,eAAe,QAAQ;AAGlE,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,aAAa,WAAW,CAAC,SAAU;AAExC,UAAM,OAAO,IAAI;AAAA,MACf,aAAa;AAAA,MACb;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAEA,SAAK,GAAG,QAAQ,CAAC,SAAS,aAAa,QAAQ,SAAS,IAAI,CAAC;AAC7D,SAAK,GAAG,UAAU,CAAC,SAAS,aAAa,QAAQ,WAAW,IAAI,CAAC;AACjE,SAAK,GAAG,eAAe,CAAC,SAAS,aAAa,QAAQ,gBAAgB,IAAI,CAAC;AAC3E,SAAK,GAAG,SAAS,CAAC,SAAS,aAAa,QAAQ,UAAU,IAAI,CAAC;AAE/D,YAAQ,UAAU;AAElB,WAAO,MAAM;AACX,WAAK,QAAQ;AACb,cAAQ,UAAU;AAAA,IACpB;AAAA,EAEF,GAAG,CAAC,QAAQ,CAAC;AAGb,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,WAAW,CAAC,OAAQ;AACjC,YAAQ,QAAQ,QAAQ,MAAM,EAAE,MAAM,MAAM;AAAA,IAE5C,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,CAAC;AAGX,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,QAAS;AAEtB,QAAI,eAAe,YAAY,KAAK,EAAE,SAAS,GAAG;AAChD,cAAQ,QAAQ,OAAO,aAAa,aAAa;AAAA,IACnD,OAAO;AACL,cAAQ,QAAQ,YAAY;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,aAAa,aAAa,CAAC;AAG/B,sBAAoB,KAAK,OAAO;AAAA,IAC9B,WAAW,MAAM,QAAQ,SAAS,UAAU,KAAK;AAAA,IACjD,WAAW,MAAM,QAAQ,SAAS,UAAU,KAAK;AAAA,IACjD,aAAa,MAAM,QAAQ,SAAS,YAAY;AAAA,IAChD,eAAe,MAAM,QAAQ,SAAS,cAAc,KAAK;AAAA,IACzD,sBAAsB,MAAM,QAAQ,SAAS,qBAAqB,KAAK;AAAA,IACvE,SAAS,MAAM,QAAQ;AAAA,EACzB,EAAE;AAEF,SAAO,oBAAC,SAAI,KAAK,cAAc,WAAsB,OAAc;AACrE,CAAC;","names":["useRef","useEffect","useCallback","useState","useRef","useState","useEffect","useCallback","useRef","useEffect","PDFSearchViewer","useRef","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/usePDFRenderer.ts","../../src/react/useSearchController.ts","../../src/react/PDFSearchViewer.tsx"],"sourcesContent":["import { useRef, useEffect, useCallback, useState } from 'react';\nimport { PDFRenderer } from '../core/PDFRenderer';\nimport type { PDFSearchViewerOptions, PageData, PDFSource } from '../core';\n\nexport interface UsePDFRendererReturn {\n /** Ref to attach to the container div */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Rendered page data (available after loading) */\n pages: PageData[];\n /** Number of pages */\n pageCount: number;\n /** Whether PDF is currently loading */\n loading: boolean;\n /** Load a PDF source */\n loadPDF: (source: PDFSource) => Promise<PageData[]>;\n /** Clean up renderer */\n cleanup: () => void;\n}\n\n/**\n * Hook for rendering PDF into a container div.\n * Returns pages data that can be passed to useSearchController.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n *\n * return <div ref={containerRef} style={{ height: '80vh', overflow: 'auto' }} />;\n * ```\n */\nexport function usePDFRenderer(\n pdfjsLib: any,\n options: PDFSearchViewerOptions = {}\n): UsePDFRendererReturn {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const rendererRef = useRef<PDFRenderer | null>(null);\n const [pages, setPages] = useState<PageData[]>([]);\n const [pageCount, setPageCount] = useState(0);\n const [loading, setLoading] = useState(false);\n\n // Init renderer when container is available\n useEffect(() => {\n return () => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n };\n }, []);\n\n // Store options in a ref so getRenderer/loadPDF don't depend on object identity\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const getRenderer = useCallback(() => {\n if (!containerRef.current) throw new Error('Container ref not attached');\n if (!rendererRef.current) {\n const r = new PDFRenderer(containerRef.current, optionsRef.current);\n r.setPdfjsLib(pdfjsLib);\n rendererRef.current = r;\n }\n return rendererRef.current;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pdfjsLib]);\n\n const loadPDF = useCallback(\n async (source: PDFSource): Promise<PageData[]> => {\n const renderer = getRenderer();\n setLoading(true);\n try {\n const count = await renderer.loadDocument(source);\n const p = await renderer.renderAllPages();\n setPages(p);\n setPageCount(count);\n return p;\n } finally {\n setLoading(false);\n }\n },\n [getRenderer]\n );\n\n const cleanup = useCallback(() => {\n rendererRef.current?.cleanup();\n rendererRef.current = null;\n setPages([]);\n setPageCount(0);\n }, []);\n\n return { containerRef, pages, pageCount, loading, loadPDF, cleanup };\n}\n","import { useRef, useEffect, useCallback, useState } from 'react';\nimport { SearchController } from '../core/SearchController';\nimport type { SearchOptions, ClassNames, PageData } from '../core';\n\nexport interface UseSearchControllerReturn {\n /** Run a search query */\n search: (query: string, options?: SearchOptions) => number;\n /** Go to next match */\n next: () => void;\n /** Go to previous match */\n prev: () => void;\n /** Go to specific match index */\n goTo: (index: number) => void;\n /** Clear all highlights */\n clear: () => void;\n /** Current active match index (0-based), -1 if none */\n current: number;\n /** Total number of matches */\n total: number;\n}\n\nexport interface UseSearchControllerOptions {\n classNames?: Pick<ClassNames, 'highlight' | 'activeHighlight'>;\n}\n\n/**\n * Hook for search + highlight logic (headless).\n * Pass pages from usePDFRenderer to connect them.\n *\n * ```tsx\n * const { containerRef, pages, loadPDF } = usePDFRenderer(pdfjsLib);\n * const { search, next, prev, current, total } = useSearchController(pages);\n *\n * return (\n * <>\n * <input onChange={e => search(e.target.value)} />\n * <span>{current + 1}/{total}</span>\n * <button onClick={prev}>Prev</button>\n * <button onClick={next}>Next</button>\n * <div ref={containerRef} />\n * </>\n * );\n * ```\n */\nexport function useSearchController(\n pages: PageData[],\n options: UseSearchControllerOptions = {}\n): UseSearchControllerReturn {\n const controllerRef = useRef<SearchController | null>(null);\n const [current, setCurrent] = useState(-1);\n const [total, setTotal] = useState(0);\n\n // Create controller once\n if (!controllerRef.current) {\n controllerRef.current = new SearchController(options);\n }\n\n // Sync onChange callback\n useEffect(() => {\n const ctrl = controllerRef.current!;\n ctrl.onChange = ({ current: c, total: t }) => {\n setCurrent(c);\n setTotal(t);\n };\n return () => {\n ctrl.onChange = null;\n };\n }, []);\n\n // Update pages when they change\n useEffect(() => {\n controllerRef.current!.setPages(pages);\n }, [pages]);\n\n const search = useCallback((query: string, opts?: SearchOptions) => {\n return controllerRef.current!.search(query, opts);\n }, []);\n\n const next = useCallback(() => {\n controllerRef.current!.next();\n }, []);\n\n const prev = useCallback(() => {\n controllerRef.current!.prev();\n }, []);\n\n const goTo = useCallback((index: number) => {\n controllerRef.current!.goTo(index);\n }, []);\n\n const clear = useCallback(() => {\n controllerRef.current!.clear();\n }, []);\n\n return { search, next, prev, goTo, clear, current, total };\n}\n","import {\n useRef,\n useEffect,\n useImperativeHandle,\n forwardRef,\n type Ref,\n type CSSProperties,\n} from 'react';\nimport {\n PDFSearchViewer as CorePDFSearchViewer,\n type PDFSearchViewerOptions,\n type SearchOptions,\n type PDFSource,\n} from '../core';\n\nexport interface PDFSearchViewerProps {\n /** pdfjs-dist library instance. Must be passed by consumer. */\n pdfjsLib: any;\n\n /** PDF source: URL string, File, ArrayBuffer, or Uint8Array. */\n source?: PDFSource | null;\n\n /** Search query string. Empty/undefined clears the search. */\n searchQuery?: string;\n\n /** Search options. */\n searchOptions?: SearchOptions;\n\n /** Viewer options (applied once on mount). */\n viewerOptions?: PDFSearchViewerOptions;\n\n /** Called when PDF finishes loading. */\n onLoad?: (data: { pageCount: number }) => void;\n\n /** Called when search completes. */\n onSearch?: (data: { query: string; total: number }) => void;\n\n /** Called when active match changes. */\n onMatchChange?: (data: { current: number; total: number }) => void;\n\n /** Called on error. */\n onError?: (data: { error: Error; context: string }) => void;\n\n /** Additional className for the container div. */\n className?: string;\n\n /** Inline style for the container div. */\n style?: CSSProperties;\n}\n\nexport interface PDFSearchViewerHandle {\n /** Navigate to next match. Returns new index. */\n nextMatch: () => number;\n /** Navigate to previous match. Returns new index. */\n prevMatch: () => number;\n /** Clear all search highlights. */\n clearSearch: () => void;\n /** Get total match count. */\n getMatchCount: () => number;\n /** Get current match index. */\n getCurrentMatchIndex: () => number;\n /** Get underlying core instance. */\n getCore: () => CorePDFSearchViewer | null;\n}\n\nexport const PDFSearchViewer = forwardRef(function PDFSearchViewer(\n props: PDFSearchViewerProps,\n ref: Ref<PDFSearchViewerHandle>\n) {\n const {\n pdfjsLib,\n source,\n searchQuery,\n searchOptions,\n viewerOptions,\n onLoad,\n onSearch,\n onMatchChange,\n onError,\n className,\n style,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const coreRef = useRef<CorePDFSearchViewer | null>(null);\n\n // Store latest callbacks in refs to avoid re-subscribing\n const callbackRefs = useRef({ onLoad, onSearch, onMatchChange, onError });\n callbackRefs.current = { onLoad, onSearch, onMatchChange, onError };\n\n // Initialize core on mount\n useEffect(() => {\n if (!containerRef.current || !pdfjsLib) return;\n\n const core = new CorePDFSearchViewer(\n containerRef.current,\n pdfjsLib,\n viewerOptions ?? {}\n );\n\n core.on('load', (data) => callbackRefs.current.onLoad?.(data));\n core.on('search', (data) => callbackRefs.current.onSearch?.(data));\n core.on('matchchange', (data) => callbackRefs.current.onMatchChange?.(data));\n core.on('error', (data) => callbackRefs.current.onError?.(data));\n\n coreRef.current = core;\n\n return () => {\n core.destroy();\n coreRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pdfjsLib]);\n\n // Load PDF when source changes\n useEffect(() => {\n if (!coreRef.current || !source) return;\n coreRef.current.loadPDF(source).catch(() => {\n // Error already emitted via 'error' event\n });\n }, [source]);\n\n // Run search when query or options change\n useEffect(() => {\n if (!coreRef.current) return;\n\n if (searchQuery && searchQuery.trim().length > 0) {\n coreRef.current.search(searchQuery, searchOptions);\n } else {\n coreRef.current.clearSearch();\n }\n }, [searchQuery, searchOptions]);\n\n // Expose imperative methods via ref\n useImperativeHandle(ref, () => ({\n nextMatch: () => coreRef.current?.nextMatch() ?? -1,\n prevMatch: () => coreRef.current?.prevMatch() ?? -1,\n clearSearch: () => coreRef.current?.clearSearch(),\n getMatchCount: () => coreRef.current?.getMatchCount() ?? 0,\n getCurrentMatchIndex: () => coreRef.current?.getCurrentMatchIndex() ?? -1,\n getCore: () => coreRef.current,\n }));\n\n return <div ref={containerRef} className={className} style={style} />;\n});\n"],"mappings":";;;;;;;AAAA,SAAS,QAAQ,WAAW,aAAa,gBAAgB;AA6BlD,SAAS,eACd,UACA,UAAkC,CAAC,GACb;AACtB,QAAM,eAAe,OAA8B,IAAI;AACvD,QAAM,cAAc,OAA2B,IAAI;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAqB,CAAC,CAAC;AACjD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAG5C,YAAU,MAAM;AACd,WAAO,MAAM;AACX,kBAAY,SAAS,QAAQ;AAC7B,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AAErB,QAAM,cAAc,YAAY,MAAM;AACpC,QAAI,CAAC,aAAa,QAAS,OAAM,IAAI,MAAM,4BAA4B;AACvE,QAAI,CAAC,YAAY,SAAS;AACxB,YAAM,IAAI,IAAI,YAAY,aAAa,SAAS,WAAW,OAAO;AAClE,QAAE,YAAY,QAAQ;AACtB,kBAAY,UAAU;AAAA,IACxB;AACA,WAAO,YAAY;AAAA,EAErB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAU;AAAA,IACd,OAAO,WAA2C;AAChD,YAAM,WAAW,YAAY;AAC7B,iBAAW,IAAI;AACf,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS,aAAa,MAAM;AAChD,cAAM,IAAI,MAAM,SAAS,eAAe;AACxC,iBAAS,CAAC;AACV,qBAAa,KAAK;AAClB,eAAO;AAAA,MACT,UAAE;AACA,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,UAAU,YAAY,MAAM;AAChC,gBAAY,SAAS,QAAQ;AAC7B,gBAAY,UAAU;AACtB,aAAS,CAAC,CAAC;AACX,iBAAa,CAAC;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,cAAc,OAAO,WAAW,SAAS,SAAS,QAAQ;AACrE;;;ACvFA,SAAS,UAAAA,SAAQ,aAAAC,YAAW,eAAAC,cAAa,YAAAC,iBAAgB;AA4ClD,SAAS,oBACd,OACA,UAAsC,CAAC,GACZ;AAC3B,QAAM,gBAAgBC,QAAgC,IAAI;AAC1D,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,EAAE;AACzC,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,CAAC;AAGpC,MAAI,CAAC,cAAc,SAAS;AAC1B,kBAAc,UAAU,IAAI,iBAAiB,OAAO;AAAA,EACtD;AAGA,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,cAAc;AAC3B,SAAK,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM;AAC5C,iBAAW,CAAC;AACZ,eAAS,CAAC;AAAA,IACZ;AACA,WAAO,MAAM;AACX,WAAK,WAAW;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,EAAAA,WAAU,MAAM;AACd,kBAAc,QAAS,SAAS,KAAK;AAAA,EACvC,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,SAASC,aAAY,CAAC,OAAe,SAAyB;AAClE,WAAO,cAAc,QAAS,OAAO,OAAO,IAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,MAAM;AAC7B,kBAAc,QAAS,KAAK;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,MAAM;AAC7B,kBAAc,QAAS,KAAK;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,OAAOA,aAAY,CAAC,UAAkB;AAC1C,kBAAc,QAAS,KAAK,KAAK;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQA,aAAY,MAAM;AAC9B,kBAAc,QAAS,MAAM;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,MAAM,MAAM,MAAM,OAAO,SAAS,MAAM;AAC3D;;;AC/FA;AAAA,EACE,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAwIE;AA9EF,IAAMC,mBAAkB,WAAW,SAASA,iBACjD,OACA,KACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,UAAUA,QAAmC,IAAI;AAGvD,QAAM,eAAeA,QAAO,EAAE,QAAQ,UAAU,eAAe,QAAQ,CAAC;AACxE,eAAa,UAAU,EAAE,QAAQ,UAAU,eAAe,QAAQ;AAGlE,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,aAAa,WAAW,CAAC,SAAU;AAExC,UAAM,OAAO,IAAI;AAAA,MACf,aAAa;AAAA,MACb;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAEA,SAAK,GAAG,QAAQ,CAAC,SAAS,aAAa,QAAQ,SAAS,IAAI,CAAC;AAC7D,SAAK,GAAG,UAAU,CAAC,SAAS,aAAa,QAAQ,WAAW,IAAI,CAAC;AACjE,SAAK,GAAG,eAAe,CAAC,SAAS,aAAa,QAAQ,gBAAgB,IAAI,CAAC;AAC3E,SAAK,GAAG,SAAS,CAAC,SAAS,aAAa,QAAQ,UAAU,IAAI,CAAC;AAE/D,YAAQ,UAAU;AAElB,WAAO,MAAM;AACX,WAAK,QAAQ;AACb,cAAQ,UAAU;AAAA,IACpB;AAAA,EAEF,GAAG,CAAC,QAAQ,CAAC;AAGb,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,WAAW,CAAC,OAAQ;AACjC,YAAQ,QAAQ,QAAQ,MAAM,EAAE,MAAM,MAAM;AAAA,IAE5C,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,CAAC;AAGX,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,QAAS;AAEtB,QAAI,eAAe,YAAY,KAAK,EAAE,SAAS,GAAG;AAChD,cAAQ,QAAQ,OAAO,aAAa,aAAa;AAAA,IACnD,OAAO;AACL,cAAQ,QAAQ,YAAY;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,aAAa,aAAa,CAAC;AAG/B,sBAAoB,KAAK,OAAO;AAAA,IAC9B,WAAW,MAAM,QAAQ,SAAS,UAAU,KAAK;AAAA,IACjD,WAAW,MAAM,QAAQ,SAAS,UAAU,KAAK;AAAA,IACjD,aAAa,MAAM,QAAQ,SAAS,YAAY;AAAA,IAChD,eAAe,MAAM,QAAQ,SAAS,cAAc,KAAK;AAAA,IACzD,sBAAsB,MAAM,QAAQ,SAAS,qBAAqB,KAAK;AAAA,IACvE,SAAS,MAAM,QAAQ;AAAA,EACzB,EAAE;AAEF,SAAO,oBAAC,SAAI,KAAK,cAAc,WAAsB,OAAc;AACrE,CAAC;","names":["useRef","useEffect","useCallback","useState","useRef","useState","useEffect","useCallback","useRef","useEffect","PDFSearchViewer","useRef","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-search-highlight",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Drop-in PDF viewer with text search and highlight. Vanilla JS core + React wrapper.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/core/index.cjs",
|
|
@@ -76,5 +76,6 @@
|
|
|
76
76
|
"repository": {
|
|
77
77
|
"type": "git",
|
|
78
78
|
"url": ""
|
|
79
|
-
}
|
|
79
|
+
},
|
|
80
|
+
"packageManager": "pnpm@10.21.0+sha512.da3337267e400fdd3d479a6c68079ac6db01d8ca4f67572083e722775a796788a7a9956613749e000fac20d424b594f7a791a5f4e2e13581c5ef947f26968a40"
|
|
80
81
|
}
|