@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.
- package/CHANGELOG.md +28 -0
- package/README.md +22 -6
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/fields/DateCalendar.js +70 -0
- package/build/browser/action-form/fields/DateCalendar.js.map +1 -0
- package/build/browser/action-form/fields/DateCalendar.module.css +136 -0
- package/build/browser/action-form/fields/DateCalendar.module.css.js +22 -0
- package/build/browser/action-form/fields/DatetimePickerField.js +98 -0
- package/build/browser/action-form/fields/DatetimePickerField.js.map +1 -0
- package/build/browser/action-form/fields/DatetimePickerField.module.css +66 -0
- package/build/browser/action-form/fields/DatetimePickerField.module.css.js +10 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js +10 -1
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/LazyDateCalendar.js +27 -0
- package/build/browser/action-form/fields/LazyDateCalendar.js.map +1 -0
- package/build/browser/filter-list/FilterList.js +9 -5
- package/build/browser/filter-list/FilterList.js.map +1 -1
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/BaseFilterList.js +3 -1
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js +3 -2
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/browser/filter-list/base/inputs/DateRangeInput.js +1 -1
- package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiDateInput.js +1 -1
- package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/SingleDateInput.js +1 -1
- package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/TimelineInput.js +1 -1
- package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/index.js +1 -1
- package/build/browser/filter-list/base/inputs/index.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterListState.js +3 -0
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterVisibility.js +7 -1
- package/build/browser/filter-list/hooks/useFilterVisibility.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/object-table/LoadingCell.js +2 -1
- package/build/browser/object-table/LoadingCell.js.map +1 -1
- package/build/browser/object-table/LoadingCell.module.css +3 -20
- package/build/browser/object-table/LoadingCell.module.css.js +1 -2
- package/build/browser/object-table/LoadingStateTable.js +2 -1
- package/build/browser/object-table/LoadingStateTable.js.map +1 -1
- package/build/browser/pdf-viewer/PdfRenderer.js +1 -1
- package/build/browser/pdf-viewer/PdfRenderer.js.map +1 -1
- package/build/browser/pdf-viewer/PdfViewer.js +59 -118
- package/build/browser/pdf-viewer/PdfViewer.js.map +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.module.css.js +11 -0
- package/build/browser/pdf-viewer/components/PdfViewerContent.js +113 -0
- package/build/browser/pdf-viewer/components/PdfViewerContent.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
- package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
- package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css.js +15 -0
- package/build/browser/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerSearchBar.module.css.js +10 -0
- package/build/browser/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
- package/build/browser/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
- package/build/{esm/pdf-viewer → browser/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
- package/build/browser/pdf-viewer/{PdfViewerSidebar.module.css.js → components/PdfViewerSidebar.module.css.js} +5 -6
- package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
- package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
- package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css.js +8 -0
- package/build/browser/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
- package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css.js → components/PdfViewerThumbnail.module.css.js} +3 -3
- package/build/browser/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
- package/build/browser/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.module.css.js +12 -0
- package/build/browser/pdf-viewer/constants.js +7 -5
- package/build/browser/pdf-viewer/constants.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfDocument.js +2 -3
- package/build/browser/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfOutline.js +268 -0
- package/build/browser/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
- package/build/browser/pdf-viewer/hooks/usePdfViewer.js +12 -1
- package/build/browser/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
- package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
- package/build/browser/pdf-viewer/hooks/usePdfViewerState.js +135 -0
- package/build/browser/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
- package/build/browser/pdf-viewer/types.js.map +1 -1
- package/build/browser/public/experimental.js +21 -2
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/public/primitives.js +20 -0
- package/build/browser/public/primitives.js.map +1 -0
- package/build/browser/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
- package/build/browser/shared/dateUtils.js.map +1 -0
- package/build/browser/styles.css +421 -74
- package/build/cjs/DateCalendar-QWGFKD6J.css +113 -0
- package/build/cjs/DateCalendar-QWGFKD6J.css.map +1 -0
- package/build/cjs/DateCalendar-R44GMN3O.cjs +67 -0
- package/build/cjs/DateCalendar-R44GMN3O.cjs.map +1 -0
- package/build/cjs/chunk-GT6IV6LV.cjs +163 -0
- package/build/cjs/chunk-GT6IV6LV.cjs.map +1 -0
- package/build/cjs/chunk-HMQTYQEX.cjs +9 -0
- package/build/cjs/chunk-HMQTYQEX.cjs.map +1 -0
- package/build/cjs/chunk-UZ2E5NRX.cjs +8 -0
- package/build/cjs/chunk-UZ2E5NRX.cjs.map +1 -0
- package/build/cjs/index.cjs +2 -0
- package/build/cjs/public/experimental.cjs +2157 -1592
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +388 -116
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +273 -14
- package/build/cjs/public/primitives.cjs +25 -0
- package/build/cjs/public/primitives.cjs.map +1 -0
- package/build/cjs/public/primitives.css +154 -0
- package/build/cjs/public/primitives.css.map +1 -0
- package/build/cjs/public/primitives.d.cts +49 -0
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/fields/DateCalendar.js +70 -0
- package/build/esm/action-form/fields/DateCalendar.js.map +1 -0
- package/build/esm/action-form/fields/DateCalendar.module.css +136 -0
- package/build/esm/action-form/fields/DatetimePickerField.js +98 -0
- package/build/esm/action-form/fields/DatetimePickerField.js.map +1 -0
- package/build/esm/action-form/fields/DatetimePickerField.module.css +66 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js +10 -1
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/LazyDateCalendar.js +27 -0
- package/build/esm/action-form/fields/LazyDateCalendar.js.map +1 -0
- package/build/esm/filter-list/FilterList.js +9 -5
- package/build/esm/filter-list/FilterList.js.map +1 -1
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/BaseFilterList.js +3 -1
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js +3 -2
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/esm/filter-list/base/inputs/DateRangeInput.js +1 -1
- package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiDateInput.js +1 -1
- package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/SingleDateInput.js +1 -1
- package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/TimelineInput.js +1 -1
- package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/index.js +1 -1
- package/build/esm/filter-list/base/inputs/index.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterListState.js +3 -0
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterVisibility.js +7 -1
- package/build/esm/filter-list/hooks/useFilterVisibility.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/object-table/LoadingCell.js +2 -1
- package/build/esm/object-table/LoadingCell.js.map +1 -1
- package/build/esm/object-table/LoadingCell.module.css +3 -20
- package/build/esm/object-table/LoadingStateTable.js +2 -1
- package/build/esm/object-table/LoadingStateTable.js.map +1 -1
- package/build/esm/pdf-viewer/PdfRenderer.js +1 -1
- package/build/esm/pdf-viewer/PdfRenderer.js.map +1 -1
- package/build/esm/pdf-viewer/PdfViewer.js +59 -118
- package/build/esm/pdf-viewer/PdfViewer.js.map +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -0
- package/build/esm/pdf-viewer/components/PdfViewerContent.js +113 -0
- package/build/esm/pdf-viewer/components/PdfViewerContent.js.map +1 -0
- package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js +98 -0
- package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.js.map +1 -0
- package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +89 -0
- package/build/esm/pdf-viewer/components/PdfViewerSearchBar.js.map +1 -0
- package/build/esm/pdf-viewer/{PdfViewerSidebar.js → components/PdfViewerSidebar.js} +9 -5
- package/build/esm/pdf-viewer/components/PdfViewerSidebar.js.map +1 -0
- package/build/{browser/pdf-viewer → esm/pdf-viewer/components}/PdfViewerSidebar.module.css +0 -9
- package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js +54 -0
- package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.js.map +1 -0
- package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.module.css +70 -0
- package/build/esm/pdf-viewer/{PdfViewerThumbnail.js → components/PdfViewerThumbnail.js} +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerThumbnail.js.map +1 -0
- package/build/esm/pdf-viewer/{PdfViewerToolbar.js → components/PdfViewerToolbar.js} +39 -12
- package/build/esm/pdf-viewer/components/PdfViewerToolbar.js.map +1 -0
- package/build/esm/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css} +2 -2
- package/build/esm/pdf-viewer/constants.js +7 -5
- package/build/esm/pdf-viewer/constants.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfDocument.js +2 -3
- package/build/esm/pdf-viewer/hooks/usePdfDocument.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfOutline.js +268 -0
- package/build/esm/pdf-viewer/hooks/usePdfOutline.js.map +1 -0
- package/build/esm/pdf-viewer/hooks/usePdfViewer.js +12 -1
- package/build/esm/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js +80 -0
- package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -0
- package/build/esm/pdf-viewer/hooks/usePdfViewerState.js +135 -0
- package/build/esm/pdf-viewer/hooks/usePdfViewerState.js.map +1 -0
- package/build/esm/pdf-viewer/types.js.map +1 -1
- package/build/esm/public/experimental.js +21 -2
- package/build/esm/public/experimental.js.map +1 -1
- package/build/esm/public/primitives.js +20 -0
- package/build/esm/public/primitives.js.map +1 -0
- package/build/esm/{filter-list/base/inputs → shared}/dateUtils.js +38 -2
- package/build/esm/shared/dateUtils.js.map +1 -0
- package/build/types/action-form/FormFieldApi.d.ts +21 -7
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/fields/DateCalendar.d.ts +9 -0
- package/build/types/action-form/fields/DateCalendar.d.ts.map +1 -0
- package/build/types/action-form/fields/DatetimePickerField.d.ts +3 -0
- package/build/types/action-form/fields/DatetimePickerField.d.ts.map +1 -0
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/LazyDateCalendar.d.ts +3 -0
- package/build/types/action-form/fields/LazyDateCalendar.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +2 -1
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListHeader.d.ts +3 -2
- package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/index.d.ts +1 -1
- package/build/types/filter-list/base/inputs/index.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterVisibility.d.ts +2 -0
- package/build/types/filter-list/hooks/useFilterVisibility.d.ts.map +1 -1
- package/build/types/object-table/LoadingCell.d.ts.map +1 -1
- package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
- package/build/types/pdf-viewer/PdfRenderer.d.ts +2 -2
- package/build/types/pdf-viewer/PdfRenderer.d.ts.map +1 -1
- package/build/types/pdf-viewer/PdfViewer.d.ts +1 -1
- package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -1
- package/build/types/pdf-viewer/{PdfViewerAnnotationLayer.d.ts → components/PdfViewerAnnotationLayer.d.ts} +2 -3
- package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts.map +1 -0
- package/build/types/pdf-viewer/components/PdfViewerContent.d.ts +22 -0
- package/build/types/pdf-viewer/components/PdfViewerContent.d.ts.map +1 -0
- package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts +11 -0
- package/build/types/pdf-viewer/components/PdfViewerOutlineSidebar.d.ts.map +1 -0
- package/build/types/pdf-viewer/{PdfViewerSearchBar.d.ts → components/PdfViewerSearchBar.d.ts} +1 -2
- package/build/types/pdf-viewer/components/PdfViewerSearchBar.d.ts.map +1 -0
- package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts +12 -0
- package/build/types/pdf-viewer/components/PdfViewerSidebar.d.ts.map +1 -0
- package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts +7 -0
- package/build/types/pdf-viewer/components/PdfViewerSidebarHeader.d.ts.map +1 -0
- package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts.map → components/PdfViewerThumbnail.d.ts.map} +1 -1
- package/build/types/pdf-viewer/{PdfViewerToolbar.d.ts → components/PdfViewerToolbar.d.ts} +5 -3
- package/build/types/pdf-viewer/components/PdfViewerToolbar.d.ts.map +1 -0
- package/build/types/pdf-viewer/constants.d.ts +5 -0
- package/build/types/pdf-viewer/constants.d.ts.map +1 -1
- package/build/types/pdf-viewer/hooks/usePdfDocument.d.ts.map +1 -1
- package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts +3 -0
- package/build/types/pdf-viewer/hooks/usePdfOutline.d.ts.map +1 -0
- package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts +1 -1
- package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts.map +1 -1
- package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts +43 -0
- package/build/types/pdf-viewer/hooks/usePdfViewerCore.d.ts.map +1 -0
- package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts +39 -0
- package/build/types/pdf-viewer/hooks/usePdfViewerState.d.ts.map +1 -0
- package/build/types/pdf-viewer/types.d.ts +42 -0
- package/build/types/pdf-viewer/types.d.ts.map +1 -1
- package/build/types/public/experimental.d.ts +17 -2
- package/build/types/public/experimental.d.ts.map +1 -1
- package/build/types/public/primitives.d.ts +3 -0
- package/build/types/public/primitives.d.ts.map +1 -0
- package/build/types/shared/dateUtils.d.ts +31 -0
- package/build/types/shared/dateUtils.d.ts.map +1 -0
- package/package.json +14 -4
- package/primitives.d.ts +17 -0
- package/build/browser/filter-list/base/inputs/dateUtils.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css.js +0 -11
- package/build/browser/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerSearchBar.module.css.js +0 -10
- package/build/browser/pdf-viewer/PdfViewerSidebar.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerToolbar.js.map +0 -1
- package/build/browser/pdf-viewer/PdfViewerToolbar.module.css.js +0 -12
- package/build/esm/filter-list/base/inputs/dateUtils.js.map +0 -1
- package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.js.map +0 -1
- package/build/esm/pdf-viewer/PdfViewerSearchBar.js.map +0 -1
- package/build/esm/pdf-viewer/PdfViewerSidebar.js.map +0 -1
- package/build/esm/pdf-viewer/PdfViewerThumbnail.js.map +0 -1
- package/build/esm/pdf-viewer/PdfViewerToolbar.js.map +0 -1
- package/build/types/filter-list/base/inputs/dateUtils.d.ts +0 -17
- package/build/types/filter-list/base/inputs/dateUtils.d.ts.map +0 -1
- package/build/types/pdf-viewer/PdfViewerAnnotationLayer.d.ts.map +0 -1
- package/build/types/pdf-viewer/PdfViewerSearchBar.d.ts.map +0 -1
- package/build/types/pdf-viewer/PdfViewerSidebar.d.ts +0 -10
- package/build/types/pdf-viewer/PdfViewerSidebar.d.ts.map +0 -1
- package/build/types/pdf-viewer/PdfViewerToolbar.d.ts.map +0 -1
- /package/build/browser/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
- /package/build/browser/pdf-viewer/{PdfViewerAnnotationLayer.module.css → components/PdfViewerAnnotationLayer.module.css} +0 -0
- /package/build/browser/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
- /package/build/browser/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
- /package/build/browser/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
- /package/build/esm/pdf-viewer/{PdfViewerAnnotationLayer.js → components/PdfViewerAnnotationLayer.js} +0 -0
- /package/build/esm/pdf-viewer/{PdfViewerAnnotationLayer.module.css → components/PdfViewerAnnotationLayer.module.css} +0 -0
- /package/build/esm/pdf-viewer/{PdfViewerSearchBar.js → components/PdfViewerSearchBar.js} +0 -0
- /package/build/esm/pdf-viewer/{PdfViewerSearchBar.module.css → components/PdfViewerSearchBar.module.css} +0 -0
- /package/build/esm/pdf-viewer/{PdfViewerThumbnail.module.css → components/PdfViewerThumbnail.module.css} +0 -0
- /package/build/types/pdf-viewer/{PdfViewerThumbnail.d.ts → components/PdfViewerThumbnail.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","values","$in","selectedValues","map","v","Date","startDate","endDate","buildWhereClause","definitions","filterStates","operator","propertyTypes","excludeFilterKey","clauses","definition","key","get","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys"],"sources":["filterStateToWhereClause.ts"],"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 type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../base/inputs/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n return state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return values.length === 1 ? values[0] : { $in: values };\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n operator: \"and\" | \"or\",\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter !== undefined) {\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [definition.key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [definition.key]: { $isNull: true } }],\n };\n }\n clauses.push(isExcluding ? { $not: rangeClause } : rangeClause);\n } else {\n const clause = { [definition.key]: filter };\n clauses.push(isExcluding ? { $not: clause } : clause);\n }\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n if (operator === \"and\") {\n return { $and: clauses } as WhereClause<Q>;\n }\n\n return { $or: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","values","$in","selectedValues","map","v","Date","startDate","endDate","buildWhereClause","definitions","filterStates","operator","propertyTypes","excludeFilterKey","clauses","definition","key","get","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys"],"sources":["filterStateToWhereClause.ts"],"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 type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../../shared/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n return state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return values.length === 1 ? values[0] : { $in: values };\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n operator: \"and\" | \"or\",\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter !== undefined) {\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [definition.key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [definition.key]: { $isNull: true } }],\n };\n }\n clauses.push(isExcluding ? { $not: rangeClause } : rangeClause);\n } else {\n const clause = { [definition.key]: filter };\n clauses.push(isExcluding ? { $not: clause } : clause);\n }\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n if (operator === \"and\") {\n return { $and: clauses } as WhereClause<Q>;\n }\n\n return { $or: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
import classNames from "classnames";
|
|
18
18
|
import React from "react";
|
|
19
|
+
import { SkeletonBar } from "../base-components/skeleton/SkeletonBar.js";
|
|
19
20
|
import styles from "./LoadingCell.module.css";
|
|
20
21
|
import cellStyles from "./TableCell.module.css";
|
|
21
22
|
export function LoadingCellContent() {
|
|
22
|
-
return /*#__PURE__*/React.createElement(
|
|
23
|
+
return /*#__PURE__*/React.createElement(SkeletonBar, {
|
|
23
24
|
className: classNames(styles.osdkLoadingCell, styles.osdkCellSkeleton)
|
|
24
25
|
});
|
|
25
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingCell.js","names":["classNames","React","styles","cellStyles","LoadingCellContent","createElement","className","osdkLoadingCell","osdkCellSkeleton","LoadingCell","width","osdkTableCell","style"],"sources":["LoadingCell.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 from \"react\";\nimport styles from \"./LoadingCell.module.css\";\nimport cellStyles from \"./TableCell.module.css\";\n\nexport function LoadingCellContent(): React.ReactElement {\n return (\n <
|
|
1
|
+
{"version":3,"file":"LoadingCell.js","names":["classNames","React","SkeletonBar","styles","cellStyles","LoadingCellContent","createElement","className","osdkLoadingCell","osdkCellSkeleton","LoadingCell","width","osdkTableCell","style"],"sources":["LoadingCell.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 from \"react\";\nimport { SkeletonBar } from \"../base-components/skeleton/SkeletonBar.js\";\nimport styles from \"./LoadingCell.module.css\";\nimport cellStyles from \"./TableCell.module.css\";\n\nexport function LoadingCellContent(): React.ReactElement {\n return (\n <SkeletonBar\n className={classNames(\n styles.osdkLoadingCell,\n styles.osdkCellSkeleton,\n )}\n />\n );\n}\n\nexport function LoadingCell({ width }: { width: number }): React.ReactElement {\n return (\n <td\n className={cellStyles.osdkTableCell}\n style={{ width }}\n >\n <LoadingCellContent />\n </td>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,4CAA4C;AACxE,OAAOC,MAAM,MAAM,0BAA0B;AAC7C,OAAOC,UAAU,MAAM,wBAAwB;AAE/C,OAAO,SAASC,kBAAkBA,CAAA,EAAuB;EACvD,oBACEJ,KAAA,CAAAK,aAAA,CAACJ,WAAW;IACVK,SAAS,EAAEP,UAAU,CACnBG,MAAM,CAACK,eAAe,EACtBL,MAAM,CAACM,gBACT;EAAE,CACH,CAAC;AAEN;AAEA,OAAO,SAASC,WAAWA,CAAC;EAAEC;AAAyB,CAAC,EAAsB;EAC5E,oBACEV,KAAA,CAAAK,aAAA;IACEC,SAAS,EAAEH,UAAU,CAACQ,aAAc;IACpCC,KAAK,EAAE;MAAEF;IAAM;EAAE,gBAEjBV,KAAA,CAAAK,aAAA,CAACD,kBAAkB,MAAE,CACnB,CAAC;AAET","ignoreList":[]}
|
|
@@ -20,28 +20,11 @@
|
|
|
20
20
|
flex: 1;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
background: var(--osdk-table-skeleton-color-from);
|
|
27
|
-
border-color: var(--osdk-table-skeleton-color-from);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
to {
|
|
31
|
-
background: var(--osdk-table-skeleton-color-to);
|
|
32
|
-
border-color: var(--osdk-table-skeleton-color-to);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.osdkCellSkeleton {
|
|
37
|
-
animation: 1000ms linear infinite alternate skeleton-glow;
|
|
38
|
-
background: var(--osdk-table-skeleton-color-from);
|
|
39
|
-
background-clip: padding-box;
|
|
40
|
-
border-color: var(--osdk-table-skeleton-color-from);
|
|
23
|
+
.osdkCellSkeleton.osdkCellSkeleton {
|
|
24
|
+
--osdk-background-skeleton-from: var(--osdk-table-skeleton-color-from);
|
|
25
|
+
--osdk-background-skeleton-to: var(--osdk-table-skeleton-color-to);
|
|
41
26
|
border-radius: calc(var(--osdk-surface-border-radius) * 0.5);
|
|
42
27
|
box-shadow: none;
|
|
43
28
|
color: transparent;
|
|
44
29
|
cursor: default;
|
|
45
|
-
pointer-events: none;
|
|
46
|
-
user-select: none;
|
|
47
30
|
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import classNames from "classnames";
|
|
18
18
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
19
|
+
import { SkeletonBar } from "../base-components/skeleton/SkeletonBar.js";
|
|
19
20
|
import loadingStyles from "./LoadingCell.module.css";
|
|
20
21
|
import { LoadingRow } from "./LoadingRow.js";
|
|
21
22
|
import bodyStyles from "./TableBody.module.css";
|
|
@@ -81,7 +82,7 @@ export function LoadingStateTable({
|
|
|
81
82
|
style: {
|
|
82
83
|
width
|
|
83
84
|
}
|
|
84
|
-
}, /*#__PURE__*/React.createElement(
|
|
85
|
+
}, /*#__PURE__*/React.createElement(SkeletonBar, {
|
|
85
86
|
className: classNames(headerStyles.osdkLoadingHeaderCell, loadingStyles.osdkCellSkeleton)
|
|
86
87
|
}));
|
|
87
88
|
}))), /*#__PURE__*/React.createElement("tbody", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingStateTable.js","names":["classNames","React","useEffect","useMemo","useRef","useState","loadingStyles","LoadingRow","bodyStyles","TableHeader","headerStyles","MIN_ROWS","LoadingStateTable","table","tableContainerRef","headerGroups","rowHeight","columnWidth","enableRowSelection","options","minHeaderCount","headers","length","hasHeadersLoaded","headerRef","bodyRef","loadingRowCount","setLoadingRowCount","loadingColumnCount","setLoadingColumnCount","current","tableWidth","clientWidth","columnsNeeded","Math","ceil","containerHeight","clientHeight","availableHeight","rowsNeeded","max","createElement","Fragment","className","osdkTableHeader","ref","osdkTableHeaderRow","Array","from","map","_","index","width","getSize","key","osdkTableHeaderCell","style","osdkLoadingHeaderCell","osdkCellSkeleton","osdkTableBody","columnCount","translateY"],"sources":["LoadingStateTable.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 type { HeaderGroup, RowData, Table } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport loadingStyles from \"./LoadingCell.module.css\";\nimport { LoadingRow } from \"./LoadingRow.js\";\nimport bodyStyles from \"./TableBody.module.css\";\nimport { TableHeader } from \"./TableHeader.js\";\nimport headerStyles from \"./TableHeader.module.css\";\n\ninterface LoadingStateTableProps<TData extends RowData> {\n table: Table<TData>;\n tableContainerRef: React.RefObject<HTMLDivElement>;\n headerGroups: Array<HeaderGroup<TData>>;\n rowHeight?: number;\n columnWidth?: number;\n}\n\nconst MIN_ROWS = 5;\n\nexport function LoadingStateTable<TData extends RowData>({\n table,\n tableContainerRef,\n headerGroups,\n rowHeight = 40,\n columnWidth = 120,\n}: LoadingStateTableProps<TData>): React.ReactElement {\n // If selection enabled, there will be a header for the selection column\n const enableRowSelection = table.options.enableRowSelection;\n const minHeaderCount = enableRowSelection ? 1 : 0;\n const headers = useMemo(\n () => headerGroups.length > 0 ? headerGroups[0].headers : [],\n [headerGroups],\n );\n const hasHeadersLoaded = headers.length > minHeaderCount;\n\n const headerRef = useRef<HTMLTableSectionElement>(null);\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n const [loadingRowCount, setLoadingRowCount] = useState<number>(MIN_ROWS);\n const [loadingColumnCount, setLoadingColumnCount] = useState<number>(\n headers.length,\n );\n // Calculate number of columns needed to fill container width\n useEffect(() => {\n if (hasHeadersLoaded) {\n setLoadingColumnCount(headers.length);\n } else {\n if (tableContainerRef.current) {\n const tableWidth = tableContainerRef.current.clientWidth;\n if (tableWidth > 0) {\n const columnsNeeded = Math.ceil(tableWidth / columnWidth);\n setLoadingColumnCount(columnsNeeded);\n }\n }\n }\n }, [columnWidth, hasHeadersLoaded, headers, tableContainerRef]);\n\n // Calculate number of rows needed to fill container height\n useEffect(() => {\n if (tableContainerRef.current) {\n const containerHeight = tableContainerRef.current.clientHeight;\n const availableHeight = containerHeight - rowHeight;\n\n if (availableHeight > 0) {\n const rowsNeeded = Math.ceil(availableHeight / rowHeight);\n setLoadingRowCount(Math.max(rowsNeeded, MIN_ROWS));\n }\n }\n }, [tableContainerRef, rowHeight]);\n\n return (\n <>\n {hasHeadersLoaded\n ? <TableHeader table={table} />\n : (\n <thead className={headerStyles.osdkTableHeader} ref={headerRef}>\n <tr className={headerStyles.osdkTableHeaderRow}>\n {Array.from({ length: loadingColumnCount }).map((\n _,\n index,\n ) => {\n const width = headers.length > index\n ? headers[index].getSize()\n : columnWidth;\n return (\n <th\n key={`loading-header-${index}`}\n className={headerStyles.osdkTableHeaderCell}\n style={{ width }}\n >\n <
|
|
1
|
+
{"version":3,"file":"LoadingStateTable.js","names":["classNames","React","useEffect","useMemo","useRef","useState","SkeletonBar","loadingStyles","LoadingRow","bodyStyles","TableHeader","headerStyles","MIN_ROWS","LoadingStateTable","table","tableContainerRef","headerGroups","rowHeight","columnWidth","enableRowSelection","options","minHeaderCount","headers","length","hasHeadersLoaded","headerRef","bodyRef","loadingRowCount","setLoadingRowCount","loadingColumnCount","setLoadingColumnCount","current","tableWidth","clientWidth","columnsNeeded","Math","ceil","containerHeight","clientHeight","availableHeight","rowsNeeded","max","createElement","Fragment","className","osdkTableHeader","ref","osdkTableHeaderRow","Array","from","map","_","index","width","getSize","key","osdkTableHeaderCell","style","osdkLoadingHeaderCell","osdkCellSkeleton","osdkTableBody","columnCount","translateY"],"sources":["LoadingStateTable.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 type { HeaderGroup, RowData, Table } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { SkeletonBar } from \"../base-components/skeleton/SkeletonBar.js\";\nimport loadingStyles from \"./LoadingCell.module.css\";\nimport { LoadingRow } from \"./LoadingRow.js\";\nimport bodyStyles from \"./TableBody.module.css\";\nimport { TableHeader } from \"./TableHeader.js\";\nimport headerStyles from \"./TableHeader.module.css\";\n\ninterface LoadingStateTableProps<TData extends RowData> {\n table: Table<TData>;\n tableContainerRef: React.RefObject<HTMLDivElement>;\n headerGroups: Array<HeaderGroup<TData>>;\n rowHeight?: number;\n columnWidth?: number;\n}\n\nconst MIN_ROWS = 5;\n\nexport function LoadingStateTable<TData extends RowData>({\n table,\n tableContainerRef,\n headerGroups,\n rowHeight = 40,\n columnWidth = 120,\n}: LoadingStateTableProps<TData>): React.ReactElement {\n // If selection enabled, there will be a header for the selection column\n const enableRowSelection = table.options.enableRowSelection;\n const minHeaderCount = enableRowSelection ? 1 : 0;\n const headers = useMemo(\n () => headerGroups.length > 0 ? headerGroups[0].headers : [],\n [headerGroups],\n );\n const hasHeadersLoaded = headers.length > minHeaderCount;\n\n const headerRef = useRef<HTMLTableSectionElement>(null);\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n const [loadingRowCount, setLoadingRowCount] = useState<number>(MIN_ROWS);\n const [loadingColumnCount, setLoadingColumnCount] = useState<number>(\n headers.length,\n );\n // Calculate number of columns needed to fill container width\n useEffect(() => {\n if (hasHeadersLoaded) {\n setLoadingColumnCount(headers.length);\n } else {\n if (tableContainerRef.current) {\n const tableWidth = tableContainerRef.current.clientWidth;\n if (tableWidth > 0) {\n const columnsNeeded = Math.ceil(tableWidth / columnWidth);\n setLoadingColumnCount(columnsNeeded);\n }\n }\n }\n }, [columnWidth, hasHeadersLoaded, headers, tableContainerRef]);\n\n // Calculate number of rows needed to fill container height\n useEffect(() => {\n if (tableContainerRef.current) {\n const containerHeight = tableContainerRef.current.clientHeight;\n const availableHeight = containerHeight - rowHeight;\n\n if (availableHeight > 0) {\n const rowsNeeded = Math.ceil(availableHeight / rowHeight);\n setLoadingRowCount(Math.max(rowsNeeded, MIN_ROWS));\n }\n }\n }, [tableContainerRef, rowHeight]);\n\n return (\n <>\n {hasHeadersLoaded\n ? <TableHeader table={table} />\n : (\n <thead className={headerStyles.osdkTableHeader} ref={headerRef}>\n <tr className={headerStyles.osdkTableHeaderRow}>\n {Array.from({ length: loadingColumnCount }).map((\n _,\n index,\n ) => {\n const width = headers.length > index\n ? headers[index].getSize()\n : columnWidth;\n return (\n <th\n key={`loading-header-${index}`}\n className={headerStyles.osdkTableHeaderCell}\n style={{ width }}\n >\n <SkeletonBar\n className={classNames(\n headerStyles.osdkLoadingHeaderCell,\n loadingStyles.osdkCellSkeleton,\n )}\n />\n </th>\n );\n })}\n </tr>\n </thead>\n )}\n <tbody className={bodyStyles.osdkTableBody} ref={bodyRef}>\n {Array.from({ length: loadingRowCount }).map((_, index) => (\n <LoadingRow\n key={`skeleton-${index}`}\n columnCount={loadingColumnCount}\n headers={headers}\n translateY={rowHeight * index}\n rowHeight={rowHeight}\n columnWidth={columnWidth}\n />\n ))}\n </tbody>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfRenderer.js","names":["Error","ErrorIcon","Spin","classnames","React","useEffect","useState","BasePdfViewer","styles","fetchMediaContents","media","result","fetchContents","arrayBuffer","
|
|
1
|
+
{"version":3,"file":"PdfRenderer.js","names":["Error","ErrorIcon","Spin","classnames","React","useEffect","useState","BasePdfViewer","styles","fetchMediaContents","media","result","fetchContents","arrayBuffer","PdfViewer","className","pdfViewerProps","src","setSrc","undefined","loading","setLoading","error","setError","cancelled","then","buffer","catch","err","String","rootClassName","pdfViewer","createElement","loadingContainer","spinnerIcon","errorContainer","errorIcon","message","_extends"],"sources":["PdfRenderer.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 type { Media } from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { useEffect, useState } from \"react\";\nimport { BasePdfViewer } from \"./PdfViewer.js\";\nimport styles from \"./PdfViewer.module.css\";\nimport type { PdfViewerProps } from \"./types.js\";\n\nasync function fetchMediaContents(media: Media): Promise<ArrayBuffer> {\n const result = await media.fetchContents();\n return result.arrayBuffer();\n}\n\nexport interface PdfViewerMediaProps extends Omit<PdfViewerProps, \"src\"> {\n /** The Media object to fetch PDF contents from */\n media: Media;\n}\n\nexport function PdfViewer({\n media,\n className,\n ...pdfViewerProps\n}: PdfViewerMediaProps): React.ReactElement {\n const [src, setSrc] = useState<ArrayBuffer | undefined>(undefined);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n\n // This is required until we either support React 19+ or a data fetching hook\n useEffect(function fetchMediaSource() {\n let cancelled = false;\n setLoading(true);\n setError(undefined);\n setSrc(undefined);\n\n fetchMediaContents(media)\n .then((buffer) => {\n if (!cancelled) {\n setSrc(buffer);\n setLoading(false);\n }\n })\n .catch((err: unknown) => {\n if (!cancelled) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [media]);\n\n const rootClassName = classnames(styles.pdfViewer, className);\n\n if (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 (error != null) {\n return (\n <div className={rootClassName}>\n <div className={styles.errorContainer}>\n <ErrorIcon className={styles.errorIcon} />\n Failed to load PDF: {error.message}\n </div>\n </div>\n );\n }\n\n if (src == null) {\n return (\n <div className={rootClassName}>\n <div className={styles.loadingContainer}>No document</div>\n </div>\n );\n }\n\n return (\n <BasePdfViewer\n src={src}\n className={className}\n {...pdfViewerProps}\n />\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,110 +17,39 @@
|
|
|
17
17
|
import { Error as ErrorIcon, Spin } from "@blueprintjs/icons";
|
|
18
18
|
import classnames from "classnames";
|
|
19
19
|
import "pdfjs-dist/web/pdf_viewer.css";
|
|
20
|
-
import React
|
|
20
|
+
import React from "react";
|
|
21
21
|
import { createPortal } from "react-dom";
|
|
22
|
+
import { PdfViewerAnnotationLayer } from "./components/PdfViewerAnnotationLayer.js";
|
|
23
|
+
import { PdfViewerOutlineSidebar } from "./components/PdfViewerOutlineSidebar.js";
|
|
24
|
+
import { PdfViewerSearchBar } from "./components/PdfViewerSearchBar.js";
|
|
25
|
+
import { PdfViewerSidebar } from "./components/PdfViewerSidebar.js";
|
|
26
|
+
import { PdfViewerToolbar } from "./components/PdfViewerToolbar.js";
|
|
22
27
|
import { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from "./constants.js";
|
|
23
|
-
import {
|
|
24
|
-
import { usePdfDocument } from "./hooks/usePdfDocument.js";
|
|
25
|
-
import { usePdfViewer } from "./hooks/usePdfViewer.js";
|
|
26
|
-
import { usePdfViewerSearch } from "./hooks/usePdfViewerSearch.js";
|
|
27
|
-
import { usePdfViewerSync } from "./hooks/usePdfViewerSync.js";
|
|
28
|
+
import { usePdfViewerState } from "./hooks/usePdfViewerState.js";
|
|
28
29
|
import styles from "./PdfViewer.module.css";
|
|
29
|
-
import { PdfViewerAnnotationLayer } from "./PdfViewerAnnotationLayer.js";
|
|
30
|
-
import { PdfViewerSearchBar } from "./PdfViewerSearchBar.js";
|
|
31
|
-
import { PdfViewerSidebar } from "./PdfViewerSidebar.js";
|
|
32
|
-
import { PdfViewerToolbar } from "./PdfViewerToolbar.js";
|
|
33
30
|
export function BasePdfViewer({
|
|
34
31
|
src,
|
|
35
32
|
annotations = EMPTY_ANNOTATIONS,
|
|
36
33
|
onAnnotationClick,
|
|
34
|
+
onDownload,
|
|
37
35
|
initialPage = 1,
|
|
38
36
|
initialScale = 1.0,
|
|
39
37
|
initialSidebarOpen = false,
|
|
38
|
+
enableDownload = false,
|
|
39
|
+
sidebarMode: sidebarModeProp = "thumbnails",
|
|
40
|
+
outlineIcons,
|
|
40
41
|
className
|
|
41
42
|
}) {
|
|
42
|
-
const {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const [sidebarOpen, setSidebarOpen] = useState(initialSidebarOpen);
|
|
50
|
-
const [currentPage, setCurrentPage] = useState(initialPage);
|
|
51
|
-
const containerRef = useRef(null);
|
|
52
|
-
const viewerRef = useRef(null);
|
|
53
|
-
const {
|
|
54
|
-
pdfViewerRef,
|
|
55
|
-
eventBusRef,
|
|
56
|
-
findControllerRef
|
|
57
|
-
} = usePdfViewer(containerRef, viewerRef, document, initialScale);
|
|
58
|
-
const search = usePdfViewerSearch(eventBusRef, findControllerRef, document);
|
|
59
|
-
const handleScaleChange = useCallback(newScale => {
|
|
60
|
-
setScale(newScale);
|
|
61
|
-
}, []);
|
|
62
|
-
const handlePageChange = useCallback(page => {
|
|
63
|
-
setCurrentPage(page);
|
|
64
|
-
}, []);
|
|
65
|
-
const {
|
|
66
|
-
scrollToPage
|
|
67
|
-
} = usePdfViewerSync({
|
|
68
|
-
pdfViewerRef,
|
|
69
|
-
eventBusRef,
|
|
70
|
-
document,
|
|
71
|
-
scale,
|
|
72
|
-
onScaleChange: handleScaleChange,
|
|
73
|
-
onPageChange: handlePageChange
|
|
43
|
+
const viewer = usePdfViewerState({
|
|
44
|
+
src,
|
|
45
|
+
initialPage,
|
|
46
|
+
initialScale,
|
|
47
|
+
initialSidebarOpen,
|
|
48
|
+
sidebarMode: sidebarModeProp,
|
|
49
|
+
onDownload
|
|
74
50
|
});
|
|
75
|
-
const portalTargets = usePdfAnnotationPortals(pdfViewerRef, eventBusRef, document);
|
|
76
|
-
|
|
77
|
-
// Set initial page after viewer is ready
|
|
78
|
-
useEffect(function () {
|
|
79
|
-
if (pdfViewerRef.current != null && initialPage > 1) {
|
|
80
|
-
pdfViewerRef.current.currentPageNumber = initialPage;
|
|
81
|
-
}
|
|
82
|
-
}, [pdfViewerRef, initialPage]);
|
|
83
|
-
|
|
84
|
-
// Ctrl+F handler
|
|
85
|
-
useEffect(function () {
|
|
86
|
-
const handleKeyDown = e => {
|
|
87
|
-
if ((e.ctrlKey || e.metaKey) && e.key === "f") {
|
|
88
|
-
e.preventDefault();
|
|
89
|
-
search.openSearch();
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
window.addEventListener("keydown", handleKeyDown);
|
|
93
|
-
return () => {
|
|
94
|
-
window.removeEventListener("keydown", handleKeyDown);
|
|
95
|
-
};
|
|
96
|
-
}, [search.openSearch]);
|
|
97
|
-
const handleDownload = useCallback(() => {
|
|
98
|
-
if (document == null) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
void document.getData().then(data => {
|
|
102
|
-
const blob = new Blob([data.buffer], {
|
|
103
|
-
type: "application/pdf"
|
|
104
|
-
});
|
|
105
|
-
const url = URL.createObjectURL(blob);
|
|
106
|
-
// Extract filename from URL by taking the last path segment and stripping query params
|
|
107
|
-
const filename = typeof src === "string" ? src.split("/").pop()?.split("?")[0] || "document.pdf" : "document.pdf";
|
|
108
|
-
const a = globalThis.document.createElement("a");
|
|
109
|
-
a.href = url;
|
|
110
|
-
a.download = filename;
|
|
111
|
-
a.click();
|
|
112
|
-
URL.revokeObjectURL(url);
|
|
113
|
-
});
|
|
114
|
-
}, [document, src]);
|
|
115
|
-
const handleSidebarToggle = useCallback(() => {
|
|
116
|
-
setSidebarOpen(prev => !prev);
|
|
117
|
-
}, []);
|
|
118
|
-
const handleToolbarPageChange = useCallback(page => {
|
|
119
|
-
setCurrentPage(page);
|
|
120
|
-
scrollToPage(page);
|
|
121
|
-
}, [scrollToPage]);
|
|
122
51
|
const rootClassName = classnames(styles.pdfViewer, className);
|
|
123
|
-
if (loading) {
|
|
52
|
+
if (viewer.loading) {
|
|
124
53
|
return /*#__PURE__*/React.createElement("div", {
|
|
125
54
|
className: rootClassName
|
|
126
55
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -129,16 +58,16 @@ export function BasePdfViewer({
|
|
|
129
58
|
className: styles.spinnerIcon
|
|
130
59
|
}), "Loading\u2026"));
|
|
131
60
|
}
|
|
132
|
-
if (error != null) {
|
|
61
|
+
if (viewer.error != null) {
|
|
133
62
|
return /*#__PURE__*/React.createElement("div", {
|
|
134
63
|
className: rootClassName
|
|
135
64
|
}, /*#__PURE__*/React.createElement("div", {
|
|
136
65
|
className: styles.errorContainer
|
|
137
66
|
}, /*#__PURE__*/React.createElement(ErrorIcon, {
|
|
138
67
|
className: styles.errorIcon
|
|
139
|
-
}), "Failed to load PDF: ", error.message));
|
|
68
|
+
}), "Failed to load PDF: ", viewer.error.message));
|
|
140
69
|
}
|
|
141
|
-
if (document == null) {
|
|
70
|
+
if (viewer.document == null) {
|
|
142
71
|
return /*#__PURE__*/React.createElement("div", {
|
|
143
72
|
className: rootClassName
|
|
144
73
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -148,39 +77,51 @@ export function BasePdfViewer({
|
|
|
148
77
|
return /*#__PURE__*/React.createElement("div", {
|
|
149
78
|
className: rootClassName
|
|
150
79
|
}, /*#__PURE__*/React.createElement(PdfViewerToolbar, {
|
|
151
|
-
currentPage: currentPage,
|
|
152
|
-
numPages: numPages,
|
|
153
|
-
scale: scale,
|
|
154
|
-
sidebarOpen: sidebarOpen,
|
|
155
|
-
onPageChange:
|
|
156
|
-
onScaleChange: setScale,
|
|
157
|
-
onSearchOpen: search.openSearch,
|
|
158
|
-
onSidebarToggle:
|
|
159
|
-
onDownload:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
80
|
+
currentPage: viewer.currentPage,
|
|
81
|
+
numPages: viewer.numPages,
|
|
82
|
+
scale: viewer.scale,
|
|
83
|
+
sidebarOpen: viewer.sidebarOpen,
|
|
84
|
+
onPageChange: viewer.scrollToPage,
|
|
85
|
+
onScaleChange: viewer.setScale,
|
|
86
|
+
onSearchOpen: viewer.search.openSearch,
|
|
87
|
+
onSidebarToggle: viewer.toggleSidebar,
|
|
88
|
+
onDownload: viewer.download,
|
|
89
|
+
enableDownload: enableDownload,
|
|
90
|
+
onRotateLeft: viewer.rotateLeft,
|
|
91
|
+
onRotateRight: viewer.rotateRight
|
|
92
|
+
}), viewer.search.isSearchOpen && /*#__PURE__*/React.createElement(PdfViewerSearchBar, {
|
|
93
|
+
query: viewer.search.query,
|
|
94
|
+
totalMatches: viewer.search.totalMatches,
|
|
95
|
+
currentMatchIndex: viewer.search.currentMatchIndex,
|
|
96
|
+
onQueryChange: viewer.search.setQuery,
|
|
97
|
+
onNext: viewer.search.nextMatch,
|
|
98
|
+
onPrev: viewer.search.prevMatch,
|
|
99
|
+
onClose: viewer.search.closeSearch
|
|
168
100
|
}), /*#__PURE__*/React.createElement("div", {
|
|
169
101
|
className: styles.contentArea
|
|
170
|
-
}, sidebarOpen && /*#__PURE__*/React.createElement(PdfViewerSidebar, {
|
|
171
|
-
document: document,
|
|
172
|
-
numPages: numPages,
|
|
173
|
-
currentPage: currentPage,
|
|
174
|
-
onPageClick:
|
|
102
|
+
}, viewer.sidebarOpen && viewer.sidebarMode === "thumbnails" && /*#__PURE__*/React.createElement(PdfViewerSidebar, {
|
|
103
|
+
document: viewer.document,
|
|
104
|
+
numPages: viewer.numPages,
|
|
105
|
+
currentPage: viewer.currentPage,
|
|
106
|
+
onPageClick: viewer.scrollToPage,
|
|
107
|
+
sidebarMode: viewer.sidebarMode,
|
|
108
|
+
onSidebarModeChange: viewer.setSidebarMode
|
|
109
|
+
}), viewer.sidebarOpen && viewer.sidebarMode === "outline" && /*#__PURE__*/React.createElement(PdfViewerOutlineSidebar, {
|
|
110
|
+
outlineItems: viewer.outlineItems,
|
|
111
|
+
currentPage: viewer.currentPage,
|
|
112
|
+
onItemClick: viewer.scrollToPage,
|
|
113
|
+
sidebarMode: viewer.sidebarMode,
|
|
114
|
+
onSidebarModeChange: viewer.setSidebarMode,
|
|
115
|
+
outlineIcons: outlineIcons
|
|
175
116
|
}), /*#__PURE__*/React.createElement("div", {
|
|
176
117
|
className: styles.scrollContainerWrapper
|
|
177
118
|
}, /*#__PURE__*/React.createElement("div", {
|
|
178
|
-
ref: containerRef,
|
|
119
|
+
ref: viewer.containerRef,
|
|
179
120
|
className: styles.scrollContainer
|
|
180
121
|
}, /*#__PURE__*/React.createElement("div", {
|
|
181
|
-
ref: viewerRef,
|
|
122
|
+
ref: viewer.viewerRef,
|
|
182
123
|
className: "pdfViewer"
|
|
183
|
-
}), portalTargets.map(target => {
|
|
124
|
+
}), viewer.portalTargets.map(target => {
|
|
184
125
|
const pageAnnotations = annotations[target.pageNumber] ?? EMPTY_ANNOTATION_ARRAY;
|
|
185
126
|
if (pageAnnotations.length === 0) {
|
|
186
127
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfViewer.js","names":["Error","ErrorIcon","Spin","classnames","React","useCallback","useEffect","useRef","useState","createPortal","EMPTY_ANNOTATION_ARRAY","EMPTY_ANNOTATIONS","usePdfAnnotationPortals","usePdfDocument","usePdfViewer","usePdfViewerSearch","usePdfViewerSync","styles","PdfViewerAnnotationLayer","PdfViewerSearchBar","PdfViewerSidebar","PdfViewerToolbar","BasePdfViewer","src","annotations","onAnnotationClick","initialPage","initialScale","initialSidebarOpen","className","document","numPages","loading","error","scale","setScale","sidebarOpen","setSidebarOpen","currentPage","setCurrentPage","containerRef","viewerRef","pdfViewerRef","eventBusRef","findControllerRef","search","handleScaleChange","newScale","handlePageChange","page","scrollToPage","onScaleChange","onPageChange","portalTargets","current","currentPageNumber","handleKeyDown","e","ctrlKey","metaKey","key","preventDefault","openSearch","window","addEventListener","removeEventListener","handleDownload","getData","then","data","blob","Blob","buffer","type","url","URL","createObjectURL","filename","split","pop","a","globalThis","createElement","href","download","click","revokeObjectURL","handleSidebarToggle","prev","handleToolbarPageChange","rootClassName","pdfViewer","loadingContainer","spinnerIcon","errorContainer","errorIcon","message","onSearchOpen","onSidebarToggle","onDownload","isSearchOpen","query","totalMatches","currentMatchIndex","onQueryChange","setQuery","onNext","nextMatch","onPrev","prevMatch","onClose","closeSearch","contentArea","onPageClick","scrollContainerWrapper","ref","scrollContainer","map","target","pageAnnotations","pageNumber","length","pageHeight","container"],"sources":["PdfViewer.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, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from \"./constants.js\";\nimport { usePdfAnnotationPortals } from \"./hooks/usePdfAnnotationPortals.js\";\nimport { usePdfDocument } from \"./hooks/usePdfDocument.js\";\nimport { usePdfViewer } from \"./hooks/usePdfViewer.js\";\nimport { usePdfViewerSearch } from \"./hooks/usePdfViewerSearch.js\";\nimport { usePdfViewerSync } from \"./hooks/usePdfViewerSync.js\";\nimport styles from \"./PdfViewer.module.css\";\nimport { PdfViewerAnnotationLayer } from \"./PdfViewerAnnotationLayer.js\";\nimport { PdfViewerSearchBar } from \"./PdfViewerSearchBar.js\";\nimport { PdfViewerSidebar } from \"./PdfViewerSidebar.js\";\nimport { PdfViewerToolbar } from \"./PdfViewerToolbar.js\";\nimport type { PdfViewerProps } from \"./types.js\";\n\nexport function BasePdfViewer({\n src,\n annotations = EMPTY_ANNOTATIONS,\n onAnnotationClick,\n initialPage = 1,\n initialScale = 1.0,\n initialSidebarOpen = false,\n className,\n}: PdfViewerProps): React.ReactElement {\n const { document, numPages, loading, error } = usePdfDocument(src);\n const [scale, setScale] = useState(initialScale);\n const [sidebarOpen, setSidebarOpen] = useState(initialSidebarOpen);\n const [currentPage, setCurrentPage] = useState(initialPage);\n const containerRef = useRef<HTMLDivElement>(null);\n const viewerRef = useRef<HTMLDivElement>(null);\n\n const { pdfViewerRef, eventBusRef, findControllerRef } = usePdfViewer(\n containerRef,\n viewerRef,\n document,\n initialScale,\n );\n\n const search = usePdfViewerSearch(eventBusRef, findControllerRef, document);\n\n const handleScaleChange = useCallback((newScale: number) => {\n setScale(newScale);\n }, []);\n\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page);\n }, []);\n\n const { scrollToPage } = usePdfViewerSync({\n pdfViewerRef,\n eventBusRef,\n document,\n scale,\n onScaleChange: handleScaleChange,\n onPageChange: handlePageChange,\n });\n\n const portalTargets = usePdfAnnotationPortals(\n pdfViewerRef,\n eventBusRef,\n document,\n );\n\n // Set initial page after viewer is ready\n useEffect(function setInitialPage() {\n if (pdfViewerRef.current != null && initialPage > 1) {\n pdfViewerRef.current.currentPageNumber = initialPage;\n }\n }, [pdfViewerRef, initialPage]);\n\n // Ctrl+F handler\n useEffect(function registerSearchShortcut() {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && e.key === \"f\") {\n e.preventDefault();\n search.openSearch();\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [search.openSearch]);\n\n const handleDownload = useCallback(() => {\n if (document == null) {\n return;\n }\n void document.getData().then((data) => {\n const blob = new Blob([data.buffer as ArrayBuffer], {\n type: \"application/pdf\",\n });\n const url = URL.createObjectURL(blob);\n // Extract filename from URL by taking the last path segment and stripping query params\n const filename = typeof src === \"string\"\n ? src.split(\"/\").pop()?.split(\"?\")[0] || \"document.pdf\"\n : \"document.pdf\";\n const a = globalThis.document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url);\n });\n }, [document, src]);\n\n const handleSidebarToggle = useCallback(() => {\n setSidebarOpen((prev) => !prev);\n }, []);\n\n const handleToolbarPageChange = useCallback(\n (page: number) => {\n setCurrentPage(page);\n scrollToPage(page);\n },\n [scrollToPage],\n );\n\n const rootClassName = classnames(styles.pdfViewer, className);\n\n if (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 (error != null) {\n return (\n <div className={rootClassName}>\n <div className={styles.errorContainer}>\n <ErrorIcon className={styles.errorIcon} />\n Failed to load PDF: {error.message}\n </div>\n </div>\n );\n }\n\n if (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 <PdfViewerToolbar\n currentPage={currentPage}\n numPages={numPages}\n scale={scale}\n sidebarOpen={sidebarOpen}\n onPageChange={handleToolbarPageChange}\n onScaleChange={setScale}\n onSearchOpen={search.openSearch}\n onSidebarToggle={handleSidebarToggle}\n onDownload={handleDownload}\n />\n {search.isSearchOpen && (\n <PdfViewerSearchBar\n query={search.query}\n totalMatches={search.totalMatches}\n currentMatchIndex={search.currentMatchIndex}\n onQueryChange={search.setQuery}\n onNext={search.nextMatch}\n onPrev={search.prevMatch}\n onClose={search.closeSearch}\n />\n )}\n <div className={styles.contentArea}>\n {sidebarOpen && (\n <PdfViewerSidebar\n document={document}\n numPages={numPages}\n currentPage={currentPage}\n onPageClick={handleToolbarPageChange}\n />\n )}\n <div className={styles.scrollContainerWrapper}>\n <div ref={containerRef} className={styles.scrollContainer}>\n <div ref={viewerRef} className=\"pdfViewer\" />\n {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 </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PdfViewer.js","names":["Error","ErrorIcon","Spin","classnames","React","createPortal","PdfViewerAnnotationLayer","PdfViewerOutlineSidebar","PdfViewerSearchBar","PdfViewerSidebar","PdfViewerToolbar","EMPTY_ANNOTATION_ARRAY","EMPTY_ANNOTATIONS","usePdfViewerState","styles","BasePdfViewer","src","annotations","onAnnotationClick","onDownload","initialPage","initialScale","initialSidebarOpen","enableDownload","sidebarMode","sidebarModeProp","outlineIcons","className","viewer","rootClassName","pdfViewer","loading","createElement","loadingContainer","spinnerIcon","error","errorContainer","errorIcon","message","document","currentPage","numPages","scale","sidebarOpen","onPageChange","scrollToPage","onScaleChange","setScale","onSearchOpen","search","openSearch","onSidebarToggle","toggleSidebar","download","onRotateLeft","rotateLeft","onRotateRight","rotateRight","isSearchOpen","query","totalMatches","currentMatchIndex","onQueryChange","setQuery","onNext","nextMatch","onPrev","prevMatch","onClose","closeSearch","contentArea","onPageClick","onSidebarModeChange","setSidebarMode","outlineItems","onItemClick","scrollContainerWrapper","ref","containerRef","scrollContainer","viewerRef","portalTargets","map","target","pageAnnotations","pageNumber","length","key","pageHeight","container"],"sources":["PdfViewer.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 from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { PdfViewerAnnotationLayer } from \"./components/PdfViewerAnnotationLayer.js\";\nimport { PdfViewerOutlineSidebar } from \"./components/PdfViewerOutlineSidebar.js\";\nimport { PdfViewerSearchBar } from \"./components/PdfViewerSearchBar.js\";\nimport { PdfViewerSidebar } from \"./components/PdfViewerSidebar.js\";\nimport { PdfViewerToolbar } from \"./components/PdfViewerToolbar.js\";\nimport { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from \"./constants.js\";\nimport { usePdfViewerState } from \"./hooks/usePdfViewerState.js\";\nimport styles from \"./PdfViewer.module.css\";\nimport type { PdfViewerProps } from \"./types.js\";\n\nexport function BasePdfViewer({\n src,\n annotations = EMPTY_ANNOTATIONS,\n onAnnotationClick,\n onDownload,\n initialPage = 1,\n initialScale = 1.0,\n initialSidebarOpen = false,\n enableDownload = false,\n sidebarMode: sidebarModeProp = \"thumbnails\",\n outlineIcons,\n className,\n}: PdfViewerProps): React.ReactElement {\n const viewer = usePdfViewerState({\n src,\n initialPage,\n initialScale,\n initialSidebarOpen,\n sidebarMode: sidebarModeProp,\n onDownload,\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 <PdfViewerToolbar\n currentPage={viewer.currentPage}\n numPages={viewer.numPages}\n scale={viewer.scale}\n sidebarOpen={viewer.sidebarOpen}\n onPageChange={viewer.scrollToPage}\n onScaleChange={viewer.setScale}\n onSearchOpen={viewer.search.openSearch}\n onSidebarToggle={viewer.toggleSidebar}\n onDownload={viewer.download}\n enableDownload={enableDownload}\n onRotateLeft={viewer.rotateLeft}\n onRotateRight={viewer.rotateRight}\n />\n {viewer.search.isSearchOpen && (\n <PdfViewerSearchBar\n query={viewer.search.query}\n totalMatches={viewer.search.totalMatches}\n currentMatchIndex={viewer.search.currentMatchIndex}\n onQueryChange={viewer.search.setQuery}\n onNext={viewer.search.nextMatch}\n onPrev={viewer.search.prevMatch}\n onClose={viewer.search.closeSearch}\n />\n )}\n <div className={styles.contentArea}>\n {viewer.sidebarOpen && viewer.sidebarMode === \"thumbnails\" && (\n <PdfViewerSidebar\n document={viewer.document}\n numPages={viewer.numPages}\n currentPage={viewer.currentPage}\n onPageClick={viewer.scrollToPage}\n sidebarMode={viewer.sidebarMode}\n onSidebarModeChange={viewer.setSidebarMode}\n />\n )}\n {viewer.sidebarOpen && viewer.sidebarMode === \"outline\" && (\n <PdfViewerOutlineSidebar\n outlineItems={viewer.outlineItems}\n currentPage={viewer.currentPage}\n onItemClick={viewer.scrollToPage}\n sidebarMode={viewer.sidebarMode}\n onSidebarModeChange={viewer.setSidebarMode}\n outlineIcons={outlineIcons}\n />\n )}\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 </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerAnnotationLayer.js","names":["classnames","React","useCallback","useMemo","styles","AnnotationItem","annotation","pageHeight","scale","onClick","handleClick","handleKeyDown","e","key","preventDefault","style","left","rect","x","top","y","height","width","color","className","type","createElement","onKeyDown","role","tabIndex","title","label","id","PdfViewerAnnotationLayer","annotations","onAnnotationClick","annotationLayer","map"],"sources":["PdfViewerAnnotationLayer.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 { PdfAnnotation } from \"../types.js\";\nimport styles from \"./PdfViewerAnnotationLayer.module.css\";\n\nexport interface PdfViewerAnnotationLayerProps {\n annotations: PdfAnnotation[];\n pageHeight: number;\n scale: number;\n onAnnotationClick?: (annotation: PdfAnnotation) => void;\n}\n\ninterface AnnotationItemProps {\n annotation: PdfAnnotation;\n pageHeight: number;\n scale: number;\n onClick?: (annotation: PdfAnnotation) => void;\n}\n\nfunction AnnotationItem({\n annotation,\n pageHeight,\n scale,\n onClick,\n}: AnnotationItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onClick?.(annotation);\n }, [onClick, annotation]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n onClick?.(annotation);\n }\n },\n [onClick, annotation],\n );\n\n // Convert PDF coordinates (bottom-left origin) to CSS (top-left origin)\n const style = useMemo(\n () => ({\n left: annotation.rect.x * scale,\n top: (pageHeight - annotation.rect.y - annotation.rect.height) * scale,\n width: annotation.rect.width * scale,\n height: annotation.rect.height * scale,\n ...(annotation.color != null\n ? {\n \"--osdk-pdf-annotation-color\": annotation.color,\n } as React.CSSProperties\n : {}),\n }),\n [annotation, pageHeight, scale],\n );\n\n const className = classnames(\n styles.annotation,\n styles[annotation.type],\n );\n\n return (\n <div\n className={className}\n style={style}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n title={annotation.label}\n data-annotation-id={annotation.id}\n />\n );\n}\n\nexport function PdfViewerAnnotationLayer({\n annotations,\n pageHeight,\n scale,\n onAnnotationClick,\n}: PdfViewerAnnotationLayerProps): React.ReactElement {\n return (\n <div className={styles.annotationLayer}>\n {annotations.map((annotation) => (\n <AnnotationItem\n key={annotation.id}\n annotation={annotation}\n pageHeight={pageHeight}\n scale={scale}\n onClick={onAnnotationClick}\n />\n ))}\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAEnD,OAAOC,MAAM,MAAM,uCAAuC;AAgB1D,SAASC,cAAcA,CAAC;EACtBC,UAAU;EACVC,UAAU;EACVC,KAAK;EACLC;AACmB,CAAC,EAAsB;EAC1C,MAAMC,WAAW,GAAGR,WAAW,CAAC,MAAM;IACpCO,OAAO,GAAGH,UAAU,CAAC;EACvB,CAAC,EAAE,CAACG,OAAO,EAAEH,UAAU,CAAC,CAAC;EAEzB,MAAMK,aAAa,GAAGT,WAAW,CAC9BU,CAAsB,IAAK;IAC1B,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;MACrBD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClBL,OAAO,GAAGH,UAAU,CAAC;IACvB;EACF,CAAC,EACD,CAACG,OAAO,EAAEH,UAAU,CACtB,CAAC;;EAED;EACA,MAAMS,KAAK,GAAGZ,OAAO,CACnB,OAAO;IACLa,IAAI,EAAEV,UAAU,CAACW,IAAI,CAACC,CAAC,GAAGV,KAAK;IAC/BW,GAAG,EAAE,CAACZ,UAAU,GAAGD,UAAU,CAACW,IAAI,CAACG,CAAC,GAAGd,UAAU,CAACW,IAAI,CAACI,MAAM,IAAIb,KAAK;IACtEc,KAAK,EAAEhB,UAAU,CAACW,IAAI,CAACK,KAAK,GAAGd,KAAK;IACpCa,MAAM,EAAEf,UAAU,CAACW,IAAI,CAACI,MAAM,GAAGb,KAAK;IACtC,IAAIF,UAAU,CAACiB,KAAK,IAAI,IAAI,GACxB;MACA,6BAA6B,EAAEjB,UAAU,CAACiB;IAC5C,CAAC,GACC,CAAC,CAAC;EACR,CAAC,CAAC,EACF,CAACjB,UAAU,EAAEC,UAAU,EAAEC,KAAK,CAChC,CAAC;EAED,MAAMgB,SAAS,GAAGxB,UAAU,CAC1BI,MAAM,CAACE,UAAU,EACjBF,MAAM,CAACE,UAAU,CAACmB,IAAI,CACxB,CAAC;EAED,oBACExB,KAAA,CAAAyB,aAAA;IACEF,SAAS,EAAEA,SAAU;IACrBT,KAAK,EAAEA,KAAM;IACbN,OAAO,EAAEC,WAAY;IACrBiB,SAAS,EAAEhB,aAAc;IACzBiB,IAAI,EAAC,QAAQ;IACbC,QAAQ,EAAE,CAAE;IACZC,KAAK,EAAExB,UAAU,CAACyB,KAAM;IACxB,sBAAoBzB,UAAU,CAAC0B;EAAG,CACnC,CAAC;AAEN;AAEA,OAAO,SAASC,wBAAwBA,CAAC;EACvCC,WAAW;EACX3B,UAAU;EACVC,KAAK;EACL2B;AAC6B,CAAC,EAAsB;EACpD,oBACElC,KAAA,CAAAyB,aAAA;IAAKF,SAAS,EAAEpB,MAAM,CAACgC;EAAgB,GACpCF,WAAW,CAACG,GAAG,CAAE/B,UAAU,iBAC1BL,KAAA,CAAAyB,aAAA,CAACrB,cAAc;IACbQ,GAAG,EAAEP,UAAU,CAAC0B,EAAG;IACnB1B,UAAU,EAAEA,UAAW;IACvBC,UAAU,EAAEA,UAAW;IACvBC,KAAK,EAAEA,KAAM;IACbC,OAAO,EAAE0B;EAAkB,CAC5B,CACF,CACE,CAAC;AAEV","ignoreList":[]}
|