@docmentis/udoc-viewer 0.2.7 → 0.2.9

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.
Files changed (39) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/UDocViewer.d.ts +20 -0
  3. package/dist/src/UDocViewer.d.ts.map +1 -1
  4. package/dist/src/UDocViewer.js +92 -0
  5. package/dist/src/UDocViewer.js.map +1 -1
  6. package/dist/src/ui/viewer/actions.d.ts +12 -0
  7. package/dist/src/ui/viewer/actions.d.ts.map +1 -1
  8. package/dist/src/ui/viewer/components/PasswordDialog.d.ts +15 -0
  9. package/dist/src/ui/viewer/components/PasswordDialog.d.ts.map +1 -0
  10. package/dist/src/ui/viewer/components/PasswordDialog.js +143 -0
  11. package/dist/src/ui/viewer/components/PasswordDialog.js.map +1 -0
  12. package/dist/src/ui/viewer/reducer.d.ts.map +1 -1
  13. package/dist/src/ui/viewer/reducer.js +25 -0
  14. package/dist/src/ui/viewer/reducer.js.map +1 -1
  15. package/dist/src/ui/viewer/shell.d.ts +4 -0
  16. package/dist/src/ui/viewer/shell.d.ts.map +1 -1
  17. package/dist/src/ui/viewer/shell.js +15 -0
  18. package/dist/src/ui/viewer/shell.js.map +1 -1
  19. package/dist/src/ui/viewer/state.d.ts +6 -0
  20. package/dist/src/ui/viewer/state.d.ts.map +1 -1
  21. package/dist/src/ui/viewer/state.js +3 -0
  22. package/dist/src/ui/viewer/state.js.map +1 -1
  23. package/dist/src/ui/viewer/styles-inline.d.ts +1 -1
  24. package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -1
  25. package/dist/src/ui/viewer/styles-inline.js +154 -0
  26. package/dist/src/ui/viewer/styles-inline.js.map +1 -1
  27. package/dist/src/wasm/udoc.d.ts +20 -0
  28. package/dist/src/wasm/udoc.js +57 -0
  29. package/dist/src/wasm/udoc_bg.wasm +0 -0
  30. package/dist/src/wasm/udoc_bg.wasm.d.ts +2 -0
  31. package/dist/src/worker/WorkerClient.d.ts +12 -0
  32. package/dist/src/worker/WorkerClient.d.ts.map +1 -1
  33. package/dist/src/worker/WorkerClient.js +18 -0
  34. package/dist/src/worker/WorkerClient.js.map +1 -1
  35. package/dist/src/worker/worker.d.ts +23 -0
  36. package/dist/src/worker/worker.d.ts.map +1 -1
  37. package/dist/src/worker/worker.js +12 -0
  38. package/dist/src/worker/worker.js.map +1 -1
  39. package/package.json +1 -1
