@osdk/react-components 0.2.0-beta.22 → 0.2.0-beta.24

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 (292) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +22 -6
  3. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  4. package/build/browser/action-form/fields/DateCalendar.js +70 -0
  5. package/build/browser/action-form/fields/DateCalendar.js.map +1 -0
  6. package/build/browser/action-form/fields/DateCalendar.module.css +136 -0
  7. package/build/browser/action-form/fields/DateCalendar.module.css.js +22 -0
  8. package/build/browser/action-form/fields/DatetimePickerField.js +98 -0
  9. package/build/browser/action-form/fields/DatetimePickerField.js.map +1 -0
  10. package/build/browser/action-form/fields/DatetimePickerField.module.css +66 -0
  11. package/build/browser/action-form/fields/DatetimePickerField.module.css.js +10 -0
  12. package/build/browser/action-form/fields/FormFieldRenderer.js +10 -1
  13. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
  14. package/build/browser/action-form/fields/LazyDateCalendar.js +27 -0
  15. package/build/browser/action-form/fields/LazyDateCalendar.js.map +1 -0
  16. package/build/browser/filter-list/FilterList.js +9 -5
  17. package/build/browser/filter-list/FilterList.js.map +1 -1
  18. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  19. package/build/browser/filter-list/base/BaseFilterList.js +3 -1
  20. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
  21. package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
  22. package/build/browser/filter-list/base/FilterListHeader.js +3 -2
  23. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  24. package/build/browser/filter-list/base/inputs/DateRangeInput.js +1 -1
  25. package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  26. package/build/browser/filter-list/base/inputs/MultiDateInput.js +1 -1
  27. package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  28. package/build/browser/filter-list/base/inputs/SingleDateInput.js +1 -1
  29. package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  30. package/build/browser/filter-list/base/inputs/TimelineInput.js +1 -1
  31. package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
  32. package/build/browser/filter-list/base/inputs/index.js +1 -1
  33. package/build/browser/filter-list/base/inputs/index.js.map +1 -1
  34. package/build/browser/filter-list/hooks/useFilterListState.js +3 -0
  35. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  36. package/build/browser/filter-list/hooks/useFilterVisibility.js +7 -1
  37. package/build/browser/filter-list/hooks/useFilterVisibility.js.map +1 -1
  38. package/build/browser/filter-list/utils/filterStateToWhereClause.js +1 -1
  39. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  40. package/build/browser/object-table/LoadingCell.js +2 -1
  41. package/build/browser/object-table/LoadingCell.js.map +1 -1
  42. package/build/browser/object-table/LoadingCell.module.css +3 -20
  43. package/build/browser/object-table/LoadingCell.module.css.js +1 -2
  44. package/build/browser/object-table/LoadingStateTable.js +2 -1
  45. package/build/browser/object-table/LoadingStateTable.js.map +1 -1
  46. package/build/browser/pdf-viewer/PdfRenderer.js +1 -1
  47. package/build/browser/pdf-viewer/PdfRenderer.js.map +1 -1
  48. package/build/browser/pdf-viewer/PdfViewer.js +59 -118
  49. package/build/browser/pdf-viewer/PdfViewer.js.map +1 -1
  50. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
  51. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.module.css.js +11 -0
  52. package/build/browser/pdf-viewer/components/PdfViewerContent.js +113 -0
  53. package/build/browser/pdf-viewer/components/PdfViewerContent.js.map +1 -0
  54. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
  55. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
  56. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
  57. package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css.js +15 -0
  58. package/build/browser/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
  59. package/build/browser/pdf-viewer/components/PdfViewerSearchBar.module.css.js +10 -0
  60. package/build/browser/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
  61. package/build/browser/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
  62. package/build/{esm/pdf-viewer → browser/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
  63. package/build/browser/pdf-viewer/{PdfViewerSidebar.module.css.js → components/PdfViewerSidebar.module.css.js} +5 -6
  64. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
  65. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
  66. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
  67. package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css.js +8 -0
  68. package/build/browser/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
  69. package/build/browser/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
  70. package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css.js → components/PdfViewerThumbnail.module.css.js} +3 -3
  71. package/build/browser/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
  72. package/build/browser/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
  73. package/build/browser/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
  74. package/build/browser/pdf-viewer/components/PdfViewerToolbar.module.css.js +12 -0
  75. package/build/browser/pdf-viewer/constants.js +7 -5
  76. package/build/browser/pdf-viewer/constants.js.map +1 -1
  77. package/build/browser/pdf-viewer/hooks/usePdfDocument.js +2 -3
  78. package/build/browser/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
  79. package/build/browser/pdf-viewer/hooks/usePdfOutline.js +268 -0
  80. package/build/browser/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
  81. package/build/browser/pdf-viewer/hooks/usePdfViewer.js +12 -1
  82. package/build/browser/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
  83. package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
  84. package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
  85. package/build/browser/pdf-viewer/hooks/usePdfViewerState.js +135 -0
  86. package/build/browser/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
  87. package/build/browser/pdf-viewer/types.js.map +1 -1
  88. package/build/browser/public/experimental.js +21 -2
  89. package/build/browser/public/experimental.js.map +1 -1
  90. package/build/browser/public/primitives.js +20 -0
  91. package/build/browser/public/primitives.js.map +1 -0
  92. package/build/browser/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
  93. package/build/browser/shared/dateUtils.js.map +1 -0
  94. package/build/browser/styles.css +421 -74
  95. package/build/cjs/DateCalendar-QWGFKD6J.css +113 -0
  96. package/build/cjs/DateCalendar-QWGFKD6J.css.map +1 -0
  97. package/build/cjs/DateCalendar-R44GMN3O.cjs +67 -0
  98. package/build/cjs/DateCalendar-R44GMN3O.cjs.map +1 -0
  99. package/build/cjs/chunk-GT6IV6LV.cjs +163 -0
  100. package/build/cjs/chunk-GT6IV6LV.cjs.map +1 -0
  101. package/build/cjs/chunk-HMQTYQEX.cjs +9 -0
  102. package/build/cjs/chunk-HMQTYQEX.cjs.map +1 -0
  103. package/build/cjs/chunk-UZ2E5NRX.cjs +8 -0
  104. package/build/cjs/chunk-UZ2E5NRX.cjs.map +1 -0
  105. package/build/cjs/index.cjs +2 -0
  106. package/build/cjs/public/experimental.cjs +2157 -1592
  107. package/build/cjs/public/experimental.cjs.map +1 -1
  108. package/build/cjs/public/experimental.css +388 -116
  109. package/build/cjs/public/experimental.css.map +1 -1
  110. package/build/cjs/public/experimental.d.cts +273 -14
  111. package/build/cjs/public/primitives.cjs +25 -0
  112. package/build/cjs/public/primitives.cjs.map +1 -0
  113. package/build/cjs/public/primitives.css +154 -0
  114. package/build/cjs/public/primitives.css.map +1 -0
  115. package/build/cjs/public/primitives.d.cts +49 -0
  116. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  117. package/build/esm/action-form/fields/DateCalendar.js +70 -0
  118. package/build/esm/action-form/fields/DateCalendar.js.map +1 -0
  119. package/build/esm/action-form/fields/DateCalendar.module.css +136 -0
  120. package/build/esm/action-form/fields/DatetimePickerField.js +98 -0
  121. package/build/esm/action-form/fields/DatetimePickerField.js.map +1 -0
  122. package/build/esm/action-form/fields/DatetimePickerField.module.css +66 -0
  123. package/build/esm/action-form/fields/FormFieldRenderer.js +10 -1
  124. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
  125. package/build/esm/action-form/fields/LazyDateCalendar.js +27 -0
  126. package/build/esm/action-form/fields/LazyDateCalendar.js.map +1 -0
  127. package/build/esm/filter-list/FilterList.js +9 -5
  128. package/build/esm/filter-list/FilterList.js.map +1 -1
  129. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  130. package/build/esm/filter-list/base/BaseFilterList.js +3 -1
  131. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  132. package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
  133. package/build/esm/filter-list/base/FilterListHeader.js +3 -2
  134. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  135. package/build/esm/filter-list/base/inputs/DateRangeInput.js +1 -1
  136. package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
  137. package/build/esm/filter-list/base/inputs/MultiDateInput.js +1 -1
  138. package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
  139. package/build/esm/filter-list/base/inputs/SingleDateInput.js +1 -1
  140. package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
  141. package/build/esm/filter-list/base/inputs/TimelineInput.js +1 -1
  142. package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
  143. package/build/esm/filter-list/base/inputs/index.js +1 -1
  144. package/build/esm/filter-list/base/inputs/index.js.map +1 -1
  145. package/build/esm/filter-list/hooks/useFilterListState.js +3 -0
  146. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  147. package/build/esm/filter-list/hooks/useFilterVisibility.js +7 -1
  148. package/build/esm/filter-list/hooks/useFilterVisibility.js.map +1 -1
  149. package/build/esm/filter-list/utils/filterStateToWhereClause.js +1 -1
  150. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  151. package/build/esm/object-table/LoadingCell.js +2 -1
  152. package/build/esm/object-table/LoadingCell.js.map +1 -1
  153. package/build/esm/object-table/LoadingCell.module.css +3 -20
  154. package/build/esm/object-table/LoadingStateTable.js +2 -1
  155. package/build/esm/object-table/LoadingStateTable.js.map +1 -1
  156. package/build/esm/pdf-viewer/PdfRenderer.js +1 -1
  157. package/build/esm/pdf-viewer/PdfRenderer.js.map +1 -1
  158. package/build/esm/pdf-viewer/PdfViewer.js +59 -118
  159. package/build/esm/pdf-viewer/PdfViewer.js.map +1 -1
  160. package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
  161. package/build/esm/pdf-viewer/components/PdfViewerContent.js +113 -0
  162. package/build/esm/pdf-viewer/components/PdfViewerContent.js.map +1 -0
  163. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
  164. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
  165. package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
  166. package/build/esm/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
  167. package/build/esm/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
  168. package/build/esm/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
  169. package/build/{browser/pdf-viewer → esm/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
  170. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
  171. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
  172. package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
  173. package/build/esm/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
  174. package/build/esm/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
  175. package/build/esm/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
  176. package/build/esm/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
  177. package/build/esm/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
  178. package/build/esm/pdf-viewer/constants.js +7 -5
  179. package/build/esm/pdf-viewer/constants.js.map +1 -1
  180. package/build/esm/pdf-viewer/hooks/usePdfDocument.js +2 -3
  181. package/build/esm/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
  182. package/build/esm/pdf-viewer/hooks/usePdfOutline.js +268 -0
  183. package/build/esm/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
  184. package/build/esm/pdf-viewer/hooks/usePdfViewer.js +12 -1
  185. package/build/esm/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
  186. package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
  187. package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
  188. package/build/esm/pdf-viewer/hooks/usePdfViewerState.js +135 -0
  189. package/build/esm/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
  190. package/build/esm/pdf-viewer/types.js.map +1 -1
  191. package/build/esm/public/experimental.js +21 -2
  192. package/build/esm/public/experimental.js.map +1 -1
  193. package/build/esm/public/primitives.js +20 -0
  194. package/build/esm/public/primitives.js.map +1 -0
  195. package/build/esm/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
  196. package/build/esm/shared/dateUtils.js.map +1 -0
  197. package/build/types/action-form/FormFieldApi.d.ts +21 -7
  198. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  199. package/build/types/action-form/fields/DateCalendar.d.ts +9 -0
  200. package/build/types/action-form/fields/DateCalendar.d.ts.map +1 -0
  201. package/build/types/action-form/fields/DatetimePickerField.d.ts +3 -0
  202. package/build/types/action-form/fields/DatetimePickerField.d.ts.map +1 -0
  203. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
  204. package/build/types/action-form/fields/LazyDateCalendar.d.ts +3 -0
  205. package/build/types/action-form/fields/LazyDateCalendar.d.ts.map +1 -0
  206. package/build/types/filter-list/FilterListApi.d.ts +2 -1
  207. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  208. package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -1
  209. package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
  210. package/build/types/filter-list/base/FilterListHeader.d.ts +3 -2
  211. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  212. package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
  213. package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
  214. package/build/types/filter-list/base/inputs/index.d.ts +1 -1
  215. package/build/types/filter-list/base/inputs/index.d.ts.map +1 -1
  216. package/build/types/filter-list/hooks/useFilterVisibility.d.ts +2 -0
  217. package/build/types/filter-list/hooks/useFilterVisibility.d.ts.map +1 -1
  218. package/build/types/object-table/LoadingCell.d.ts.map +1 -1
  219. package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
  220. package/build/types/pdf-viewer/PdfRenderer.d.ts +2 -2
  221. package/build/types/pdf-viewer/PdfRenderer.d.ts.map +1 -1
  222. package/build/types/pdf-viewer/PdfViewer.d.ts +1 -1
  223. package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -1
  224. package/build/types/pdf-viewer/{PdfViewerAnnotationLayer.d.ts → components/PdfViewerAnnotationLayer.d.ts} +2 -3
  225. package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts.map +1 -0
  226. package/build/types/pdf-viewer/components/PdfViewerContent.d.ts +22 -0
  227. package/build/types/pdf-viewer/components/PdfViewerContent.d.ts.map +1 -0
  228. package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts +11 -0
  229. package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts.map +1 -0
  230. package/build/types/pdf-viewer/{PdfViewerSearchBar.d.ts → components/PdfViewerSearchBar.d.ts} +1 -2
  231. package/build/types/pdf-viewer/components/PdfViewerSearchBar.d.ts.map +1 -0
  232. package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts +12 -0
  233. package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts.map +1 -0
  234. package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts +7 -0
  235. package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts.map +1 -0
  236. package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts.map → components/PdfViewerThumbnail.d.ts.map} +1 -1
  237. package/build/types/pdf-viewer/{PdfViewerToolbar.d.ts → components/PdfViewerToolbar.d.ts} +5 -3
  238. package/build/types/pdf-viewer/components/PdfViewerToolbar.d.ts.map +1 -0
  239. package/build/types/pdf-viewer/constants.d.ts +5 -0
  240. package/build/types/pdf-viewer/constants.d.ts.map +1 -1
  241. package/build/types/pdf-viewer/hooks/usePdfDocument.d.ts.map +1 -1
  242. package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts +3 -0
  243. package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts.map +1 -0
  244. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts +1 -1
  245. package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts.map +1 -1
  246. package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts +43 -0
  247. package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts.map +1 -0
  248. package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts +39 -0
  249. package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts.map +1 -0
  250. package/build/types/pdf-viewer/types.d.ts +42 -0
  251. package/build/types/pdf-viewer/types.d.ts.map +1 -1
  252. package/build/types/public/experimental.d.ts +17 -2
  253. package/build/types/public/experimental.d.ts.map +1 -1
  254. package/build/types/public/primitives.d.ts +3 -0
  255. package/build/types/public/primitives.d.ts.map +1 -0
  256. package/build/types/shared/dateUtils.d.ts +31 -0
  257. package/build/types/shared/dateUtils.d.ts.map +1 -0
  258. package/package.json +14 -4
  259. package/primitives.d.ts +17 -0
  260. package/build/browser/filter-list/base/inputs/dateUtils.js.map +0 -1
  261. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
  262. package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css.js +0 -11
  263. package/build/browser/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
  264. package/build/browser/pdf-viewer/PdfViewerSearchBar.module.css.js +0 -10
  265. package/build/browser/pdf-viewer/PdfViewerSidebar.js.map +0 -1
  266. package/build/browser/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
  267. package/build/browser/pdf-viewer/PdfViewerToolbar.js.map +0 -1
  268. package/build/browser/pdf-viewer/PdfViewerToolbar.module.css.js +0 -12
  269. package/build/esm/filter-list/base/inputs/dateUtils.js.map +0 -1
  270. package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
  271. package/build/esm/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
  272. package/build/esm/pdf-viewer/PdfViewerSidebar.js.map +0 -1
  273. package/build/esm/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
  274. package/build/esm/pdf-viewer/PdfViewerToolbar.js.map +0 -1
  275. package/build/types/filter-list/base/inputs/dateUtils.d.ts +0 -17
  276. package/build/types/filter-list/base/inputs/dateUtils.d.ts.map +0 -1
  277. package/build/types/pdf-viewer/PdfViewerAnnotationLayer.d.ts.map +0 -1
  278. package/build/types/pdf-viewer/PdfViewerSearchBar.d.ts.map +0 -1
  279. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts +0 -10
  280. package/build/types/pdf-viewer/PdfViewerSidebar.d.ts.map +0 -1
  281. package/build/types/pdf-viewer/PdfViewerToolbar.d.ts.map +0 -1
  282. /package/build/browser/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
  283. /package/build/browser/pdf-viewer/{PdfViewerAnnotationLayer.module.css → components/PdfViewerAnnotationLayer.module.css} +0 -0
  284. /package/build/browser/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
  285. /package/build/browser/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
  286. /package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
  287. /package/build/esm/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
  288. /package/build/esm/pdf-viewer/{PdfViewerAnnotationLayer.module.css → components/PdfViewerAnnotationLayer.module.css} +0 -0
  289. /package/build/esm/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
  290. /package/build/esm/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
  291. /package/build/esm/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
  292. /package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts → components/PdfViewerThumbnail.d.ts} +0 -0
