@osdk/react-components 0.2.0-beta.21 → 0.2.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +14 -97
- package/CHANGELOG.md +35 -0
- package/README.md +23 -7
- package/build/browser/action-form/ActionFormApi.js.map +1 -1
- package/build/browser/action-form/BaseForm.js +18 -5
- package/build/browser/action-form/BaseForm.js.map +1 -1
- package/build/browser/action-form/BaseForm.module.css +38 -0
- package/build/browser/action-form/BaseForm.module.css.js +8 -0
- package/build/browser/action-form/FormField.js +42 -0
- package/build/browser/action-form/FormField.js.map +1 -0
- package/build/browser/action-form/FormField.module.css +41 -0
- package/build/browser/action-form/FormField.module.css.js +10 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/FormHeader.js +26 -0
- package/build/browser/action-form/FormHeader.js.map +1 -0
- package/build/browser/action-form/FormHeader.module.css +26 -0
- package/build/browser/action-form/FormHeader.module.css.js +6 -0
- 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 +17 -6
- 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/action-form/fields/TextInputField.js +2 -0
- package/build/browser/action-form/fields/TextInputField.js.map +1 -1
- package/build/browser/action-form/fields/TextInputField.module.css +56 -0
- package/build/browser/action-form/fields/TextInputField.module.css.js +6 -0
- package/build/browser/base-components/checkbox/Checkbox.js +2 -2
- package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/browser/base-components/combobox/Combobox.js +3 -8
- package/build/browser/base-components/combobox/Combobox.js.map +1 -1
- package/build/browser/base-components/combobox/Combobox.module.css +0 -3
- package/build/browser/base-components/draggable-list/DraggableList.js +2 -4
- package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/browser/base-components/search-bar/SearchBar.module.css +2 -2
- package/build/browser/base-components/select/Select.js +1 -3
- package/build/browser/base-components/select/Select.js.map +1 -1
- package/build/browser/base-components/select/Select.module.css +0 -2
- package/build/browser/base-components/switch/Switch.module.css +0 -1
- package/build/browser/filter-list/FilterInput.js +14 -5
- package/build/browser/filter-list/FilterInput.js.map +1 -1
- package/build/browser/filter-list/FilterList.js +22 -10
- 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/AddFilterPopover.js +4 -3
- package/build/browser/filter-list/base/AddFilterPopover.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/ExcludeDropdown.js +61 -0
- package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -0
- package/build/browser/filter-list/base/ExcludeDropdown.module.css +94 -0
- package/build/browser/filter-list/base/ExcludeDropdown.module.css.js +12 -0
- package/build/browser/filter-list/base/FilterIcons.js +0 -39
- package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +55 -0
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -0
- 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/FilterListItem.js +72 -23
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +96 -20
- package/build/browser/filter-list/base/FilterListItem.module.css.js +7 -2
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +2 -2
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js +2 -6
- package/build/browser/filter-list/base/inputs/ContainsTextInput.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/ListogramInput.js +2 -2
- package/build/browser/filter-list/base/inputs/ListogramInput.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/RangeInput.js +2 -2
- package/build/browser/filter-list/base/inputs/RangeInput.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/SingleSelectInput.js +1 -3
- package/build/browser/filter-list/base/inputs/SingleSelectInput.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/{esm/filter-list/base/inputs/useStaleData.js → browser/filter-list/base/inputs/useStableData.js} +5 -5
- package/build/browser/filter-list/base/inputs/useStableData.js.map +1 -0
- 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/hooks/usePropertyAggregation.js +3 -2
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +15 -5
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js +10 -6
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +41 -18
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +15 -5
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +10 -6
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +36 -10
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/TextTagsFilterInput.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/filter-list/utils/filterValues.js +29 -1
- package/build/browser/filter-list/utils/filterValues.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 -21
- 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/object-table/MultiColumnSortDialog.js +1 -3
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -1
- package/build/browser/object-table/TableCell.module.css +1 -1
- package/build/browser/object-table/TableHeader.module.css +2 -2
- package/build/browser/object-table/TableHeaderWithPopover.js +2 -4
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/browser/object-table/TableHeaderWithPopover.module.css +1 -0
- 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/{esm/pdf-viewer → browser/pdf-viewer/components}/PdfViewerAnnotationLayer.module.css +0 -1
- 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 +23 -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 +817 -136
- 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 +3227 -1848
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +650 -172
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +685 -17
- 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/ActionFormApi.js.map +1 -1
- package/build/esm/action-form/BaseForm.js +18 -5
- package/build/esm/action-form/BaseForm.js.map +1 -1
- package/build/esm/action-form/BaseForm.module.css +38 -0
- package/build/esm/action-form/FormField.js +42 -0
- package/build/esm/action-form/FormField.js.map +1 -0
- package/build/esm/action-form/FormField.module.css +41 -0
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/FormHeader.js +26 -0
- package/build/esm/action-form/FormHeader.js.map +1 -0
- package/build/esm/action-form/FormHeader.module.css +26 -0
- 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 +17 -6
- 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/action-form/fields/TextInputField.js +2 -0
- package/build/esm/action-form/fields/TextInputField.js.map +1 -1
- package/build/esm/action-form/fields/TextInputField.module.css +56 -0
- package/build/esm/base-components/checkbox/Checkbox.js +2 -2
- package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/esm/base-components/combobox/Combobox.js +3 -8
- package/build/esm/base-components/combobox/Combobox.js.map +1 -1
- package/build/esm/base-components/combobox/Combobox.module.css +0 -3
- package/build/esm/base-components/draggable-list/DraggableList.js +2 -4
- package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/esm/base-components/search-bar/SearchBar.module.css +2 -2
- package/build/esm/base-components/select/Select.js +1 -3
- package/build/esm/base-components/select/Select.js.map +1 -1
- package/build/esm/base-components/select/Select.module.css +0 -2
- package/build/esm/base-components/switch/Switch.module.css +0 -1
- package/build/esm/filter-list/FilterInput.js +14 -5
- package/build/esm/filter-list/FilterInput.js.map +1 -1
- package/build/esm/filter-list/FilterList.js +22 -10
- 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/AddFilterPopover.js +4 -3
- package/build/esm/filter-list/base/AddFilterPopover.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/ExcludeDropdown.js +61 -0
- package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -0
- package/build/esm/filter-list/base/ExcludeDropdown.module.css +94 -0
- package/build/esm/filter-list/base/FilterIcons.js +0 -39
- package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +55 -0
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -0
- 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/FilterListItem.js +72 -23
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +96 -20
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +2 -2
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js +2 -6
- package/build/esm/filter-list/base/inputs/ContainsTextInput.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/ListogramInput.js +2 -2
- package/build/esm/filter-list/base/inputs/ListogramInput.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/RangeInput.js +2 -2
- package/build/esm/filter-list/base/inputs/RangeInput.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/SingleSelectInput.js +1 -3
- package/build/esm/filter-list/base/inputs/SingleSelectInput.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/{browser/filter-list/base/inputs/useStaleData.js → esm/filter-list/base/inputs/useStableData.js} +5 -5
- package/build/esm/filter-list/base/inputs/useStableData.js.map +1 -0
- 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/hooks/usePropertyAggregation.js +3 -2
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +15 -5
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js +10 -6
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +41 -18
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +15 -5
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +10 -6
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +36 -10
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/TextTagsFilterInput.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/filter-list/utils/filterValues.js +29 -1
- package/build/esm/filter-list/utils/filterValues.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 -21
- package/build/esm/object-table/LoadingStateTable.js +2 -1
- package/build/esm/object-table/LoadingStateTable.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.js +1 -3
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -1
- package/build/esm/object-table/TableCell.module.css +1 -1
- package/build/esm/object-table/TableHeader.module.css +2 -2
- package/build/esm/object-table/TableHeaderWithPopover.js +2 -4
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/esm/object-table/TableHeaderWithPopover.module.css +1 -0
- 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/{browser/pdf-viewer → esm/pdf-viewer/components}/PdfViewerAnnotationLayer.module.css +0 -1
- 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 +23 -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/ActionFormApi.d.ts +1 -0
- package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
- package/build/types/action-form/BaseForm.d.ts.map +1 -1
- package/build/types/action-form/FormField.d.ts +11 -0
- package/build/types/action-form/FormField.d.ts.map +1 -0
- package/build/types/action-form/FormFieldApi.d.ts +22 -8
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/FormHeader.d.ts +6 -0
- package/build/types/action-form/FormHeader.d.ts.map +1 -0
- 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/action-form/fields/TextInputField.d.ts.map +1 -1
- package/build/types/filter-list/FilterInput.d.ts +3 -1
- package/build/types/filter-list/FilterInput.d.ts.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +14 -10
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts +2 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +4 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/ExcludeDropdown.d.ts +8 -0
- package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterIcons.d.ts +0 -2
- package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +12 -0
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -0
- 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/FilterListItem.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/base/inputs/useStableData.d.ts +1 -0
- package/build/types/filter-list/base/inputs/useStableData.d.ts.map +1 -0
- 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/filter-list/hooks/usePropertyAggregation.d.ts +2 -2
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +5 -2
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +3 -2
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +2 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +5 -2
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +3 -2
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +3 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterValues.d.ts +2 -0
- package/build/types/filter-list/utils/filterValues.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 +21 -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/filter-list/base/inputs/useStaleData.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/filter-list/base/inputs/useStaleData.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/filter-list/base/inputs/useStaleData.d.ts +0 -1
- package/build/types/filter-list/base/inputs/useStaleData.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/{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/{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":"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.js";
|
|
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":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// CSS Module proxy for PdfViewerAnnotationLayer.module.css
|
|
2
|
+
const styles = {
|
|
3
|
+
"annotationLayer": "PdfViewerAnnotationLayer-module__annotationLayer___mljRfBSQ",
|
|
4
|
+
"annotation": "PdfViewerAnnotationLayer-module__annotation___1dAkVbQ8",
|
|
5
|
+
"highlight": "PdfViewerAnnotationLayer-module__highlight___uPiyo2kN",
|
|
6
|
+
"underline": "PdfViewerAnnotationLayer-module__underline___-qCk9Jld",
|
|
7
|
+
"comment": "PdfViewerAnnotationLayer-module__comment___Yv4tVnUp",
|
|
8
|
+
"pin": "PdfViewerAnnotationLayer-module__pin___9xjpPtr-"
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default styles;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Error as ErrorIcon, Spin } from "@blueprintjs/icons";
|
|
18
|
+
import classnames from "classnames";
|
|
19
|
+
import "pdfjs-dist/web/pdf_viewer.css";
|
|
20
|
+
import React, { useEffect, useRef } from "react";
|
|
21
|
+
import { createPortal } from "react-dom";
|
|
22
|
+
import { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from "../constants.js";
|
|
23
|
+
import { usePdfViewerCore } from "../hooks/usePdfViewerCore.js";
|
|
24
|
+
import styles from "../PdfViewer.module.css.js";
|
|
25
|
+
import { PdfViewerAnnotationLayer } from "./PdfViewerAnnotationLayer.js";
|
|
26
|
+
export function PdfViewerContent({
|
|
27
|
+
src,
|
|
28
|
+
annotations = EMPTY_ANNOTATIONS,
|
|
29
|
+
onAnnotationClick,
|
|
30
|
+
initialPage = 1,
|
|
31
|
+
initialScale = 1.0,
|
|
32
|
+
onPageChange: onPageChangeProp,
|
|
33
|
+
onScaleChange: onScaleChangeProp,
|
|
34
|
+
className
|
|
35
|
+
}) {
|
|
36
|
+
const viewer = usePdfViewerCore({
|
|
37
|
+
src,
|
|
38
|
+
initialPage,
|
|
39
|
+
initialScale
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Use refs for callbacks to avoid firing on initial mount
|
|
43
|
+
const onPageChangeRef = useRef(onPageChangeProp);
|
|
44
|
+
onPageChangeRef.current = onPageChangeProp;
|
|
45
|
+
const onScaleChangeRef = useRef(onScaleChangeProp);
|
|
46
|
+
onScaleChangeRef.current = onScaleChangeProp;
|
|
47
|
+
const isInitialMountRef = useRef(true);
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
if (isInitialMountRef.current) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
onPageChangeRef.current?.(viewer.currentPage);
|
|
53
|
+
}, [viewer.currentPage]);
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
if (isInitialMountRef.current) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
onScaleChangeRef.current?.(viewer.scale);
|
|
59
|
+
}, [viewer.scale]);
|
|
60
|
+
useEffect(function () {
|
|
61
|
+
isInitialMountRef.current = false;
|
|
62
|
+
}, []);
|
|
63
|
+
const rootClassName = classnames(styles.pdfViewer, className);
|
|
64
|
+
if (viewer.loading) {
|
|
65
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
66
|
+
className: rootClassName
|
|
67
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
68
|
+
className: styles.loadingContainer
|
|
69
|
+
}, /*#__PURE__*/React.createElement(Spin, {
|
|
70
|
+
className: styles.spinnerIcon
|
|
71
|
+
}), "Loading\u2026"));
|
|
72
|
+
}
|
|
73
|
+
if (viewer.error != null) {
|
|
74
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
75
|
+
className: rootClassName
|
|
76
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
77
|
+
className: styles.errorContainer
|
|
78
|
+
}, /*#__PURE__*/React.createElement(ErrorIcon, {
|
|
79
|
+
className: styles.errorIcon
|
|
80
|
+
}), "Failed to load PDF: ", viewer.error.message));
|
|
81
|
+
}
|
|
82
|
+
if (viewer.document == null) {
|
|
83
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
className: rootClassName
|
|
85
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
86
|
+
className: styles.loadingContainer
|
|
87
|
+
}, "No document"));
|
|
88
|
+
}
|
|
89
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
90
|
+
className: rootClassName
|
|
91
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
92
|
+
className: styles.scrollContainerWrapper
|
|
93
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
94
|
+
ref: viewer.containerRef,
|
|
95
|
+
className: styles.scrollContainer
|
|
96
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
97
|
+
ref: viewer.viewerRef,
|
|
98
|
+
className: "pdfViewer"
|
|
99
|
+
}), viewer.portalTargets.map(target => {
|
|
100
|
+
const pageAnnotations = annotations[target.pageNumber] ?? EMPTY_ANNOTATION_ARRAY;
|
|
101
|
+
if (pageAnnotations.length === 0) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(PdfViewerAnnotationLayer, {
|
|
105
|
+
key: target.pageNumber,
|
|
106
|
+
annotations: pageAnnotations,
|
|
107
|
+
pageHeight: target.pageHeight,
|
|
108
|
+
scale: target.scale,
|
|
109
|
+
onAnnotationClick: onAnnotationClick
|
|
110
|
+
}), target.container);
|
|
111
|
+
}))));
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=PdfViewerContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerContent.js","names":["Error","ErrorIcon","Spin","classnames","React","useEffect","useRef","createPortal","EMPTY_ANNOTATION_ARRAY","EMPTY_ANNOTATIONS","usePdfViewerCore","styles","PdfViewerAnnotationLayer","PdfViewerContent","src","annotations","onAnnotationClick","initialPage","initialScale","onPageChange","onPageChangeProp","onScaleChange","onScaleChangeProp","className","viewer","onPageChangeRef","current","onScaleChangeRef","isInitialMountRef","currentPage","scale","rootClassName","pdfViewer","loading","createElement","loadingContainer","spinnerIcon","error","errorContainer","errorIcon","message","document","scrollContainerWrapper","ref","containerRef","scrollContainer","viewerRef","portalTargets","map","target","pageAnnotations","pageNumber","length","key","pageHeight","container"],"sources":["PdfViewerContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Error as ErrorIcon, Spin } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport \"pdfjs-dist/web/pdf_viewer.css\";\nimport React, { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { EMPTY_ANNOTATION_ARRAY, EMPTY_ANNOTATIONS } from \"../constants.js\";\nimport { usePdfViewerCore } from \"../hooks/usePdfViewerCore.js\";\nimport styles from \"../PdfViewer.module.css\";\nimport type { PdfAnnotation } from \"../types.js\";\nimport { PdfViewerAnnotationLayer } from \"./PdfViewerAnnotationLayer.js\";\n\nexport interface PdfViewerContentProps {\n /** PDF source — URL string or ArrayBuffer */\n src: string | ArrayBuffer;\n /** Annotations to overlay on the PDF, keyed by page number (1-indexed) */\n annotations?: Record<number, PdfAnnotation[]>;\n /** Callback fired when an annotation is clicked */\n onAnnotationClick?: (annotation: PdfAnnotation) => void;\n /** Initial page number (1-indexed, default 1) */\n initialPage?: number;\n /** Initial zoom scale (default 1.0) */\n initialScale?: number;\n /** Callback fired when the current page changes during scrolling */\n onPageChange?: (page: number) => void;\n /** Callback fired when the zoom scale changes */\n onScaleChange?: (scale: number) => void;\n /** Additional CSS class name for the root element */\n className?: string;\n}\n\nexport function PdfViewerContent({\n src,\n annotations = EMPTY_ANNOTATIONS,\n onAnnotationClick,\n initialPage = 1,\n initialScale = 1.0,\n onPageChange: onPageChangeProp,\n onScaleChange: onScaleChangeProp,\n className,\n}: PdfViewerContentProps): React.ReactElement {\n const viewer = usePdfViewerCore({ src, initialPage, initialScale });\n\n // Use refs for callbacks to avoid firing on initial mount\n const onPageChangeRef = useRef(onPageChangeProp);\n onPageChangeRef.current = onPageChangeProp;\n const onScaleChangeRef = useRef(onScaleChangeProp);\n onScaleChangeRef.current = onScaleChangeProp;\n const isInitialMountRef = useRef(true);\n\n useEffect(function notifyPageChange() {\n if (isInitialMountRef.current) {\n return;\n }\n onPageChangeRef.current?.(viewer.currentPage);\n }, [viewer.currentPage]);\n\n useEffect(function notifyScaleChange() {\n if (isInitialMountRef.current) {\n return;\n }\n onScaleChangeRef.current?.(viewer.scale);\n }, [viewer.scale]);\n\n useEffect(function clearInitialMount() {\n isInitialMountRef.current = false;\n }, []);\n\n const rootClassName = classnames(styles.pdfViewer, className);\n\n if (viewer.loading) {\n return (\n <div className={rootClassName}>\n <div className={styles.loadingContainer}>\n <Spin className={styles.spinnerIcon} />\n Loading…\n </div>\n </div>\n );\n }\n\n if (viewer.error != null) {\n return (\n <div className={rootClassName}>\n <div className={styles.errorContainer}>\n <ErrorIcon className={styles.errorIcon} />\n Failed to load PDF: {viewer.error.message}\n </div>\n </div>\n );\n }\n\n if (viewer.document == null) {\n return (\n <div className={rootClassName}>\n <div className={styles.loadingContainer}>No document</div>\n </div>\n );\n }\n\n return (\n <div className={rootClassName}>\n <div className={styles.scrollContainerWrapper}>\n <div ref={viewer.containerRef} className={styles.scrollContainer}>\n <div ref={viewer.viewerRef} className=\"pdfViewer\" />\n {viewer.portalTargets.map((target) => {\n const pageAnnotations = annotations[target.pageNumber]\n ?? EMPTY_ANNOTATION_ARRAY;\n if (pageAnnotations.length === 0) {\n return null;\n }\n return createPortal(\n <PdfViewerAnnotationLayer\n key={target.pageNumber}\n annotations={pageAnnotations}\n pageHeight={target.pageHeight}\n scale={target.scale}\n onAnnotationClick={onAnnotationClick}\n />,\n target.container,\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import classnames from "classnames";
|
|
18
|
+
import React, { useCallback, useMemo } from "react";
|
|
19
|
+
import styles from "./PdfViewerOutlineSidebar.module.css.js";
|
|
20
|
+
import { PdfViewerSidebarHeader } from "./PdfViewerSidebarHeader.js";
|
|
21
|
+
const INDENT_PER_DEPTH = 16;
|
|
22
|
+
export function PdfViewerOutlineSidebar({
|
|
23
|
+
outlineItems,
|
|
24
|
+
currentPage,
|
|
25
|
+
onItemClick,
|
|
26
|
+
sidebarMode,
|
|
27
|
+
onSidebarModeChange,
|
|
28
|
+
outlineIcons
|
|
29
|
+
}) {
|
|
30
|
+
const activeIndex = useMemo(() => {
|
|
31
|
+
return computeActiveIndex(outlineItems, currentPage);
|
|
32
|
+
}, [outlineItems, currentPage]);
|
|
33
|
+
if (outlineItems.length === 0) {
|
|
34
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
35
|
+
className: styles.sidebar
|
|
36
|
+
}, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
|
|
37
|
+
sidebarMode: sidebarMode,
|
|
38
|
+
onSidebarModeChange: onSidebarModeChange
|
|
39
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
40
|
+
className: styles.emptyState
|
|
41
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
42
|
+
className: styles.emptyStateText
|
|
43
|
+
}, "No outline available")));
|
|
44
|
+
}
|
|
45
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
className: styles.sidebar
|
|
47
|
+
}, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
|
|
48
|
+
sidebarMode: sidebarMode,
|
|
49
|
+
onSidebarModeChange: onSidebarModeChange
|
|
50
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
className: styles.scrollContainer
|
|
52
|
+
}, outlineItems.map((item, index) => /*#__PURE__*/React.createElement(PdfViewerOutlineItem, {
|
|
53
|
+
key: index,
|
|
54
|
+
item: item,
|
|
55
|
+
isActive: index === activeIndex,
|
|
56
|
+
onClick: onItemClick,
|
|
57
|
+
iconComponent: outlineIcons?.[item.depth]
|
|
58
|
+
}))));
|
|
59
|
+
}
|
|
60
|
+
function PdfViewerOutlineItem({
|
|
61
|
+
item,
|
|
62
|
+
isActive,
|
|
63
|
+
onClick,
|
|
64
|
+
iconComponent: IconComponent
|
|
65
|
+
}) {
|
|
66
|
+
const handleClick = useCallback(() => {
|
|
67
|
+
onClick(item.pageNumber);
|
|
68
|
+
}, [onClick, item.pageNumber]);
|
|
69
|
+
const handleKeyDown = useCallback(e => {
|
|
70
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
onClick(item.pageNumber);
|
|
73
|
+
}
|
|
74
|
+
}, [onClick, item.pageNumber]);
|
|
75
|
+
const itemClassName = classnames(styles.outlineItem, isActive && styles.outlineItemActive, item.bold && styles.outlineItemBold, item.italic && styles.outlineItemItalic);
|
|
76
|
+
const paddingLeft = INDENT_PER_DEPTH * item.depth + 12;
|
|
77
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
78
|
+
className: itemClassName,
|
|
79
|
+
onClick: handleClick,
|
|
80
|
+
onKeyDown: handleKeyDown,
|
|
81
|
+
role: "button",
|
|
82
|
+
tabIndex: 0,
|
|
83
|
+
"aria-label": item.title,
|
|
84
|
+
"aria-current": isActive ? "location" : undefined,
|
|
85
|
+
style: {
|
|
86
|
+
paddingLeft
|
|
87
|
+
}
|
|
88
|
+
}, IconComponent != null && /*#__PURE__*/React.createElement("span", {
|
|
89
|
+
className: styles.outlineItemIcon
|
|
90
|
+
}, /*#__PURE__*/React.createElement(IconComponent, null)), /*#__PURE__*/React.createElement("span", {
|
|
91
|
+
className: styles.outlineItemTitle
|
|
92
|
+
}, item.title));
|
|
93
|
+
}
|
|
94
|
+
function computeActiveIndex(items, currentPage) {
|
|
95
|
+
const idx = items.findIndex(item => item.pageNumber > currentPage);
|
|
96
|
+
return idx === -1 ? items.length - 1 : idx - 1;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=PdfViewerOutlineSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerOutlineSidebar.js","names":["classnames","React","useCallback","useMemo","styles","PdfViewerSidebarHeader","INDENT_PER_DEPTH","PdfViewerOutlineSidebar","outlineItems","currentPage","onItemClick","sidebarMode","onSidebarModeChange","outlineIcons","activeIndex","computeActiveIndex","length","createElement","className","sidebar","emptyState","emptyStateText","scrollContainer","map","item","index","PdfViewerOutlineItem","key","isActive","onClick","iconComponent","depth","IconComponent","handleClick","pageNumber","handleKeyDown","e","preventDefault","itemClassName","outlineItem","outlineItemActive","bold","outlineItemBold","italic","outlineItemItalic","paddingLeft","onKeyDown","role","tabIndex","title","undefined","style","outlineItemIcon","outlineItemTitle","items","idx","findIndex"],"sources":["PdfViewerOutlineSidebar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { useCallback, useMemo } from \"react\";\nimport type { OutlineItem, SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerOutlineSidebar.module.css\";\nimport { PdfViewerSidebarHeader } from \"./PdfViewerSidebarHeader.js\";\n\nconst INDENT_PER_DEPTH = 16;\n\nexport interface PdfViewerOutlineSidebarProps {\n outlineItems: OutlineItem[];\n currentPage: number;\n onItemClick: (pageNumber: number) => void;\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n outlineIcons?: Partial<Record<number, React.ComponentType>>;\n}\n\nexport function PdfViewerOutlineSidebar({\n outlineItems,\n currentPage,\n onItemClick,\n sidebarMode,\n onSidebarModeChange,\n outlineIcons,\n}: PdfViewerOutlineSidebarProps): React.ReactElement {\n const activeIndex = useMemo(() => {\n return computeActiveIndex(outlineItems, currentPage);\n }, [outlineItems, currentPage]);\n\n if (outlineItems.length === 0) {\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div className={styles.emptyState}>\n <div className={styles.emptyStateText}>\n No outline available\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div className={styles.scrollContainer}>\n {outlineItems.map((item, index) => (\n <PdfViewerOutlineItem\n key={index}\n item={item}\n isActive={index === activeIndex}\n onClick={onItemClick}\n iconComponent={outlineIcons?.[item.depth]}\n />\n ))}\n </div>\n </div>\n );\n}\n\ninterface PdfViewerOutlineItemProps {\n item: OutlineItem;\n isActive: boolean;\n onClick: (pageNumber: number) => void;\n iconComponent: React.ComponentType | undefined;\n}\n\nfunction PdfViewerOutlineItem({\n item,\n isActive,\n onClick,\n iconComponent: IconComponent,\n}: PdfViewerOutlineItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onClick(item.pageNumber);\n }, [onClick, item.pageNumber]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick(item.pageNumber);\n }\n },\n [onClick, item.pageNumber],\n );\n\n const itemClassName = classnames(\n styles.outlineItem,\n isActive && styles.outlineItemActive,\n item.bold && styles.outlineItemBold,\n item.italic && styles.outlineItemItalic,\n );\n\n const paddingLeft = INDENT_PER_DEPTH * item.depth + 12;\n\n return (\n <div\n className={itemClassName}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={item.title}\n aria-current={isActive ? \"location\" : undefined}\n style={{ paddingLeft }}\n >\n {IconComponent != null && (\n <span className={styles.outlineItemIcon}>\n <IconComponent />\n </span>\n )}\n <span className={styles.outlineItemTitle}>{item.title}</span>\n </div>\n );\n}\n\nfunction computeActiveIndex(\n items: OutlineItem[],\n currentPage: number,\n): number {\n const idx = items.findIndex(item => item.pageNumber > currentPage);\n return idx === -1 ? items.length - 1 : idx - 1;\n}\n"],"mappings":"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","ignoreList":[]}
|