@docmentis/udoc-viewer 0.6.21 → 0.6.23

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 (142) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/UDocClient.d.ts +22 -0
  3. package/dist/src/UDocClient.d.ts.map +1 -1
  4. package/dist/src/UDocClient.js +25 -1
  5. package/dist/src/UDocClient.js.map +1 -1
  6. package/dist/src/UDocViewer.d.ts +4 -3
  7. package/dist/src/UDocViewer.d.ts.map +1 -1
  8. package/dist/src/UDocViewer.js +50 -3
  9. package/dist/src/UDocViewer.js.map +1 -1
  10. package/dist/src/ui/viewer/actions.d.ts +34 -3
  11. package/dist/src/ui/viewer/actions.d.ts.map +1 -1
  12. package/dist/src/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -1
  13. package/dist/src/ui/viewer/annotation/ShapeRenderer.js +23 -16
  14. package/dist/src/ui/viewer/annotation/ShapeRenderer.js.map +1 -1
  15. package/dist/src/ui/viewer/annotation/index.d.ts +1 -1
  16. package/dist/src/ui/viewer/annotation/index.d.ts.map +1 -1
  17. package/dist/src/ui/viewer/annotation/index.js +1 -1
  18. package/dist/src/ui/viewer/annotation/index.js.map +1 -1
  19. package/dist/src/ui/viewer/annotation/render.d.ts.map +1 -1
  20. package/dist/src/ui/viewer/annotation/render.js +11 -4
  21. package/dist/src/ui/viewer/annotation/render.js.map +1 -1
  22. package/dist/src/ui/viewer/annotation/types.d.ts +9 -1
  23. package/dist/src/ui/viewer/annotation/types.d.ts.map +1 -1
  24. package/dist/src/ui/viewer/annotation/utils.d.ts +10 -1
  25. package/dist/src/ui/viewer/annotation/utils.d.ts.map +1 -1
  26. package/dist/src/ui/viewer/annotation/utils.js +114 -0
  27. package/dist/src/ui/viewer/annotation/utils.js.map +1 -1
  28. package/dist/src/ui/viewer/components/ColorSelect.d.ts +26 -0
  29. package/dist/src/ui/viewer/components/ColorSelect.d.ts.map +1 -0
  30. package/dist/src/ui/viewer/components/ColorSelect.js +120 -0
  31. package/dist/src/ui/viewer/components/ColorSelect.js.map +1 -0
  32. package/dist/src/ui/viewer/components/FloatingToolbar.js +12 -12
  33. package/dist/src/ui/viewer/components/FloatingToolbar.js.map +1 -1
  34. package/dist/src/ui/viewer/components/NumberInput.d.ts +32 -0
  35. package/dist/src/ui/viewer/components/NumberInput.d.ts.map +1 -0
  36. package/dist/src/ui/viewer/components/NumberInput.js +101 -0
  37. package/dist/src/ui/viewer/components/NumberInput.js.map +1 -0
  38. package/dist/src/ui/viewer/components/Spread.d.ts +2 -2
  39. package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -1
  40. package/dist/src/ui/viewer/components/Spread.js.map +1 -1
  41. package/dist/src/ui/viewer/components/SubToolbar.d.ts +10 -0
  42. package/dist/src/ui/viewer/components/SubToolbar.d.ts.map +1 -0
  43. package/dist/src/ui/viewer/components/SubToolbar.js +481 -0
  44. package/dist/src/ui/viewer/components/SubToolbar.js.map +1 -0
  45. package/dist/src/ui/viewer/components/Toolbar.d.ts.map +1 -1
  46. package/dist/src/ui/viewer/components/Toolbar.js +147 -4
  47. package/dist/src/ui/viewer/components/Toolbar.js.map +1 -1
  48. package/dist/src/ui/viewer/components/ViewModeMenu.js +3 -3
  49. package/dist/src/ui/viewer/components/ViewModeMenu.js.map +1 -1
  50. package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -1
  51. package/dist/src/ui/viewer/components/Viewport.js +40 -2
  52. package/dist/src/ui/viewer/components/Viewport.js.map +1 -1
  53. package/dist/src/ui/viewer/i18n/ar.d.ts.map +1 -1
  54. package/dist/src/ui/viewer/i18n/ar.js +40 -0
  55. package/dist/src/ui/viewer/i18n/ar.js.map +1 -1
  56. package/dist/src/ui/viewer/i18n/de.d.ts.map +1 -1
  57. package/dist/src/ui/viewer/i18n/de.js +40 -0
  58. package/dist/src/ui/viewer/i18n/de.js.map +1 -1
  59. package/dist/src/ui/viewer/i18n/en.d.ts.map +1 -1
  60. package/dist/src/ui/viewer/i18n/en.js +40 -0
  61. package/dist/src/ui/viewer/i18n/en.js.map +1 -1
  62. package/dist/src/ui/viewer/i18n/es.d.ts.map +1 -1
  63. package/dist/src/ui/viewer/i18n/es.js +40 -0
  64. package/dist/src/ui/viewer/i18n/es.js.map +1 -1
  65. package/dist/src/ui/viewer/i18n/fr.d.ts.map +1 -1
  66. package/dist/src/ui/viewer/i18n/fr.js +40 -0
  67. package/dist/src/ui/viewer/i18n/fr.js.map +1 -1
  68. package/dist/src/ui/viewer/i18n/ja.d.ts.map +1 -1
  69. package/dist/src/ui/viewer/i18n/ja.js +40 -0
  70. package/dist/src/ui/viewer/i18n/ja.js.map +1 -1
  71. package/dist/src/ui/viewer/i18n/ko.d.ts.map +1 -1
  72. package/dist/src/ui/viewer/i18n/ko.js +40 -0
  73. package/dist/src/ui/viewer/i18n/ko.js.map +1 -1
  74. package/dist/src/ui/viewer/i18n/pt-BR.d.ts.map +1 -1
  75. package/dist/src/ui/viewer/i18n/pt-BR.js +40 -0
  76. package/dist/src/ui/viewer/i18n/pt-BR.js.map +1 -1
  77. package/dist/src/ui/viewer/i18n/ru.d.ts.map +1 -1
  78. package/dist/src/ui/viewer/i18n/ru.js +40 -0
  79. package/dist/src/ui/viewer/i18n/ru.js.map +1 -1
  80. package/dist/src/ui/viewer/i18n/types.d.ts +35 -0
  81. package/dist/src/ui/viewer/i18n/types.d.ts.map +1 -1
  82. package/dist/src/ui/viewer/i18n/zh-CN.d.ts.map +1 -1
  83. package/dist/src/ui/viewer/i18n/zh-CN.js +40 -0
  84. package/dist/src/ui/viewer/i18n/zh-CN.js.map +1 -1
  85. package/dist/src/ui/viewer/i18n/zh-TW.d.ts.map +1 -1
  86. package/dist/src/ui/viewer/i18n/zh-TW.js +40 -0
  87. package/dist/src/ui/viewer/i18n/zh-TW.js.map +1 -1
  88. package/dist/src/ui/viewer/icons.d.ts +29 -0
  89. package/dist/src/ui/viewer/icons.d.ts.map +1 -1
  90. package/dist/src/ui/viewer/icons.js +42 -0
  91. package/dist/src/ui/viewer/icons.js.map +1 -1
  92. package/dist/src/ui/viewer/reducer.d.ts.map +1 -1
  93. package/dist/src/ui/viewer/reducer.js +109 -1
  94. package/dist/src/ui/viewer/reducer.js.map +1 -1
  95. package/dist/src/ui/viewer/search/search.d.ts +4 -4
  96. package/dist/src/ui/viewer/search/search.d.ts.map +1 -1
  97. package/dist/src/ui/viewer/search/search.js +1 -1
  98. package/dist/src/ui/viewer/search/search.js.map +1 -1
  99. package/dist/src/ui/viewer/shell.d.ts +2 -2
  100. package/dist/src/ui/viewer/shell.d.ts.map +1 -1
  101. package/dist/src/ui/viewer/shell.js +13 -2
  102. package/dist/src/ui/viewer/shell.js.map +1 -1
  103. package/dist/src/ui/viewer/state.d.ts +55 -2
  104. package/dist/src/ui/viewer/state.d.ts.map +1 -1
  105. package/dist/src/ui/viewer/state.js +30 -0
  106. package/dist/src/ui/viewer/state.js.map +1 -1
  107. package/dist/src/ui/viewer/styles-inline.d.ts +1 -1
  108. package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -1
  109. package/dist/src/ui/viewer/styles-inline.js +875 -246
  110. package/dist/src/ui/viewer/styles-inline.js.map +1 -1
  111. package/dist/src/ui/viewer/text/render.d.ts +3 -3
  112. package/dist/src/ui/viewer/text/render.d.ts.map +1 -1
  113. package/dist/src/ui/viewer/text/render.js +2 -2
  114. package/dist/src/ui/viewer/text/render.js.map +1 -1
  115. package/dist/src/ui/viewer/tools/AnnotationDrawController.d.ts +21 -0
  116. package/dist/src/ui/viewer/tools/AnnotationDrawController.d.ts.map +1 -0
  117. package/dist/src/ui/viewer/tools/AnnotationDrawController.js +392 -0
  118. package/dist/src/ui/viewer/tools/AnnotationDrawController.js.map +1 -0
  119. package/dist/src/ui/viewer/tools/AnnotationSelectController.d.ts +22 -0
  120. package/dist/src/ui/viewer/tools/AnnotationSelectController.d.ts.map +1 -0
  121. package/dist/src/ui/viewer/tools/AnnotationSelectController.js +367 -0
  122. package/dist/src/ui/viewer/tools/AnnotationSelectController.js.map +1 -0
  123. package/dist/src/ui/viewer/tools/ViewToolController.d.ts +20 -0
  124. package/dist/src/ui/viewer/tools/ViewToolController.d.ts.map +1 -0
  125. package/dist/src/ui/viewer/tools/ViewToolController.js +194 -0
  126. package/dist/src/ui/viewer/tools/ViewToolController.js.map +1 -0
  127. package/dist/src/wasm/udoc.d.ts +399 -114
  128. package/dist/src/wasm/udoc.js +157 -81
  129. package/dist/src/wasm/udoc_bg.wasm +0 -0
  130. package/dist/src/wasm/udoc_bg.wasm.d.ts +8 -7
  131. package/dist/src/worker/WorkerClient.d.ts +17 -11
  132. package/dist/src/worker/WorkerClient.d.ts.map +1 -1
  133. package/dist/src/worker/WorkerClient.js +10 -2
  134. package/dist/src/worker/WorkerClient.js.map +1 -1
  135. package/dist/src/worker/index.d.ts +1 -1
  136. package/dist/src/worker/index.d.ts.map +1 -1
  137. package/dist/src/worker/worker-inline.js +1 -1
  138. package/dist/src/worker/worker.d.ts +26 -58
  139. package/dist/src/worker/worker.d.ts.map +1 -1
  140. package/dist/src/worker/worker.js +161 -80
  141. package/dist/src/worker/worker.js.map +1 -1
  142. package/package.json +1 -1