@@ -0,0 +1,113 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { Error as ErrorIcon, Spin } from "@blueprintjs/icons";
18
+ import classnames from "classnames";
19
+ import "pdfjs-dist/web/pdf_viewer.css";
20
+ import React, { useEffect, useRef } from "react";
21
+ import { createPortal } from "react-dom";
22
+ import { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from "../constants.js";
23
+ import { usePdfViewerCore } from "../hooks/usePdfViewerCore.js";
24
+ import styles from "../PdfViewer.module.css";
25
+ import { PdfViewerAnnotationLayer } from "./PdfViewerAnnotationLayer.js";
26
+ export function PdfViewerContent({
27
+ src,
28
+ annotations = EMPTY_ANNOTATIONS,
29
+ onAnnotationClick,
30
+ initialPage = 1,
31
+ initialScale = 1.0,
32
+ onPageChange: onPageChangeProp,
33
+ onScaleChange: onScaleChangeProp,
34
+ className
35
+ }) {
36
+ const viewer = usePdfViewerCore({
37
+ src,
38
+ initialPage,
39
+ initialScale
40
+ });
41
+
42
+ // Use refs for callbacks to avoid firing on initial mount
43
+ const onPageChangeRef = useRef(onPageChangeProp);
44
+ onPageChangeRef.current = onPageChangeProp;
45
+ const onScaleChangeRef = useRef(onScaleChangeProp);
46
+ onScaleChangeRef.current = onScaleChangeProp;
47
+ const isInitialMountRef = useRef(true);
48
+ useEffect(function () {
49
+ if (isInitialMountRef.current) {
50
+ return;
51
+ }
52
+ onPageChangeRef.current?.(viewer.currentPage);
53
+ }, [viewer.currentPage]);
54
+ useEffect(function () {
55
+ if (isInitialMountRef.current) {
56
+ return;
57
+ }
58
+ onScaleChangeRef.current?.(viewer.scale);
59
+ }, [viewer.scale]);
60
+ useEffect(function () {
61
+ isInitialMountRef.current = false;
62
+ }, []);
63
+ const rootClassName = classnames(styles.pdfViewer, className);
64
+ if (viewer.loading) {
65
+ return /*#__PURE__*/React.createElement("div", {
66
+ className: rootClassName
67
+ }, /*#__PURE__*/React.createElement("div", {
68
+ className: styles.loadingContainer
69
+ }, /*#__PURE__*/React.createElement(Spin, {
70
+ className: styles.spinnerIcon
71
+ }), "Loading\u2026"));
72
+ }
73
+ if (viewer.error != null) {
74
+ return /*#__PURE__*/React.createElement("div", {
75
+ className: rootClassName
76
+ }, /*#__PURE__*/React.createElement("div", {
77
+ className: styles.errorContainer
78
+ }, /*#__PURE__*/React.createElement(ErrorIcon, {
79
+ className: styles.errorIcon
80
+ }), "Failed to load PDF: ", viewer.error.message));
81
+ }
82
+ if (viewer.document == null) {
83
+ return /*#__PURE__*/React.createElement("div", {
84
+ className: rootClassName
85
+ }, /*#__PURE__*/React.createElement("div", {
86
+ className: styles.loadingContainer
87
+ }, "No document"));
88
+ }
89
+ return /*#__PURE__*/React.createElement("div", {
90
+ className: rootClassName
91
+ }, /*#__PURE__*/React.createElement("div", {
92
+ className: styles.scrollContainerWrapper
93
+ }, /*#__PURE__*/React.createElement("div", {
94
+ ref: viewer.containerRef,
95
+ className: styles.scrollContainer
96
+ }, /*#__PURE__*/React.createElement("div", {
97
+ ref: viewer.viewerRef,
98
+ className: "pdfViewer"
99
+ }), viewer.portalTargets.map(target => {
100
+ const pageAnnotations = annotations[target.pageNumber] ?? EMPTY_ANNOTATION_ARRAY;
101
+ if (pageAnnotations.length === 0) {
102
+ return null;
103
+ }
104
+ return /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(PdfViewerAnnotationLayer, {
105
+ key: target.pageNumber,
106
+ annotations: pageAnnotations,
107
+ pageHeight: target.pageHeight,
108
+ scale: target.scale,
109
+ onAnnotationClick: onAnnotationClick
110
+ }), target.container);
111
+ }))));
112
+ }
113
+ //# sourceMappingURL=PdfViewerContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerContent.js","names":["Error","ErrorIcon","Spin","classnames","React","useEffect","useRef","createPortal","EMPTY_ANNOTATION_ARRAY","EMPTY_ANNOTATIONS","usePdfViewerCore","styles","PdfViewerAnnotationLayer","PdfViewerContent","src","annotations","onAnnotationClick","initialPage","initialScale","onPageChange","onPageChangeProp","onScaleChange","onScaleChangeProp","className","viewer","onPageChangeRef","current","onScaleChangeRef","isInitialMountRef","currentPage","scale","rootClassName","pdfViewer","loading","createElement","loadingContainer","spinnerIcon","error","errorContainer","errorIcon","message","document","scrollContainerWrapper","ref","containerRef","scrollContainer","viewerRef","portalTargets","map","target","pageAnnotations","pageNumber","length","key","pageHeight","container"],"sources":["PdfViewerContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Error as ErrorIcon, Spin } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport \"pdfjs-dist/web/pdf_viewer.css\";\nimport React, { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from \"../constants.js\";\nimport { usePdfViewerCore } from \"../hooks/usePdfViewerCore.js\";\nimport styles from \"../PdfViewer.module.css\";\nimport type { PdfAnnotation } from \"../types.js\";\nimport { PdfViewerAnnotationLayer } from \"./PdfViewerAnnotationLayer.js\";\n\nexport interface PdfViewerContentProps {\n /** PDF source — URL string or ArrayBuffer */\n src: string | ArrayBuffer;\n /** Annotations to overlay on the PDF, keyed by page number (1-indexed) */\n annotations?: Record<number, PdfAnnotation[]>;\n /** Callback fired when an annotation is clicked */\n onAnnotationClick?: (annotation: PdfAnnotation) => void;\n /** Initial page number (1-indexed, default 1) */\n initialPage?: number;\n /** Initial zoom scale (default 1.0) */\n initialScale?: number;\n /** Callback fired when the current page changes during scrolling */\n onPageChange?: (page: number) => void;\n /** Callback fired when the zoom scale changes */\n onScaleChange?: (scale: number) => void;\n /** Additional CSS class name for the root element */\n className?: string;\n}\n\nexport function PdfViewerContent({\n src,\n annotations = EMPTY_ANNOTATIONS,\n onAnnotationClick,\n initialPage = 1,\n initialScale = 1.0,\n onPageChange: onPageChangeProp,\n onScaleChange: onScaleChangeProp,\n className,\n}: PdfViewerContentProps): React.ReactElement {\n const viewer = usePdfViewerCore({ src, initialPage, initialScale });\n\n // Use refs for callbacks to avoid firing on initial mount\n const onPageChangeRef = useRef(onPageChangeProp);\n onPageChangeRef.current = onPageChangeProp;\n const onScaleChangeRef = useRef(onScaleChangeProp);\n onScaleChangeRef.current = onScaleChangeProp;\n const isInitialMountRef = useRef(true);\n\n useEffect(function notifyPageChange() {\n if (isInitialMountRef.current) {\n return;\n }\n onPageChangeRef.current?.(viewer.currentPage);\n }, [viewer.currentPage]);\n\n useEffect(function notifyScaleChange() {\n if (isInitialMountRef.current) {\n return;\n }\n onScaleChangeRef.current?.(viewer.scale);\n }, [viewer.scale]);\n\n useEffect(function clearInitialMount() {\n isInitialMountRef.current = false;\n }, []);\n\n const rootClassName = classnames(styles.pdfViewer, className);\n\n if (viewer.loading) {\n return (\n <div className={rootClassName}>\n <div className={styles.loadingContainer}>\n <Spin className={styles.spinnerIcon} />\n Loading…\n </div>\n </div>\n );\n }\n\n if (viewer.error != null) {\n return (\n <div className={rootClassName}>\n <div className={styles.errorContainer}>\n <ErrorIcon className={styles.errorIcon} />\n Failed to load PDF: {viewer.error.message}\n </div>\n </div>\n );\n }\n\n if (viewer.document == null) {\n return (\n <div className={rootClassName}>\n <div className={styles.loadingContainer}>No document</div>\n </div>\n );\n }\n\n return (\n <div className={rootClassName}>\n <div className={styles.scrollContainerWrapper}>\n <div ref={viewer.containerRef} className={styles.scrollContainer}>\n <div ref={viewer.viewerRef} className=\"pdfViewer\" />\n {viewer.portalTargets.map((target) => {\n const pageAnnotations = annotations[target.pageNumber]\n ?? EMPTY_ANNOTATION_ARRAY;\n if (pageAnnotations.length === 0) {\n return null;\n }\n return createPortal(\n <PdfViewerAnnotationLayer\n key={target.pageNumber}\n annotations={pageAnnotations}\n pageHeight={target.pageHeight}\n scale={target.scale}\n onAnnotationClick={onAnnotationClick}\n />,\n target.container,\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import classnames from "classnames";
18
+ import React, { useCallback, useMemo } from "react";
19
+ import styles from "./PdfViewerOutlineSidebar.module.css";
20
+ import { PdfViewerSidebarHeader } from "./PdfViewerSidebarHeader.js";
21
+ const INDENT_PER_DEPTH = 16;
22
+ export function PdfViewerOutlineSidebar({
23
+ outlineItems,
24
+ currentPage,
25
+ onItemClick,
26
+ sidebarMode,
27
+ onSidebarModeChange,
28
+ outlineIcons
29
+ }) {
30
+ const activeIndex = useMemo(() => {
31
+ return computeActiveIndex(outlineItems, currentPage);
32
+ }, [outlineItems, currentPage]);
33
+ if (outlineItems.length === 0) {
34
+ return /*#__PURE__*/React.createElement("div", {
35
+ className: styles.sidebar
36
+ }, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
37
+ sidebarMode: sidebarMode,
38
+ onSidebarModeChange: onSidebarModeChange
39
+ }), /*#__PURE__*/React.createElement("div", {
40
+ className: styles.emptyState
41
+ }, /*#__PURE__*/React.createElement("div", {
42
+ className: styles.emptyStateText
43
+ }, "No outline available")));
44
+ }
45
+ return /*#__PURE__*/React.createElement("div", {
46
+ className: styles.sidebar
47
+ }, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
48
+ sidebarMode: sidebarMode,
49
+ onSidebarModeChange: onSidebarModeChange
50
+ }), /*#__PURE__*/React.createElement("div", {
51
+ className: styles.scrollContainer
52
+ }, outlineItems.map((item, index) => /*#__PURE__*/React.createElement(PdfViewerOutlineItem, {
53
+ key: index,
54
+ item: item,
55
+ isActive: index === activeIndex,
56
+ onClick: onItemClick,
57
+ iconComponent: outlineIcons?.[item.depth]
58
+ }))));
59
+ }
60
+ function PdfViewerOutlineItem({
61
+ item,
62
+ isActive,
63
+ onClick,
64
+ iconComponent: IconComponent
65
+ }) {
66
+ const handleClick = useCallback(() => {
67
+ onClick(item.pageNumber);
68
+ }, [onClick, item.pageNumber]);
69
+ const handleKeyDown = useCallback(e => {
70
+ if (e.key === "Enter" || e.key === " ") {
71
+ e.preventDefault();
72
+ onClick(item.pageNumber);
73
+ }
74
+ }, [onClick, item.pageNumber]);
75
+ const itemClassName = classnames(styles.outlineItem, isActive && styles.outlineItemActive, item.bold && styles.outlineItemBold, item.italic && styles.outlineItemItalic);
76
+ const paddingLeft = INDENT_PER_DEPTH * item.depth + 12;
77
+ return /*#__PURE__*/React.createElement("div", {
78
+ className: itemClassName,
79
+ onClick: handleClick,
80
+ onKeyDown: handleKeyDown,
81
+ role: "button",
82
+ tabIndex: 0,
83
+ "aria-label": item.title,
84
+ "aria-current": isActive ? "location" : undefined,
85
+ style: {
86
+ paddingLeft
87
+ }
88
+ }, IconComponent != null && /*#__PURE__*/React.createElement("span", {
89
+ className: styles.outlineItemIcon
90
+ }, /*#__PURE__*/React.createElement(IconComponent, null)), /*#__PURE__*/React.createElement("span", {
91
+ className: styles.outlineItemTitle
92
+ }, item.title));
93
+ }
94
+ function computeActiveIndex(items, currentPage) {
95
+ const idx = items.findIndex(item => item.pageNumber > currentPage);
96
+ return idx === -1 ? items.length - 1 : idx - 1;
97
+ }
98
+ //# sourceMappingURL=PdfViewerOutlineSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerOutlineSidebar.js","names":["classnames","React","useCallback","useMemo","styles","PdfViewerSidebarHeader","INDENT_PER_DEPTH","PdfViewerOutlineSidebar","outlineItems","currentPage","onItemClick","sidebarMode","onSidebarModeChange","outlineIcons","activeIndex","computeActiveIndex","length","createElement","className","sidebar","emptyState","emptyStateText","scrollContainer","map","item","index","PdfViewerOutlineItem","key","isActive","onClick","iconComponent","depth","IconComponent","handleClick","pageNumber","handleKeyDown","e","preventDefault","itemClassName","outlineItem","outlineItemActive","bold","outlineItemBold","italic","outlineItemItalic","paddingLeft","onKeyDown","role","tabIndex","title","undefined","style","outlineItemIcon","outlineItemTitle","items","idx","findIndex"],"sources":["PdfViewerOutlineSidebar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { useCallback, useMemo } from \"react\";\nimport type { OutlineItem, SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerOutlineSidebar.module.css\";\nimport { PdfViewerSidebarHeader } from \"./PdfViewerSidebarHeader.js\";\n\nconst INDENT_PER_DEPTH = 16;\n\nexport interface PdfViewerOutlineSidebarProps {\n outlineItems: OutlineItem[];\n currentPage: number;\n onItemClick: (pageNumber: number) => void;\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n outlineIcons?: Partial<Record<number, React.ComponentType>>;\n}\n\nexport function PdfViewerOutlineSidebar({\n outlineItems,\n currentPage,\n onItemClick,\n sidebarMode,\n onSidebarModeChange,\n outlineIcons,\n}: PdfViewerOutlineSidebarProps): React.ReactElement {\n const activeIndex = useMemo(() => {\n return computeActiveIndex(outlineItems, currentPage);\n }, [outlineItems, currentPage]);\n\n if (outlineItems.length === 0) {\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div className={styles.emptyState}>\n <div className={styles.emptyStateText}>\n No outline available\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div className={styles.scrollContainer}>\n {outlineItems.map((item, index) => (\n <PdfViewerOutlineItem\n key={index}\n item={item}\n isActive={index === activeIndex}\n onClick={onItemClick}\n iconComponent={outlineIcons?.[item.depth]}\n />\n ))}\n </div>\n </div>\n );\n}\n\ninterface PdfViewerOutlineItemProps {\n item: OutlineItem;\n isActive: boolean;\n onClick: (pageNumber: number) => void;\n iconComponent: React.ComponentType | undefined;\n}\n\nfunction PdfViewerOutlineItem({\n item,\n isActive,\n onClick,\n iconComponent: IconComponent,\n}: PdfViewerOutlineItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onClick(item.pageNumber);\n }, [onClick, item.pageNumber]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick(item.pageNumber);\n }\n },\n [onClick, item.pageNumber],\n );\n\n const itemClassName = classnames(\n styles.outlineItem,\n isActive && styles.outlineItemActive,\n item.bold && styles.outlineItemBold,\n item.italic && styles.outlineItemItalic,\n );\n\n const paddingLeft = INDENT_PER_DEPTH * item.depth + 12;\n\n return (\n <div\n className={itemClassName}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={item.title}\n aria-current={isActive ? \"location\" : undefined}\n style={{ paddingLeft }}\n >\n {IconComponent != null && (\n <span className={styles.outlineItemIcon}>\n <IconComponent />\n </span>\n )}\n <span className={styles.outlineItemTitle}>{item.title}</span>\n </div>\n );\n}\n\nfunction computeActiveIndex(\n items: OutlineItem[],\n currentPage: number,\n): number {\n const idx = items.findIndex(item => item.pageNumber > currentPage);\n return idx === -1 ? items.length - 1 : idx - 1;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ .sidebar {
2
+ width: var(--osdk-pdf-viewer-sidebar-width);
3
+ flex-shrink: 0;
4
+ display: flex;
5
+ flex-direction: column;
6
+ background-color: var(--osdk-pdf-viewer-sidebar-bg);
7
+ border-right: 1px solid var(--osdk-pdf-viewer-sidebar-border);
8
+ overflow: hidden;
9
+ }
10
+
11
+
12
+ .scrollContainer {
13
+ flex: 1;
14
+ overflow-y: auto;
15
+ padding: var(--osdk-pdf-viewer-sidebar-thumbnail-gap) 0;
16
+ }
17
+
18
+ .outlineItem {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: var(--osdk-pdf-viewer-outline-item-gap, 6px);
22
+ padding: var(--osdk-pdf-viewer-outline-item-padding-y, 4px)
23
+ var(--osdk-pdf-viewer-outline-item-padding-x, 12px);
24
+ cursor: pointer;
25
+ font-family: var(--osdk-typography-family-default);
26
+ font-size: var(--osdk-typography-size-body-small);
27
+ color: var(--osdk-typography-color-default);
28
+ text-decoration: none;
29
+ border: none;
30
+ background: none;
31
+ text-align: left;
32
+ width: 100%;
33
+ line-height: 1.4;
34
+ border-radius: var(--osdk-pdf-viewer-outline-item-radius, 4px);
35
+ transition: background-color 0.15s ease;
36
+ }
37
+
38
+ .outlineItem:hover {
39
+ background-color: var(--osdk-pdf-viewer-outline-item-hover-bg, rgba(0, 0, 0, 0.06));
40
+ }
41
+
42
+ .outlineItem:focus-visible {
43
+ outline: var(--osdk-focus-outline);
44
+ outline-offset: var(--osdk-focus-visible-outline-offset);
45
+ }
46
+
47
+ .outlineItemActive {
48
+ background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
49
+ color: var(--osdk-pdf-viewer-outline-item-active-color, var(--osdk-intent-primary));
50
+ font-weight: var(--osdk-typography-weight-semibold);
51
+ }
52
+
53
+ .outlineItemBold {
54
+ font-weight: var(--osdk-typography-weight-bold);
55
+ }
56
+
57
+ .outlineItemItalic {
58
+ font-style: italic;
59
+ }
60
+
61
+ .outlineItemIcon {
62
+ flex-shrink: 0;
63
+ display: flex;
64
+ align-items: center;
65
+ }
66
+
67
+ .outlineItemTitle {
68
+ overflow: hidden;
69
+ text-overflow: ellipsis;
70
+ white-space: nowrap;
71
+ }
72
+
73
+ .emptyState {
74
+ display: flex;
75
+ flex-direction: column;
76
+ align-items: center;
77
+ justify-content: center;
78
+ gap: var(--osdk-pdf-viewer-outline-empty-gap, 12px);
79
+ padding: var(--osdk-pdf-viewer-outline-empty-padding, 24px);
80
+ flex: 1;
81
+ text-align: center;
82
+ }
83
+
84
+ .emptyStateText {
85
+ font-family: var(--osdk-typography-family-default);
86
+ font-size: var(--osdk-typography-size-body-small);
87
+ color: var(--osdk-typography-color-muted);
88
+ }
89
+
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerSearchBar.js","names":["ChevronDown","ChevronUp","Cross","React","useCallback","styles","PdfViewerSearchBar","query","totalMatches","currentMatchIndex","onQueryChange","onNext","onPrev","onClose","handleInputChange","e","target","value","handleKeyDown","key","preventDefault","shiftKey","matchDisplay","length","createElement","className","searchBar","autoFocus","searchInput","type","onChange","onKeyDown","placeholder","matchCount","navButton","onClick","disabled","size","closeButton"],"sources":["PdfViewerSearchBar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChevronDown, ChevronUp, Cross } from \"@blueprintjs/icons\";\nimport React, { useCallback } from \"react\";\nimport styles from \"./PdfViewerSearchBar.module.css\";\n\nexport interface PdfViewerSearchBarProps {\n query: string;\n totalMatches: number;\n currentMatchIndex: number;\n onQueryChange: (query: string) => void;\n onNext: () => void;\n onPrev: () => void;\n onClose: () => void;\n}\n\nexport function PdfViewerSearchBar({\n query,\n totalMatches,\n currentMatchIndex,\n onQueryChange,\n onNext,\n onPrev,\n onClose,\n}: PdfViewerSearchBarProps): React.ReactElement {\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onQueryChange(e.target.value);\n },\n [onQueryChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (e.shiftKey) {\n onPrev();\n } else {\n onNext();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n },\n [onNext, onPrev, onClose],\n );\n\n const matchDisplay = totalMatches > 0\n ? `${currentMatchIndex + 1} of ${totalMatches}`\n : query.length > 0\n ? \"No results\"\n : \"\";\n\n return (\n <div className={styles.searchBar}>\n <input\n autoFocus\n className={styles.searchInput}\n type=\"text\"\n value={query}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"Find in document...\"\n aria-label=\"Search in PDF\"\n />\n {matchDisplay.length > 0 && (\n <span className={styles.matchCount}>{matchDisplay}</span>\n )}\n <button\n className={styles.navButton}\n onClick={onPrev}\n disabled={totalMatches === 0}\n aria-label=\"Previous match\"\n type=\"button\"\n >\n <ChevronUp size={16} />\n </button>\n <button\n className={styles.navButton}\n onClick={onNext}\n disabled={totalMatches === 0}\n aria-label=\"Next match\"\n type=\"button\"\n >\n <ChevronDown size={16} />\n </button>\n <button\n className={styles.closeButton}\n onClick={onClose}\n aria-label=\"Close search\"\n type=\"button\"\n >\n <Cross size={16} />\n </button>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,14 +16,17 @@
16
16
 