@@ -28,6 +28,12 @@ export interface ViewerState {
28
28
  page: number;
29
29
  pageCount: number;
30
30
  pageInfos: readonly PageInfo[];
31
+ /** Whether the document requires a password to open */
32
+ needsPassword: boolean;
33
+ /** Error message when password authentication fails */
34
+ passwordError: string | null;
35
+ /** Whether authentication is currently in progress */
36
+ isAuthenticating: boolean;
31
37
  /** Document outline/bookmarks (null = not loaded yet) */
32
38
  outline: OutlineItem[] | null;
33
39
  /** Whether outline is currently being loaded */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/ui/viewer/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/ui/viewer/state.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,9 @@ export const initialState = {
22
22
  page: 1,
23
23
  pageCount: 0,
24
24
  pageInfos: [],
25
+ needsPassword: false,
26
+ passwordError: null,
27
+ isAuthenticating: false,
25
28
  outline: null,
26
29
  outlineLoading: false,
27
30
  pageAnnotations: new Map(),
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/ui/viewer/state.ts"],"names":[],"mappings":"AAYA,MAAM,SAAS,GAAkB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AACzG,MAAM,UAAU,cAAc,CAAC,GAAa;IACxC,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAYD,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;AAS5F,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAE1B,yCAAyC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAE9B,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,WAAW;AAElE,yDAAyD;AACzD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IACzC,OAAO,GAAG,GAAG,OAAO,CAAC;AACzB,CAAC;AAkED,MAAM,CAAC,MAAM,YAAY,GAAgB;IACrC,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,EAAE;IAEb,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,KAAK;IAErB,eAAe,EAAE,IAAI,GAAG,EAAE;IAC1B,kBAAkB,EAAE,IAAI,GAAG,EAAE;IAE7B,gBAAgB,EAAE,IAAI;IAEtB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,CAAC;IACP,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,kBAAkB;IAC7B,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,KAAK;IAElB,GAAG,EAAE,WAAW;IAEhB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IAEjB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IAErB,qBAAqB,EAAE,IAAI;IAE3B,YAAY,EAAE,KAAK;CACtB,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/ui/viewer/state.ts"],"names":[],"mappings":"AAYA,MAAM,SAAS,GAAkB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AACzG,MAAM,UAAU,cAAc,CAAC,GAAa;IACxC,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAYD,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;AAS5F,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAE1B,yCAAyC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAE9B,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,WAAW;AAElE,yDAAyD;AACzD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IACzC,OAAO,GAAG,GAAG,OAAO,CAAC;AACzB,CAAC;AA0ED,MAAM,CAAC,MAAM,YAAY,GAAgB;IACrC,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,EAAE;IAEb,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,KAAK;IAEvB,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,KAAK;IAErB,eAAe,EAAE,IAAI,GAAG,EAAE;IAC1B,kBAAkB,EAAE,IAAI,GAAG,EAAE;IAE7B,gBAAgB,EAAE,IAAI;IAEtB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,CAAC;IACP,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,kBAAkB;IAC7B,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,KAAK;IAElB,GAAG,EAAE,WAAW;IAEhB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IAEjB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IAErB,qBAAqB,EAAE,IAAI;IAE3B,YAAY,EAAE,KAAK;CACtB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const inlineStyles = ".udoc-viewer-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n container-type: inline-size;\n container-name: udoc-viewer;\n}\n\n.udoc-viewer-root .udoc-toolbar-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-body-slot {\n flex: 1 1 auto;\n display: flex;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-left-panel-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-right-panel-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-viewport-slot {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-viewport {\n position: relative;\n width: 100%;\n height: 100%;\n background: #e0e0e0;\n}\n\n.udoc-viewer-root .udoc-viewport__scroll {\n width: 100%;\n height: 100%;\n overflow: auto;\n scrollbar-gutter: stable;\n}\n\n.udoc-viewer-root .udoc-viewport__container {\n position: relative;\n min-height: 100%;\n box-sizing: border-box;\n /* height set dynamically for virtual scrolling */\n}\n\n.udoc-viewer-root .udoc-viewport__watermark {\n position: absolute;\n right: 18px;\n bottom: 4px;\n padding: 2px 6px;\n font-size: 12px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.3);\n text-decoration: none;\n text-shadow: 0 1px 2px rgba(255, 255, 255, 0.5);\n z-index: 10;\n transition: color 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-viewport__watermark:hover {\n color: rgba(0, 0, 0, 0.6);\n}\n\n/* Spread */\n.udoc-viewer-root .udoc-spread {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n flex-shrink: 0;\n}\n\n.udoc-viewer-root .udoc-spread--hidden {\n display: none;\n}\n\n/* Page slot within spread */\n.udoc-viewer-root .udoc-spread__slot {\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-viewport--seamless .udoc-spread__slot {\n box-shadow: none;\n}\n\n.udoc-viewer-root .udoc-spread__slot--empty {\n background: transparent;\n box-shadow: none;\n}\n\n.udoc-viewer-root .udoc-spread__canvas {\n display: block;\n}\n\n/* Floating Toolbar */\n.udoc-viewer-root .udoc-floating-toolbar {\n position: absolute;\n bottom: 24px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n z-index: 100;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__section {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__divider {\n width: 1px;\n height: 20px;\n background: rgba(0, 0, 0, 0.15);\n margin: 0 4px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:active {\n background: rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:disabled:hover {\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn svg {\n width: 18px;\n height: 18px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-info {\n display: flex;\n align-items: center;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-input {\n width: 36px;\n padding: 2px 4px;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-input:focus {\n outline: none;\n border-color: rgba(0, 0, 0, 0.3);\n background: white;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-total {\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__zoom-level {\n min-width: 44px;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn--active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n/* Zoom Dropdown */\n.udoc-viewer-root .udoc-zoom-dropdown {\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__toggle {\n display: flex;\n align-items: center;\n gap: 0;\n height: 100%;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__toggle:focus-within {\n border-color: rgba(0, 0, 0, 0.3);\n background: white;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__input {\n width: 44px;\n padding: 2px 4px;\n border: none;\n border-radius: 4px 0 0 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__input:focus {\n outline: none;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2px 2px;\n border: none;\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 0 4px 4px 0;\n background: transparent;\n color: rgba(0, 0, 0, 0.5);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron:hover {\n background: rgba(0, 0, 0, 0.08);\n color: rgba(0, 0, 0, 0.7);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron--active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron svg {\n width: 14px;\n height: 14px;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__menu {\n position: absolute;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n padding: 6px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\n min-width: 100px;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__section {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__divider {\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 0;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item {\n display: block;\n width: 100%;\n padding: 6px 10px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item--active {\n background: rgba(0, 102, 204, 0.15);\n color: #0066cc;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item--active:hover {\n background: rgba(0, 102, 204, 0.2);\n}\n\n/* View Mode Menu */\n.udoc-viewer-root .udoc-view-mode-menu {\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__dropdown {\n position: absolute;\n bottom: calc(100% + 8px);\n left: 0;\n padding: 8px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\n min-width: 160px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__section {\n margin-bottom: 8px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__section:last-child {\n margin-bottom: 0;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__title {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n margin-bottom: 4px;\n padding: 0 4px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__options {\n display: flex;\n gap: 2px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.6);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--active {\n background: rgba(0, 102, 204, 0.15);\n color: #0066cc;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--active:hover {\n background: rgba(0, 102, 204, 0.2);\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--disabled:hover {\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option-icon svg {\n width: 20px;\n height: 20px;\n}\n\n/* Left Panel */\n.udoc-viewer-root .udoc-left-panel {\n position: relative;\n display: flex;\n width: 240px;\n height: 100%;\n background: #f5f5f5;\n border-right: 1px solid #ddd;\n transition: width 0.2s ease, opacity 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-left-panel--closed {\n width: 0;\n overflow: hidden;\n border-right: none;\n}\n\n.udoc-viewer-root .udoc-left-panel__tabs {\n display: flex;\n flex-direction: column;\n width: 40px;\n background: #e8e8e8;\n border-right: 1px solid #ddd;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n padding: 0;\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-left-panel__tab--active {\n background: #f5f5f5;\n color: #333;\n border-right: 2px solid #0066cc;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab svg {\n width: 20px;\n height: 20px;\n}\n\n.udoc-viewer-root .udoc-left-panel__content {\n flex: 1;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-left-panel__resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n z-index: 10;\n}\n\n.udoc-viewer-root .udoc-left-panel__resize-handle:hover,\n.udoc-viewer-root .udoc-left-panel--resizing .udoc-left-panel__resize-handle {\n background: rgba(0, 102, 204, 0.3);\n}\n\n.udoc-viewer-root .udoc-left-panel--resizing {\n transition: none;\n}\n\n/* Thumbnail Panel */\n.udoc-viewer-root .udoc-thumbnail-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 8px;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.15s ease;\n flex-shrink: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.udoc-viewer-root .udoc-thumbnail-item--active {\n background: rgba(0, 102, 204, 0.1);\n outline: 2px solid #0066cc;\n outline-offset: -2px;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item__canvas {\n display: block;\n max-width: calc(100% - 16px);\n background: white;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-thumbnail-item__label {\n font-size: 11px;\n color: #666;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item--active .udoc-thumbnail-item__label {\n color: #0066cc;\n font-weight: 500;\n}\n\n/* Outline Panel */\n.udoc-viewer-root .udoc-outline-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px 0;\n}\n\n.udoc-viewer-root .udoc-outline-panel__loading,\n.udoc-viewer-root .udoc-outline-panel__empty {\n padding: 16px;\n color: #888;\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-outline-item {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-outline-item__header {\n display: flex;\n align-items: center;\n padding: 6px 12px 6px 8px;\n gap: 4px;\n min-height: 28px;\n}\n\n.udoc-viewer-root .udoc-outline-item__header--clickable {\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-outline-item__header--clickable:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.udoc-viewer-root .udoc-outline-item__header--active {\n background: rgba(0, 102, 204, 0.1);\n}\n\n.udoc-viewer-root .udoc-outline-item__header--active .udoc-outline-item__title {\n color: #0066cc;\n font-weight: 500;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n flex-shrink: 0;\n transition: transform 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle:hover {\n color: #333;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle--expanded {\n transform: rotate(90deg);\n}\n\n.udoc-viewer-root .udoc-outline-item__spacer {\n width: 16px;\n flex-shrink: 0;\n}\n\n.udoc-viewer-root .udoc-outline-item__title {\n font-size: 13px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n}\n\n/* .udoc-outline-item__children: Indentation is handled via padding-left on header */\n\n.udoc-viewer-root .udoc-toolbar {\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 8px;\n background: #f5f5f5;\n border-bottom: 1px solid #ddd;\n}\n\n.udoc-viewer-root .udoc-toolbar__left,\n.udoc-viewer-root .udoc-toolbar__right {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.udoc-viewer-root .udoc-toolbar__spacer {\n flex: 1;\n}\n\n.udoc-viewer-root .udoc-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: #555;\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-toolbar__btn:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-toolbar__btn:active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.udoc-viewer-root .udoc-toolbar__btn svg {\n width: 20px;\n height: 20px;\n}\n\n/* Right Panel */\n.udoc-viewer-root .udoc-right-panel {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 300px;\n height: 100%;\n background: #f5f5f5;\n border-left: 1px solid #ddd;\n transition: width 0.2s ease, opacity 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-right-panel--closed {\n width: 0;\n overflow: hidden;\n border-left: none;\n}\n\n.udoc-viewer-root .udoc-right-panel__resize-handle {\n position: absolute;\n left: 0;\n top: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n z-index: 10;\n}\n\n.udoc-viewer-root .udoc-right-panel__resize-handle:hover,\n.udoc-viewer-root .udoc-right-panel--resizing .udoc-right-panel__resize-handle {\n background: rgba(0, 102, 204, 0.3);\n}\n\n.udoc-viewer-root .udoc-right-panel--resizing {\n transition: none;\n}\n\n.udoc-viewer-root .udoc-right-panel__content {\n flex: 1;\n overflow: auto;\n}\n\n/* Annotation Layer */\n.udoc-viewer-root .udoc-spread__annotation-layer {\n position: absolute;\n pointer-events: none;\n z-index: 1;\n}\n\n/* Base annotation */\n.udoc-viewer-root .udoc-annotation {\n position: absolute;\n box-sizing: border-box;\n}\n\n/* Link annotation */\n.udoc-viewer-root .udoc-annotation--link {\n pointer-events: auto;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-annotation--link:hover {\n background-color: rgba(0, 102, 204, 0.15);\n}\n\n/* Highlight annotation */\n.udoc-viewer-root .udoc-annotation--highlight {\n pointer-events: none;\n}\n\n.udoc-viewer-root .udoc-annotation__quad {\n mix-blend-mode: multiply;\n}\n\n/* Underline annotation */\n.udoc-viewer-root .udoc-annotation--underline {\n pointer-events: none;\n}\n\n/* StrikeOut annotation */\n.udoc-viewer-root .udoc-annotation--strikeout {\n pointer-events: none;\n}\n\n/* Squiggly annotation */\n.udoc-viewer-root .udoc-annotation--squiggly {\n pointer-events: none;\n}\n\n/* Text (sticky note) annotation */\n.udoc-viewer-root .udoc-annotation--text {\n pointer-events: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: filter 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-annotation--text:hover {\n filter: brightness(1.1) drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));\n}\n\n.udoc-viewer-root .udoc-annotation--text svg {\n width: 100%;\n height: 100%;\n}\n\n/* Annotation popup */\n.udoc-viewer-root .udoc-annotation-popup {\n position: absolute;\n z-index: 100;\n min-width: 200px;\n max-width: 300px;\n background: #ffffc0;\n border: 1px solid #d4d4a0;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n font-size: 12px;\n color: #333;\n pointer-events: auto;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 8px;\n background: #f0f0c0;\n border-bottom: 1px solid #d4d4a0;\n border-radius: 4px 4px 0 0;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__author {\n font-weight: 600;\n color: #555;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close {\n width: 16px;\n height: 16px;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close:hover {\n opacity: 1;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close svg {\n width: 12px;\n height: 12px;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__content {\n padding: 8px;\n white-space: pre-wrap;\n word-wrap: break-word;\n max-height: 200px;\n overflow-y: auto;\n}\n\n/* FreeText annotation */\n.udoc-viewer-root .udoc-annotation--freetext {\n pointer-events: auto;\n overflow: hidden;\n font-size: 12px;\n padding: 2px;\n}\n\n/* Stamp annotation */\n.udoc-viewer-root .udoc-annotation--stamp {\n pointer-events: none;\n}\n\n/* Caret annotation - rendered via SVG, minimal styling needed */\n.udoc-viewer-root .udoc-annotation--caret {\n pointer-events: none;\n}\n\n/* Shape annotations - rendered via SVG overlay */\n.udoc-viewer-root .udoc-annotation--line,\n.udoc-viewer-root .udoc-annotation--square,\n.udoc-viewer-root .udoc-annotation--circle,\n.udoc-viewer-root .udoc-annotation--polygon,\n.udoc-viewer-root .udoc-annotation--polyLine,\n.udoc-viewer-root .udoc-annotation--ink {\n pointer-events: none;\n}\n\n/* Redact annotation */\n.udoc-viewer-root .udoc-annotation--redact {\n pointer-events: none;\n}\n\n/* Annotation Panel */\n.udoc-viewer-root .udoc-annotation-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 32px 16px;\n text-align: center;\n color: #888;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-icon {\n color: #ccc;\n margin-bottom: 12px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-icon svg {\n width: 48px;\n height: 48px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-title {\n font-size: 14px;\n font-weight: 500;\n color: #666;\n margin-bottom: 4px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-message {\n font-size: 12px;\n color: #999;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #888;\n font-size: 13px;\n}\n\n/* Comments List */\n.udoc-viewer-root .udoc-comments-list {\n display: flex;\n flex-direction: column;\n}\n\n/* Page Group */\n.udoc-viewer-root .udoc-comments-page-group {\n border-bottom: 1px solid #e0e0e0;\n}\n\n.udoc-viewer-root .udoc-comments-page-group:last-child {\n border-bottom: none;\n}\n\n.udoc-viewer-root .udoc-comments-page-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n cursor: pointer;\n user-select: none;\n background: #f0f0f0;\n transition: background 0.15s;\n}\n\n.udoc-viewer-root .udoc-comments-page-header:hover {\n background: #e8e8e8;\n}\n\n.udoc-viewer-root .udoc-comments-page-header svg {\n width: 16px;\n height: 16px;\n color: #666;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-comments-page-header span {\n font-size: 13px;\n font-weight: 500;\n color: #333;\n}\n\n.udoc-viewer-root .udoc-comments-page-count {\n margin-left: auto;\n padding: 2px 6px;\n background: #ddd;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #666;\n}\n\n/* Collapsed state */\n.udoc-viewer-root .udoc-comments-page-group--collapsed .udoc-comments-page-header svg {\n transform: rotate(-90deg);\n}\n\n.udoc-viewer-root .udoc-comments-page-group--collapsed .udoc-comments-page-content {\n display: none;\n}\n\n/* Page Content */\n.udoc-viewer-root .udoc-comments-page-content {\n display: flex;\n flex-direction: column;\n}\n\n/* Comment Item */\n.udoc-viewer-root .udoc-comment-item {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid #eee;\n}\n\n.udoc-viewer-root .udoc-comment-item:last-child {\n border-bottom: none;\n}\n\n.udoc-viewer-root .udoc-comment-item:hover {\n background: rgba(0, 102, 204, 0.05);\n}\n\n/* Reply indentation */\n.udoc-viewer-root .udoc-comment-reply {\n background: #fafafa;\n}\n\n.udoc-viewer-root .udoc-comment-depth-1 {\n padding-left: 28px;\n}\n\n.udoc-viewer-root .udoc-comment-depth-2 {\n padding-left: 44px;\n}\n\n.udoc-viewer-root .udoc-comment-depth-3 {\n padding-left: 60px;\n}\n\n/* Comment Icon */\n.udoc-viewer-root .udoc-comment-icon {\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #888;\n}\n\n.udoc-viewer-root .udoc-comment-icon svg {\n width: 16px;\n height: 16px;\n}\n\n/* Comment Body */\n.udoc-viewer-root .udoc-comment-body {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n/* Comment Header */\n.udoc-viewer-root .udoc-comment-header {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.udoc-viewer-root .udoc-comment-author {\n font-size: 12px;\n font-weight: 600;\n color: #333;\n}\n\n/* Status Badge */\n.udoc-viewer-root .udoc-comment-status {\n padding: 1px 6px;\n border-radius: 8px;\n font-size: 10px;\n font-weight: 500;\n text-transform: capitalize;\n}\n\n.udoc-viewer-root .udoc-comment-status--accepted {\n background: #d4edda;\n color: #155724;\n}\n\n.udoc-viewer-root .udoc-comment-status--rejected {\n background: #f8d7da;\n color: #721c24;\n}\n\n.udoc-viewer-root .udoc-comment-status--completed {\n background: #cce5ff;\n color: #004085;\n}\n\n.udoc-viewer-root .udoc-comment-status--cancelled {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.udoc-viewer-root .udoc-comment-status--marked {\n background: #fff3cd;\n color: #856404;\n}\n\n.udoc-viewer-root .udoc-comment-status--unmarked {\n background: #e2e3e5;\n color: #383d41;\n}\n\n/* Comment Contents */\n.udoc-viewer-root .udoc-comment-contents {\n font-size: 12px;\n color: #555;\n line-height: 1.4;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n line-clamp: 3;\n -webkit-box-orient: vertical;\n}\n\n/* Reply Toggle */\n.udoc-viewer-root .udoc-comment-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n margin-top: 4px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: #0066cc;\n font-size: 11px;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.udoc-viewer-root .udoc-comment-toggle:hover {\n background: rgba(0, 102, 204, 0.1);\n}\n\n.udoc-viewer-root .udoc-comment-toggle svg {\n width: 12px;\n height: 12px;\n transition: transform 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-comment-toggle--expanded svg {\n transform: rotate(90deg);\n}\n\n/* Replies Container */\n.udoc-viewer-root .udoc-comment-replies {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-comment-replies--collapsed {\n display: none;\n}\n\n/* Annotation Highlight Animation */\n@keyframes udoc-annotation-pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(0, 102, 204, 0.7);\n }\n 50% {\n box-shadow: 0 0 0 8px rgba(0, 102, 204, 0.3);\n }\n 100% {\n box-shadow: 0 0 0 12px rgba(0, 102, 204, 0);\n }\n}\n\n.udoc-viewer-root .udoc-annotation--highlighted {\n animation: udoc-annotation-pulse 1.5s ease-out;\n outline: 2px solid #0066cc;\n outline-offset: 2px;\n border-radius: 2px;\n z-index: 10;\n}\n\n/* Highlight indicator for full-layer markup annotations */\n.udoc-viewer-root .udoc-annotation-highlight-indicator {\n position: absolute;\n box-sizing: border-box;\n pointer-events: none;\n animation: udoc-annotation-pulse 1.5s ease-out;\n outline: 2px solid #0066cc;\n outline-offset: 2px;\n border-radius: 2px;\n z-index: 10;\n}\n\n/* Mobile Panel Overlay */\n.udoc-viewer-root .udoc-panel-overlay {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 140;\n}\n\n/* ===== Responsive: Small Mobile (\u2264480px) ===== */\n@container udoc-viewer (max-width: 480px) {\n /* Make body-slot a positioning context */\n .udoc-viewer-root .udoc-body-slot {\n position: relative;\n }\n\n /* Collapse panels to slide-out drawers */\n .udoc-viewer-root .udoc-left-panel {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 280px !important;\n z-index: 150;\n box-shadow: 4px 0 20px rgba(0, 0, 0, 0.15);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .udoc-viewer-root .udoc-left-panel:not(.udoc-left-panel--closed) {\n transform: translateX(0);\n }\n\n .udoc-viewer-root .udoc-left-panel--closed {\n width: 280px !important;\n transform: translateX(-100%);\n }\n\n .udoc-viewer-root .udoc-right-panel {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 280px !important;\n z-index: 150;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n transform: translateX(100%);\n transition: transform 0.3s ease;\n }\n\n .udoc-viewer-root .udoc-right-panel:not(.udoc-right-panel--closed) {\n transform: translateX(0);\n }\n\n .udoc-viewer-root .udoc-right-panel--closed {\n width: 280px !important;\n transform: translateX(100%);\n }\n\n /* Show overlay when panel is open */\n .udoc-viewer-root.udoc-panel-open .udoc-panel-overlay {\n display: block;\n }\n\n /* Convert floating bar to full-width bottom toolbar */\n .udoc-viewer-root .udoc-floating-toolbar {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n transform: none;\n border-radius: 0;\n box-sizing: border-box;\n height: 40px;\n padding: 0 12px;\n gap: 8px;\n max-width: none;\n justify-content: center;\n box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);\n }\n\n /* Viewport scroll area needs padding for bottom toolbar */\n .udoc-viewer-root .udoc-viewport__scroll {\n padding-bottom: 40px;\n }\n\n /* Move watermark above bottom toolbar on mobile */\n .udoc-viewer-root .udoc-viewport__watermark {\n bottom: 48px;\n right: 10px;\n font-size: 11px;\n }\n\n /* Hide fullscreen button on mobile */\n .udoc-viewer-root .udoc-toolbar__btn--fullscreen {\n display: none;\n }\n\n /* Touch targets for mobile */\n .udoc-viewer-root .udoc-floating-toolbar__btn {\n padding: 6px;\n min-width: 28px;\n min-height: 28px;\n }\n\n .udoc-viewer-root .udoc-floating-toolbar__btn svg {\n width: 18px;\n height: 18px;\n }\n\n /* Larger panel tab buttons for touch */\n .udoc-viewer-root .udoc-left-panel__tabs {\n width: 44px;\n padding: 8px 0;\n }\n\n .udoc-viewer-root .udoc-left-panel__tab {\n width: 44px;\n height: 44px;\n }\n\n .udoc-viewer-root .udoc-left-panel__tab svg {\n width: 22px;\n height: 22px;\n }\n\n /* Toolbar adjustments */\n .udoc-viewer-root .udoc-toolbar {\n padding: 0 4px;\n gap: 4px;\n }\n\n .udoc-viewer-root .udoc-toolbar__btn {\n padding: 8px;\n }\n\n /* View mode menu - right align */\n .udoc-viewer-root .udoc-view-mode-menu__dropdown {\n left: auto;\n right: 0;\n }\n\n .udoc-viewer-root .udoc-zoom-dropdown__item {\n padding: 12px 16px;\n }\n\n .udoc-viewer-root .udoc-view-mode-menu__option {\n width: 36px;\n height: 36px;\n }\n}\n";
1
+ export declare const inlineStyles = ".udoc-viewer-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n container-type: inline-size;\n container-name: udoc-viewer;\n}\n\n.udoc-viewer-root .udoc-toolbar-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-body-slot {\n flex: 1 1 auto;\n display: flex;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-left-panel-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-right-panel-slot {\n flex: 0 0 auto;\n}\n\n.udoc-viewer-root .udoc-viewport-slot {\n position: relative;\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-viewport {\n position: relative;\n width: 100%;\n height: 100%;\n background: #e0e0e0;\n}\n\n.udoc-viewer-root .udoc-viewport__scroll {\n width: 100%;\n height: 100%;\n overflow: auto;\n scrollbar-gutter: stable;\n}\n\n.udoc-viewer-root .udoc-viewport__container {\n position: relative;\n min-height: 100%;\n box-sizing: border-box;\n /* height set dynamically for virtual scrolling */\n}\n\n.udoc-viewer-root .udoc-viewport__watermark {\n position: absolute;\n right: 18px;\n bottom: 4px;\n padding: 2px 6px;\n font-size: 12px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.3);\n text-decoration: none;\n text-shadow: 0 1px 2px rgba(255, 255, 255, 0.5);\n z-index: 10;\n transition: color 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-viewport__watermark:hover {\n color: rgba(0, 0, 0, 0.6);\n}\n\n/* Spread */\n.udoc-viewer-root .udoc-spread {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n flex-shrink: 0;\n}\n\n.udoc-viewer-root .udoc-spread--hidden {\n display: none;\n}\n\n/* Page slot within spread */\n.udoc-viewer-root .udoc-spread__slot {\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-viewport--seamless .udoc-spread__slot {\n box-shadow: none;\n}\n\n.udoc-viewer-root .udoc-spread__slot--empty {\n background: transparent;\n box-shadow: none;\n}\n\n.udoc-viewer-root .udoc-spread__canvas {\n display: block;\n}\n\n/* Floating Toolbar */\n.udoc-viewer-root .udoc-floating-toolbar {\n position: absolute;\n bottom: 24px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n z-index: 100;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__section {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__divider {\n width: 1px;\n height: 20px;\n background: rgba(0, 0, 0, 0.15);\n margin: 0 4px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:active {\n background: rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn:disabled:hover {\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn svg {\n width: 18px;\n height: 18px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-info {\n display: flex;\n align-items: center;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-input {\n width: 36px;\n padding: 2px 4px;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-input:focus {\n outline: none;\n border-color: rgba(0, 0, 0, 0.3);\n background: white;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__page-total {\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__zoom-level {\n min-width: 44px;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-floating-toolbar__btn--active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n/* Zoom Dropdown */\n.udoc-viewer-root .udoc-zoom-dropdown {\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__toggle {\n display: flex;\n align-items: center;\n gap: 0;\n height: 100%;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__toggle:focus-within {\n border-color: rgba(0, 0, 0, 0.3);\n background: white;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__input {\n width: 44px;\n padding: 2px 4px;\n border: none;\n border-radius: 4px 0 0 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__input:focus {\n outline: none;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2px 2px;\n border: none;\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 0 4px 4px 0;\n background: transparent;\n color: rgba(0, 0, 0, 0.5);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron:hover {\n background: rgba(0, 0, 0, 0.08);\n color: rgba(0, 0, 0, 0.7);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron--active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__chevron svg {\n width: 14px;\n height: 14px;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__menu {\n position: absolute;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n padding: 6px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\n min-width: 100px;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__section {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__divider {\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 0;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item {\n display: block;\n width: 100%;\n padding: 6px 10px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.8);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item--active {\n background: rgba(0, 102, 204, 0.15);\n color: #0066cc;\n}\n\n.udoc-viewer-root .udoc-zoom-dropdown__item--active:hover {\n background: rgba(0, 102, 204, 0.2);\n}\n\n/* View Mode Menu */\n.udoc-viewer-root .udoc-view-mode-menu {\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__dropdown {\n position: absolute;\n bottom: calc(100% + 8px);\n left: 0;\n padding: 8px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\n min-width: 160px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__section {\n margin-bottom: 8px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__section:last-child {\n margin-bottom: 0;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__title {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n margin-bottom: 4px;\n padding: 0 4px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__options {\n display: flex;\n gap: 2px;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: rgba(0, 0, 0, 0.6);\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--active {\n background: rgba(0, 102, 204, 0.15);\n color: #0066cc;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--active:hover {\n background: rgba(0, 102, 204, 0.2);\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option--disabled:hover {\n background: transparent;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.udoc-viewer-root .udoc-view-mode-menu__option-icon svg {\n width: 20px;\n height: 20px;\n}\n\n/* Left Panel */\n.udoc-viewer-root .udoc-left-panel {\n position: relative;\n display: flex;\n width: 240px;\n height: 100%;\n background: #f5f5f5;\n border-right: 1px solid #ddd;\n transition: width 0.2s ease, opacity 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-left-panel--closed {\n width: 0;\n overflow: hidden;\n border-right: none;\n}\n\n.udoc-viewer-root .udoc-left-panel__tabs {\n display: flex;\n flex-direction: column;\n width: 40px;\n background: #e8e8e8;\n border-right: 1px solid #ddd;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n padding: 0;\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-left-panel__tab--active {\n background: #f5f5f5;\n color: #333;\n border-right: 2px solid #0066cc;\n}\n\n.udoc-viewer-root .udoc-left-panel__tab svg {\n width: 20px;\n height: 20px;\n}\n\n.udoc-viewer-root .udoc-left-panel__content {\n flex: 1;\n overflow: hidden;\n}\n\n.udoc-viewer-root .udoc-left-panel__resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n z-index: 10;\n}\n\n.udoc-viewer-root .udoc-left-panel__resize-handle:hover,\n.udoc-viewer-root .udoc-left-panel--resizing .udoc-left-panel__resize-handle {\n background: rgba(0, 102, 204, 0.3);\n}\n\n.udoc-viewer-root .udoc-left-panel--resizing {\n transition: none;\n}\n\n/* Thumbnail Panel */\n.udoc-viewer-root .udoc-thumbnail-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 8px;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.15s ease;\n flex-shrink: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.udoc-viewer-root .udoc-thumbnail-item--active {\n background: rgba(0, 102, 204, 0.1);\n outline: 2px solid #0066cc;\n outline-offset: -2px;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item__canvas {\n display: block;\n max-width: calc(100% - 16px);\n background: white;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n}\n\n.udoc-viewer-root .udoc-thumbnail-item__label {\n font-size: 11px;\n color: #666;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-thumbnail-item--active .udoc-thumbnail-item__label {\n color: #0066cc;\n font-weight: 500;\n}\n\n/* Outline Panel */\n.udoc-viewer-root .udoc-outline-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px 0;\n}\n\n.udoc-viewer-root .udoc-outline-panel__loading,\n.udoc-viewer-root .udoc-outline-panel__empty {\n padding: 16px;\n color: #888;\n font-size: 13px;\n text-align: center;\n}\n\n.udoc-viewer-root .udoc-outline-item {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-outline-item__header {\n display: flex;\n align-items: center;\n padding: 6px 12px 6px 8px;\n gap: 4px;\n min-height: 28px;\n}\n\n.udoc-viewer-root .udoc-outline-item__header--clickable {\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-outline-item__header--clickable:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.udoc-viewer-root .udoc-outline-item__header--active {\n background: rgba(0, 102, 204, 0.1);\n}\n\n.udoc-viewer-root .udoc-outline-item__header--active .udoc-outline-item__title {\n color: #0066cc;\n font-weight: 500;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n flex-shrink: 0;\n transition: transform 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle:hover {\n color: #333;\n}\n\n.udoc-viewer-root .udoc-outline-item__toggle--expanded {\n transform: rotate(90deg);\n}\n\n.udoc-viewer-root .udoc-outline-item__spacer {\n width: 16px;\n flex-shrink: 0;\n}\n\n.udoc-viewer-root .udoc-outline-item__title {\n font-size: 13px;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n}\n\n/* .udoc-outline-item__children: Indentation is handled via padding-left on header */\n\n.udoc-viewer-root .udoc-toolbar {\n display: flex;\n align-items: center;\n height: 40px;\n padding: 0 8px;\n background: #f5f5f5;\n border-bottom: 1px solid #ddd;\n}\n\n.udoc-viewer-root .udoc-toolbar__left,\n.udoc-viewer-root .udoc-toolbar__right {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.udoc-viewer-root .udoc-toolbar__spacer {\n flex: 1;\n}\n\n.udoc-viewer-root .udoc-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: #555;\n cursor: pointer;\n}\n\n.udoc-viewer-root .udoc-toolbar__btn:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.udoc-viewer-root .udoc-toolbar__btn:active {\n background: rgba(0, 0, 0, 0.12);\n}\n\n.udoc-viewer-root .udoc-toolbar__btn svg {\n width: 20px;\n height: 20px;\n}\n\n/* Right Panel */\n.udoc-viewer-root .udoc-right-panel {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 300px;\n height: 100%;\n background: #f5f5f5;\n border-left: 1px solid #ddd;\n transition: width 0.2s ease, opacity 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-right-panel--closed {\n width: 0;\n overflow: hidden;\n border-left: none;\n}\n\n.udoc-viewer-root .udoc-right-panel__resize-handle {\n position: absolute;\n left: 0;\n top: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n z-index: 10;\n}\n\n.udoc-viewer-root .udoc-right-panel__resize-handle:hover,\n.udoc-viewer-root .udoc-right-panel--resizing .udoc-right-panel__resize-handle {\n background: rgba(0, 102, 204, 0.3);\n}\n\n.udoc-viewer-root .udoc-right-panel--resizing {\n transition: none;\n}\n\n.udoc-viewer-root .udoc-right-panel__content {\n flex: 1;\n overflow: auto;\n}\n\n/* Annotation Layer */\n.udoc-viewer-root .udoc-spread__annotation-layer {\n position: absolute;\n pointer-events: none;\n z-index: 1;\n}\n\n/* Base annotation */\n.udoc-viewer-root .udoc-annotation {\n position: absolute;\n box-sizing: border-box;\n}\n\n/* Link annotation */\n.udoc-viewer-root .udoc-annotation--link {\n pointer-events: auto;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-annotation--link:hover {\n background-color: rgba(0, 102, 204, 0.15);\n}\n\n/* Highlight annotation */\n.udoc-viewer-root .udoc-annotation--highlight {\n pointer-events: none;\n}\n\n.udoc-viewer-root .udoc-annotation__quad {\n mix-blend-mode: multiply;\n}\n\n/* Underline annotation */\n.udoc-viewer-root .udoc-annotation--underline {\n pointer-events: none;\n}\n\n/* StrikeOut annotation */\n.udoc-viewer-root .udoc-annotation--strikeout {\n pointer-events: none;\n}\n\n/* Squiggly annotation */\n.udoc-viewer-root .udoc-annotation--squiggly {\n pointer-events: none;\n}\n\n/* Text (sticky note) annotation */\n.udoc-viewer-root .udoc-annotation--text {\n pointer-events: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: filter 0.15s ease;\n}\n\n.udoc-viewer-root .udoc-annotation--text:hover {\n filter: brightness(1.1) drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));\n}\n\n.udoc-viewer-root .udoc-annotation--text svg {\n width: 100%;\n height: 100%;\n}\n\n/* Annotation popup */\n.udoc-viewer-root .udoc-annotation-popup {\n position: absolute;\n z-index: 100;\n min-width: 200px;\n max-width: 300px;\n background: #ffffc0;\n border: 1px solid #d4d4a0;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n font-size: 12px;\n color: #333;\n pointer-events: auto;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 8px;\n background: #f0f0c0;\n border-bottom: 1px solid #d4d4a0;\n border-radius: 4px 4px 0 0;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__author {\n font-weight: 600;\n color: #555;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close {\n width: 16px;\n height: 16px;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.6;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close:hover {\n opacity: 1;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__close svg {\n width: 12px;\n height: 12px;\n}\n\n.udoc-viewer-root .udoc-annotation-popup__content {\n padding: 8px;\n white-space: pre-wrap;\n word-wrap: break-word;\n max-height: 200px;\n overflow-y: auto;\n}\n\n/* FreeText annotation */\n.udoc-viewer-root .udoc-annotation--freetext {\n pointer-events: auto;\n overflow: hidden;\n font-size: 12px;\n padding: 2px;\n}\n\n/* Stamp annotation */\n.udoc-viewer-root .udoc-annotation--stamp {\n pointer-events: none;\n}\n\n/* Caret annotation - rendered via SVG, minimal styling needed */\n.udoc-viewer-root .udoc-annotation--caret {\n pointer-events: none;\n}\n\n/* Shape annotations - rendered via SVG overlay */\n.udoc-viewer-root .udoc-annotation--line,\n.udoc-viewer-root .udoc-annotation--square,\n.udoc-viewer-root .udoc-annotation--circle,\n.udoc-viewer-root .udoc-annotation--polygon,\n.udoc-viewer-root .udoc-annotation--polyLine,\n.udoc-viewer-root .udoc-annotation--ink {\n pointer-events: none;\n}\n\n/* Redact annotation */\n.udoc-viewer-root .udoc-annotation--redact {\n pointer-events: none;\n}\n\n/* Annotation Panel */\n.udoc-viewer-root .udoc-annotation-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 32px 16px;\n text-align: center;\n color: #888;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-icon {\n color: #ccc;\n margin-bottom: 12px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-icon svg {\n width: 48px;\n height: 48px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-title {\n font-size: 14px;\n font-weight: 500;\n color: #666;\n margin-bottom: 4px;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__placeholder-message {\n font-size: 12px;\n color: #999;\n}\n\n.udoc-viewer-root .udoc-annotation-panel__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #888;\n font-size: 13px;\n}\n\n/* Comments List */\n.udoc-viewer-root .udoc-comments-list {\n display: flex;\n flex-direction: column;\n}\n\n/* Page Group */\n.udoc-viewer-root .udoc-comments-page-group {\n border-bottom: 1px solid #e0e0e0;\n}\n\n.udoc-viewer-root .udoc-comments-page-group:last-child {\n border-bottom: none;\n}\n\n.udoc-viewer-root .udoc-comments-page-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 12px;\n cursor: pointer;\n user-select: none;\n background: #f0f0f0;\n transition: background 0.15s;\n}\n\n.udoc-viewer-root .udoc-comments-page-header:hover {\n background: #e8e8e8;\n}\n\n.udoc-viewer-root .udoc-comments-page-header svg {\n width: 16px;\n height: 16px;\n color: #666;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-comments-page-header span {\n font-size: 13px;\n font-weight: 500;\n color: #333;\n}\n\n.udoc-viewer-root .udoc-comments-page-count {\n margin-left: auto;\n padding: 2px 6px;\n background: #ddd;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #666;\n}\n\n/* Collapsed state */\n.udoc-viewer-root .udoc-comments-page-group--collapsed .udoc-comments-page-header svg {\n transform: rotate(-90deg);\n}\n\n.udoc-viewer-root .udoc-comments-page-group--collapsed .udoc-comments-page-content {\n display: none;\n}\n\n/* Page Content */\n.udoc-viewer-root .udoc-comments-page-content {\n display: flex;\n flex-direction: column;\n}\n\n/* Comment Item */\n.udoc-viewer-root .udoc-comment-item {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid #eee;\n}\n\n.udoc-viewer-root .udoc-comment-item:last-child {\n border-bottom: none;\n}\n\n.udoc-viewer-root .udoc-comment-item:hover {\n background: rgba(0, 102, 204, 0.05);\n}\n\n/* Reply indentation */\n.udoc-viewer-root .udoc-comment-reply {\n background: #fafafa;\n}\n\n.udoc-viewer-root .udoc-comment-depth-1 {\n padding-left: 28px;\n}\n\n.udoc-viewer-root .udoc-comment-depth-2 {\n padding-left: 44px;\n}\n\n.udoc-viewer-root .udoc-comment-depth-3 {\n padding-left: 60px;\n}\n\n/* Comment Icon */\n.udoc-viewer-root .udoc-comment-icon {\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #888;\n}\n\n.udoc-viewer-root .udoc-comment-icon svg {\n width: 16px;\n height: 16px;\n}\n\n/* Comment Body */\n.udoc-viewer-root .udoc-comment-body {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n/* Comment Header */\n.udoc-viewer-root .udoc-comment-header {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.udoc-viewer-root .udoc-comment-author {\n font-size: 12px;\n font-weight: 600;\n color: #333;\n}\n\n/* Status Badge */\n.udoc-viewer-root .udoc-comment-status {\n padding: 1px 6px;\n border-radius: 8px;\n font-size: 10px;\n font-weight: 500;\n text-transform: capitalize;\n}\n\n.udoc-viewer-root .udoc-comment-status--accepted {\n background: #d4edda;\n color: #155724;\n}\n\n.udoc-viewer-root .udoc-comment-status--rejected {\n background: #f8d7da;\n color: #721c24;\n}\n\n.udoc-viewer-root .udoc-comment-status--completed {\n background: #cce5ff;\n color: #004085;\n}\n\n.udoc-viewer-root .udoc-comment-status--cancelled {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.udoc-viewer-root .udoc-comment-status--marked {\n background: #fff3cd;\n color: #856404;\n}\n\n.udoc-viewer-root .udoc-comment-status--unmarked {\n background: #e2e3e5;\n color: #383d41;\n}\n\n/* Comment Contents */\n.udoc-viewer-root .udoc-comment-contents {\n font-size: 12px;\n color: #555;\n line-height: 1.4;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n line-clamp: 3;\n -webkit-box-orient: vertical;\n}\n\n/* Reply Toggle */\n.udoc-viewer-root .udoc-comment-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n margin-top: 4px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: #0066cc;\n font-size: 11px;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.udoc-viewer-root .udoc-comment-toggle:hover {\n background: rgba(0, 102, 204, 0.1);\n}\n\n.udoc-viewer-root .udoc-comment-toggle svg {\n width: 12px;\n height: 12px;\n transition: transform 0.2s ease;\n}\n\n.udoc-viewer-root .udoc-comment-toggle--expanded svg {\n transform: rotate(90deg);\n}\n\n/* Replies Container */\n.udoc-viewer-root .udoc-comment-replies {\n display: flex;\n flex-direction: column;\n}\n\n.udoc-viewer-root .udoc-comment-replies--collapsed {\n display: none;\n}\n\n/* Annotation Highlight Animation */\n@keyframes udoc-annotation-pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(0, 102, 204, 0.7);\n }\n 50% {\n box-shadow: 0 0 0 8px rgba(0, 102, 204, 0.3);\n }\n 100% {\n box-shadow: 0 0 0 12px rgba(0, 102, 204, 0);\n }\n}\n\n.udoc-viewer-root .udoc-annotation--highlighted {\n animation: udoc-annotation-pulse 1.5s ease-out;\n outline: 2px solid #0066cc;\n outline-offset: 2px;\n border-radius: 2px;\n z-index: 10;\n}\n\n/* Highlight indicator for full-layer markup annotations */\n.udoc-viewer-root .udoc-annotation-highlight-indicator {\n position: absolute;\n box-sizing: border-box;\n pointer-events: none;\n animation: udoc-annotation-pulse 1.5s ease-out;\n outline: 2px solid #0066cc;\n outline-offset: 2px;\n border-radius: 2px;\n z-index: 10;\n}\n\n/* Mobile Panel Overlay */\n.udoc-viewer-root .udoc-panel-overlay {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 140;\n}\n\n/* ===== Responsive: Small Mobile (\u2264480px) ===== */\n@container udoc-viewer (max-width: 480px) {\n /* Make body-slot a positioning context */\n .udoc-viewer-root .udoc-body-slot {\n position: relative;\n }\n\n /* Collapse panels to slide-out drawers */\n .udoc-viewer-root .udoc-left-panel {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 280px !important;\n z-index: 150;\n box-shadow: 4px 0 20px rgba(0, 0, 0, 0.15);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .udoc-viewer-root .udoc-left-panel:not(.udoc-left-panel--closed) {\n transform: translateX(0);\n }\n\n .udoc-viewer-root .udoc-left-panel--closed {\n width: 280px !important;\n transform: translateX(-100%);\n }\n\n .udoc-viewer-root .udoc-right-panel {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 280px !important;\n z-index: 150;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n transform: translateX(100%);\n transition: transform 0.3s ease;\n }\n\n .udoc-viewer-root .udoc-right-panel:not(.udoc-right-panel--closed) {\n transform: translateX(0);\n }\n\n .udoc-viewer-root .udoc-right-panel--closed {\n width: 280px !important;\n transform: translateX(100%);\n }\n\n /* Show overlay when panel is open */\n .udoc-viewer-root.udoc-panel-open .udoc-panel-overlay {\n display: block;\n }\n\n /* Convert floating bar to full-width bottom toolbar */\n .udoc-viewer-root .udoc-floating-toolbar {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n transform: none;\n border-radius: 0;\n box-sizing: border-box;\n height: 40px;\n padding: 0 12px;\n gap: 8px;\n max-width: none;\n justify-content: center;\n box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);\n }\n\n /* Viewport scroll area needs padding for bottom toolbar */\n .udoc-viewer-root .udoc-viewport__scroll {\n padding-bottom: 40px;\n }\n\n /* Move watermark above bottom toolbar on mobile */\n .udoc-viewer-root .udoc-viewport__watermark {\n bottom: 48px;\n right: 10px;\n font-size: 11px;\n }\n\n /* Hide fullscreen button on mobile */\n .udoc-viewer-root .udoc-toolbar__btn--fullscreen {\n display: none;\n }\n\n /* Touch targets for mobile */\n .udoc-viewer-root .udoc-floating-toolbar__btn {\n padding: 6px;\n min-width: 28px;\n min-height: 28px;\n }\n\n .udoc-viewer-root .udoc-floating-toolbar__btn svg {\n width: 18px;\n height: 18px;\n }\n\n /* Larger panel tab buttons for touch */\n .udoc-viewer-root .udoc-left-panel__tabs {\n width: 44px;\n padding: 8px 0;\n }\n\n .udoc-viewer-root .udoc-left-panel__tab {\n width: 44px;\n height: 44px;\n }\n\n .udoc-viewer-root .udoc-left-panel__tab svg {\n width: 22px;\n height: 22px;\n }\n\n /* Toolbar adjustments */\n .udoc-viewer-root .udoc-toolbar {\n padding: 0 4px;\n gap: 4px;\n }\n\n .udoc-viewer-root .udoc-toolbar__btn {\n padding: 8px;\n }\n\n /* View mode menu - right align */\n .udoc-viewer-root .udoc-view-mode-menu__dropdown {\n left: auto;\n right: 0;\n }\n\n .udoc-viewer-root .udoc-zoom-dropdown__item {\n padding: 12px 16px;\n }\n\n .udoc-viewer-root .udoc-view-mode-menu__option {\n width: 36px;\n height: 36px;\n }\n}\n\n/* ===== Password Dialog ===== */\n.udoc-viewer-root .udoc-password-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 200;\n}\n\n.udoc-viewer-root .udoc-password-dialog {\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n padding: 24px;\n max-width: 360px;\n width: 90%;\n}\n\n.udoc-viewer-root .udoc-password-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.udoc-viewer-root .udoc-password-icon {\n width: 32px;\n height: 32px;\n color: #666;\n flex-shrink: 0;\n}\n\n.udoc-viewer-root .udoc-password-title {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.udoc-viewer-root .udoc-password-message {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n}\n\n.udoc-viewer-root .udoc-password-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.udoc-viewer-root .udoc-password-input-wrapper {\n display: flex;\n align-items: center;\n border: 1px solid #ddd;\n border-radius: 8px;\n background: #fff;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.udoc-viewer-root .udoc-password-input-wrapper:focus-within {\n border-color: #0066cc;\n box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.15);\n}\n\n.udoc-viewer-root .udoc-password-input {\n flex: 1;\n padding: 12px 14px;\n border: none;\n border-radius: 8px 0 0 8px;\n background: transparent;\n font-size: 15px;\n color: #333;\n outline: none;\n}\n\n.udoc-viewer-root .udoc-password-input::placeholder {\n color: #999;\n}\n\n.udoc-viewer-root .udoc-password-input:disabled {\n background: #f5f5f5;\n color: #999;\n}\n\n.udoc-viewer-root .udoc-password-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border: none;\n background: transparent;\n color: #888;\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.udoc-viewer-root .udoc-password-toggle:hover {\n color: #333;\n}\n\n.udoc-viewer-root .udoc-password-toggle svg {\n width: 20px;\n height: 20px;\n}\n\n.udoc-viewer-root .udoc-password-error {\n margin: 0;\n padding: 8px 12px;\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 6px;\n font-size: 13px;\n color: #dc2626;\n}\n\n.udoc-viewer-root .udoc-password-submit {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n border: none;\n border-radius: 8px;\n background: #0066cc;\n color: #fff;\n font-size: 15px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.udoc-viewer-root .udoc-password-submit:hover:not(:disabled) {\n background: #0052a3;\n}\n\n.udoc-viewer-root .udoc-password-submit:disabled {\n background: #94a3b8;\n cursor: not-allowed;\n}\n\n.udoc-viewer-root .udoc-password-submit-spinner svg {\n width: 20px;\n height: 20px;\n}\n";
2
2
  //# sourceMappingURL=styles-inline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles-inline.d.ts","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,mi8BA40CxB,CAAC"}
1
+ {"version":3,"file":"styles-inline.d.ts","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,4tiCAs+CxB,CAAC"}
@@ -26,6 +26,7 @@ export const inlineStyles = `.udoc-viewer-root {
26
26
  }
27
27
 
28
28
  .udoc-viewer-root .udoc-viewport-slot {
29
+ position: relative;
29
30
  flex: 1 1 auto;
30
31
  overflow: hidden;
31
32
  }
@@ -1355,5 +1356,158 @@ export const inlineStyles = `.udoc-viewer-root {
1355
1356
  height: 36px;
1356
1357
  }
1357
1358
  }
1359
+
1360
+ /* ===== Password Dialog ===== */
1361
+ .udoc-viewer-root .udoc-password-overlay {
1362
+ position: absolute;
1363
+ top: 0;
1364
+ left: 0;
1365
+ right: 0;
1366
+ bottom: 0;
1367
+ background: rgba(0, 0, 0, 0.5);
1368
+ display: flex;
1369
+ align-items: center;
1370
+ justify-content: center;
1371
+ z-index: 200;
1372
+ }
1373
+
1374
+ .udoc-viewer-root .udoc-password-dialog {
1375
+ background: #fff;
1376
+ border-radius: 12px;
1377
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
1378
+ padding: 24px;
1379
+ max-width: 360px;
1380
+ width: 90%;
1381
+ }
1382
+
1383
+ .udoc-viewer-root .udoc-password-header {
1384
+ display: flex;
1385
+ align-items: center;
1386
+ gap: 12px;
1387
+ margin-bottom: 12px;
1388
+ }
1389
+
1390
+ .udoc-viewer-root .udoc-password-icon {
1391
+ width: 32px;
1392
+ height: 32px;
1393
+ color: #666;
1394
+ flex-shrink: 0;
1395
+ }
1396
+
1397
+ .udoc-viewer-root .udoc-password-title {
1398
+ margin: 0;
1399
+ font-size: 18px;
1400
+ font-weight: 600;
1401
+ color: #333;
1402
+ }
1403
+
1404
+ .udoc-viewer-root .udoc-password-message {
1405
+ margin: 0 0 20px 0;
1406
+ font-size: 14px;
1407
+ color: #666;
1408
+ line-height: 1.5;
1409
+ }
1410
+
1411
+ .udoc-viewer-root .udoc-password-form {
1412
+ display: flex;
1413
+ flex-direction: column;
1414
+ gap: 12px;
1415
+ }
1416
+
1417
+ .udoc-viewer-root .udoc-password-input-wrapper {
1418
+ display: flex;
1419
+ align-items: center;
1420
+ border: 1px solid #ddd;
1421
+ border-radius: 8px;
1422
+ background: #fff;
1423
+ transition: border-color 0.15s, box-shadow 0.15s;
1424
+ }
1425
+
1426
+ .udoc-viewer-root .udoc-password-input-wrapper:focus-within {
1427
+ border-color: #0066cc;
1428
+ box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.15);
1429
+ }
1430
+
1431
+ .udoc-viewer-root .udoc-password-input {
1432
+ flex: 1;
1433
+ padding: 12px 14px;
1434
+ border: none;
1435
+ border-radius: 8px 0 0 8px;
1436
+ background: transparent;
1437
+ font-size: 15px;
1438
+ color: #333;
1439
+ outline: none;
1440
+ }
1441
+
1442
+ .udoc-viewer-root .udoc-password-input::placeholder {
1443
+ color: #999;
1444
+ }
1445
+
1446
+ .udoc-viewer-root .udoc-password-input:disabled {
1447
+ background: #f5f5f5;
1448
+ color: #999;
1449
+ }
1450
+
1451
+ .udoc-viewer-root .udoc-password-toggle {
1452
+ display: flex;
1453
+ align-items: center;
1454
+ justify-content: center;
1455
+ width: 44px;
1456
+ height: 44px;
1457
+ border: none;
1458
+ background: transparent;
1459
+ color: #888;
1460
+ cursor: pointer;
1461
+ transition: color 0.15s;
1462
+ }
1463
+
1464
+ .udoc-viewer-root .udoc-password-toggle:hover {
1465
+ color: #333;
1466
+ }
1467
+
1468
+ .udoc-viewer-root .udoc-password-toggle svg {
1469
+ width: 20px;
1470
+ height: 20px;
1471
+ }
1472
+
1473
+ .udoc-viewer-root .udoc-password-error {
1474
+ margin: 0;
1475
+ padding: 8px 12px;
1476
+ background: #fef2f2;
1477
+ border: 1px solid #fecaca;
1478
+ border-radius: 6px;
1479
+ font-size: 13px;
1480
+ color: #dc2626;
1481
+ }
1482
+
1483
+ .udoc-viewer-root .udoc-password-submit {
1484
+ display: flex;
1485
+ align-items: center;
1486
+ justify-content: center;
1487
+ gap: 8px;
1488
+ padding: 12px 20px;
1489
+ border: none;
1490
+ border-radius: 8px;
1491
+ background: #0066cc;
1492
+ color: #fff;
1493
+ font-size: 15px;
1494
+ font-weight: 500;
1495
+ cursor: pointer;
1496
+ transition: background 0.15s;
1497
+ }
1498
+
1499
+ .udoc-viewer-root .udoc-password-submit:hover:not(:disabled) {
1500
+ background: #0052a3;
1501
+ }
1502
+
1503
+ .udoc-viewer-root .udoc-password-submit:disabled {
1504
+ background: #94a3b8;
1505
+ cursor: not-allowed;
1506
+ }
1507
+
1508
+ .udoc-viewer-root .udoc-password-submit-spinner svg {
1509
+ width: 20px;
1510
+ height: 20px;
1511
+ }
1358
1512
  `;
1359
1513
  //# sourceMappingURL=styles-inline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles-inline.js","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA40C3B,CAAC"}
1
+ {"version":3,"file":"styles-inline.js","sourceRoot":"","sources":["../../../../src/ui/viewer/styles-inline.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAs+C3B,CAAC"}
@@ -70,6 +70,17 @@ export class UDoc {
70
70
  * License validation result as JSON.
71
71
  */
72
72
  set_license(license_key: string, domain: string): any;
73
+ /**
74
+ * Authenticate with a password to unlock an encrypted document.
75
+ *
76
+ * # Arguments
77
+ * * `id` - Document ID
78
+ * * `password` - Password to try
79
+ *
80
+ * # Returns
81
+ * `true` if authentication succeeded, `false` if the password was incorrect.
82
+ */
83
+ authenticate(id: string, password: string): boolean;
73
84
  /**
74
85
  * Get all document IDs.
75
86
  */
@@ -105,6 +116,13 @@ export class UDoc {
105
116
  * Get current license status.
106
117
  */
107
118
  license_status(): any;
119
+ /**
120
+ * Check if a document requires a password to open.
121
+ *
122
+ * Returns `true` if the document is encrypted and requires authentication
123
+ * before pages can be loaded or rendered.
124
+ */
125
+ needs_password(id: string): boolean;
108
126
  /**
109
127
  * Decompress a PDF document.
110
128
  *
@@ -254,6 +272,7 @@ export interface InitOutput {
254
272
  readonly memory: WebAssembly.Memory;
255
273
  readonly __wbg_udoc_free: (a: number, b: number) => void;
256
274
  readonly udoc_all_page_info: (a: number, b: number, c: number, d: number) => void;
275
+ readonly udoc_authenticate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
257
276
  readonly udoc_document_count: (a: number) => number;
258
277
  readonly udoc_document_ids: (a: number, b: number) => void;
259
278
  readonly udoc_get_all_annotations: (a: number, b: number, c: number, d: number) => void;
@@ -265,6 +284,7 @@ export interface InitOutput {
265
284
  readonly udoc_has_feature: (a: number, b: number, c: number) => number;
266
285
  readonly udoc_license_status: (a: number, b: number) => void;
267
286
  readonly udoc_load_pdf: (a: number, b: number, c: number, d: number) => void;
287
+ readonly udoc_needs_password: (a: number, b: number, c: number, d: number) => void;
268
288
  readonly udoc_new: () => number;
269
289
  readonly udoc_page_count: (a: number, b: number, c: number, d: number) => void;
270
290
  readonly udoc_page_info: (a: number, b: number, c: number, d: number, e: number) => void;
@@ -408,6 +408,38 @@ export class UDoc {
408
408
  wasm.__wbindgen_add_to_stack_pointer(16);
409
409
  }
410
410
  }
411
+ /**
412
+ * Authenticate with a password to unlock an encrypted document.
413
+ *
414
+ * # Arguments
415
+ * * `id` - Document ID
416
+ * * `password` - Password to try
417
+ *
418
+ * # Returns
419
+ * `true` if authentication succeeded, `false` if the password was incorrect.
420
+ * @param {string} id
421
+ * @param {string} password
422
+ * @returns {boolean}
423
+ */
424
+ authenticate(id, password) {
425
+ try {
426
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
427
+ const ptr0 = passStringToWasm0(id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
428
+ const len0 = WASM_VECTOR_LEN;
429
+ const ptr1 = passStringToWasm0(password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
430
+ const len1 = WASM_VECTOR_LEN;
431
+ wasm.udoc_authenticate(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1);
432
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
433
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
434
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
435
+ if (r2) {
436
+ throw takeObject(r1);
437
+ }
438
+ return r0 !== 0;
439
+ } finally {
440
+ wasm.__wbindgen_add_to_stack_pointer(16);
441
+ }
442
+ }
411
443
  /**
412
444
  * Get all document IDs.
413
445
  * @returns {string[]}
@@ -525,6 +557,31 @@ export class UDoc {
525
557
  wasm.__wbindgen_add_to_stack_pointer(16);
526
558
  }
527
559
  }
560
+ /**
561
+ * Check if a document requires a password to open.
562
+ *
563
+ * Returns `true` if the document is encrypted and requires authentication
564
+ * before pages can be loaded or rendered.
565
+ * @param {string} id
566
+ * @returns {boolean}
567
+ */
568
+ needs_password(id) {
569
+ try {
570
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
571
+ const ptr0 = passStringToWasm0(id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
572
+ const len0 = WASM_VECTOR_LEN;
573
+ wasm.udoc_needs_password(retptr, this.__wbg_ptr, ptr0, len0);
574
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
575
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
576
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
577
+ if (r2) {
578
+ throw takeObject(r1);
579
+ }
580
+ return r0 !== 0;
581
+ } finally {
582
+ wasm.__wbindgen_add_to_stack_pointer(16);
583
+ }
584
+ }
528
585
  /**
529
586
  * Decompress a PDF document.
530
587
  *
Binary file
@@ -3,6 +3,7 @@
3
3
  export const memory: WebAssembly.Memory;
4
4
  export const __wbg_udoc_free: (a: number, b: number) => void;
5
5
  export const udoc_all_page_info: (a: number, b: number, c: number, d: number) => void;
6
+ export const udoc_authenticate: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
6
7
  export const udoc_document_count: (a: number) => number;
7
8
  export const udoc_document_ids: (a: number, b: number) => void;
8
9
  export const udoc_get_all_annotations: (a: number, b: number, c: number, d: number) => void;
@@ -14,6 +15,7 @@ export const udoc_has_document: (a: number, b: number, c: number) => number;
14
15
  export const udoc_has_feature: (a: number, b: number, c: number) => number;
15
16
  export const udoc_license_status: (a: number, b: number) => void;
16
17
  export const udoc_load_pdf: (a: number, b: number, c: number, d: number) => void;
18
+ export const udoc_needs_password: (a: number, b: number, c: number, d: number) => void;
17
19
  export const udoc_new: () => number;
18
20
  export const udoc_page_count: (a: number, b: number, c: number, d: number) => void;
19
21
  export const udoc_page_info: (a: number, b: number, c: number, d: number, e: number) => void;
@@ -83,6 +83,18 @@ export declare class WorkerClient {
83
83
  * @returns True if the document was removed.
84
84
  */
85
85
  unloadPdf(documentId: string): Promise<boolean>;
86
+ /**
87
+ * Check if a document requires a password to open.
88
+ * @returns True if the document needs authentication.
89
+ */
90
+ needsPassword(documentId: string): Promise<boolean>;
91
+ /**
92
+ * Authenticate with a password to unlock an encrypted document.
93
+ * @param documentId - The document ID
94
+ * @param password - The password to try
95
+ * @returns True if authentication succeeded, false if the password was incorrect.
96
+ */
97
+ authenticate(documentId: string, password: string): Promise<boolean>;
86
98
  /**
87
99
  * Get the page count of a document.
88
100
  * Returns from cache if available.
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerClient.d.ts","sourceRoot":"","sources":["../../../src/worker/WorkerClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkerClient.d.ts","sourceRoot":"","sources":["../../../src/worker/WorkerClient.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,24 @@ export class WorkerClient {
97
97
  const response = (await this.send({ type: "unloadPdf", documentId }));
98
98
  return response.removed;
99
99
  }
100
+ /**
101
+ * Check if a document requires a password to open.
102
+ * @returns True if the document needs authentication.
103
+ */
104
+ async needsPassword(documentId) {
105
+ const response = (await this.send({ type: "needsPassword", documentId }));
106
+ return response.needsPassword;
107
+ }
108
+ /**
109
+ * Authenticate with a password to unlock an encrypted document.
110
+ * @param documentId - The document ID
111
+ * @param password - The password to try
112
+ * @returns True if authentication succeeded, false if the password was incorrect.
113
+ */
114
+ async authenticate(documentId, password) {
115
+ const response = (await this.send({ type: "authenticate", documentId, password }));
116
+ return response.authenticated;
117
+ }
100
118
  /**
101
119
  * Get the page count of a document.
102
120
  * Returns from cache if available.