@@ -24,13 +24,13 @@ export const inlineStyles = `.udoc-viewer-root {
24
24
  --udoc-text-placeholder: #999;
25
25
  --udoc-text-on-primary: #fff;
26
26
 
27
- --udoc-primary: #0066cc;
28
- --udoc-primary-hover: #0052a3;
29
- --udoc-primary-active-bg: rgba(0, 102, 204, 0.15);
30
- --udoc-primary-active-bg-hover: rgba(0, 102, 204, 0.2);
31
- --udoc-primary-subtle-bg: rgba(0, 102, 204, 0.1);
32
- --udoc-primary-focus-ring: rgba(0, 102, 204, 0.2);
33
- --udoc-primary-muted: rgba(0, 102, 204, 0.3);
27
+ --udoc-primary: #333;
28
+ --udoc-primary-hover: #1a1a1a;
29
+ --udoc-primary-active-bg: rgba(0, 0, 0, 0.1);
30
+ --udoc-primary-active-bg-hover: rgba(0, 0, 0, 0.14);
31
+ --udoc-primary-subtle-bg: rgba(0, 0, 0, 0.06);
32
+ --udoc-primary-focus-ring: rgba(0, 0, 0, 0.15);
33
+ --udoc-primary-muted: rgba(0, 0, 0, 0.25);
34
34
  --udoc-primary-disabled: #94a3b8;
35
35
 
36
36
  --udoc-border: #ddd;
@@ -56,9 +56,10 @@ export const inlineStyles = `.udoc-viewer-root {
56
56
  --udoc-search-highlight-active-outline: rgba(255, 140, 0, 0.8);
57
57
  --udoc-search-match-bg: rgba(255, 200, 0, 0.4);
58
58
  --udoc-search-match-text: #000;
59
- --udoc-search-result-active-bg: rgba(0, 102, 204, 0.08);
59
+ --udoc-search-result-active-bg: rgba(0, 0, 0, 0.06);
60
60
 
61
61
  --udoc-text-selection: rgba(0, 120, 215, 0.5);
62
+ --udoc-selection-color: rgb(0, 120, 215);
62
63
 
63
64
  --udoc-annotation-bg: #ffffc0;
64
65
  --udoc-annotation-header-bg: #f0f0c0;
@@ -80,7 +81,7 @@ export const inlineStyles = `.udoc-viewer-root {
80
81
  --udoc-error-text: #dc2626;
81
82
 
82
83
  --udoc-progress-track: #e5e7eb;
83
- --udoc-progress-fill: #0066cc;
84
+ --udoc-progress-fill: #333;
84
85
 
85
86
  --udoc-scrollbar-thumb: rgba(0, 0, 0, 0.3);
86
87
  --udoc-scrollbar-thumb-hover: rgba(0, 0, 0, 0.5);
@@ -91,6 +92,7 @@ export const inlineStyles = `.udoc-viewer-root {
91
92
  height: 100%;
92
93
  container-type: inline-size;
93
94
  container-name: udoc-viewer;
95
+ isolation: isolate;
94
96
  }
95
97
 
96
98
  .udoc-viewer-root.udoc-viewer-dark {
@@ -117,13 +119,13 @@ export const inlineStyles = `.udoc-viewer-root {
117
119
  --udoc-text-placeholder: #777;
118
120
  --udoc-text-on-primary: #fff;
119
121
 
120
- --udoc-primary: #4da6ff;
121
- --udoc-primary-hover: #80bfff;
122
- --udoc-primary-active-bg: rgba(77, 166, 255, 0.2);
123
- --udoc-primary-active-bg-hover: rgba(77, 166, 255, 0.25);
124
- --udoc-primary-subtle-bg: rgba(77, 166, 255, 0.12);
125
- --udoc-primary-focus-ring: rgba(77, 166, 255, 0.25);
126
- --udoc-primary-muted: rgba(77, 166, 255, 0.35);
122
+ --udoc-primary: #e0e0e0;
123
+ --udoc-primary-hover: #f0f0f0;
124
+ --udoc-primary-active-bg: rgba(255, 255, 255, 0.12);
125
+ --udoc-primary-active-bg-hover: rgba(255, 255, 255, 0.16);
126
+ --udoc-primary-subtle-bg: rgba(255, 255, 255, 0.07);
127
+ --udoc-primary-focus-ring: rgba(255, 255, 255, 0.2);
128
+ --udoc-primary-muted: rgba(255, 255, 255, 0.3);
127
129
  --udoc-primary-disabled: #4a5568;
128
130
 
129
131
  --udoc-border: #444;
@@ -149,9 +151,10 @@ export const inlineStyles = `.udoc-viewer-root {
149
151
  --udoc-search-highlight-active-outline: rgba(255, 140, 0, 0.85);
150
152
  --udoc-search-match-bg: rgba(255, 200, 0, 0.3);
151
153
  --udoc-search-match-text: #fff;
152
- --udoc-search-result-active-bg: rgba(77, 166, 255, 0.12);
154
+ --udoc-search-result-active-bg: rgba(255, 255, 255, 0.08);
153
155
 
154
156
  --udoc-text-selection: rgba(77, 166, 255, 0.5);
157
+ --udoc-selection-color: rgb(77, 166, 255);
155
158
 
156
159
  --udoc-annotation-bg: #4a4a20;
157
160
  --udoc-annotation-header-bg: #3a3a18;
@@ -173,7 +176,7 @@ export const inlineStyles = `.udoc-viewer-root {
173
176
  --udoc-error-text: #f87171;
174
177
 
175
178
  --udoc-progress-track: #404040;
176
- --udoc-progress-fill: #4da6ff;
179
+ --udoc-progress-fill: #e0e0e0;
177
180
 
178
181
  --udoc-scrollbar-thumb: rgba(255, 255, 255, 0.3);
179
182
  --udoc-scrollbar-thumb-hover: rgba(255, 255, 255, 0.5);
@@ -182,7 +185,7 @@ export const inlineStyles = `.udoc-viewer-root {
182
185
  .udoc-viewer-root .udoc-toolbar-slot {
183
186
  flex: 0 0 auto;
184
187
  position: relative;
185
- z-index: 10;
188
+ z-index: 11;
186
189
  }
187
190
 
188
191
  .udoc-viewer-root .udoc-body-slot {
@@ -290,99 +293,11 @@ export const inlineStyles = `.udoc-viewer-root {
290
293
  align-items: center;
291
294
  gap: 4px;
292
295
  height: 40px;
293
- padding: 0 10px;
296
+ padding: 0 6px;
294
297
  background: var(--udoc-bg-surface);
295
298
  border-radius: 8px;
296
299
  box-shadow: var(--udoc-shadow-toolbar);
297
- z-index: 100;
298
- }
299
-
300
- .udoc-viewer-root .udoc-floating-toolbar__section {
301
- display: flex;
302
- align-items: center;
303
- gap: 4px;
304
- }
305
-
306
- .udoc-viewer-root .udoc-floating-toolbar__divider {
307
- width: 1px;
308
- height: 20px;
309
- background: var(--udoc-pressed-overlay);
310
- margin: 0 4px;
311
- }
312
-
313
- .udoc-viewer-root .udoc-floating-toolbar__btn {
314
- display: flex;
315
- align-items: center;
316
- justify-content: center;
317
- width: 28px;
318
- height: 28px;
319
- padding: 0;
320
- border: none;
321
- border-radius: 4px;
322
- background: transparent;
323
- color: var(--udoc-text-secondary);
324
- cursor: pointer;
325
- }
326
-
327
- .udoc-viewer-root .udoc-floating-toolbar__btn:hover {
328
- background: var(--udoc-hover-overlay);
329
- }
330
-
331
- .udoc-viewer-root .udoc-floating-toolbar__btn:active {
332
- background: var(--udoc-pressed-overlay);
333
- }
334
-
335
- .udoc-viewer-root .udoc-floating-toolbar__btn:disabled {
336
- color: var(--udoc-text-disabled);
337
- cursor: default;
338
- }
339
-
340
- .udoc-viewer-root .udoc-floating-toolbar__btn:disabled:hover {
341
- background: transparent;
342
- }
343
-
344
- .udoc-viewer-root .udoc-floating-toolbar__btn svg {
345
- width: 18px;
346
- height: 18px;
347
- }
348
-
349
- .udoc-viewer-root .udoc-floating-toolbar__page-info {
350
- display: flex;
351
- align-items: center;
352
- color: var(--udoc-text-primary);
353
- font-size: 13px;
354
- }
355
-
356
- .udoc-viewer-root .udoc-floating-toolbar__page-input {
357
- width: 36px;
358
- padding: 2px 4px;
359
- border: 1px solid var(--udoc-pressed-overlay);
360
- border-radius: 4px;
361
- background: transparent;
362
- color: var(--udoc-text-primary);
363
- font-size: 13px;
364
- text-align: center;
365
- }
366
-
367
- .udoc-viewer-root .udoc-floating-toolbar__page-input:focus {
368
- outline: none;
369
- border-color: var(--udoc-scrollbar-thumb);
370
- background: var(--udoc-bg-input);
371
- }
372
-
373
- .udoc-viewer-root .udoc-floating-toolbar__page-total {
374
- white-space: nowrap;
375
- }
376
-
377
- .udoc-viewer-root .udoc-floating-toolbar__zoom-level {
378
- min-width: 44px;
379
- color: var(--udoc-text-primary);
380
- font-size: 13px;
381
- text-align: center;
382
- }
383
-
384
- .udoc-viewer-root .udoc-floating-toolbar__btn--active {
385
- background: var(--udoc-active-overlay);
300
+ z-index: 30;
386
301
  }
387
302
 
388
303
  /* Zoom Dropdown */
@@ -510,7 +425,7 @@ export const inlineStyles = `.udoc-viewer-root {
510
425
  /* View Mode Menu */
511
426
  .udoc-viewer-root .udoc-view-mode-menu {
512
427
  position: relative;
513
- height: 28px;
428
+ height: 32px;
514
429
  display: flex;
515
430
  align-items: center;
516
431
  }
@@ -998,178 +913,727 @@ export const inlineStyles = `.udoc-viewer-root {
998
913
  .udoc-viewer-root .udoc-toolbar {
999
914
  display: flex;
1000
915
  align-items: center;
916
+ gap: 4px;
917
+ height: 40px;
918
+ padding: 0 4px;
919
+ background: var(--udoc-bg-panel);
920
+ border-bottom: 1px solid var(--udoc-border);
921
+ }
922
+
923
+ .udoc-viewer-root .udoc-toolbar__left,
924
+ .udoc-viewer-root .udoc-toolbar__right {
925
+ display: flex;
926
+ align-items: center;
927
+ gap: 4px;
928
+ }
929
+
930
+ .udoc-viewer-root .udoc-toolbar__right {
931
+ margin-left: auto;
932
+ }
933
+
934
+ .udoc-viewer-root .udoc-toolbar__spacer {
935
+ flex: 1;
936
+ }
937
+
938
+ .udoc-viewer-root .udoc-toolbar__btn {
939
+ display: flex;
940
+ align-items: center;
941
+ justify-content: center;
942
+ width: 32px;
943
+ height: 32px;
944
+ padding: 0;
945
+ border: none;
946
+ border-radius: 4px;
947
+ background: transparent;
948
+ color: var(--udoc-text-body);
949
+ cursor: pointer;
950
+ }
951
+
952
+ .udoc-viewer-root .udoc-toolbar__btn:hover {
953
+ background: var(--udoc-hover-overlay);
954
+ }
955
+
956
+ .udoc-viewer-root .udoc-toolbar__btn:active {
957
+ background: var(--udoc-active-overlay);
958
+ }
959
+
960
+ .udoc-viewer-root .udoc-toolbar__btn svg {
961
+ width: 20px;
962
+ height: 20px;
963
+ }
964
+
965
+ /* Toolbar center section (inline controls when floating toolbar is hidden) */
966
+ .udoc-viewer-root .udoc-toolbar__center {
967
+ display: flex;
968
+ align-items: center;
969
+ gap: 4px;
970
+ flex: 1;
971
+ justify-content: flex-start;
972
+ }
973
+
974
+ /* Overflow menu (hidden on desktop, shown on mobile) */
975
+ .udoc-viewer-root .udoc-overflow-menu {
976
+ display: none;
977
+ position: relative;
978
+ }
979
+
980
+ .udoc-viewer-root .udoc-overflow-menu__dropdown {
981
+ position: absolute;
982
+ top: 100%;
983
+ right: 0;
984
+ margin-top: 4px;
985
+ min-width: 180px;
986
+ background: var(--udoc-bg-surface);
987
+ border: 1px solid var(--udoc-border);
988
+ border-radius: 8px;
989
+ box-shadow: var(--udoc-shadow-dialog);
990
+ padding: 4px 0;
991
+ z-index: 80;
992
+ }
993
+
994
+ .udoc-viewer-root .udoc-overflow-menu__item {
995
+ display: flex;
996
+ align-items: center;
997
+ gap: 10px;
998
+ width: 100%;
999
+ padding: 10px 14px;
1000
+ border: none;
1001
+ background: transparent;
1002
+ color: var(--udoc-text-body);
1003
+ font-size: 14px;
1004
+ cursor: pointer;
1005
+ text-align: left;
1006
+ }
1007
+
1008
+ .udoc-viewer-root .udoc-overflow-menu__item:hover {
1009
+ background: var(--udoc-hover-overlay);
1010
+ }
1011
+
1012
+ .udoc-viewer-root .udoc-overflow-menu__item-icon {
1013
+ display: flex;
1014
+ align-items: center;
1015
+ justify-content: center;
1016
+ width: 20px;
1017
+ height: 20px;
1018
+ flex-shrink: 0;
1019
+ }
1020
+
1021
+ .udoc-viewer-root .udoc-overflow-menu__item-icon svg {
1022
+ width: 18px;
1023
+ height: 18px;
1024
+ }
1025
+
1026
+ .udoc-viewer-root .udoc-toolbar__group {
1027
+ display: flex;
1028
+ align-items: center;
1029
+ gap: 0;
1030
+ }
1031
+
1032
+ .udoc-viewer-root .udoc-toolbar__divider {
1033
+ width: 1px;
1034
+ height: 20px;
1035
+ background: var(--udoc-border);
1036
+ margin: 0 2px;
1037
+ }
1038
+
1039
+ .udoc-viewer-root .udoc-toolbar__btn--nav {
1040
+ width: 32px;
1041
+ height: 32px;
1042
+ }
1043
+
1044
+ .udoc-viewer-root .udoc-toolbar__btn--nav svg {
1045
+ width: 18px;
1046
+ height: 18px;
1047
+ }
1048
+
1049
+ .udoc-viewer-root .udoc-toolbar__page-info {
1050
+ display: flex;
1051
+ align-items: center;
1052
+ font-size: 13px;
1053
+ color: var(--udoc-text-body);
1054
+ }
1055
+
1056
+ .udoc-viewer-root .udoc-toolbar__page-input {
1057
+ width: 36px;
1058
+ height: 24px;
1059
+ border: 1px solid var(--udoc-border-input);
1060
+ border-radius: 3px;
1061
+ text-align: center;
1062
+ font-size: 13px;
1063
+ padding: 0 2px;
1064
+ background: var(--udoc-bg-input);
1065
+ color: var(--udoc-text-heading);
1066
+ }
1067
+
1068
+ .udoc-viewer-root .udoc-toolbar__page-input:focus {
1069
+ outline: none;
1070
+ border-color: var(--udoc-text-placeholder);
1071
+ }
1072
+
1073
+ .udoc-viewer-root .udoc-toolbar__page-total {
1074
+ font-size: 13px;
1075
+ color: var(--udoc-text-muted);
1076
+ white-space: nowrap;
1077
+ }
1078
+
1079
+ /* Zoom dropdown in toolbar: drops down instead of up */
1080
+ .udoc-viewer-root .udoc-zoom-dropdown--toolbar .udoc-zoom-dropdown__menu {
1081
+ bottom: auto;
1082
+ top: calc(100% + 8px);
1083
+ }
1084
+
1085
+ /* View mode menu in toolbar: drops down instead of up */
1086
+ .udoc-viewer-root .udoc-toolbar__center .udoc-view-mode-menu__dropdown {
1087
+ bottom: auto;
1088
+ top: calc(100% + 8px);
1089
+ }
1090
+
1091
+ /* ===== Tool buttons (pointer split button & tool set buttons) ===== */
1092
+
1093
+ /* Split button container */
1094
+ .udoc-viewer-root .udoc-toolbar__split-btn {
1095
+ position: relative;
1096
+ display: flex;
1097
+ align-items: center;
1098
+ border-radius: 4px;
1099
+ }
1100
+
1101
+ .udoc-viewer-root .udoc-toolbar__split-btn--active {
1102
+ background: var(--udoc-primary-active-bg);
1103
+ }
1104
+
1105
+ .udoc-viewer-root .udoc-toolbar__split-btn--active:hover {
1106
+ background: var(--udoc-primary-active-bg-hover);
1107
+ }
1108
+
1109
+ .udoc-viewer-root .udoc-toolbar__split-btn-main {
1110
+ width: 26px;
1111
+ border-top-right-radius: 0;
1112
+ border-bottom-right-radius: 0;
1113
+ }
1114
+
1115
+ .udoc-viewer-root .udoc-toolbar__split-btn-drop {
1116
+ width: 16px;
1117
+ padding: 0;
1118
+ border-top-left-radius: 0;
1119
+ border-bottom-left-radius: 0;
1120
+ }
1121
+
1122
+ .udoc-viewer-root .udoc-toolbar__split-btn-drop svg {
1123
+ width: 12px;
1124
+ height: 12px;
1125
+ }
1126
+
1127
+ /* Split button dropdown */
1128
+ .udoc-viewer-root .udoc-toolbar__split-dropdown {
1129
+ position: absolute;
1130
+ top: calc(100% + 4px);
1131
+ left: 0;
1132
+ min-width: 140px;
1133
+ background: var(--udoc-bg-surface);
1134
+ border: 1px solid var(--udoc-border);
1135
+ border-radius: 8px;
1136
+ box-shadow: var(--udoc-shadow-dialog);
1137
+ padding: 4px 0;
1138
+ z-index: 80;
1139
+ }
1140
+
1141
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-item {
1142
+ display: flex;
1143
+ align-items: center;
1144
+ gap: 8px;
1145
+ width: 100%;
1146
+ padding: 6px 12px;
1147
+ border: none;
1148
+ background: transparent;
1149
+ color: var(--udoc-text-body);
1150
+ font-size: 13px;
1151
+ cursor: pointer;
1152
+ text-align: left;
1153
+ }
1154
+
1155
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-item:hover {
1156
+ background: var(--udoc-hover-overlay);
1157
+ }
1158
+
1159
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-item--active {
1160
+ background: var(--udoc-primary-active-bg);
1161
+ }
1162
+
1163
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-item--active:hover {
1164
+ background: var(--udoc-primary-active-bg-hover);
1165
+ }
1166
+
1167
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-icon {
1168
+ display: flex;
1169
+ align-items: center;
1170
+ justify-content: center;
1171
+ width: 20px;
1172
+ height: 20px;
1173
+ flex-shrink: 0;
1174
+ }
1175
+
1176
+ .udoc-viewer-root .udoc-toolbar__split-dropdown-icon svg {
1177
+ width: 18px;
1178
+ height: 18px;
1179
+ }
1180
+
1181
+ /* Tool set buttons active state */
1182
+ .udoc-viewer-root .udoc-toolbar__btn--tool-active {
1183
+ background: var(--udoc-primary-active-bg);
1184
+ }
1185
+
1186
+ .udoc-viewer-root .udoc-toolbar__btn--tool-active:hover {
1187
+ background: var(--udoc-primary-active-bg-hover);
1188
+ }
1189
+
1190
+ /* ===== Sub-toolbar (tool options bar) ===== */
1191
+
1192
+ .udoc-viewer-root .udoc-subtoolbar-slot {
1193
+ flex: 0 0 auto;
1194
+ position: relative;
1195
+ z-index: 10;
1196
+ }
1197
+
1198
+ .udoc-viewer-root .udoc-subtoolbar {
1199
+ display: flex;
1200
+ align-items: center;
1201
+ gap: 4px;
1001
1202
  height: 40px;
1002
1203
  padding: 0 8px;
1003
1204
  background: var(--udoc-bg-panel);
1004
1205
  border-bottom: 1px solid var(--udoc-border);
1005
1206
  }
1006
1207
 
1007
- .udoc-viewer-root .udoc-toolbar__left,
1008
- .udoc-viewer-root .udoc-toolbar__right {
1009
- display: flex;
1010
- align-items: center;
1011
- gap: 4px;
1208
+ .udoc-viewer-root .udoc-subtoolbar__tools {
1209
+ display: flex;
1210
+ align-items: center;
1211
+ gap: 2px;
1212
+ }
1213
+
1214
+ .udoc-viewer-root .udoc-subtoolbar__divider {
1215
+ width: 1px;
1216
+ height: 20px;
1217
+ background: var(--udoc-border);
1218
+ margin: 0 4px;
1219
+ }
1220
+
1221
+ .udoc-viewer-root .udoc-subtoolbar__options {
1222
+ display: flex;
1223
+ align-items: center;
1224
+ gap: 8px;
1225
+ flex: 1;
1226
+ overflow-x: auto;
1227
+ }
1228
+
1229
+ .udoc-viewer-root .udoc-subtoolbar__btn {
1230
+ display: flex;
1231
+ align-items: center;
1232
+ justify-content: center;
1233
+ width: 32px;
1234
+ height: 32px;
1235
+ padding: 0;
1236
+ border: none;
1237
+ border-radius: 4px;
1238
+ background: transparent;
1239
+ color: var(--udoc-text-body);
1240
+ cursor: pointer;
1241
+ }
1242
+
1243
+ .udoc-viewer-root .udoc-subtoolbar__btn:hover {
1244
+ background: var(--udoc-hover-overlay);
1245
+ }
1246
+
1247
+ .udoc-viewer-root .udoc-subtoolbar__btn--active {
1248
+ background: var(--udoc-primary-active-bg);
1249
+ }
1250
+
1251
+ .udoc-viewer-root .udoc-subtoolbar__btn--active:hover {
1252
+ background: var(--udoc-primary-active-bg-hover);
1253
+ }
1254
+
1255
+ .udoc-viewer-root .udoc-subtoolbar__btn svg {
1256
+ width: 20px;
1257
+ height: 20px;
1258
+ }
1259
+
1260
+ /* ---- Dropdown trigger (shared) ---- */
1261
+ .udoc-viewer-root .udoc-subtoolbar__dropdown-trigger {
1262
+ display: flex;
1263
+ align-items: center;
1264
+ gap: 4px;
1265
+ height: 28px;
1266
+ padding: 0 6px;
1267
+ border: 1px solid var(--udoc-border);
1268
+ border-radius: 4px;
1269
+ background: var(--udoc-bg-panel);
1270
+ cursor: pointer;
1271
+ color: var(--udoc-text-body);
1272
+ box-sizing: border-box;
1273
+ }
1274
+
1275
+ .udoc-viewer-root .udoc-subtoolbar__dropdown-trigger:hover {
1276
+ background: var(--udoc-hover-overlay);
1277
+ }
1278
+
1279
+ .udoc-viewer-root .udoc-subtoolbar__dropdown-trigger--icon svg {
1280
+ width: 20px;
1281
+ height: 20px;
1282
+ }
1283
+
1284
+ .udoc-viewer-root .udoc-subtoolbar__dropdown-arrow {
1285
+ font-size: 10px;
1286
+ line-height: 1;
1287
+ color: var(--udoc-text-muted);
1288
+ }
1289
+
1290
+ /* ---- Color swatch in trigger ---- */
1291
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch {
1292
+ display: block;
1293
+ width: 18px;
1294
+ height: 18px;
1295
+ border-radius: 50%;
1296
+ padding: 0;
1297
+ box-sizing: border-box;
1298
+ pointer-events: none;
1299
+ }
1300
+
1301
+ /* Stroke swatch: outlined ring */
1302
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch--stroke {
1303
+ background: transparent;
1304
+ border: 3px solid var(--swatch-color);
1305
+ }
1306
+
1307
+ /* Stroke none: dashed ring */
1308
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch--stroke-none {
1309
+ border-color: var(--udoc-text-muted);
1310
+ border-style: dashed;
1311
+ border-width: 2px;
1312
+ }
1313
+
1314
+ /* Fill swatch: solid disc */
1315
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch--fill {
1316
+ background: var(--swatch-color);
1317
+ border: 2px solid var(--udoc-border);
1318
+ }
1319
+
1320
+ /* Fill none: diagonal strike */
1321
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch--fill-none {
1322
+ background: transparent;
1323
+ position: relative;
1324
+ overflow: hidden;
1325
+ }
1326
+
1327
+ .udoc-viewer-root .udoc-subtoolbar__color-swatch--fill-none::after {
1328
+ content: "";
1329
+ position: absolute;
1330
+ width: 140%;
1331
+ height: 2px;
1332
+ background: var(--udoc-text-muted);
1333
+ top: 50%;
1334
+ left: -20%;
1335
+ transform: rotate(-45deg);
1336
+ }
1337
+
1338
+ /* ---- NumberInput trigger ---- */
1339
+ .udoc-viewer-root .udoc-number-input__trigger {
1340
+ display: flex;
1341
+ align-items: center;
1342
+ justify-content: center;
1343
+ gap: 3px;
1344
+ width: 68px;
1345
+ height: 28px;
1346
+ padding: 0 4px;
1347
+ border: 1px solid var(--udoc-border);
1348
+ border-radius: 4px;
1349
+ background: var(--udoc-bg-panel);
1350
+ cursor: pointer;
1351
+ color: var(--udoc-text-body);
1352
+ box-sizing: border-box;
1353
+ }
1354
+
1355
+ .udoc-viewer-root .udoc-number-input__trigger:hover {
1356
+ background: var(--udoc-hover-overlay);
1357
+ }
1358
+
1359
+ .udoc-viewer-root .udoc-number-input__icon {
1360
+ display: flex;
1361
+ align-items: center;
1362
+ width: 14px;
1363
+ height: 14px;
1364
+ color: var(--udoc-text-muted);
1365
+ }
1366
+
1367
+ .udoc-viewer-root .udoc-number-input__icon svg {
1368
+ width: 14px;
1369
+ height: 14px;
1370
+ }
1371
+
1372
+ .udoc-viewer-root .udoc-number-input__value {
1373
+ font-size: 11px;
1374
+ font-weight: 500;
1375
+ white-space: nowrap;
1376
+ }
1377
+
1378
+ /* ---- NumberInput floating panel ---- */
1379
+ .udoc-viewer-root .udoc-number-input-panel {
1380
+ display: none;
1381
+ position: absolute;
1382
+ top: 100%;
1383
+ margin-top: 2px;
1384
+ padding: 8px 10px;
1385
+ background: var(--udoc-bg-panel);
1386
+ border: 1px solid var(--udoc-border);
1387
+ border-radius: 8px;
1388
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1389
+ z-index: 100;
1390
+ }
1391
+
1392
+ .udoc-viewer-root .udoc-number-input-panel--open {
1393
+ display: flex;
1394
+ align-items: center;
1395
+ gap: 8px;
1396
+ }
1397
+
1398
+ .udoc-viewer-root .udoc-number-input-panel__slider {
1399
+ width: 100px;
1400
+ height: 4px;
1401
+ cursor: pointer;
1402
+ accent-color: var(--udoc-primary);
1403
+ }
1404
+
1405
+ .udoc-viewer-root .udoc-number-input-panel__text {
1406
+ width: 48px;
1407
+ text-align: center;
1408
+ border: 1px solid var(--udoc-border);
1409
+ border-radius: 4px;
1410
+ padding: 3px 4px;
1411
+ font-size: 11px;
1412
+ font-family: inherit;
1413
+ color: var(--udoc-text-body);
1414
+ background: var(--udoc-bg-panel);
1415
+ box-sizing: border-box;
1416
+ }
1417
+
1418
+ .udoc-viewer-root .udoc-number-input-panel__text:focus {
1419
+ outline: 2px solid var(--udoc-primary);
1420
+ outline-offset: -1px;
1421
+ }
1422
+
1423
+ /* ---- Color panel (floating) ---- */
1424
+ .udoc-viewer-root .udoc-color-panel {
1425
+ display: none;
1426
+ position: absolute;
1427
+ top: 100%;
1428
+ margin-top: 2px;
1429
+ padding: 8px;
1430
+ background: var(--udoc-bg-panel);
1431
+ border: 1px solid var(--udoc-border);
1432
+ border-radius: 8px;
1433
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1434
+ z-index: 100;
1435
+ }
1436
+
1437
+ .udoc-viewer-root .udoc-color-panel--open {
1438
+ display: block;
1439
+ }
1440
+
1441
+ .udoc-viewer-root .udoc-color-panel__grid {
1442
+ display: grid;
1443
+ grid-template-columns: repeat(4, 1fr);
1444
+ gap: 10px;
1445
+ justify-items: center;
1446
+ }
1447
+
1448
+ /* Base swatch (shared) */
1449
+ .udoc-viewer-root .udoc-color-panel__swatch {
1450
+ width: 24px;
1451
+ height: 24px;
1452
+ border-radius: 50%;
1453
+ cursor: pointer;
1454
+ padding: 0;
1455
+ box-sizing: border-box;
1456
+ }
1457
+
1458
+ /* Fill panel: solid discs with subtle border */
1459
+ .udoc-viewer-root .udoc-color-panel__grid--fill .udoc-color-panel__swatch:not(.udoc-color-panel__swatch--none) {
1460
+ background: var(--swatch-color);
1461
+ border: 2px solid rgba(0, 0, 0, 0.1);
1462
+ }
1463
+
1464
+ /* Stroke panel: outlined rings */
1465
+ .udoc-viewer-root .udoc-color-panel__grid--stroke .udoc-color-panel__swatch:not(.udoc-color-panel__swatch--none) {
1466
+ background: transparent;
1467
+ border: 3px solid var(--swatch-color);
1012
1468
  }
1013
1469
 
1014
- .udoc-viewer-root .udoc-toolbar__right {
1015
- margin-left: auto;
1470
+ /* Hover: both use outline */
1471
+ .udoc-viewer-root .udoc-color-panel__swatch:hover:not(.udoc-color-panel__swatch--active) {
1472
+ outline: 2px solid var(--udoc-text-muted);
1473
+ outline-offset: 1px;
1016
1474
  }
1017
1475
 
1018
- .udoc-viewer-root .udoc-toolbar__spacer {
1019
- flex: 1;
1476
+ /* Active: both use outline */
1477
+ .udoc-viewer-root .udoc-color-panel__swatch--active:not(.udoc-color-panel__swatch--none) {
1478
+ outline: 2px solid var(--udoc-primary);
1479
+ outline-offset: 2px;
1020
1480
  }
1021
1481
 
1022
- .udoc-viewer-root .udoc-toolbar__btn {
1023
- display: flex;
1024
- align-items: center;
1025
- justify-content: center;
1026
- width: 32px;
1027
- height: 32px;
1028
- padding: 0;
1029
- border: none;
1030
- border-radius: 4px;
1482
+ /* None swatch — shared base */
1483
+ .udoc-viewer-root .udoc-color-panel__swatch--none {
1031
1484
  background: transparent;
1032
- color: var(--udoc-text-body);
1033
1485
  cursor: pointer;
1034
1486
  }
1035
1487
 
1036
- .udoc-viewer-root .udoc-toolbar__btn:hover {
1037
- background: var(--udoc-hover-overlay);
1488
+ .udoc-viewer-root .udoc-color-panel__swatch--none.udoc-color-panel__swatch--active {
1489
+ outline: 2px solid var(--udoc-primary);
1490
+ outline-offset: 2px;
1038
1491
  }
1039
1492
 
1040
- .udoc-viewer-root .udoc-toolbar__btn:active {
1041
- background: var(--udoc-active-overlay);
1493
+ /* None stroke: dashed ring (matches toolbar trigger) */
1494
+ .udoc-viewer-root .udoc-color-panel__swatch--none-stroke {
1495
+ border: 2px dashed var(--udoc-text-muted);
1042
1496
  }
1043
1497
 
1044
- .udoc-viewer-root .udoc-toolbar__btn svg {
1045
- width: 20px;
1046
- height: 20px;
1498
+ /* None fill: diagonal strike (matches toolbar trigger) */
1499
+ .udoc-viewer-root .udoc-color-panel__swatch--none-fill {
1500
+ border: 2px solid var(--udoc-border);
1501
+ position: relative;
1502
+ overflow: hidden;
1047
1503
  }
1048
1504
 
1049
- /* Toolbar center section (inline controls when floating toolbar is hidden) */
1050
- .udoc-viewer-root .udoc-toolbar__center {
1051
- display: flex;
1052
- align-items: center;
1053
- gap: 4px;
1054
- flex: 1;
1055
- justify-content: flex-start;
1505
+ .udoc-viewer-root .udoc-color-panel__swatch--none-fill::after {
1506
+ content: "";
1507
+ position: absolute;
1508
+ width: 140%;
1509
+ height: 2px;
1510
+ background: var(--udoc-text-muted);
1511
+ top: 50%;
1512
+ left: -20%;
1513
+ transform: rotate(-45deg);
1056
1514
  }
1057
1515
 
1058
- /* Overflow menu (hidden on desktop, shown on mobile) */
1059
- .udoc-viewer-root .udoc-overflow-menu {
1060
- display: none;
1061
- position: relative;
1516
+ .udoc-viewer-root .udoc-color-panel__swatch--none:hover {
1517
+ border-color: var(--udoc-text-muted);
1062
1518
  }
1063
1519
 
1064
- .udoc-viewer-root .udoc-overflow-menu__dropdown {
1520
+ /* ---- Line style panel (floating) ---- */
1521
+ .udoc-viewer-root .udoc-linestyle-panel {
1522
+ display: none;
1065
1523
  position: absolute;
1066
1524
  top: 100%;
1067
- right: 0;
1068
- margin-top: 4px;
1069
- min-width: 180px;
1070
- background: var(--udoc-bg-surface);
1525
+ margin-top: 2px;
1526
+ padding: 4px;
1527
+ background: var(--udoc-bg-panel);
1071
1528
  border: 1px solid var(--udoc-border);
1072
1529
  border-radius: 8px;
1073
- box-shadow: var(--udoc-shadow-dialog);
1074
- padding: 4px 0;
1075
- z-index: 200;
1530
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1531
+ z-index: 100;
1076
1532
  }
1077
1533
 
1078
- .udoc-viewer-root .udoc-overflow-menu__item {
1534
+ .udoc-viewer-root .udoc-linestyle-panel--open {
1535
+ display: flex;
1536
+ flex-direction: column;
1537
+ gap: 2px;
1538
+ }
1539
+
1540
+ .udoc-viewer-root .udoc-linestyle-panel__item {
1079
1541
  display: flex;
1080
1542
  align-items: center;
1081
- gap: 10px;
1082
- width: 100%;
1083
- padding: 10px 14px;
1543
+ gap: 8px;
1544
+ padding: 6px 10px;
1084
1545
  border: none;
1546
+ border-radius: 4px;
1085
1547
  background: transparent;
1086
- color: var(--udoc-text-body);
1087
- font-size: 14px;
1088
1548
  cursor: pointer;
1089
- text-align: left;
1549
+ white-space: nowrap;
1550
+ color: var(--udoc-text-body);
1090
1551
  }
1091
1552
 
1092
- .udoc-viewer-root .udoc-overflow-menu__item:hover {
1553
+ .udoc-viewer-root .udoc-linestyle-panel__item:hover {
1093
1554
  background: var(--udoc-hover-overlay);
1094
1555
  }
1095
1556
 
1096
- .udoc-viewer-root .udoc-overflow-menu__item-icon {
1097
- display: flex;
1098
- align-items: center;
1099
- justify-content: center;
1100
- width: 20px;
1101
- height: 20px;
1102
- flex-shrink: 0;
1557
+ .udoc-viewer-root .udoc-linestyle-panel__item--active {
1558
+ background: var(--udoc-primary-active-bg);
1103
1559
  }
1104
1560
 
1105
- .udoc-viewer-root .udoc-overflow-menu__item-icon svg {
1106
- width: 18px;
1107
- height: 18px;
1561
+ .udoc-viewer-root .udoc-linestyle-panel__icon {
1562
+ display: flex;
1563
+ width: 24px;
1564
+ height: 24px;
1108
1565
  }
1109
1566
 
1110
- .udoc-viewer-root .udoc-toolbar__group {
1111
- display: flex;
1112
- align-items: center;
1113
- gap: 2px;
1567
+ .udoc-viewer-root .udoc-linestyle-panel__icon svg {
1568
+ width: 24px;
1569
+ height: 24px;
1114
1570
  }
1115
1571
 
1116
- .udoc-viewer-root .udoc-toolbar__divider {
1117
- width: 1px;
1118
- height: 20px;
1119
- background: var(--udoc-border);
1120
- margin: 0 4px;
1572
+ .udoc-viewer-root .udoc-linestyle-panel__label {
1573
+ font-size: 11px;
1121
1574
  }
1122
1575
 
1123
- .udoc-viewer-root .udoc-toolbar__btn--nav {
1124
- width: 28px;
1125
- height: 28px;
1576
+ /* ---- Arrow head panel (floating) ---- */
1577
+ .udoc-viewer-root .udoc-arrowhead-panel {
1578
+ display: none;
1579
+ position: absolute;
1580
+ top: 100%;
1581
+ margin-top: 2px;
1582
+ padding: 8px;
1583
+ background: var(--udoc-bg-panel);
1584
+ border: 1px solid var(--udoc-border);
1585
+ border-radius: 8px;
1586
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1587
+ z-index: 100;
1126
1588
  }
1127
1589
 
1128
- .udoc-viewer-root .udoc-toolbar__btn--nav svg {
1129
- width: 18px;
1130
- height: 18px;
1590
+ .udoc-viewer-root .udoc-arrowhead-panel--open {
1591
+ display: flex;
1592
+ flex-direction: column;
1593
+ gap: 6px;
1131
1594
  }
1132
1595
 
1133
- .udoc-viewer-root .udoc-toolbar__page-info {
1596
+ .udoc-viewer-root .udoc-arrowhead-panel__row {
1134
1597
  display: flex;
1135
1598
  align-items: center;
1136
- font-size: 13px;
1137
- color: var(--udoc-text-body);
1599
+ gap: 4px;
1138
1600
  }
1139
1601
 
1140
- .udoc-viewer-root .udoc-toolbar__page-input {
1602
+ .udoc-viewer-root .udoc-arrowhead-panel__row-label {
1603
+ font-size: 10px;
1604
+ font-weight: 600;
1605
+ text-transform: uppercase;
1606
+ color: var(--udoc-text-muted);
1607
+ letter-spacing: 0.05em;
1141
1608
  width: 36px;
1142
- height: 24px;
1143
- border: 1px solid var(--udoc-border-input);
1144
- border-radius: 3px;
1145
- text-align: center;
1146
- font-size: 13px;
1147
- padding: 0 2px;
1148
- background: var(--udoc-bg-input);
1149
- color: var(--udoc-text-heading);
1609
+ flex-shrink: 0;
1150
1610
  }
1151
1611
 
1152
- .udoc-viewer-root .udoc-toolbar__page-input:focus {
1153
- outline: none;
1154
- border-color: var(--udoc-text-placeholder);
1612
+ .udoc-viewer-root .udoc-arrowhead-panel__btn {
1613
+ display: flex;
1614
+ align-items: center;
1615
+ justify-content: center;
1616
+ width: 32px;
1617
+ height: 28px;
1618
+ padding: 0;
1619
+ border: none;
1620
+ border-radius: 4px;
1621
+ background: transparent;
1622
+ cursor: pointer;
1623
+ color: var(--udoc-text-body);
1155
1624
  }
1156
1625
 
1157
- .udoc-viewer-root .udoc-toolbar__page-total {
1158
- font-size: 13px;
1159
- color: var(--udoc-text-muted);
1160
- white-space: nowrap;
1626
+ .udoc-viewer-root .udoc-arrowhead-panel__btn svg {
1627
+ width: 20px;
1628
+ height: 20px;
1161
1629
  }
1162
1630
 
1163
- /* Zoom dropdown in toolbar: drops down instead of up */
1164
- .udoc-viewer-root .udoc-zoom-dropdown--toolbar .udoc-zoom-dropdown__menu {
1165
- bottom: auto;
1166
- top: calc(100% + 8px);
1631
+ .udoc-viewer-root .udoc-arrowhead-panel__btn:hover {
1632
+ background: var(--udoc-hover-overlay);
1167
1633
  }
1168
1634
 
1169
- /* View mode menu in toolbar: drops down instead of up */
1170
- .udoc-viewer-root .udoc-toolbar__center .udoc-view-mode-menu__dropdown {
1171
- bottom: auto;
1172
- top: calc(100% + 8px);
1635
+ .udoc-viewer-root .udoc-arrowhead-panel__btn--active {
1636
+ background: var(--udoc-primary-active-bg);
1173
1637
  }
1174
1638
 
1175
1639
  /* Right Panel */
@@ -1265,6 +1729,54 @@ export const inlineStyles = `.udoc-viewer-root {
1265
1729
  user-select: none;
1266
1730
  }
1267
1731
 
1732
+ /* View tool cursors */
1733
+ .udoc-viewer--tool-hand .udoc-viewport__scroll {
1734
+ cursor: grab;
1735
+ }
1736
+
1737
+ .udoc-viewer--tool-hand-grabbing .udoc-viewport__scroll {
1738
+ cursor: grabbing;
1739
+ }
1740
+
1741
+ .udoc-viewer--tool-hand .udoc-spread__text-layer,
1742
+ .udoc-viewer--tool-hand-grabbing .udoc-spread__text-layer {
1743
+ pointer-events: none;
1744
+ }
1745
+
1746
+ .udoc-viewer--tool-hand .udoc-text-run,
1747
+ .udoc-viewer--tool-hand-grabbing .udoc-text-run {
1748
+ user-select: none;
1749
+ }
1750
+
1751
+ .udoc-viewer--tool-zoom .udoc-viewport__scroll {
1752
+ cursor: zoom-in;
1753
+ }
1754
+
1755
+ .udoc-viewer--tool-zoom-out .udoc-viewport__scroll {
1756
+ cursor: zoom-out;
1757
+ }
1758
+
1759
+ .udoc-viewer--tool-zoom .udoc-spread__text-layer {
1760
+ pointer-events: none;
1761
+ }
1762
+
1763
+ .udoc-viewer--tool-zoom .udoc-text-run {
1764
+ user-select: none;
1765
+ }
1766
+
1767
+ /* Annotation draw tool cursor */
1768
+ .udoc-viewer--tool-draw .udoc-viewport__scroll {
1769
+ cursor: crosshair;
1770
+ }
1771
+
1772
+ .udoc-viewer--tool-draw .udoc-spread__text-layer {
1773
+ pointer-events: none;
1774
+ }
1775
+
1776
+ .udoc-viewer--tool-draw .udoc-text-run {
1777
+ user-select: none;
1778
+ }
1779
+
1268
1780
  /* Annotation Layer */
1269
1781
  .udoc-viewer-root .udoc-spread__annotation-layer {
1270
1782
  position: absolute;
@@ -1335,7 +1847,7 @@ export const inlineStyles = `.udoc-viewer-root {
1335
1847
  /* Annotation popup */
1336
1848
  .udoc-viewer-root .udoc-annotation-popup {
1337
1849
  position: absolute;
1338
- z-index: 100;
1850
+ z-index: 30;
1339
1851
  min-width: 200px;
1340
1852
  max-width: 300px;
1341
1853
  background: var(--udoc-annotation-bg);
@@ -1700,7 +2212,7 @@ export const inlineStyles = `.udoc-viewer-root {
1700
2212
  outline: 2px solid var(--udoc-primary);
1701
2213
  outline-offset: 2px;
1702
2214
  border-radius: 2px;
1703
- z-index: 10;
2215
+ z-index: 20;
1704
2216
  }
1705
2217
 
1706
2218
  /* Highlight indicator for full-layer markup annotations */
@@ -1712,7 +2224,125 @@ export const inlineStyles = `.udoc-viewer-root {
1712
2224
  outline: 2px solid var(--udoc-primary);
1713
2225
  outline-offset: 2px;
1714
2226
  border-radius: 2px;
2227
+ z-index: 20;
2228
+ }
2229
+
2230
+ /* Annotation select tool */
2231
+ .udoc-viewer--tool-select .udoc-spread__text-layer {
2232
+ pointer-events: none;
2233
+ }
2234
+
2235
+ .udoc-viewer--tool-select .udoc-text-run {
2236
+ user-select: none;
2237
+ }
2238
+
2239
+ /* SVG shape annotations: make drawn strokes/fills clickable (not empty SVG space) */
2240
+ .udoc-viewer--tool-select .udoc-spread__annotation-layer svg[data-annotation-index] * {
2241
+ pointer-events: painted;
2242
+ cursor: pointer;
2243
+ }
2244
+
2245
+ /* HTML-based annotations (markup quads, text icons, etc.): make children clickable */
2246
+ .udoc-viewer--tool-select .udoc-spread__annotation-layer div[data-annotation-index] > * {
2247
+ pointer-events: auto !important;
2248
+ cursor: pointer;
2249
+ }
2250
+
2251
+ /* Selected annotation bounding box */
2252
+ .udoc-viewer-root .udoc-annotation-select-bbox {
2253
+ pointer-events: none;
1715
2254
  z-index: 10;
2255
+ overflow: visible;
2256
+ }
2257
+
2258
+ .udoc-viewer-root .udoc-annotation-select-bbox__inner {
2259
+ box-sizing: border-box;
2260
+ border: 2px solid var(--udoc-selection-color);
2261
+ cursor: grab;
2262
+ pointer-events: auto;
2263
+ }
2264
+
2265
+ /* Resize handles */
2266
+ .udoc-viewer-root .udoc-annotation-select-bbox__handle {
2267
+ position: absolute;
2268
+ width: 10px;
2269
+ height: 10px;
2270
+ background: #fff;
2271
+ border: 2px solid var(--udoc-selection-color);
2272
+ border-radius: 2px;
2273
+ pointer-events: auto;
2274
+ box-sizing: border-box;
2275
+ }
2276
+
2277
+ /* Corner handles */
2278
+ .udoc-annotation-select-bbox__handle--nw {
2279
+ top: -5px;
2280
+ left: -5px;
2281
+ }
2282
+ .udoc-annotation-select-bbox__handle--ne {
2283
+ top: -5px;
2284
+ right: -5px;
2285
+ }
2286
+ .udoc-annotation-select-bbox__handle--se {
2287
+ bottom: -5px;
2288
+ right: -5px;
2289
+ }
2290
+ .udoc-annotation-select-bbox__handle--sw {
2291
+ bottom: -5px;
2292
+ left: -5px;
2293
+ }
2294
+
2295
+ /* Edge midpoint handles */
2296
+ .udoc-annotation-select-bbox__handle--n {
2297
+ top: -5px;
2298
+ left: 50%;
2299
+ margin-left: -5px;
2300
+ }
2301
+ .udoc-annotation-select-bbox__handle--e {
2302
+ top: 50%;
2303
+ right: -5px;
2304
+ margin-top: -5px;
2305
+ }
2306
+ .udoc-annotation-select-bbox__handle--s {
2307
+ bottom: -5px;
2308
+ left: 50%;
2309
+ margin-left: -5px;
2310
+ }
2311
+ .udoc-annotation-select-bbox__handle--w {
2312
+ top: 50%;
2313
+ left: -5px;
2314
+ margin-top: -5px;
2315
+ }
2316
+
2317
+ /* Moving annotation cursor */
2318
+ .udoc-viewer--annotation-moving .udoc-viewport__scroll {
2319
+ cursor: grabbing !important;
2320
+ }
2321
+
2322
+ .udoc-viewer--annotation-moving .udoc-annotation-select-bbox__inner {
2323
+ cursor: grabbing;
2324
+ }
2325
+
2326
+ /* Resizing annotation — lock cursor globally */
2327
+ .udoc-viewer--annotation-resizing .udoc-viewport__scroll {
2328
+ cursor: inherit !important;
2329
+ }
2330
+
2331
+ /* Delete button in sub-toolbar */
2332
+ .udoc-viewer-root .udoc-subtoolbar__btn--delete {
2333
+ color: var(--udoc-text-color);
2334
+ transition:
2335
+ color 0.15s ease,
2336
+ opacity 0.15s ease;
2337
+ }
2338
+
2339
+ .udoc-viewer-root .udoc-subtoolbar__btn--delete:disabled {
2340
+ opacity: 0.35;
2341
+ cursor: default;
2342
+ }
2343
+
2344
+ .udoc-viewer-root .udoc-subtoolbar__btn--delete:not(:disabled):hover {
2345
+ color: var(--udoc-error, #d32f2f);
1716
2346
  }
1717
2347
 
1718
2348
  /* Mobile Panel Overlay */
@@ -1724,7 +2354,7 @@ export const inlineStyles = `.udoc-viewer-root {
1724
2354
  right: 0;
1725
2355
  bottom: 0;
1726
2356
  background: var(--udoc-bg-overlay);
1727
- z-index: 140;
2357
+ z-index: 40;
1728
2358
  }
1729
2359
 
1730
2360
  /* ===== Responsive: Small Mobile (≤480px) ===== */
@@ -1741,7 +2371,7 @@ export const inlineStyles = `.udoc-viewer-root {
1741
2371
  left: 0;
1742
2372
  bottom: 0;
1743
2373
  width: 280px !important;
1744
- z-index: 150;
2374
+ z-index: 50;
1745
2375
  transform: translateX(-100%);
1746
2376
  transition: transform 0.2s ease;
1747
2377
  }
@@ -1762,7 +2392,7 @@ export const inlineStyles = `.udoc-viewer-root {
1762
2392
  right: 0;
1763
2393
  bottom: 0;
1764
2394
  width: 280px !important;
1765
- z-index: 150;
2395
+ z-index: 50;
1766
2396
  transform: translateX(100%);
1767
2397
  transition: transform 0.2s ease;
1768
2398
  }
@@ -1804,16 +2434,17 @@ export const inlineStyles = `.udoc-viewer-root {
1804
2434
  box-sizing: border-box;
1805
2435
  background: var(--udoc-bg-panel);
1806
2436
  border-top: 1px solid var(--udoc-border);
2437
+ box-shadow: none;
1807
2438
  height: 40px;
1808
- padding: 0 12px;
1809
- gap: 8px;
2439
+ padding: 0 4px;
2440
+ gap: 4px;
1810
2441
  max-width: none;
1811
2442
  justify-content: center;
1812
2443
  }
1813
2444
 
1814
2445
  /* Raise toolbar above slide-out panels so overflow dropdown is not hidden */
1815
2446
  .udoc-viewer-root .udoc-toolbar-slot {
1816
- z-index: 160;
2447
+ z-index: 60;
1817
2448
  }
1818
2449
 
1819
2450
  /* Hide individual right-section buttons on mobile; show overflow menu */
@@ -1830,26 +2461,25 @@ export const inlineStyles = `.udoc-viewer-root {
1830
2461
  display: block;
1831
2462
  }
1832
2463
 
1833
- /* Larger panel tab buttons for touch */
2464
+ /* Panel tab buttons for touch */
1834
2465
  .udoc-viewer-root .udoc-left-panel__tabs {
1835
- width: 44px;
2466
+ width: 32px;
1836
2467
  padding: 8px 0;
1837
2468
  }
1838
2469
 
1839
2470
  .udoc-viewer-root .udoc-left-panel__tab {
1840
- width: 44px;
1841
- height: 44px;
2471
+ width: 32px;
2472
+ height: 32px;
1842
2473
  }
1843
2474
 
1844
2475
  .udoc-viewer-root .udoc-left-panel__tab svg {
1845
- width: 22px;
1846
- height: 22px;
2476
+ width: 18px;
2477
+ height: 18px;
1847
2478
  }
1848
2479
 
1849
2480
  /* Toolbar adjustments */
1850
2481
  .udoc-viewer-root .udoc-toolbar {
1851
2482
  padding: 0 4px;
1852
- gap: 4px;
1853
2483
  }
1854
2484
 
1855
2485
  .udoc-viewer-root .udoc-toolbar__btn {
@@ -1884,7 +2514,7 @@ export const inlineStyles = `.udoc-viewer-root {
1884
2514
  display: flex;
1885
2515
  align-items: center;
1886
2516
  justify-content: center;
1887
- z-index: 200;
2517
+ z-index: 80;
1888
2518
  }
1889
2519
 
1890
2520
  .udoc-viewer-root .udoc-password-dialog {
@@ -1970,8 +2600,8 @@ export const inlineStyles = `.udoc-viewer-root {
1970
2600
  display: flex;
1971
2601
  align-items: center;
1972
2602
  justify-content: center;
1973
- width: 44px;
1974
- height: 44px;
2603
+ width: 32px;
2604
+ height: 32px;
1975
2605
  border: none;
1976
2606
  background: transparent;
1977
2607
  color: var(--udoc-text-subtle);
@@ -2039,7 +2669,7 @@ export const inlineStyles = `.udoc-viewer-root {
2039
2669
  display: flex;
2040
2670
  align-items: center;
2041
2671
  justify-content: center;
2042
- z-index: 210;
2672
+ z-index: 90;
2043
2673
  }
2044
2674
 
2045
2675
  .udoc-viewer-root .udoc-print-dialog {
@@ -2203,7 +2833,7 @@ export const inlineStyles = `.udoc-viewer-root {
2203
2833
  display: flex;
2204
2834
  align-items: center;
2205
2835
  justify-content: center;
2206
- z-index: 180;
2836
+ z-index: 70;
2207
2837
  backdrop-filter: blur(2px);
2208
2838
  }
2209
2839
 
@@ -2379,8 +3009,8 @@ export const inlineStyles = `.udoc-viewer-root {
2379
3009
  display: flex;
2380
3010
  align-items: center;
2381
3011
  justify-content: center;
2382
- width: 28px;
2383
- height: 28px;
3012
+ width: 32px;
3013
+ height: 32px;
2384
3014
  border: 1px solid var(--udoc-border-input);
2385
3015
  border-radius: 4px;
2386
3016
  background: var(--udoc-bg-input);
@@ -2558,7 +3188,7 @@ export const inlineStyles = `.udoc-viewer-root {
2558
3188
  position: absolute;
2559
3189
  top: -100px;
2560
3190
  left: 0;
2561
- z-index: 10000;
3191
+ z-index: 100;
2562
3192
  padding: 8px 16px;
2563
3193
  background: var(--udoc-bg-surface);
2564
3194
  color: var(--udoc-text-heading);
@@ -2600,7 +3230,7 @@ export const inlineStyles = `.udoc-viewer-root {
2600
3230
  --udoc-border-input: #000;
2601
3231
  --udoc-text-muted: rgba(0, 0, 0, 0.7);
2602
3232
  --udoc-text-faint: rgba(0, 0, 0, 0.6);
2603
- --udoc-primary-focus-ring: rgba(0, 102, 204, 0.5);
3233
+ --udoc-primary-focus-ring: rgba(0, 0, 0, 0.4);
2604
3234
  }
2605
3235
 
2606
3236
  .udoc-viewer-root.udoc-viewer-dark {
@@ -2608,7 +3238,7 @@ export const inlineStyles = `.udoc-viewer-root {
2608
3238
  --udoc-border-input: #aaa;
2609
3239
  --udoc-text-muted: rgba(255, 255, 255, 0.7);
2610
3240
  --udoc-text-faint: rgba(255, 255, 255, 0.6);
2611
- --udoc-primary-focus-ring: rgba(77, 166, 255, 0.5);
3241
+ --udoc-primary-focus-ring: rgba(255, 255, 255, 0.45);
2612
3242
  }
2613
3243
 
2614
3244
  .udoc-viewer-root :focus-visible {
@@ -2623,7 +3253,6 @@ export const inlineStyles = `.udoc-viewer-root {
2623
3253
  }
2624
3254
 
2625
3255
  .udoc-viewer-root .udoc-toolbar__btn,
2626
- .udoc-viewer-root .udoc-floating-toolbar__btn,
2627
3256
  .udoc-viewer-root .udoc-left-panel__tab {
2628
3257
  border: 1px solid ButtonText;
2629
3258
  }
@@ -2649,17 +3278,17 @@ export const inlineStyles = `.udoc-viewer-root {
2649
3278
  /* Touch target sizes for coarse pointers (panels and side UI only — toolbars handle their own sizing) */
2650
3279
  @media (pointer: coarse) {
2651
3280
  .udoc-viewer-root .udoc-left-panel__tab {
2652
- width: 44px;
2653
- height: 44px;
3281
+ width: 32px;
3282
+ height: 32px;
2654
3283
  }
2655
3284
 
2656
3285
  .udoc-viewer-root .udoc-left-panel__tabs {
2657
- width: 44px;
3286
+ width: 32px;
2658
3287
  }
2659
3288
 
2660
3289
  .udoc-viewer-root .udoc-outline-item__toggle {
2661
- min-width: 44px;
2662
- min-height: 44px;
3290
+ min-width: 32px;
3291
+ min-height: 32px;
2663
3292
  }
2664
3293
  }
2665
3294
  `;