17
17
  import { useVirtualizer } from "@tanstack/react-virtual";
18
18
  import React, { useEffect, useRef } from "react";
19
- import { DEFAULT_PAGE_HEIGHT, THUMBNAIL_GAP, THUMBNAIL_SCALE } from "./constants.js";
19
+ import { DEFAULT_PAGE_HEIGHT, THUMBNAIL_GAP, THUMBNAIL_SCALE } from "../constants.js";
20
20
  import styles from "./PdfViewerSidebar.module.css";
21
+ import { PdfViewerSidebarHeader } from "./PdfViewerSidebarHeader.js";
21
22
  import { PdfViewerThumbnail } from "./PdfViewerThumbnail.js";
22
23
  export function PdfViewerSidebar({
23
24
  document,
24
25
  numPages,
25
26
  currentPage,
26
- onPageClick
27
+ onPageClick,
28
+ sidebarMode,
29
+ onSidebarModeChange
27
30
  }) {
28
31
  const scrollContainerRef = useRef(null);
29
32
  const estimatedItemHeight = Math.floor(DEFAULT_PAGE_HEIGHT * THUMBNAIL_SCALE) + THUMBNAIL_GAP + 20;
@@ -42,9 +45,10 @@ export function PdfViewerSidebar({
42
45
  }, [currentPage, virtualizer]);
43
46
  return /*#__PURE__*/React.createElement("div", {
44
47
  className: styles.sidebar
45
- }, /*#__PURE__*/React.createElement("div", {
46
- className: styles.sidebarHeader
47
- }, "Pages"), /*#__PURE__*/React.createElement("div", {
48
+ }, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
49
+ sidebarMode: sidebarMode,
50
+ onSidebarModeChange: onSidebarModeChange
51
+ }), /*#__PURE__*/React.createElement("div", {
48
52
  ref: scrollContainerRef,
49
53
  className: styles.scrollContainer
50
54
  }, /*#__PURE__*/React.createElement("div", {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerSidebar.js","names":["useVirtualizer","React","useEffect","useRef","DEFAULT_PAGE_HEIGHT","THUMBNAIL_GAP","THUMBNAIL_SCALE","styles","PdfViewerSidebarHeader","PdfViewerThumbnail","PdfViewerSidebar","document","numPages","currentPage","onPageClick","sidebarMode","onSidebarModeChange","scrollContainerRef","estimatedItemHeight","Math","floor","virtualizer","count","getScrollElement","current","estimateSize","overscan","scrollToIndex","align","createElement","className","sidebar","ref","scrollContainer","thumbnailsContainer","style","height","getTotalSize","getVirtualItems","map","virtualItem","pageNumber","index","key","thumbnailWrapper","top","start","size","isActive","onClick"],"sources":["PdfViewerSidebar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { PDFDocumentProxy } from \"pdfjs-dist\";\nimport React, { useEffect, useRef } from \"react\";\nimport {\n DEFAULT_PAGE_HEIGHT,\n THUMBNAIL_GAP,\n THUMBNAIL_SCALE,\n} from \"../constants.js\";\nimport type { SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerSidebar.module.css\";\nimport { PdfViewerSidebarHeader } from \"./PdfViewerSidebarHeader.js\";\nimport { PdfViewerThumbnail } from \"./PdfViewerThumbnail.js\";\n\nexport interface PdfViewerSidebarProps {\n document: PDFDocumentProxy;\n numPages: number;\n currentPage: number;\n onPageClick: (page: number) => void;\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}\n\nexport function PdfViewerSidebar({\n document,\n numPages,\n currentPage,\n onPageClick,\n sidebarMode,\n onSidebarModeChange,\n}: PdfViewerSidebarProps): React.ReactElement {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const estimatedItemHeight = Math.floor(DEFAULT_PAGE_HEIGHT * THUMBNAIL_SCALE)\n + THUMBNAIL_GAP + 20;\n\n const virtualizer = useVirtualizer({\n count: numPages,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: () => estimatedItemHeight,\n overscan: 2,\n });\n\n // Auto-scroll to keep the active thumbnail visible\n useEffect(function syncActiveThumbnail() {\n virtualizer.scrollToIndex(currentPage - 1, { align: \"auto\" });\n }, [currentPage, virtualizer]);\n\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div ref={scrollContainerRef} className={styles.scrollContainer}>\n <div\n className={styles.thumbnailsContainer}\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const pageNumber = virtualItem.index + 1;\n return (\n <div\n key={virtualItem.key}\n className={styles.thumbnailWrapper}\n style={{\n top: virtualItem.start,\n height: virtualItem.size,\n }}\n >\n <div>\n <PdfViewerThumbnail\n document={document}\n pageNumber={pageNumber}\n isActive={pageNumber === currentPage}\n onClick={() => onPageClick(pageNumber)}\n />\n <div className={styles.pageNumber}>{pageNumber}</div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,yBAAyB;AAExD,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SACEC,mBAAmB,EACnBC,aAAa,EACbC,eAAe,QACV,iBAAiB;AAExB,OAAOC,MAAM,MAAM,+BAA+B;AAClD,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,kBAAkB,QAAQ,yBAAyB;AAW5D,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC,QAAQ;EACRC,WAAW;EACXC,WAAW;EACXC,WAAW;EACXC;AACqB,CAAC,EAAsB;EAC5C,MAAMC,kBAAkB,GAAGd,MAAM,CAAiB,IAAI,CAAC;EACvD,MAAMe,mBAAmB,GAAGC,IAAI,CAACC,KAAK,CAAChB,mBAAmB,GAAGE,eAAe,CAAC,GACzED,aAAa,GAAG,EAAE;EAEtB,MAAMgB,WAAW,GAAGrB,cAAc,CAAC;IACjCsB,KAAK,EAAEV,QAAQ;IACfW,gBAAgB,EAAEA,CAAA,KAAMN,kBAAkB,CAACO,OAAO;IAClDC,YAAY,EAAEA,CAAA,KAAMP,mBAAmB;IACvCQ,QAAQ,EAAE;EACZ,CAAC,CAAC;;EAEF;EACAxB,SAAS,CAAC,YAA+B;IACvCmB,WAAW,CAACM,aAAa,CAACd,WAAW,GAAG,CAAC,EAAE;MAAEe,KAAK,EAAE;IAAO,CAAC,CAAC;EAC/D,CAAC,EAAE,CAACf,WAAW,EAAEQ,WAAW,CAAC,CAAC;EAE9B,oBACEpB,KAAA,CAAA4B,aAAA;IAAKC,SAAS,EAAEvB,MAAM,CAACwB;EAAQ,gBAC7B9B,KAAA,CAAA4B,aAAA,CAACrB,sBAAsB;IACrBO,WAAW,EAAEA,WAAY;IACzBC,mBAAmB,EAAEA;EAAoB,CAC1C,CAAC,eACFf,KAAA,CAAA4B,aAAA;IAAKG,GAAG,EAAEf,kBAAmB;IAACa,SAAS,EAAEvB,MAAM,CAAC0B;EAAgB,gBAC9DhC,KAAA,CAAA4B,aAAA;IACEC,SAAS,EAAEvB,MAAM,CAAC2B,mBAAoB;IACtCC,KAAK,EAAE;MAAEC,MAAM,EAAEf,WAAW,CAACgB,YAAY,CAAC;IAAE;EAAE,GAE7ChB,WAAW,CAACiB,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,WAAW,IAAK;IAClD,MAAMC,UAAU,GAAGD,WAAW,CAACE,KAAK,GAAG,CAAC;IACxC,oBACEzC,KAAA,CAAA4B,aAAA;MACEc,GAAG,EAAEH,WAAW,CAACG,GAAI;MACrBb,SAAS,EAAEvB,MAAM,CAACqC,gBAAiB;MACnCT,KAAK,EAAE;QACLU,GAAG,EAAEL,WAAW,CAACM,KAAK;QACtBV,MAAM,EAAEI,WAAW,CAACO;MACtB;IAAE,gBAEF9C,KAAA,CAAA4B,aAAA,2BACE5B,KAAA,CAAA4B,aAAA,CAACpB,kBAAkB;MACjBE,QAAQ,EAAEA,QAAS;MACnB8B,UAAU,EAAEA,UAAW;MACvBO,QAAQ,EAAEP,UAAU,KAAK5B,WAAY;MACrCoC,OAAO,EAAEA,CAAA,KAAMnC,WAAW,CAAC2B,UAAU;IAAE,CACxC,CAAC,eACFxC,KAAA,CAAA4B,aAAA;MAAKC,SAAS,EAAEvB,MAAM,CAACkC;IAAW,GAAEA,UAAgB,CACjD,CACF,CAAC;EAEV,CAAC,CACE,CACF,CACF,CAAC;AAEV","ignoreList":[]}
@@ -8,15 +8,6 @@
8
8
  overflow: hidden;
9
9
  }
10
10
 
11
- .sidebarHeader {
12
- padding: var(--osdk-pdf-viewer-sidebar-thumbnail-gap);
13
- font-family: var(--osdk-typography-family-default);
14
- font-size: var(--osdk-typography-size-body-small);
15
- font-weight: var(--osdk-typography-weight-semibold);
16
- color: var(--osdk-typography-color-muted);
17
- border-bottom: 1px solid var(--osdk-pdf-viewer-sidebar-border);
18
- flex-shrink: 0;
19
- }
20
11
 
21
12
  .scrollContainer {
22
13
  flex: 1;
@@ -0,0 +1,54 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { Toggle } from "@base-ui/react/toggle";
18
+ import { ToggleGroup } from "@base-ui/react/toggle-group";
19
+ import { GridView, Properties } from "@blueprintjs/icons";
20
+ import React, { useCallback } from "react";
21
+ import styles from "./PdfViewerSidebarHeader.module.css";
22
+ const SIDEBAR_MODE_VALUE = Object.freeze(["thumbnails"]);
23
+ const OUTLINE_MODE_VALUE = Object.freeze(["outline"]);
24
+ export function PdfViewerSidebarHeader({
25
+ sidebarMode,
26
+ onSidebarModeChange
27
+ }) {
28
+ const value = sidebarMode === "thumbnails" ? SIDEBAR_MODE_VALUE : OUTLINE_MODE_VALUE;
29
+ const handleValueChange = useCallback(newValue => {
30
+ if (newValue.length > 0) {
31
+ onSidebarModeChange(newValue[0]);
32
+ }
33
+ }, [onSidebarModeChange]);
34
+ return /*#__PURE__*/React.createElement("div", {
35
+ className: styles.sidebarHeader
36
+ }, /*#__PURE__*/React.createElement(ToggleGroup, {
37
+ value: value,
38
+ onValueChange: handleValueChange,
39
+ className: styles.toggleGroup
40
+ }, /*#__PURE__*/React.createElement(Toggle, {
41
+ value: "thumbnails",
42
+ className: styles.modeButton,
43
+ "aria-label": "Page thumbnails"
44
+ }, /*#__PURE__*/React.createElement(GridView, {
45
+ size: 16
46
+ })), /*#__PURE__*/React.createElement(Toggle, {
47
+ value: "outline",
48
+ className: styles.modeButton,
49
+ "aria-label": "Document outline"
50
+ }, /*#__PURE__*/React.createElement(Properties, {
51
+ size: 16
52
+ }))));
53
+ }
54
+ //# sourceMappingURL=PdfViewerSidebarHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerSidebarHeader.js","names":["Toggle","ToggleGroup","GridView","Properties","React","useCallback","styles","SIDEBAR_MODE_VALUE","Object","freeze","OUTLINE_MODE_VALUE","PdfViewerSidebarHeader","sidebarMode","onSidebarModeChange","value","handleValueChange","newValue","length","createElement","className","sidebarHeader","onValueChange","toggleGroup","modeButton","size"],"sources":["PdfViewerSidebarHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Toggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { GridView, Properties } from \"@blueprintjs/icons\";\nimport React, { useCallback } from \"react\";\nimport type { SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerSidebarHeader.module.css\";\n\nexport interface PdfViewerSidebarHeaderProps {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}\n\nconst SIDEBAR_MODE_VALUE = Object.freeze([\"thumbnails\"]) as readonly string[];\nconst OUTLINE_MODE_VALUE = Object.freeze([\"outline\"]) as readonly string[];\n\nexport function PdfViewerSidebarHeader({\n sidebarMode,\n onSidebarModeChange,\n}: PdfViewerSidebarHeaderProps): React.ReactElement {\n const value = sidebarMode === \"thumbnails\"\n ? SIDEBAR_MODE_VALUE\n : OUTLINE_MODE_VALUE;\n\n const handleValueChange = useCallback(\n (newValue: string[]) => {\n if (newValue.length > 0) {\n onSidebarModeChange(newValue[0] as SidebarMode);\n }\n },\n [onSidebarModeChange],\n );\n\n return (\n <div className={styles.sidebarHeader}>\n <ToggleGroup\n value={value}\n onValueChange={handleValueChange}\n className={styles.toggleGroup}\n >\n <Toggle\n value=\"thumbnails\"\n className={styles.modeButton}\n aria-label=\"Page thumbnails\"\n >\n <GridView size={16} />\n </Toggle>\n\n <Toggle\n value=\"outline\"\n className={styles.modeButton}\n aria-label=\"Document outline\"\n >\n <Properties size={16} />\n </Toggle>\n </ToggleGroup>\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,QAAQ,EAAEC,UAAU,QAAQ,oBAAoB;AACzD,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,OAAOC,MAAM,MAAM,qCAAqC;AAOxD,MAAMC,kBAAkB,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAsB;AAC7E,MAAMC,kBAAkB,GAAGF,MAAM,CAACC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAsB;AAE1E,OAAO,SAASE,sBAAsBA,CAAC;EACrCC,WAAW;EACXC;AAC2B,CAAC,EAAsB;EAClD,MAAMC,KAAK,GAAGF,WAAW,KAAK,YAAY,GACtCL,kBAAkB,GAClBG,kBAAkB;EAEtB,MAAMK,iBAAiB,GAAGV,WAAW,CAClCW,QAAkB,IAAK;IACtB,IAAIA,QAAQ,CAACC,MAAM,GAAG,CAAC,EAAE;MACvBJ,mBAAmB,CAACG,QAAQ,CAAC,CAAC,CAAgB,CAAC;IACjD;EACF,CAAC,EACD,CAACH,mBAAmB,CACtB,CAAC;EAED,oBACET,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACc;EAAc,gBACnChB,KAAA,CAAAc,aAAA,CAACjB,WAAW;IACVa,KAAK,EAAEA,KAAM;IACbO,aAAa,EAAEN,iBAAkB;IACjCI,SAAS,EAAEb,MAAM,CAACgB;EAAY,gBAE9BlB,KAAA,CAAAc,aAAA,CAAClB,MAAM;IACLc,KAAK,EAAC,YAAY;IAClBK,SAAS,EAAEb,MAAM,CAACiB,UAAW;IAC7B,cAAW;EAAiB,gBAE5BnB,KAAA,CAAAc,aAAA,CAAChB,QAAQ;IAACsB,IAAI,EAAE;EAAG,CAAE,CACf,CAAC,eAETpB,KAAA,CAAAc,aAAA,CAAClB,MAAM;IACLc,KAAK,EAAC,SAAS;IACfK,SAAS,EAAEb,MAAM,CAACiB,UAAW;IAC7B,cAAW;EAAkB,gBAE7BnB,KAAA,CAAAc,aAAA,CAACf,UAAU;IAACqB,IAAI,EAAE;EAAG,CAAE,CACjB,CACG,CACV,CAAC;AAEV","ignoreList":[]}
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ .sidebarHeader {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: flex-start;
21
+ padding: var(--osdk-surface-spacing);
22
+ border-bottom: var(--osdk-pdf-viewer-sidebar-border);
23
+ flex-shrink: 0;
24
+ }
25
+
26
+ .toggleGroup {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: var(--osdk-spacing-2xs, 2px);
30
+ padding: var(--osdk-spacing-2xs, 2px);
31
+ border: 1px solid var(--osdk-surface-border-color, rgba(0, 0, 0, 0.15));
32
+ border-radius: var(--osdk-surface-border-radius);
33
+ background-color: var(--osdk-surface-background-color, transparent);
34
+ }
35
+
36
+ .modeButton {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ width: 28px;
41
+ height: 28px;
42
+ border: none;
43
+ background: none;
44
+ color: var(--osdk-typography-color-muted);
45
+ cursor: pointer;
46
+ border-radius: var(--osdk-surface-border-radius);
47
+ padding: 0;
48
+ }
49
+
50
+ .modeButton:hover {
51
+ background-color: var(--osdk-surface-background-color-default-hover);
52
+ }
53
+
54
+ .modeButton:active {
55
+ background-color: var(--osdk-surface-background-color-default-active);
56
+ }
57
+
58
+ .modeButton:focus-visible {
59
+ outline: var(--osdk-focus-outline);
60
+ outline-offset: var(--osdk-focus-visible-outline-offset);
61
+ }
62
+
63
+ .modeButton[data-pressed] {
64
+ background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
65
+ color: var(--osdk-pdf-viewer-outline-item-active-color, var(--osdk-intent-primary));
66
+ }
67
+
68
+ .modeButton[data-pressed]:hover {
69
+ background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
70
+ }
@@ -16,7 +16,7 @@
16
16
 
17
17
  import classnames from "classnames";
18
18
  import React, { useCallback, useEffect, useRef, useState } from "react";
19
- import { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from "./constants.js";
19
+ import { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from "../constants.js";
20
20
  import styles from "./PdfViewerThumbnail.module.css";
21
21
  export function PdfViewerThumbnail({
22
22
  document,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfViewerThumbnail.js","names":["classnames","React","useCallback","useEffect","useRef","useState","DEVICE_PIXEL_RATIO","THUMBNAIL_SCALE","styles","PdfViewerThumbnail","document","pageNumber","isActive","onClick","canvasRef","renderTaskRef","dimensions","setDimensions","undefined","cancelled","getPage","then","page","current","viewport","getViewport","scale","canvas","context","getContext","width","Math","floor","height","style","cancel","setTransform","renderTask","render","canvasContext","promise","catch","err","Error","message","includes","handleKeyDown","e","key","preventDefault","containerClassName","thumbnailContainer","active","createElement","className","onKeyDown","role","tabIndex","ref"],"sources":["PdfViewerThumbnail.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport type { PDFDocumentProxy, PDFPageProxy } from \"pdfjs-dist\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from \"../constants.js\";\nimport styles from \"./PdfViewerThumbnail.module.css\";\n\ninterface PdfViewerThumbnailProps {\n document: PDFDocumentProxy;\n pageNumber: number;\n isActive: boolean;\n onClick: () => void;\n}\n\nexport function PdfViewerThumbnail({\n document,\n pageNumber,\n isActive,\n onClick,\n}: PdfViewerThumbnailProps): React.ReactElement {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const renderTaskRef = useRef<ReturnType<PDFPageProxy[\"render\"]> | null>(null);\n const [dimensions, setDimensions] = useState<\n { width: number; height: number } | undefined\n >(undefined);\n\n useEffect(() => {\n let cancelled = false;\n\n void document.getPage(pageNumber).then((page) => {\n if (cancelled || canvasRef.current == null) {\n return;\n }\n\n const viewport = page.getViewport({ scale: THUMBNAIL_SCALE });\n const canvas = canvasRef.current;\n const context = canvas.getContext(\"2d\");\n if (context == null) {\n return;\n }\n\n canvas.width = Math.floor(viewport.width * DEVICE_PIXEL_RATIO);\n canvas.height = Math.floor(viewport.height * DEVICE_PIXEL_RATIO);\n canvas.style.width = `${Math.floor(viewport.width)}px`;\n canvas.style.height = `${Math.floor(viewport.height)}px`;\n\n setDimensions({\n width: Math.floor(viewport.width),\n height: Math.floor(viewport.height),\n });\n\n if (renderTaskRef.current != null) {\n renderTaskRef.current.cancel();\n }\n\n context.setTransform(\n DEVICE_PIXEL_RATIO,\n 0,\n 0,\n DEVICE_PIXEL_RATIO,\n 0,\n 0,\n );\n\n const renderTask = page.render({\n canvasContext: context,\n viewport,\n });\n renderTaskRef.current = renderTask;\n\n void renderTask.promise.catch((err: unknown) => {\n if (err instanceof Error && err.message.includes(\"cancelled\")) {\n return;\n }\n throw err;\n });\n });\n\n return () => {\n cancelled = true;\n if (renderTaskRef.current != null) {\n renderTaskRef.current.cancel();\n renderTaskRef.current = null;\n }\n };\n }, [document, pageNumber]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n },\n [onClick],\n );\n\n const containerClassName = classnames(\n styles.thumbnailContainer,\n isActive && styles.active,\n );\n\n return (\n <div\n className={containerClassName}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={`Page ${pageNumber}`}\n aria-current={isActive ? \"page\" : undefined}\n style={dimensions != null\n ? { width: dimensions.width, height: dimensions.height }\n : undefined}\n >\n <canvas ref={canvasRef} className={styles.canvas} />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}