@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
.sidebar {
|
|
2
|
+
width: var(--osdk-pdf-viewer-sidebar-width);
|
|
3
|
+
flex-shrink: 0;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
background-color: var(--osdk-pdf-viewer-sidebar-bg);
|
|
7
|
+
border-right: 1px solid var(--osdk-pdf-viewer-sidebar-border);
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
.scrollContainer {
|
|
13
|
+
flex: 1;
|
|
14
|
+
overflow-y: auto;
|
|
15
|
+
padding: var(--osdk-pdf-viewer-sidebar-thumbnail-gap) 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.outlineItem {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: var(--osdk-pdf-viewer-outline-item-gap, 6px);
|
|
22
|
+
padding: var(--osdk-pdf-viewer-outline-item-padding-y, 4px)
|
|
23
|
+
var(--osdk-pdf-viewer-outline-item-padding-x, 12px);
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
font-family: var(--osdk-typography-family-default);
|
|
26
|
+
font-size: var(--osdk-typography-size-body-small);
|
|
27
|
+
color: var(--osdk-typography-color-default);
|
|
28
|
+
text-decoration: none;
|
|
29
|
+
border: none;
|
|
30
|
+
background: none;
|
|
31
|
+
text-align: left;
|
|
32
|
+
width: 100%;
|
|
33
|
+
line-height: 1.4;
|
|
34
|
+
border-radius: var(--osdk-pdf-viewer-outline-item-radius, 4px);
|
|
35
|
+
transition: background-color 0.15s ease;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.outlineItem:hover {
|
|
39
|
+
background-color: var(--osdk-pdf-viewer-outline-item-hover-bg, rgba(0, 0, 0, 0.06));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.outlineItem:focus-visible {
|
|
43
|
+
outline: var(--osdk-focus-outline);
|
|
44
|
+
outline-offset: var(--osdk-focus-visible-outline-offset);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.outlineItemActive {
|
|
48
|
+
background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
|
|
49
|
+
color: var(--osdk-pdf-viewer-outline-item-active-color, var(--osdk-intent-primary));
|
|
50
|
+
font-weight: var(--osdk-typography-weight-semibold);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.outlineItemBold {
|
|
54
|
+
font-weight: var(--osdk-typography-weight-bold);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.outlineItemItalic {
|
|
58
|
+
font-style: italic;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.outlineItemIcon {
|
|
62
|
+
flex-shrink: 0;
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.outlineItemTitle {
|
|
68
|
+
overflow: hidden;
|
|
69
|
+
text-overflow: ellipsis;
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.emptyState {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
align-items: center;
|
|
77
|
+
justify-content: center;
|
|
78
|
+
gap: var(--osdk-pdf-viewer-outline-empty-gap, 12px);
|
|
79
|
+
padding: var(--osdk-pdf-viewer-outline-empty-padding, 24px);
|
|
80
|
+
flex: 1;
|
|
81
|
+
text-align: center;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.emptyStateText {
|
|
85
|
+
font-family: var(--osdk-typography-family-default);
|
|
86
|
+
font-size: var(--osdk-typography-size-body-small);
|
|
87
|
+
color: var(--osdk-typography-color-muted);
|
|
88
|
+
}
|
|
89
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerSearchBar.js","names":["ChevronDown","ChevronUp","Cross","React","useCallback","styles","PdfViewerSearchBar","query","totalMatches","currentMatchIndex","onQueryChange","onNext","onPrev","onClose","handleInputChange","e","target","value","handleKeyDown","key","preventDefault","shiftKey","matchDisplay","length","createElement","className","searchBar","autoFocus","searchInput","type","onChange","onKeyDown","placeholder","matchCount","navButton","onClick","disabled","size","closeButton"],"sources":["PdfViewerSearchBar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChevronDown, ChevronUp, Cross } from \"@blueprintjs/icons\";\nimport React, { useCallback } from \"react\";\nimport styles from \"./PdfViewerSearchBar.module.css\";\n\nexport interface PdfViewerSearchBarProps {\n query: string;\n totalMatches: number;\n currentMatchIndex: number;\n onQueryChange: (query: string) => void;\n onNext: () => void;\n onPrev: () => void;\n onClose: () => void;\n}\n\nexport function PdfViewerSearchBar({\n query,\n totalMatches,\n currentMatchIndex,\n onQueryChange,\n onNext,\n onPrev,\n onClose,\n}: PdfViewerSearchBarProps): React.ReactElement {\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onQueryChange(e.target.value);\n },\n [onQueryChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (e.shiftKey) {\n onPrev();\n } else {\n onNext();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n },\n [onNext, onPrev, onClose],\n );\n\n const matchDisplay = totalMatches > 0\n ? `${currentMatchIndex + 1} of ${totalMatches}`\n : query.length > 0\n ? \"No results\"\n : \"\";\n\n return (\n <div className={styles.searchBar}>\n <input\n autoFocus\n className={styles.searchInput}\n type=\"text\"\n value={query}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"Find in document...\"\n aria-label=\"Search in PDF\"\n />\n {matchDisplay.length > 0 && (\n <span className={styles.matchCount}>{matchDisplay}</span>\n )}\n <button\n className={styles.navButton}\n onClick={onPrev}\n disabled={totalMatches === 0}\n aria-label=\"Previous match\"\n type=\"button\"\n >\n <ChevronUp size={16} />\n </button>\n <button\n className={styles.navButton}\n onClick={onNext}\n disabled={totalMatches === 0}\n aria-label=\"Next match\"\n type=\"button\"\n >\n <ChevronDown size={16} />\n </button>\n <button\n className={styles.closeButton}\n onClick={onClose}\n aria-label=\"Close search\"\n type=\"button\"\n >\n <Cross size={16} />\n </button>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,14 +16,17 @@
|
|
|
16
16
|
|
|
17
17
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
18
18
|
import React, { useEffect, useRef } from "react";
|
|
19
|
-
import { DEFAULT_PAGE_HEIGHT, THUMBNAIL_GAP, THUMBNAIL_SCALE } from "
|
|
19
|
+
import { DEFAULT_PAGE_HEIGHT, THUMBNAIL_GAP, THUMBNAIL_SCALE } from "../constants.js";
|
|
20
20
|
import styles from "./PdfViewerSidebar.module.css";
|
|
21
|
+
import { PdfViewerSidebarHeader } from "./PdfViewerSidebarHeader.js";
|
|
21
22
|
import { PdfViewerThumbnail } from "./PdfViewerThumbnail.js";
|
|
22
23
|
export function PdfViewerSidebar({
|
|
23
24
|
document,
|
|
24
25
|
numPages,
|
|
25
26
|
currentPage,
|
|
26
|
-
onPageClick
|
|
27
|
+
onPageClick,
|
|
28
|
+
sidebarMode,
|
|
29
|
+
onSidebarModeChange
|
|
27
30
|
}) {
|
|
28
31
|
const scrollContainerRef = useRef(null);
|
|
29
32
|
const estimatedItemHeight = Math.floor(DEFAULT_PAGE_HEIGHT * THUMBNAIL_SCALE) + THUMBNAIL_GAP + 20;
|
|
@@ -42,9 +45,10 @@ export function PdfViewerSidebar({
|
|
|
42
45
|
}, [currentPage, virtualizer]);
|
|
43
46
|
return /*#__PURE__*/React.createElement("div", {
|
|
44
47
|
className: styles.sidebar
|
|
45
|
-
}, /*#__PURE__*/React.createElement(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
}, /*#__PURE__*/React.createElement(PdfViewerSidebarHeader, {
|
|
49
|
+
sidebarMode: sidebarMode,
|
|
50
|
+
onSidebarModeChange: onSidebarModeChange
|
|
51
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
48
52
|
ref: scrollContainerRef,
|
|
49
53
|
className: styles.scrollContainer
|
|
50
54
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerSidebar.js","names":["useVirtualizer","React","useEffect","useRef","DEFAULT_PAGE_HEIGHT","THUMBNAIL_GAP","THUMBNAIL_SCALE","styles","PdfViewerSidebarHeader","PdfViewerThumbnail","PdfViewerSidebar","document","numPages","currentPage","onPageClick","sidebarMode","onSidebarModeChange","scrollContainerRef","estimatedItemHeight","Math","floor","virtualizer","count","getScrollElement","current","estimateSize","overscan","scrollToIndex","align","createElement","className","sidebar","ref","scrollContainer","thumbnailsContainer","style","height","getTotalSize","getVirtualItems","map","virtualItem","pageNumber","index","key","thumbnailWrapper","top","start","size","isActive","onClick"],"sources":["PdfViewerSidebar.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { PDFDocumentProxy } from \"pdfjs-dist\";\nimport React, { useEffect, useRef } from \"react\";\nimport {\n DEFAULT_PAGE_HEIGHT,\n THUMBNAIL_GAP,\n THUMBNAIL_SCALE,\n} from \"../constants.js\";\nimport type { SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerSidebar.module.css\";\nimport { PdfViewerSidebarHeader } from \"./PdfViewerSidebarHeader.js\";\nimport { PdfViewerThumbnail } from \"./PdfViewerThumbnail.js\";\n\nexport interface PdfViewerSidebarProps {\n document: PDFDocumentProxy;\n numPages: number;\n currentPage: number;\n onPageClick: (page: number) => void;\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}\n\nexport function PdfViewerSidebar({\n document,\n numPages,\n currentPage,\n onPageClick,\n sidebarMode,\n onSidebarModeChange,\n}: PdfViewerSidebarProps): React.ReactElement {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const estimatedItemHeight = Math.floor(DEFAULT_PAGE_HEIGHT * THUMBNAIL_SCALE)\n + THUMBNAIL_GAP + 20;\n\n const virtualizer = useVirtualizer({\n count: numPages,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: () => estimatedItemHeight,\n overscan: 2,\n });\n\n // Auto-scroll to keep the active thumbnail visible\n useEffect(function syncActiveThumbnail() {\n virtualizer.scrollToIndex(currentPage - 1, { align: \"auto\" });\n }, [currentPage, virtualizer]);\n\n return (\n <div className={styles.sidebar}>\n <PdfViewerSidebarHeader\n sidebarMode={sidebarMode}\n onSidebarModeChange={onSidebarModeChange}\n />\n <div ref={scrollContainerRef} className={styles.scrollContainer}>\n <div\n className={styles.thumbnailsContainer}\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const pageNumber = virtualItem.index + 1;\n return (\n <div\n key={virtualItem.key}\n className={styles.thumbnailWrapper}\n style={{\n top: virtualItem.start,\n height: virtualItem.size,\n }}\n >\n <div>\n <PdfViewerThumbnail\n document={document}\n pageNumber={pageNumber}\n isActive={pageNumber === currentPage}\n onClick={() => onPageClick(pageNumber)}\n />\n <div className={styles.pageNumber}>{pageNumber}</div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,yBAAyB;AAExD,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SACEC,mBAAmB,EACnBC,aAAa,EACbC,eAAe,QACV,iBAAiB;AAExB,OAAOC,MAAM,MAAM,+BAA+B;AAClD,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,kBAAkB,QAAQ,yBAAyB;AAW5D,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC,QAAQ;EACRC,WAAW;EACXC,WAAW;EACXC,WAAW;EACXC;AACqB,CAAC,EAAsB;EAC5C,MAAMC,kBAAkB,GAAGd,MAAM,CAAiB,IAAI,CAAC;EACvD,MAAMe,mBAAmB,GAAGC,IAAI,CAACC,KAAK,CAAChB,mBAAmB,GAAGE,eAAe,CAAC,GACzED,aAAa,GAAG,EAAE;EAEtB,MAAMgB,WAAW,GAAGrB,cAAc,CAAC;IACjCsB,KAAK,EAAEV,QAAQ;IACfW,gBAAgB,EAAEA,CAAA,KAAMN,kBAAkB,CAACO,OAAO;IAClDC,YAAY,EAAEA,CAAA,KAAMP,mBAAmB;IACvCQ,QAAQ,EAAE;EACZ,CAAC,CAAC;;EAEF;EACAxB,SAAS,CAAC,YAA+B;IACvCmB,WAAW,CAACM,aAAa,CAACd,WAAW,GAAG,CAAC,EAAE;MAAEe,KAAK,EAAE;IAAO,CAAC,CAAC;EAC/D,CAAC,EAAE,CAACf,WAAW,EAAEQ,WAAW,CAAC,CAAC;EAE9B,oBACEpB,KAAA,CAAA4B,aAAA;IAAKC,SAAS,EAAEvB,MAAM,CAACwB;EAAQ,gBAC7B9B,KAAA,CAAA4B,aAAA,CAACrB,sBAAsB;IACrBO,WAAW,EAAEA,WAAY;IACzBC,mBAAmB,EAAEA;EAAoB,CAC1C,CAAC,eACFf,KAAA,CAAA4B,aAAA;IAAKG,GAAG,EAAEf,kBAAmB;IAACa,SAAS,EAAEvB,MAAM,CAAC0B;EAAgB,gBAC9DhC,KAAA,CAAA4B,aAAA;IACEC,SAAS,EAAEvB,MAAM,CAAC2B,mBAAoB;IACtCC,KAAK,EAAE;MAAEC,MAAM,EAAEf,WAAW,CAACgB,YAAY,CAAC;IAAE;EAAE,GAE7ChB,WAAW,CAACiB,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,WAAW,IAAK;IAClD,MAAMC,UAAU,GAAGD,WAAW,CAACE,KAAK,GAAG,CAAC;IACxC,oBACEzC,KAAA,CAAA4B,aAAA;MACEc,GAAG,EAAEH,WAAW,CAACG,GAAI;MACrBb,SAAS,EAAEvB,MAAM,CAACqC,gBAAiB;MACnCT,KAAK,EAAE;QACLU,GAAG,EAAEL,WAAW,CAACM,KAAK;QACtBV,MAAM,EAAEI,WAAW,CAACO;MACtB;IAAE,gBAEF9C,KAAA,CAAA4B,aAAA,2BACE5B,KAAA,CAAA4B,aAAA,CAACpB,kBAAkB;MACjBE,QAAQ,EAAEA,QAAS;MACnB8B,UAAU,EAAEA,UAAW;MACvBO,QAAQ,EAAEP,UAAU,KAAK5B,WAAY;MACrCoC,OAAO,EAAEA,CAAA,KAAMnC,WAAW,CAAC2B,UAAU;IAAE,CACxC,CAAC,eACFxC,KAAA,CAAA4B,aAAA;MAAKC,SAAS,EAAEvB,MAAM,CAACkC;IAAW,GAAEA,UAAgB,CACjD,CACF,CAAC;EAEV,CAAC,CACE,CACF,CACF,CAAC;AAEV","ignoreList":[]}
|
|
@@ -8,15 +8,6 @@
|
|
|
8
8
|
overflow: hidden;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
.sidebarHeader {
|
|
12
|
-
padding: var(--osdk-pdf-viewer-sidebar-thumbnail-gap);
|
|
13
|
-
font-family: var(--osdk-typography-family-default);
|
|
14
|
-
font-size: var(--osdk-typography-size-body-small);
|
|
15
|
-
font-weight: var(--osdk-typography-weight-semibold);
|
|
16
|
-
color: var(--osdk-typography-color-muted);
|
|
17
|
-
border-bottom: 1px solid var(--osdk-pdf-viewer-sidebar-border);
|
|
18
|
-
flex-shrink: 0;
|
|
19
|
-
}
|
|
20
11
|
|
|
21
12
|
.scrollContainer {
|
|
22
13
|
flex: 1;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Toggle } from "@base-ui/react/toggle";
|
|
18
|
+
import { ToggleGroup } from "@base-ui/react/toggle-group";
|
|
19
|
+
import { GridView, Properties } from "@blueprintjs/icons";
|
|
20
|
+
import React, { useCallback } from "react";
|
|
21
|
+
import styles from "./PdfViewerSidebarHeader.module.css";
|
|
22
|
+
const SIDEBAR_MODE_VALUE = Object.freeze(["thumbnails"]);
|
|
23
|
+
const OUTLINE_MODE_VALUE = Object.freeze(["outline"]);
|
|
24
|
+
export function PdfViewerSidebarHeader({
|
|
25
|
+
sidebarMode,
|
|
26
|
+
onSidebarModeChange
|
|
27
|
+
}) {
|
|
28
|
+
const value = sidebarMode === "thumbnails" ? SIDEBAR_MODE_VALUE : OUTLINE_MODE_VALUE;
|
|
29
|
+
const handleValueChange = useCallback(newValue => {
|
|
30
|
+
if (newValue.length > 0) {
|
|
31
|
+
onSidebarModeChange(newValue[0]);
|
|
32
|
+
}
|
|
33
|
+
}, [onSidebarModeChange]);
|
|
34
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
35
|
+
className: styles.sidebarHeader
|
|
36
|
+
}, /*#__PURE__*/React.createElement(ToggleGroup, {
|
|
37
|
+
value: value,
|
|
38
|
+
onValueChange: handleValueChange,
|
|
39
|
+
className: styles.toggleGroup
|
|
40
|
+
}, /*#__PURE__*/React.createElement(Toggle, {
|
|
41
|
+
value: "thumbnails",
|
|
42
|
+
className: styles.modeButton,
|
|
43
|
+
"aria-label": "Page thumbnails"
|
|
44
|
+
}, /*#__PURE__*/React.createElement(GridView, {
|
|
45
|
+
size: 16
|
|
46
|
+
})), /*#__PURE__*/React.createElement(Toggle, {
|
|
47
|
+
value: "outline",
|
|
48
|
+
className: styles.modeButton,
|
|
49
|
+
"aria-label": "Document outline"
|
|
50
|
+
}, /*#__PURE__*/React.createElement(Properties, {
|
|
51
|
+
size: 16
|
|
52
|
+
}))));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=PdfViewerSidebarHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerSidebarHeader.js","names":["Toggle","ToggleGroup","GridView","Properties","React","useCallback","styles","SIDEBAR_MODE_VALUE","Object","freeze","OUTLINE_MODE_VALUE","PdfViewerSidebarHeader","sidebarMode","onSidebarModeChange","value","handleValueChange","newValue","length","createElement","className","sidebarHeader","onValueChange","toggleGroup","modeButton","size"],"sources":["PdfViewerSidebarHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Toggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { GridView, Properties } from \"@blueprintjs/icons\";\nimport React, { useCallback } from \"react\";\nimport type { SidebarMode } from \"../types.js\";\nimport styles from \"./PdfViewerSidebarHeader.module.css\";\n\nexport interface PdfViewerSidebarHeaderProps {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}\n\nconst SIDEBAR_MODE_VALUE = Object.freeze([\"thumbnails\"]) as readonly string[];\nconst OUTLINE_MODE_VALUE = Object.freeze([\"outline\"]) as readonly string[];\n\nexport function PdfViewerSidebarHeader({\n sidebarMode,\n onSidebarModeChange,\n}: PdfViewerSidebarHeaderProps): React.ReactElement {\n const value = sidebarMode === \"thumbnails\"\n ? SIDEBAR_MODE_VALUE\n : OUTLINE_MODE_VALUE;\n\n const handleValueChange = useCallback(\n (newValue: string[]) => {\n if (newValue.length > 0) {\n onSidebarModeChange(newValue[0] as SidebarMode);\n }\n },\n [onSidebarModeChange],\n );\n\n return (\n <div className={styles.sidebarHeader}>\n <ToggleGroup\n value={value}\n onValueChange={handleValueChange}\n className={styles.toggleGroup}\n >\n <Toggle\n value=\"thumbnails\"\n className={styles.modeButton}\n aria-label=\"Page thumbnails\"\n >\n <GridView size={16} />\n </Toggle>\n\n <Toggle\n value=\"outline\"\n className={styles.modeButton}\n aria-label=\"Document outline\"\n >\n <Properties size={16} />\n </Toggle>\n </ToggleGroup>\n </div>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,QAAQ,EAAEC,UAAU,QAAQ,oBAAoB;AACzD,OAAOC,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,OAAOC,MAAM,MAAM,qCAAqC;AAOxD,MAAMC,kBAAkB,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAsB;AAC7E,MAAMC,kBAAkB,GAAGF,MAAM,CAACC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAsB;AAE1E,OAAO,SAASE,sBAAsBA,CAAC;EACrCC,WAAW;EACXC;AAC2B,CAAC,EAAsB;EAClD,MAAMC,KAAK,GAAGF,WAAW,KAAK,YAAY,GACtCL,kBAAkB,GAClBG,kBAAkB;EAEtB,MAAMK,iBAAiB,GAAGV,WAAW,CAClCW,QAAkB,IAAK;IACtB,IAAIA,QAAQ,CAACC,MAAM,GAAG,CAAC,EAAE;MACvBJ,mBAAmB,CAACG,QAAQ,CAAC,CAAC,CAAgB,CAAC;IACjD;EACF,CAAC,EACD,CAACH,mBAAmB,CACtB,CAAC;EAED,oBACET,KAAA,CAAAc,aAAA;IAAKC,SAAS,EAAEb,MAAM,CAACc;EAAc,gBACnChB,KAAA,CAAAc,aAAA,CAACjB,WAAW;IACVa,KAAK,EAAEA,KAAM;IACbO,aAAa,EAAEN,iBAAkB;IACjCI,SAAS,EAAEb,MAAM,CAACgB;EAAY,gBAE9BlB,KAAA,CAAAc,aAAA,CAAClB,MAAM;IACLc,KAAK,EAAC,YAAY;IAClBK,SAAS,EAAEb,MAAM,CAACiB,UAAW;IAC7B,cAAW;EAAiB,gBAE5BnB,KAAA,CAAAc,aAAA,CAAChB,QAAQ;IAACsB,IAAI,EAAE;EAAG,CAAE,CACf,CAAC,eAETpB,KAAA,CAAAc,aAAA,CAAClB,MAAM;IACLc,KAAK,EAAC,SAAS;IACfK,SAAS,EAAEb,MAAM,CAACiB,UAAW;IAC7B,cAAW;EAAkB,gBAE7BnB,KAAA,CAAAc,aAAA,CAACf,UAAU;IAACqB,IAAI,EAAE;EAAG,CAAE,CACjB,CACG,CACV,CAAC;AAEV","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
.sidebarHeader {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: flex-start;
|
|
21
|
+
padding: var(--osdk-surface-spacing);
|
|
22
|
+
border-bottom: var(--osdk-pdf-viewer-sidebar-border);
|
|
23
|
+
flex-shrink: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.toggleGroup {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
gap: var(--osdk-spacing-2xs, 2px);
|
|
30
|
+
padding: var(--osdk-spacing-2xs, 2px);
|
|
31
|
+
border: 1px solid var(--osdk-surface-border-color, rgba(0, 0, 0, 0.15));
|
|
32
|
+
border-radius: var(--osdk-surface-border-radius);
|
|
33
|
+
background-color: var(--osdk-surface-background-color, transparent);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.modeButton {
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
width: 28px;
|
|
41
|
+
height: 28px;
|
|
42
|
+
border: none;
|
|
43
|
+
background: none;
|
|
44
|
+
color: var(--osdk-typography-color-muted);
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
border-radius: var(--osdk-surface-border-radius);
|
|
47
|
+
padding: 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.modeButton:hover {
|
|
51
|
+
background-color: var(--osdk-surface-background-color-default-hover);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.modeButton:active {
|
|
55
|
+
background-color: var(--osdk-surface-background-color-default-active);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.modeButton:focus-visible {
|
|
59
|
+
outline: var(--osdk-focus-outline);
|
|
60
|
+
outline-offset: var(--osdk-focus-visible-outline-offset);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.modeButton[data-pressed] {
|
|
64
|
+
background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
|
|
65
|
+
color: var(--osdk-pdf-viewer-outline-item-active-color, var(--osdk-intent-primary));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.modeButton[data-pressed]:hover {
|
|
69
|
+
background-color: var(--osdk-pdf-viewer-outline-item-active-bg, rgba(45, 114, 210, 0.1));
|
|
70
|
+
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import classnames from "classnames";
|
|
18
18
|
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
19
|
-
import { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from "
|
|
19
|
+
import { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from "../constants.js";
|
|
20
20
|
import styles from "./PdfViewerThumbnail.module.css";
|
|
21
21
|
export function PdfViewerThumbnail({
|
|
22
22
|
document,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerThumbnail.js","names":["classnames","React","useCallback","useEffect","useRef","useState","DEVICE_PIXEL_RATIO","THUMBNAIL_SCALE","styles","PdfViewerThumbnail","document","pageNumber","isActive","onClick","canvasRef","renderTaskRef","dimensions","setDimensions","undefined","cancelled","getPage","then","page","current","viewport","getViewport","scale","canvas","context","getContext","width","Math","floor","height","style","cancel","setTransform","renderTask","render","canvasContext","promise","catch","err","Error","message","includes","handleKeyDown","e","key","preventDefault","containerClassName","thumbnailContainer","active","createElement","className","onKeyDown","role","tabIndex","ref"],"sources":["PdfViewerThumbnail.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport type { PDFDocumentProxy, PDFPageProxy } from \"pdfjs-dist\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { DEVICE_PIXEL_RATIO, THUMBNAIL_SCALE } from \"../constants.js\";\nimport styles from \"./PdfViewerThumbnail.module.css\";\n\ninterface PdfViewerThumbnailProps {\n document: PDFDocumentProxy;\n pageNumber: number;\n isActive: boolean;\n onClick: () => void;\n}\n\nexport function PdfViewerThumbnail({\n document,\n pageNumber,\n isActive,\n onClick,\n}: PdfViewerThumbnailProps): React.ReactElement {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const renderTaskRef = useRef<ReturnType<PDFPageProxy[\"render\"]> | null>(null);\n const [dimensions, setDimensions] = useState<\n { width: number; height: number } | undefined\n >(undefined);\n\n useEffect(() => {\n let cancelled = false;\n\n void document.getPage(pageNumber).then((page) => {\n if (cancelled || canvasRef.current == null) {\n return;\n }\n\n const viewport = page.getViewport({ scale: THUMBNAIL_SCALE });\n const canvas = canvasRef.current;\n const context = canvas.getContext(\"2d\");\n if (context == null) {\n return;\n }\n\n canvas.width = Math.floor(viewport.width * DEVICE_PIXEL_RATIO);\n canvas.height = Math.floor(viewport.height * DEVICE_PIXEL_RATIO);\n canvas.style.width = `${Math.floor(viewport.width)}px`;\n canvas.style.height = `${Math.floor(viewport.height)}px`;\n\n setDimensions({\n width: Math.floor(viewport.width),\n height: Math.floor(viewport.height),\n });\n\n if (renderTaskRef.current != null) {\n renderTaskRef.current.cancel();\n }\n\n context.setTransform(\n DEVICE_PIXEL_RATIO,\n 0,\n 0,\n DEVICE_PIXEL_RATIO,\n 0,\n 0,\n );\n\n const renderTask = page.render({\n canvasContext: context,\n viewport,\n });\n renderTaskRef.current = renderTask;\n\n void renderTask.promise.catch((err: unknown) => {\n if (err instanceof Error && err.message.includes(\"cancelled\")) {\n return;\n }\n throw err;\n });\n });\n\n return () => {\n cancelled = true;\n if (renderTaskRef.current != null) {\n renderTaskRef.current.cancel();\n renderTaskRef.current = null;\n }\n };\n }, [document, pageNumber]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n },\n [onClick],\n );\n\n const containerClassName = classnames(\n styles.thumbnailContainer,\n isActive && styles.active,\n );\n\n return (\n <div\n className={containerClassName}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={`Page ${pageNumber}`}\n aria-current={isActive ? \"page\" : undefined}\n style={dimensions != null\n ? { width: dimensions.width, height: dimensions.height }\n : undefined}\n >\n <canvas ref={canvasRef} className={styles.canvas} />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { Button } from "@base-ui/react/button";
|
|
17
18
|
import { Input } from "@base-ui/react/input";
|
|
18
|
-
import { ChevronLeft, ChevronRight, Download, Menu, Minus, Plus, Search } from "@blueprintjs/icons";
|
|
19
|
+
import { ChevronLeft, ChevronRight, Download, Menu, Minus, Plus, RotatePage, Search } from "@blueprintjs/icons";
|
|
19
20
|
import React, { useCallback, useEffect, useState } from "react";
|
|
20
|
-
import { MAX_SCALE, MIN_SCALE, SCALE_STEP } from "
|
|
21
|
+
import { MAX_SCALE, MIN_SCALE, SCALE_STEP } from "../constants.js";
|
|
21
22
|
import styles from "./PdfViewerToolbar.module.css";
|
|
22
23
|
export function PdfViewerToolbar({
|
|
23
24
|
currentPage,
|
|
@@ -28,7 +29,10 @@ export function PdfViewerToolbar({
|
|
|
28
29
|
onScaleChange,
|
|
29
30
|
onSearchOpen,
|
|
30
31
|
onSidebarToggle,
|
|
31
|
-
onDownload
|
|
32
|
+
onDownload,
|
|
33
|
+
enableDownload,
|
|
34
|
+
onRotateLeft,
|
|
35
|
+
onRotateRight
|
|
32
36
|
}) {
|
|
33
37
|
const [pageInputValue, setPageInputValue] = useState(String(currentPage));
|
|
34
38
|
|
|
@@ -77,7 +81,7 @@ export function PdfViewerToolbar({
|
|
|
77
81
|
const scalePercent = `${Math.round(scale * 100)}%`;
|
|
78
82
|
return /*#__PURE__*/React.createElement("div", {
|
|
79
83
|
className: styles.toolbar
|
|
80
|
-
}, /*#__PURE__*/React.createElement(
|
|
84
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
81
85
|
className: styles.toolbarButton,
|
|
82
86
|
onClick: onSidebarToggle,
|
|
83
87
|
"aria-label": sidebarOpen ? "Close sidebar" : "Open sidebar",
|
|
@@ -90,7 +94,7 @@ export function PdfViewerToolbar({
|
|
|
90
94
|
className: styles.separator
|
|
91
95
|
}), /*#__PURE__*/React.createElement("div", {
|
|
92
96
|
className: styles.toolbarGroup
|
|
93
|
-
}, /*#__PURE__*/React.createElement(
|
|
97
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
94
98
|
className: styles.toolbarButton,
|
|
95
99
|
onClick: handlePrevPage,
|
|
96
100
|
disabled: currentPage <= 1,
|
|
@@ -109,7 +113,7 @@ export function PdfViewerToolbar({
|
|
|
109
113
|
"aria-label": "Page number"
|
|
110
114
|
}), /*#__PURE__*/React.createElement("span", {
|
|
111
115
|
className: styles.pageCount
|
|
112
|
-
}, "of ", numPages), /*#__PURE__*/React.createElement(
|
|
116
|
+
}, "of ", numPages), /*#__PURE__*/React.createElement(Button, {
|
|
113
117
|
className: styles.toolbarButton,
|
|
114
118
|
onClick: handleNextPage,
|
|
115
119
|
disabled: currentPage >= numPages,
|
|
@@ -122,7 +126,7 @@ export function PdfViewerToolbar({
|
|
|
122
126
|
className: styles.separator
|
|
123
127
|
}), /*#__PURE__*/React.createElement("div", {
|
|
124
128
|
className: styles.toolbarGroup
|
|
125
|
-
}, /*#__PURE__*/React.createElement(
|
|
129
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
126
130
|
className: styles.toolbarButton,
|
|
127
131
|
onClick: handleZoomOut,
|
|
128
132
|
disabled: scale <= MIN_SCALE,
|
|
@@ -133,7 +137,7 @@ export function PdfViewerToolbar({
|
|
|
133
137
|
size: 16
|
|
134
138
|
})), /*#__PURE__*/React.createElement("span", {
|
|
135
139
|
className: styles.scaleDisplay
|
|
136
|
-
}, scalePercent), /*#__PURE__*/React.createElement(
|
|
140
|
+
}, scalePercent), /*#__PURE__*/React.createElement(Button, {
|
|
137
141
|
className: styles.toolbarButton,
|
|
138
142
|
onClick: handleZoomIn,
|
|
139
143
|
disabled: scale >= MAX_SCALE,
|
|
@@ -144,7 +148,30 @@ export function PdfViewerToolbar({
|
|
|
144
148
|
size: 16
|
|
145
149
|
}))), /*#__PURE__*/React.createElement("div", {
|
|
146
150
|
className: styles.separator
|
|
147
|
-
}), /*#__PURE__*/React.createElement("
|
|
151
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
152
|
+
className: styles.toolbarGroup
|
|
153
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
154
|
+
className: styles.toolbarButton,
|
|
155
|
+
onClick: onRotateLeft,
|
|
156
|
+
"aria-label": "Rotate left",
|
|
157
|
+
title: "Rotate left",
|
|
158
|
+
type: "button"
|
|
159
|
+
}, /*#__PURE__*/React.createElement(RotatePage, {
|
|
160
|
+
size: 16
|
|
161
|
+
})), /*#__PURE__*/React.createElement(Button, {
|
|
162
|
+
className: styles.toolbarButton,
|
|
163
|
+
onClick: onRotateRight,
|
|
164
|
+
"aria-label": "Rotate right",
|
|
165
|
+
title: "Rotate right",
|
|
166
|
+
type: "button"
|
|
167
|
+
}, /*#__PURE__*/React.createElement(RotatePage, {
|
|
168
|
+
size: 16,
|
|
169
|
+
style: {
|
|
170
|
+
transform: "scaleX(-1)"
|
|
171
|
+
}
|
|
172
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
173
|
+
className: styles.separator
|
|
174
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
148
175
|
className: styles.toolbarButton,
|
|
149
176
|
onClick: onSearchOpen,
|
|
150
177
|
"aria-label": "Search",
|
|
@@ -152,9 +179,9 @@ export function PdfViewerToolbar({
|
|
|
152
179
|
type: "button"
|
|
153
180
|
}, /*#__PURE__*/React.createElement(Search, {
|
|
154
181
|
size: 16
|
|
155
|
-
})), /*#__PURE__*/React.createElement("div", {
|
|
182
|
+
})), enableDownload && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
156
183
|
className: styles.separator
|
|
157
|
-
}), /*#__PURE__*/React.createElement(
|
|
184
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
158
185
|
className: styles.toolbarButton,
|
|
159
186
|
onClick: onDownload,
|
|
160
187
|
"aria-label": "Download",
|
|
@@ -162,6 +189,6 @@ export function PdfViewerToolbar({
|
|
|
162
189
|
type: "button"
|
|
163
190
|
}, /*#__PURE__*/React.createElement(Download, {
|
|
164
191
|
size: 16
|
|
165
|
-
})));
|
|
192
|
+
}))));
|
|
166
193
|
}
|
|
167
194
|
//# sourceMappingURL=PdfViewerToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfViewerToolbar.js","names":["Button","Input","ChevronLeft","ChevronRight","Download","Menu","Minus","Plus","RotatePage","Search","React","useCallback","useEffect","useState","MAX_SCALE","MIN_SCALE","SCALE_STEP","styles","PdfViewerToolbar","currentPage","numPages","scale","sidebarOpen","onPageChange","onScaleChange","onSearchOpen","onSidebarToggle","onDownload","enableDownload","onRotateLeft","onRotateRight","pageInputValue","setPageInputValue","String","handlePrevPage","newPage","handleNextPage","handlePageInputChange","e","target","value","handlePageInputKeyDown","key","page","parseInt","isNaN","handlePageInputBlur","handleZoomIn","newScale","Math","min","handleZoomOut","max","scalePercent","round","createElement","className","toolbar","toolbarButton","onClick","title","type","size","separator","toolbarGroup","disabled","pageInput","onChange","onKeyDown","onBlur","pageCount","scaleDisplay","style","transform","Fragment"],"sources":["PdfViewerToolbar.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 { Button } from \"@base-ui/react/button\";\nimport { Input } from \"@base-ui/react/input\";\nimport {\n ChevronLeft,\n ChevronRight,\n Download,\n Menu,\n Minus,\n Plus,\n RotatePage,\n Search,\n} from \"@blueprintjs/icons\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { MAX_SCALE, MIN_SCALE, SCALE_STEP } from \"../constants.js\";\nimport styles from \"./PdfViewerToolbar.module.css\";\n\nexport interface PdfViewerToolbarProps {\n currentPage: number;\n numPages: number;\n scale: number;\n sidebarOpen: boolean;\n onPageChange: (page: number) => void;\n onScaleChange: (scale: number) => void;\n onSearchOpen: () => void;\n onSidebarToggle: () => void;\n onDownload: () => void;\n enableDownload: boolean;\n onRotateLeft: () => void;\n onRotateRight: () => void;\n}\n\nexport function PdfViewerToolbar({\n currentPage,\n numPages,\n scale,\n sidebarOpen,\n onPageChange,\n onScaleChange,\n onSearchOpen,\n onSidebarToggle,\n onDownload,\n enableDownload,\n onRotateLeft,\n onRotateRight,\n}: PdfViewerToolbarProps): React.ReactElement {\n const [pageInputValue, setPageInputValue] = useState(String(currentPage));\n\n // Sync input display when currentPage changes from scrolling\n useEffect(function syncPageInput() {\n setPageInputValue(String(currentPage));\n }, [currentPage]);\n\n const handlePrevPage = useCallback(() => {\n if (currentPage > 1) {\n const newPage = currentPage - 1;\n onPageChange(newPage);\n setPageInputValue(String(newPage));\n }\n }, [currentPage, onPageChange]);\n\n const handleNextPage = useCallback(() => {\n if (currentPage < numPages) {\n const newPage = currentPage + 1;\n onPageChange(newPage);\n setPageInputValue(String(newPage));\n }\n }, [currentPage, numPages, onPageChange]);\n\n const handlePageInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setPageInputValue(e.target.value);\n },\n [],\n );\n\n const handlePageInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n const page = parseInt(pageInputValue, 10);\n if (!isNaN(page) && page >= 1 && page <= numPages) {\n onPageChange(page);\n } else {\n setPageInputValue(String(currentPage));\n }\n }\n },\n [pageInputValue, numPages, onPageChange, currentPage],\n );\n\n const handlePageInputBlur = useCallback(() => {\n setPageInputValue(String(currentPage));\n }, [currentPage]);\n\n const handleZoomIn = useCallback(() => {\n const newScale = Math.min(scale + SCALE_STEP, MAX_SCALE);\n onScaleChange(newScale);\n }, [scale, onScaleChange]);\n\n const handleZoomOut = useCallback(() => {\n const newScale = Math.max(scale - SCALE_STEP, MIN_SCALE);\n onScaleChange(newScale);\n }, [scale, onScaleChange]);\n\n const scalePercent = `${Math.round(scale * 100)}%`;\n\n return (\n <div className={styles.toolbar}>\n <Button\n className={styles.toolbarButton}\n onClick={onSidebarToggle}\n aria-label={sidebarOpen ? \"Close sidebar\" : \"Open sidebar\"}\n title={sidebarOpen ? \"Close sidebar\" : \"Open sidebar\"}\n aria-pressed={sidebarOpen}\n type=\"button\"\n >\n <Menu size={16} />\n </Button>\n\n <div className={styles.separator} />\n\n <div className={styles.toolbarGroup}>\n <Button\n className={styles.toolbarButton}\n onClick={handlePrevPage}\n disabled={currentPage <= 1}\n aria-label=\"Previous page\"\n title=\"Previous page\"\n type=\"button\"\n >\n <ChevronLeft size={16} />\n </Button>\n <Input\n className={styles.pageInput}\n type=\"text\"\n value={pageInputValue}\n onChange={handlePageInputChange}\n onKeyDown={handlePageInputKeyDown}\n onBlur={handlePageInputBlur}\n aria-label=\"Page number\"\n />\n <span className={styles.pageCount}>of {numPages}</span>\n <Button\n className={styles.toolbarButton}\n onClick={handleNextPage}\n disabled={currentPage >= numPages}\n aria-label=\"Next page\"\n title=\"Next page\"\n type=\"button\"\n >\n <ChevronRight size={16} />\n </Button>\n </div>\n\n <div className={styles.separator} />\n\n <div className={styles.toolbarGroup}>\n <Button\n className={styles.toolbarButton}\n onClick={handleZoomOut}\n disabled={scale <= MIN_SCALE}\n aria-label=\"Zoom out\"\n title=\"Zoom out\"\n type=\"button\"\n >\n <Minus size={16} />\n </Button>\n <span className={styles.scaleDisplay}>{scalePercent}</span>\n <Button\n className={styles.toolbarButton}\n onClick={handleZoomIn}\n disabled={scale >= MAX_SCALE}\n aria-label=\"Zoom in\"\n title=\"Zoom in\"\n type=\"button\"\n >\n <Plus size={16} />\n </Button>\n </div>\n\n <div className={styles.separator} />\n\n <div className={styles.toolbarGroup}>\n <Button\n className={styles.toolbarButton}\n onClick={onRotateLeft}\n aria-label=\"Rotate left\"\n title=\"Rotate left\"\n type=\"button\"\n >\n <RotatePage size={16} />\n </Button>\n <Button\n className={styles.toolbarButton}\n onClick={onRotateRight}\n aria-label=\"Rotate right\"\n title=\"Rotate right\"\n type=\"button\"\n >\n <RotatePage size={16} style={{ transform: \"scaleX(-1)\" }} />\n </Button>\n </div>\n\n <div className={styles.separator} />\n\n <Button\n className={styles.toolbarButton}\n onClick={onSearchOpen}\n aria-label=\"Search\"\n title=\"Search\"\n type=\"button\"\n >\n <Search size={16} />\n </Button>\n\n {enableDownload && (\n <>\n <div className={styles.separator} />\n\n <Button\n className={styles.toolbarButton}\n onClick={onDownload}\n aria-label=\"Download\"\n title=\"Download\"\n type=\"button\"\n >\n <Download size={16} />\n </Button>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/esm/pdf-viewer/{PdfViewerToolbar.module.css → components/PdfViewerToolbar.module.css}
RENAMED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
height: 28px;
|
|
34
34
|
border: none;
|
|
35
35
|
background: none;
|
|
36
|
-
color: var(--osdk-typography-color-
|
|
36
|
+
color: var(--osdk-typography-color-muted);
|
|
37
37
|
cursor: pointer;
|
|
38
38
|
border-radius: var(--osdk-surface-border-radius);
|
|
39
39
|
padding: 0;
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.scaleDisplay {
|
|
82
|
-
font-size: var(--osdk-typography-size-body-
|
|
82
|
+
font-size: var(--osdk-typography-size-body-small);
|
|
83
83
|
color: var(--osdk-typography-color-muted);
|
|
84
84
|
min-width: 40px;
|
|
85
85
|
text-align: center;
|
|
@@ -28,16 +28,18 @@ export const THUMBNAIL_GAP = 12;
|
|
|
28
28
|
export const THUMBNAIL_SCALE = 0.2;
|
|
29
29
|
export const DEVICE_PIXEL_RATIO = typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1;
|
|
30
30
|
|
|
31
|
+
// Outline heading extraction
|
|
32
|
+
/** Text must be at least 15% larger than the most common font size to be considered a heading. */
|
|
33
|
+
export const OUTLINE_HEADING_SIZE_RATIO = 1.15;
|
|
34
|
+
/** Headings longer than this are likely paragraphs and are filtered out. */
|
|
35
|
+
export const OUTLINE_MAX_HEADING_LENGTH = 200;
|
|
36
|
+
|
|
31
37
|
// pdfjs EventBus event names
|
|
32
38
|
export const FIND_EVENT = "find";
|
|
33
|
-
// cspell:disable-next-line -- pdfjs EventBus event name
|
|
34
39
|
export const UPDATE_FIND_CONTROL_STATE_EVENT = "updatefindcontrolstate";
|
|
35
|
-
// cspell:disable-next-line -- pdfjs EventBus event name
|
|
36
40
|
export const UPDATE_FIND_MATCHES_COUNT_EVENT = "updatefindmatchescount";
|
|
37
|
-
// cspell:disable-next-line -- pdfjs EventBus event name
|
|
38
41
|
export const PAGE_CHANGING_EVENT = "pagechanging";
|
|
39
|
-
// cspell:disable-next-line -- pdfjs EventBus event name
|
|
40
42
|
export const SCALE_CHANGING_EVENT = "scalechanging";
|
|
41
|
-
// cspell:disable-next-line -- pdfjs EventBus event name
|
|
42
43
|
export const PAGE_RENDERED_EVENT = "pagerendered";
|
|
44
|
+
export const PAGES_LOADED_EVENT = "pagesloaded";
|
|
43
45
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["EMPTY_ANNOTATIONS","EMPTY_ANNOTATION_ARRAY","EMPTY_STRING","SCALE_STEP","MIN_SCALE","MAX_SCALE","DEFAULT_PAGE_HEIGHT","THUMBNAIL_GAP","THUMBNAIL_SCALE","DEVICE_PIXEL_RATIO","window","devicePixelRatio","FIND_EVENT","UPDATE_FIND_CONTROL_STATE_EVENT","UPDATE_FIND_MATCHES_COUNT_EVENT","PAGE_CHANGING_EVENT","SCALE_CHANGING_EVENT","PAGE_RENDERED_EVENT"],"sources":["constants.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 { PdfAnnotation } from \"./types.js\";\n\n// Default empty values (stable references to avoid re-renders)\nexport const EMPTY_ANNOTATIONS: Record<number, PdfAnnotation[]> = {};\nexport const EMPTY_ANNOTATION_ARRAY: PdfAnnotation[] = [];\nexport const EMPTY_STRING = \"\";\n\n// Scale and dimension configuration\nexport const SCALE_STEP = 0.25;\nexport const MIN_SCALE = 0.25;\nexport const MAX_SCALE = 5.0;\nexport const DEFAULT_PAGE_HEIGHT = 792;\nexport const THUMBNAIL_GAP = 12;\nexport const THUMBNAIL_SCALE = 0.2;\nexport const DEVICE_PIXEL_RATIO: number = typeof window !== \"undefined\"\n ? window.devicePixelRatio || 1\n : 1;\n\n//
|
|
1
|
+
{"version":3,"file":"constants.js","names":["EMPTY_ANNOTATIONS","EMPTY_ANNOTATION_ARRAY","EMPTY_STRING","SCALE_STEP","MIN_SCALE","MAX_SCALE","DEFAULT_PAGE_HEIGHT","THUMBNAIL_GAP","THUMBNAIL_SCALE","DEVICE_PIXEL_RATIO","window","devicePixelRatio","OUTLINE_HEADING_SIZE_RATIO","OUTLINE_MAX_HEADING_LENGTH","FIND_EVENT","UPDATE_FIND_CONTROL_STATE_EVENT","UPDATE_FIND_MATCHES_COUNT_EVENT","PAGE_CHANGING_EVENT","SCALE_CHANGING_EVENT","PAGE_RENDERED_EVENT","PAGES_LOADED_EVENT"],"sources":["constants.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 { PdfAnnotation } from \"./types.js\";\n\n// Default empty values (stable references to avoid re-renders)\nexport const EMPTY_ANNOTATIONS: Record<number, PdfAnnotation[]> = {};\nexport const EMPTY_ANNOTATION_ARRAY: PdfAnnotation[] = [];\nexport const EMPTY_STRING = \"\";\n\n// Scale and dimension configuration\nexport const SCALE_STEP = 0.25;\nexport const MIN_SCALE = 0.25;\nexport const MAX_SCALE = 5.0;\nexport const DEFAULT_PAGE_HEIGHT = 792;\nexport const THUMBNAIL_GAP = 12;\nexport const THUMBNAIL_SCALE = 0.2;\nexport const DEVICE_PIXEL_RATIO: number = typeof window !== \"undefined\"\n ? window.devicePixelRatio || 1\n : 1;\n\n// Outline heading extraction\n/** Text must be at least 15% larger than the most common font size to be considered a heading. */\nexport const OUTLINE_HEADING_SIZE_RATIO = 1.15;\n/** Headings longer than this are likely paragraphs and are filtered out. */\nexport const OUTLINE_MAX_HEADING_LENGTH = 200;\n\n// pdfjs EventBus event names\nexport const FIND_EVENT = \"find\";\nexport const UPDATE_FIND_CONTROL_STATE_EVENT = \"updatefindcontrolstate\";\nexport const UPDATE_FIND_MATCHES_COUNT_EVENT = \"updatefindmatchescount\";\nexport const PAGE_CHANGING_EVENT = \"pagechanging\";\nexport const SCALE_CHANGING_EVENT = \"scalechanging\";\nexport const PAGE_RENDERED_EVENT = \"pagerendered\";\nexport const PAGES_LOADED_EVENT = \"pagesloaded\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA,OAAO,MAAMA,iBAAkD,GAAG,CAAC,CAAC;AACpE,OAAO,MAAMC,sBAAuC,GAAG,EAAE;AACzD,OAAO,MAAMC,YAAY,GAAG,EAAE;;AAE9B;AACA,OAAO,MAAMC,UAAU,GAAG,IAAI;AAC9B,OAAO,MAAMC,SAAS,GAAG,IAAI;AAC7B,OAAO,MAAMC,SAAS,GAAG,GAAG;AAC5B,OAAO,MAAMC,mBAAmB,GAAG,GAAG;AACtC,OAAO,MAAMC,aAAa,GAAG,EAAE;AAC/B,OAAO,MAAMC,eAAe,GAAG,GAAG;AAClC,OAAO,MAAMC,kBAA0B,GAAG,OAAOC,MAAM,KAAK,WAAW,GACnEA,MAAM,CAACC,gBAAgB,IAAI,CAAC,GAC5B,CAAC;;AAEL;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAG,IAAI;AAC9C;AACA,OAAO,MAAMC,0BAA0B,GAAG,GAAG;;AAE7C;AACA,OAAO,MAAMC,UAAU,GAAG,MAAM;AAChC,OAAO,MAAMC,+BAA+B,GAAG,wBAAwB;AACvE,OAAO,MAAMC,+BAA+B,GAAG,wBAAwB;AACvE,OAAO,MAAMC,mBAAmB,GAAG,cAAc;AACjD,OAAO,MAAMC,oBAAoB,GAAG,eAAe;AACnD,OAAO,MAAMC,mBAAmB,GAAG,cAAc;AACjD,OAAO,MAAMC,kBAAkB,GAAG,aAAa","ignoreList":[]}
|
|
@@ -15,13 +15,12 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { getDocument, GlobalWorkerOptions } from "pdfjs-dist";
|
|
18
|
-
|
|
19
|
-
import pdfWorkerUrl from "pdfjs-dist/build/pdf.worker.min.mjs?url";
|
|
18
|
+
const pdfWorkerUrl = new URL("pdfjs-dist/build/pdf.worker.min.mjs", import.meta.url);
|
|
20
19
|
import { useEffect, useState } from "react";
|
|
21
20
|
const pdfWorker = {
|
|
22
21
|
workerInitialized: false,
|
|
23
22
|
ensureWorker() {
|
|
24
|
-
GlobalWorkerOptions.workerSrc = pdfWorkerUrl;
|
|
23
|
+
GlobalWorkerOptions.workerSrc = pdfWorkerUrl.href;
|
|
25
24
|
this.workerInitialized = true;
|
|
26
25
|
}
|
|
27
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePdfDocument.js","names":["getDocument","GlobalWorkerOptions","pdfWorkerUrl","useEffect","useState","pdfWorker","workerInitialized","ensureWorker","workerSrc","usePdfDocument","src","document","setDocument","undefined","numPages","setNumPages","loading","setLoading","error","setError","loadingTask","
|
|
1
|
+
{"version":3,"file":"usePdfDocument.js","names":["getDocument","GlobalWorkerOptions","pdfWorkerUrl","URL","import","meta","url","useEffect","useState","pdfWorker","workerInitialized","ensureWorker","workerSrc","href","usePdfDocument","src","document","setDocument","undefined","numPages","setNumPages","loading","setLoading","error","setError","loadingTask","data","cancelled","promise","then","pdf","err","Error","String","destroy"],"sources":["usePdfDocument.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 { PDFDocumentProxy } from \"pdfjs-dist\";\nimport { getDocument, GlobalWorkerOptions } from \"pdfjs-dist\";\nconst pdfWorkerUrl = new URL(\n \"pdfjs-dist/build/pdf.worker.min.mjs\",\n import.meta.url,\n);\nimport { useEffect, useState } from \"react\";\n\nconst pdfWorker = {\n workerInitialized: false,\n ensureWorker() {\n GlobalWorkerOptions.workerSrc = pdfWorkerUrl.href;\n this.workerInitialized = true;\n },\n};\n\ninterface UsePdfDocumentResult {\n document: PDFDocumentProxy | undefined;\n numPages: number;\n loading: boolean;\n error: Error | undefined;\n}\n\nexport function usePdfDocument(\n src: string | ArrayBuffer,\n): UsePdfDocumentResult {\n const [document, setDocument] = useState<PDFDocumentProxy | undefined>(\n undefined,\n );\n const [numPages, setNumPages] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n\n useEffect(function loadPdfDocument() {\n pdfWorker.ensureWorker();\n setLoading(true);\n setError(undefined);\n\n const loadingTask = getDocument(\n typeof src === \"string\" ? { url: src } : { data: src },\n );\n\n let cancelled = false;\n\n loadingTask.promise.then(\n (pdf) => {\n if (!cancelled) {\n setDocument(pdf);\n setNumPages(pdf.numPages);\n setLoading(false);\n }\n },\n (err: unknown) => {\n if (!cancelled) {\n setError(\n err instanceof Error ? err : new Error(String(err)),\n );\n setLoading(false);\n }\n },\n );\n\n return () => {\n cancelled = true;\n void loadingTask.destroy();\n };\n }, [src]);\n\n return { document, numPages, loading, error };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,WAAW,EAAEC,mBAAmB,QAAQ,YAAY;AAC7D,MAAMC,YAAY,GAAG,IAAIC,GAAG,CAC1B,qCAAqC,EACrCC,MAAM,CAACC,IAAI,CAACC,GACd,CAAC;AACD,SAASC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE3C,MAAMC,SAAS,GAAG;EAChBC,iBAAiB,EAAE,KAAK;EACxBC,YAAYA,CAAA,EAAG;IACbV,mBAAmB,CAACW,SAAS,GAAGV,YAAY,CAACW,IAAI;IACjD,IAAI,CAACH,iBAAiB,GAAG,IAAI;EAC/B;AACF,CAAC;AASD,OAAO,SAASI,cAAcA,CAC5BC,GAAyB,EACH;EACtB,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGT,QAAQ,CACtCU,SACF,CAAC;EACD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGZ,QAAQ,CAAC,CAAC,CAAC;EAC3C,MAAM,CAACa,OAAO,EAAEC,UAAU,CAAC,GAAGd,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAACe,KAAK,EAAEC,QAAQ,CAAC,GAAGhB,QAAQ,CAAoBU,SAAS,CAAC;EAEhEX,SAAS,CAAC,YAA2B;IACnCE,SAAS,CAACE,YAAY,CAAC,CAAC;IACxBW,UAAU,CAAC,IAAI,CAAC;IAChBE,QAAQ,CAACN,SAAS,CAAC;IAEnB,MAAMO,WAAW,GAAGzB,WAAW,CAC7B,OAAOe,GAAG,KAAK,QAAQ,GAAG;MAAET,GAAG,EAAES;IAAI,CAAC,GAAG;MAAEW,IAAI,EAAEX;IAAI,CACvD,CAAC;IAED,IAAIY,SAAS,GAAG,KAAK;IAErBF,WAAW,CAACG,OAAO,CAACC,IAAI,CACrBC,GAAG,IAAK;MACP,IAAI,CAACH,SAAS,EAAE;QACdV,WAAW,CAACa,GAAG,CAAC;QAChBV,WAAW,CAACU,GAAG,CAACX,QAAQ,CAAC;QACzBG,UAAU,CAAC,KAAK,CAAC;MACnB;IACF,CAAC,EACAS,GAAY,IAAK;MAChB,IAAI,CAACJ,SAAS,EAAE;QACdH,QAAQ,CACNO,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACF,GAAG,CAAC,CACpD,CAAC;QACDT,UAAU,CAAC,KAAK,CAAC;MACnB;IACF,CACF,CAAC;IAED,OAAO,MAAM;MACXK,SAAS,GAAG,IAAI;MAChB,KAAKF,WAAW,CAACS,OAAO,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,CAACnB,GAAG,CAAC,CAAC;EAET,OAAO;IAAEC,QAAQ;IAAEG,QAAQ;IAAEE,OAAO;IAAEE;EAAM,CAAC;AAC/C","ignoreList":[]}
|