@osdk/react-components 0.2.0-beta.24 → 0.2.0-beta.26
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 +4 -0
- package/CHANGELOG.md +38 -0
- package/build/browser/action-form/ActionForm.js +15 -11
- package/build/browser/action-form/ActionForm.js.map +1 -1
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/fields/{TextInputField.module.css → BaseInput.module.css} +2 -2
- package/build/browser/action-form/fields/BaseInput.module.css.js +6 -0
- package/build/browser/action-form/fields/CustomField.js +30 -0
- package/build/browser/action-form/fields/CustomField.js.map +1 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js +26 -16
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/RadioButtonsField.js +57 -0
- package/build/browser/action-form/fields/RadioButtonsField.js.map +1 -0
- package/build/browser/action-form/fields/RadioButtonsField.module.css +83 -0
- package/build/browser/action-form/fields/RadioButtonsField.module.css.js +10 -0
- package/build/browser/action-form/fields/TextAreaField.js +50 -0
- package/build/browser/action-form/fields/TextAreaField.js.map +1 -0
- package/build/browser/action-form/fields/TextInputField.js +3 -3
- package/build/browser/action-form/fields/TextInputField.js.map +1 -1
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +97 -10
- package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/browser/base-components/dialog/Dialog.js +4 -2
- package/build/browser/base-components/dialog/Dialog.js.map +1 -1
- package/build/browser/object-table/ObjectTableApi.js.map +1 -1
- package/build/browser/object-table/hooks/useFunctionColumnsData.js +57 -192
- package/build/browser/object-table/hooks/useFunctionColumnsData.js.map +1 -1
- package/build/browser/pdf-viewer/PdfViewer.js +49 -8
- package/build/browser/pdf-viewer/PdfViewer.js.map +1 -1
- package/build/browser/pdf-viewer/PdfViewerContext.js +108 -0
- package/build/browser/pdf-viewer/PdfViewerContext.js.map +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js +85 -18
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.module.css +18 -0
- package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.module.css.js +1 -0
- package/build/browser/pdf-viewer/components/PdfViewerContent.js +15 -3
- package/build/browser/pdf-viewer/components/PdfViewerContent.js.map +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerSidebar.module.css +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerSidebarHeader.module.css +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.js +29 -2
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.js.map +1 -1
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.module.css +5 -0
- package/build/browser/pdf-viewer/components/PdfViewerToolbar.module.css.js +1 -0
- package/build/browser/pdf-viewer/constants.js +2 -1
- package/build/browser/pdf-viewer/constants.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfAnnotationsByPage.js +30 -0
- package/build/browser/pdf-viewer/hooks/usePdfAnnotationsByPage.js.map +1 -0
- package/build/browser/pdf-viewer/hooks/usePdfFormFields.js +341 -0
- package/build/browser/pdf-viewer/hooks/usePdfFormFields.js.map +1 -0
- package/build/browser/pdf-viewer/hooks/usePdfHighlightMode.js +227 -0
- package/build/browser/pdf-viewer/hooks/usePdfHighlightMode.js.map +1 -0
- package/build/browser/pdf-viewer/hooks/usePdfViewer.js +16 -10
- package/build/browser/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js +3 -3
- package/build/browser/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfViewerSearch.js +3 -3
- package/build/browser/pdf-viewer/hooks/usePdfViewerSearch.js.map +1 -1
- package/build/browser/pdf-viewer/hooks/usePdfViewerState.js +3 -3
- package/build/browser/pdf-viewer/hooks/usePdfViewerState.js.map +1 -1
- package/build/browser/pdf-viewer/types.js.map +1 -1
- package/build/browser/public/experimental.js +5 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/styles.css +144 -35
- package/build/cjs/{chunk-GT6IV6LV.cjs → chunk-MRRRZN44.cjs} +6 -4
- package/build/cjs/chunk-MRRRZN44.cjs.map +1 -0
- package/build/cjs/public/experimental.cjs +1981 -1314
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +82 -5
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +267 -26
- package/build/cjs/public/primitives.cjs +5 -5
- package/build/cjs/public/primitives.d.cts +3 -2
- package/build/esm/action-form/ActionForm.js +15 -11
- package/build/esm/action-form/ActionForm.js.map +1 -1
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/fields/{TextInputField.module.css → BaseInput.module.css} +2 -2
- package/build/esm/action-form/fields/CustomField.js +30 -0
- package/build/esm/action-form/fields/CustomField.js.map +1 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js +26 -16
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/RadioButtonsField.js +57 -0
- package/build/esm/action-form/fields/RadioButtonsField.js.map +1 -0
- package/build/esm/action-form/fields/RadioButtonsField.module.css +83 -0
- package/build/esm/action-form/fields/TextAreaField.js +50 -0
- package/build/esm/action-form/fields/TextAreaField.js.map +1 -0
- package/build/esm/action-form/fields/TextInputField.js +3 -3
- package/build/esm/action-form/fields/TextInputField.js.map +1 -1
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +97 -10
- package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -1
- package/build/esm/base-components/dialog/Dialog.js +4 -2
- package/build/esm/base-components/dialog/Dialog.js.map +1 -1
- package/build/esm/object-table/ObjectTableApi.js.map +1 -1
- package/build/esm/object-table/hooks/useFunctionColumnsData.js +57 -192
- package/build/esm/object-table/hooks/useFunctionColumnsData.js.map +1 -1
- package/build/esm/pdf-viewer/PdfViewer.js +49 -8
- package/build/esm/pdf-viewer/PdfViewer.js.map +1 -1
- package/build/esm/pdf-viewer/PdfViewerContext.js +108 -0
- package/build/esm/pdf-viewer/PdfViewerContext.js.map +1 -0
- package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js +85 -18
- package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.module.css +18 -0
- package/build/esm/pdf-viewer/components/PdfViewerContent.js +15 -3
- package/build/esm/pdf-viewer/components/PdfViewerContent.js.map +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerOutlineSidebar.module.css +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerSidebar.module.css +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerSidebarHeader.module.css +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerToolbar.js +29 -2
- package/build/esm/pdf-viewer/components/PdfViewerToolbar.js.map +1 -1
- package/build/esm/pdf-viewer/components/PdfViewerToolbar.module.css +5 -0
- package/build/esm/pdf-viewer/constants.js +2 -1
- package/build/esm/pdf-viewer/constants.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfAnnotationsByPage.js +30 -0
- package/build/esm/pdf-viewer/hooks/usePdfAnnotationsByPage.js.map +1 -0
- package/build/esm/pdf-viewer/hooks/usePdfFormFields.js +341 -0
- package/build/esm/pdf-viewer/hooks/usePdfFormFields.js.map +1 -0
- package/build/esm/pdf-viewer/hooks/usePdfHighlightMode.js +227 -0
- package/build/esm/pdf-viewer/hooks/usePdfHighlightMode.js.map +1 -0
- package/build/esm/pdf-viewer/hooks/usePdfViewer.js +16 -10
- package/build/esm/pdf-viewer/hooks/usePdfViewer.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js +3 -3
- package/build/esm/pdf-viewer/hooks/usePdfViewerCore.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfViewerSearch.js +3 -3
- package/build/esm/pdf-viewer/hooks/usePdfViewerSearch.js.map +1 -1
- package/build/esm/pdf-viewer/hooks/usePdfViewerState.js +3 -3
- package/build/esm/pdf-viewer/hooks/usePdfViewerState.js.map +1 -1
- package/build/esm/pdf-viewer/types.js.map +1 -1
- package/build/esm/public/experimental.js +5 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/action-form/FormFieldApi.d.ts +11 -5
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/fields/CustomField.d.ts +9 -0
- package/build/types/action-form/fields/CustomField.d.ts.map +1 -0
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/RadioButtonsField.d.ts +3 -0
- package/build/types/action-form/fields/RadioButtonsField.d.ts.map +1 -0
- package/build/types/action-form/fields/TextAreaField.d.ts +3 -0
- package/build/types/action-form/fields/TextAreaField.d.ts.map +1 -0
- package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts +7 -4
- package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts.map +1 -1
- package/build/types/base-components/dialog/Dialog.d.ts +3 -2
- package/build/types/base-components/dialog/Dialog.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +4 -3
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/hooks/useFunctionColumnsData.d.ts.map +1 -1
- package/build/types/pdf-viewer/PdfViewer.d.ts +2 -2
- package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -1
- package/build/types/pdf-viewer/PdfViewerContext.d.ts +64 -0
- package/build/types/pdf-viewer/PdfViewerContext.d.ts.map +1 -0
- package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts.map +1 -1
- package/build/types/pdf-viewer/components/PdfViewerContent.d.ts +8 -4
- package/build/types/pdf-viewer/components/PdfViewerContent.d.ts.map +1 -1
- package/build/types/pdf-viewer/components/PdfViewerToolbar.d.ts +6 -1
- package/build/types/pdf-viewer/components/PdfViewerToolbar.d.ts.map +1 -1
- package/build/types/pdf-viewer/constants.d.ts +1 -1
- package/build/types/pdf-viewer/constants.d.ts.map +1 -1
- package/build/types/pdf-viewer/hooks/usePdfAnnotationsByPage.d.ts +5 -0
- package/build/types/pdf-viewer/hooks/usePdfAnnotationsByPage.d.ts.map +1 -0
- package/build/types/pdf-viewer/hooks/usePdfFormFields.d.ts +24 -0
- package/build/types/pdf-viewer/hooks/usePdfFormFields.d.ts.map +1 -0
- package/build/types/pdf-viewer/hooks/usePdfHighlightMode.d.ts +36 -0
- package/build/types/pdf-viewer/hooks/usePdfHighlightMode.d.ts.map +1 -0
- package/build/types/pdf-viewer/hooks/usePdfViewer.d.ts.map +1 -1
- package/build/types/pdf-viewer/types.d.ts +137 -13
- package/build/types/pdf-viewer/types.d.ts.map +1 -1
- package/build/types/public/experimental.d.ts +6 -1
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +6 -6
- package/build/browser/action-form/fields/TextInputField.module.css.js +0 -6
- package/build/browser/action-form/utils/getDefaultFieldComponent.js +0 -56
- package/build/browser/action-form/utils/getDefaultFieldComponent.js.map +0 -1
- package/build/cjs/chunk-GT6IV6LV.cjs.map +0 -1
- package/build/esm/action-form/utils/getDefaultFieldComponent.js +0 -56
- package/build/esm/action-form/utils/getDefaultFieldComponent.js.map +0 -1
- package/build/types/action-form/utils/getDefaultFieldComponent.d.ts +0 -6
- package/build/types/action-form/utils/getDefaultFieldComponent.d.ts.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { ReactNode, ReactElement, RefObject } from 'react';
|
|
3
|
-
import { ObjectTypeDefinition, ObjectSet, WhereClause, PropertyKeys, LinkNames, LinkedType, WirePropertyTypes, CompileTimeMetadata, ObjectOrInterfaceDefinition, SimplePropertyDef, QueryDefinition,
|
|
3
|
+
import { ObjectTypeDefinition, ObjectSet, WhereClause, PropertyKeys, LinkNames, LinkedType, WirePropertyTypes, CompileTimeMetadata, ObjectOrInterfaceDefinition, SimplePropertyDef, QueryDefinition, Osdk, DerivedProperty, PrimaryKeyType, Media, ActionDefinition, ActionMetadata, ActionParam, DataValueClientToWire, ActionEditResponse, ActionValidationResponse } from '@osdk/api';
|
|
4
|
+
import { QueryParameterType } from '@osdk/client/unstable-do-not-use';
|
|
4
5
|
import { RowData, Table, Cell, VisibilityState, ColumnOrderState } from '@tanstack/react-table';
|
|
5
6
|
import { PDFDocumentProxy } from 'pdfjs-dist';
|
|
6
7
|
import { PDFViewer, EventBus, PDFFindController } from 'pdfjs-dist/web/pdf_viewer.mjs';
|
|
@@ -604,7 +605,7 @@ type ColumnDefinition<Q extends ObjectOrInterfaceDefinition, RDPs extends Record
|
|
|
604
605
|
*/
|
|
605
606
|
renderHeader?: () => React.ReactNode;
|
|
606
607
|
};
|
|
607
|
-
type ExtractQueryParameters<
|
|
608
|
+
type ExtractQueryParameters<Q extends QueryDefinition> = CompileTimeMetadata<Q>["parameters"] extends Record<string, never> ? undefined : QueryParameterType<CompileTimeMetadata<Q>["parameters"]>;
|
|
608
609
|
interface PropertyColumnLocator<Q extends ObjectOrInterfaceDefinition> {
|
|
609
610
|
type: "property";
|
|
610
611
|
id: PropertyKeys<Q>;
|
|
@@ -622,7 +623,7 @@ interface FunctionColumnLocator<Q extends ObjectOrInterfaceDefinition, RDPs exte
|
|
|
622
623
|
* @param objectSet - The current object set.
|
|
623
624
|
* @returns - The function's input parameters including the object set.
|
|
624
625
|
*/
|
|
625
|
-
getFunctionParams: (objectSet: ObjectSet<Q>) => ExtractQueryParameters<FunctionColumns[keyof FunctionColumns]>;
|
|
626
|
+
getFunctionParams: (objectSet: ObjectSet<Q, RDPs>) => ExtractQueryParameters<FunctionColumns[keyof FunctionColumns]>;
|
|
626
627
|
/**
|
|
627
628
|
* Function to generate keys for looking up results in the FunctionsMap.
|
|
628
629
|
* @param object - The object instance
|
|
@@ -931,27 +932,49 @@ interface OutlineItem {
|
|
|
931
932
|
italic: boolean;
|
|
932
933
|
}
|
|
933
934
|
/** The visual style of an annotation rendered on the PDF. */
|
|
934
|
-
type AnnotationType = "highlight" | "underline" | "comment" | "pin";
|
|
935
|
-
/** A
|
|
936
|
-
interface
|
|
935
|
+
type AnnotationType = "highlight" | "underline" | "comment" | "pin" | "custom";
|
|
936
|
+
/** A rectangle in PDF coordinate space (origin: bottom-left of page). */
|
|
937
|
+
interface PdfRect {
|
|
938
|
+
x: number;
|
|
939
|
+
y: number;
|
|
940
|
+
width: number;
|
|
941
|
+
height: number;
|
|
942
|
+
}
|
|
943
|
+
/** Props passed to a custom annotation renderer. */
|
|
944
|
+
interface PdfAnnotationRenderProps {
|
|
945
|
+
annotation: PdfAnnotation;
|
|
946
|
+
scale: number;
|
|
947
|
+
pageHeight: number;
|
|
948
|
+
}
|
|
949
|
+
/** Common fields shared by all annotation types. */
|
|
950
|
+
interface PdfAnnotationBase {
|
|
937
951
|
/** Unique identifier for this annotation */
|
|
938
952
|
id: string;
|
|
939
|
-
/** The type of annotation to render */
|
|
940
|
-
type: AnnotationType;
|
|
941
953
|
/** Page number (1-indexed) */
|
|
942
954
|
page: number;
|
|
943
955
|
/** Coordinates in PDF points (origin: bottom-left of page) */
|
|
944
|
-
rect:
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
width: number;
|
|
948
|
-
height: number;
|
|
949
|
-
};
|
|
956
|
+
rect: PdfRect;
|
|
957
|
+
/** Additional rects for multi-line text highlights. When present, all rects are rendered. */
|
|
958
|
+
rects?: PdfRect[];
|
|
950
959
|
/** Optional label or tooltip text */
|
|
951
960
|
label?: string;
|
|
952
961
|
/** Optional color override (CSS color string) */
|
|
953
962
|
color?: string;
|
|
954
963
|
}
|
|
964
|
+
/** A built-in annotation type (highlight, underline, comment, pin). */
|
|
965
|
+
interface PdfStandardAnnotation extends PdfAnnotationBase {
|
|
966
|
+
/** The type of annotation to render */
|
|
967
|
+
type: "highlight" | "underline" | "comment" | "pin";
|
|
968
|
+
}
|
|
969
|
+
/** A custom annotation with a user-provided renderer. */
|
|
970
|
+
interface PdfCustomAnnotation extends PdfAnnotationBase {
|
|
971
|
+
/** Must be "custom" for custom-rendered annotations */
|
|
972
|
+
type: "custom";
|
|
973
|
+
/** Render function for the custom annotation content (required for custom type) */
|
|
974
|
+
render: (props: PdfAnnotationRenderProps) => React__default.ReactNode;
|
|
975
|
+
}
|
|
976
|
+
/** A single annotation positioned on a specific page of the PDF. */
|
|
977
|
+
type PdfAnnotation = PdfStandardAnnotation | PdfCustomAnnotation;
|
|
955
978
|
/** Result passed to the {@link PdfViewerProps.onDownload} callback. */
|
|
956
979
|
type PdfDownloadResult = {
|
|
957
980
|
success: true;
|
|
@@ -960,12 +983,72 @@ type PdfDownloadResult = {
|
|
|
960
983
|
success: false;
|
|
961
984
|
error: Error;
|
|
962
985
|
};
|
|
986
|
+
/** Possible values for a PDF form field. */
|
|
987
|
+
type PdfFormFieldValue = string | boolean | string[];
|
|
988
|
+
/** Data emitted when the user creates a text highlight via the highlight editor. */
|
|
989
|
+
interface PdfTextHighlightEvent {
|
|
990
|
+
/** Internal PDF.js editor ID. Use with `deleteHighlight` to programmatically remove. */
|
|
991
|
+
editorId: string;
|
|
992
|
+
/** Page number (1-indexed) */
|
|
993
|
+
page: number;
|
|
994
|
+
/** Bounding rects in PDF coordinate space (bottom-left origin) */
|
|
995
|
+
rects: PdfRect[];
|
|
996
|
+
/** The selected text content */
|
|
997
|
+
selectedText: string;
|
|
998
|
+
/** Highlight color as CSS color string */
|
|
999
|
+
color: string;
|
|
1000
|
+
}
|
|
1001
|
+
/** Imperative handle for programmatic control of a {@link PdfViewer} or {@link BasePdfViewer}. */
|
|
1002
|
+
interface PdfViewerHandle {
|
|
1003
|
+
/** Scroll the viewer to the given page number (1-indexed). */
|
|
1004
|
+
scrollToPage: (page: number) => void;
|
|
1005
|
+
/** Programmatically delete a highlight by its `editorId` (from {@link PdfTextHighlightEvent}). */
|
|
1006
|
+
deleteHighlight: (editorId: string) => void;
|
|
1007
|
+
}
|
|
1008
|
+
/**
|
|
1009
|
+
* Options for {@link usePdfViewerInstance}.
|
|
1010
|
+
* Equivalent to {@link PdfViewerProps} minus the `className` rendering concern.
|
|
1011
|
+
*/
|
|
1012
|
+
interface PdfViewerInstanceOptions {
|
|
1013
|
+
/** PDF source — URL string or ArrayBuffer */
|
|
1014
|
+
src: string | ArrayBuffer;
|
|
1015
|
+
/** Annotations to overlay on the PDF */
|
|
1016
|
+
annotations?: PdfAnnotation[];
|
|
1017
|
+
/** Callback fired when an annotation is clicked */
|
|
1018
|
+
onAnnotationClick?: (annotation: PdfAnnotation) => void;
|
|
1019
|
+
/** Callback fired when a download completes or fails */
|
|
1020
|
+
onDownload?: (result: PdfDownloadResult) => void;
|
|
1021
|
+
/** Whether the highlight toggle button is shown in the toolbar */
|
|
1022
|
+
highlightEnabled?: boolean;
|
|
1023
|
+
/** Callback fired when the user creates a text highlight */
|
|
1024
|
+
onTextHighlight?: (event: PdfTextHighlightEvent) => void;
|
|
1025
|
+
/** Callback fired when the user deletes a highlight */
|
|
1026
|
+
onHighlightDelete?: (event: PdfTextHighlightEvent) => void;
|
|
1027
|
+
/** Initial form field values keyed by field name */
|
|
1028
|
+
formData?: Record<string, PdfFormFieldValue>;
|
|
1029
|
+
/** Callback fired when the user clicks the save button */
|
|
1030
|
+
onFormSubmit?: (data: Record<string, PdfFormFieldValue>) => void;
|
|
1031
|
+
/** Callback fired when any form field value changes */
|
|
1032
|
+
onFormChange?: (fieldName: string, value: PdfFormFieldValue) => void;
|
|
1033
|
+
/** Initial page number (1-indexed, default 1) */
|
|
1034
|
+
initialPage?: number;
|
|
1035
|
+
/** Initial zoom scale (default 1.0) */
|
|
1036
|
+
initialScale?: number;
|
|
1037
|
+
/** Whether the sidebar is initially open (default false) */
|
|
1038
|
+
initialSidebarOpen?: boolean;
|
|
1039
|
+
/** Whether the download button is shown in the toolbar */
|
|
1040
|
+
enableDownload?: boolean;
|
|
1041
|
+
/** Which sidebar panel to show: thumbnails or document outline */
|
|
1042
|
+
sidebarMode?: SidebarMode;
|
|
1043
|
+
/** Custom icon components for each outline depth level (0-indexed) */
|
|
1044
|
+
outlineIcons?: Partial<Record<number, React__default.ComponentType>>;
|
|
1045
|
+
}
|
|
963
1046
|
/** Props for the {@link PdfViewer} component. */
|
|
964
1047
|
interface PdfViewerProps {
|
|
965
1048
|
/** PDF source — URL string or ArrayBuffer */
|
|
966
1049
|
src: string | ArrayBuffer;
|
|
967
|
-
/** Annotations to overlay on the PDF
|
|
968
|
-
annotations?:
|
|
1050
|
+
/** Annotations to overlay on the PDF */
|
|
1051
|
+
annotations?: PdfAnnotation[];
|
|
969
1052
|
/**
|
|
970
1053
|
* Callback fired when an annotation is clicked.
|
|
971
1054
|
*
|
|
@@ -980,6 +1063,26 @@ interface PdfViewerProps {
|
|
|
980
1063
|
* @returns void
|
|
981
1064
|
*/
|
|
982
1065
|
onDownload?: (result: PdfDownloadResult) => void;
|
|
1066
|
+
/**
|
|
1067
|
+
* Whether the highlight toggle button is shown in the toolbar.
|
|
1068
|
+
* @default false
|
|
1069
|
+
*/
|
|
1070
|
+
enableHighlight?: boolean;
|
|
1071
|
+
/**
|
|
1072
|
+
* Callback fired when the user creates a text highlight.
|
|
1073
|
+
* Only fires when highlight mode is active.
|
|
1074
|
+
*
|
|
1075
|
+
* @param event - The highlight event with page, rects, text, and color
|
|
1076
|
+
* @returns void
|
|
1077
|
+
*/
|
|
1078
|
+
onTextHighlight?: (event: PdfTextHighlightEvent) => void;
|
|
1079
|
+
/**
|
|
1080
|
+
* Callback fired when the user deletes a highlight via the PDF.js editor UI.
|
|
1081
|
+
*
|
|
1082
|
+
* @param event - The highlight event that was deleted
|
|
1083
|
+
* @returns void
|
|
1084
|
+
*/
|
|
1085
|
+
onHighlightDelete?: (event: PdfTextHighlightEvent) => void;
|
|
983
1086
|
/** Initial page number (1-indexed, default 1) */
|
|
984
1087
|
initialPage?: number;
|
|
985
1088
|
/** Initial zoom scale (default 1.0) */
|
|
@@ -1002,11 +1105,32 @@ interface PdfViewerProps {
|
|
|
1002
1105
|
* If omitted, no icons are rendered.
|
|
1003
1106
|
*/
|
|
1004
1107
|
outlineIcons?: Partial<Record<number, React__default.ComponentType>>;
|
|
1108
|
+
/**
|
|
1109
|
+
* Initial form field values keyed by field name. Applied when the document loads.
|
|
1110
|
+
* Use this to pre-populate form fields when resuming a previously edited PDF.
|
|
1111
|
+
*/
|
|
1112
|
+
formData?: Record<string, PdfFormFieldValue>;
|
|
1113
|
+
/**
|
|
1114
|
+
* Callback fired when the user clicks the save button in the toolbar.
|
|
1115
|
+
* Receives all current form field values keyed by field name.
|
|
1116
|
+
*
|
|
1117
|
+
* @param data - All form field values keyed by field name
|
|
1118
|
+
* @returns void
|
|
1119
|
+
*/
|
|
1120
|
+
onFormSubmit?: (data: Record<string, PdfFormFieldValue>) => void;
|
|
1121
|
+
/**
|
|
1122
|
+
* Callback fired when any form field value changes.
|
|
1123
|
+
*
|
|
1124
|
+
* @param fieldName - The name of the field that changed
|
|
1125
|
+
* @param value - The new value
|
|
1126
|
+
* @returns void
|
|
1127
|
+
*/
|
|
1128
|
+
onFormChange?: (fieldName: string, value: PdfFormFieldValue) => void;
|
|
1005
1129
|
/** Additional CSS class name for the root element */
|
|
1006
1130
|
className?: string;
|
|
1007
1131
|
}
|
|
1008
1132
|
|
|
1009
|
-
declare
|
|
1133
|
+
declare const BasePdfViewer: React__default.ForwardRefExoticComponent<PdfViewerProps & React__default.RefAttributes<PdfViewerHandle>>;
|
|
1010
1134
|
|
|
1011
1135
|
interface PdfViewerAnnotationLayerProps {
|
|
1012
1136
|
annotations: PdfAnnotation[];
|
|
@@ -1019,8 +1143,8 @@ declare function PdfViewerAnnotationLayer({ annotations, pageHeight, scale, onAn
|
|
|
1019
1143
|
interface PdfViewerContentProps {
|
|
1020
1144
|
/** PDF source — URL string or ArrayBuffer */
|
|
1021
1145
|
src: string | ArrayBuffer;
|
|
1022
|
-
/** Annotations to overlay on the PDF
|
|
1023
|
-
annotations?:
|
|
1146
|
+
/** Annotations to overlay on the PDF */
|
|
1147
|
+
annotations?: PdfAnnotation[];
|
|
1024
1148
|
/** Callback fired when an annotation is clicked */
|
|
1025
1149
|
onAnnotationClick?: (annotation: PdfAnnotation) => void;
|
|
1026
1150
|
/** Initial page number (1-indexed, default 1) */
|
|
@@ -1031,10 +1155,14 @@ interface PdfViewerContentProps {
|
|
|
1031
1155
|
onPageChange?: (page: number) => void;
|
|
1032
1156
|
/** Callback fired when the zoom scale changes */
|
|
1033
1157
|
onScaleChange?: (scale: number) => void;
|
|
1158
|
+
/** Initial form field values keyed by field name. Applied when the document loads. */
|
|
1159
|
+
formData?: Record<string, PdfFormFieldValue>;
|
|
1160
|
+
/** Callback fired when any form field value changes. */
|
|
1161
|
+
onFormChange?: (fieldName: string, value: PdfFormFieldValue) => void;
|
|
1034
1162
|
/** Additional CSS class name for the root element */
|
|
1035
1163
|
className?: string;
|
|
1036
1164
|
}
|
|
1037
|
-
declare function PdfViewerContent({ src, annotations, onAnnotationClick, initialPage, initialScale, onPageChange: onPageChangeProp, onScaleChange: onScaleChangeProp, className, }: PdfViewerContentProps): React__default.ReactElement;
|
|
1165
|
+
declare function PdfViewerContent({ src, annotations, onAnnotationClick, initialPage, initialScale, onPageChange: onPageChangeProp, onScaleChange: onScaleChangeProp, formData, onFormChange, className, }: PdfViewerContentProps): React__default.ReactElement;
|
|
1038
1166
|
|
|
1039
1167
|
interface PdfViewerOutlineSidebarProps {
|
|
1040
1168
|
outlineItems: OutlineItem[];
|
|
@@ -1080,8 +1208,13 @@ interface PdfViewerToolbarProps {
|
|
|
1080
1208
|
enableDownload: boolean;
|
|
1081
1209
|
onRotateLeft: () => void;
|
|
1082
1210
|
onRotateRight: () => void;
|
|
1211
|
+
enableHighlight: boolean;
|
|
1212
|
+
highlightModeActive: boolean;
|
|
1213
|
+
onHighlightToggle: () => void;
|
|
1214
|
+
enableFormSave?: boolean;
|
|
1215
|
+
onFormSave?: () => void;
|
|
1083
1216
|
}
|
|
1084
|
-
declare function PdfViewerToolbar({ currentPage, numPages, scale, sidebarOpen, onPageChange, onScaleChange, onSearchOpen, onSidebarToggle, onDownload, enableDownload, onRotateLeft, onRotateRight, }: PdfViewerToolbarProps): React__default.ReactElement;
|
|
1217
|
+
declare function PdfViewerToolbar({ currentPage, numPages, scale, sidebarOpen, onPageChange, onScaleChange, onSearchOpen, onSidebarToggle, onDownload, enableDownload, onRotateLeft, onRotateRight, enableHighlight, highlightModeActive, onHighlightToggle, enableFormSave, onFormSave, }: PdfViewerToolbarProps): React__default.ReactElement;
|
|
1085
1218
|
|
|
1086
1219
|
interface AnnotationPortalTarget {
|
|
1087
1220
|
pageNumber: number;
|
|
@@ -1091,6 +1224,11 @@ interface AnnotationPortalTarget {
|
|
|
1091
1224
|
}
|
|
1092
1225
|
declare function usePdfAnnotationPortals(pdfViewerRef: RefObject<PDFViewer | null>, eventBusRef: RefObject<EventBus | null>, document: PDFDocumentProxy | undefined): AnnotationPortalTarget[];
|
|
1093
1226
|
|
|
1227
|
+
/**
|
|
1228
|
+
* Groups a flat array of annotations by page number for efficient per-page lookup.
|
|
1229
|
+
*/
|
|
1230
|
+
declare function usePdfAnnotationsByPage(annotations: PdfAnnotation[]): Record<number, PdfAnnotation[]>;
|
|
1231
|
+
|
|
1094
1232
|
interface UsePdfDocumentResult {
|
|
1095
1233
|
document: PDFDocumentProxy | undefined;
|
|
1096
1234
|
numPages: number;
|
|
@@ -1099,6 +1237,46 @@ interface UsePdfDocumentResult {
|
|
|
1099
1237
|
}
|
|
1100
1238
|
declare function usePdfDocument(src: string | ArrayBuffer): UsePdfDocumentResult;
|
|
1101
1239
|
|
|
1240
|
+
interface UsePdfFormFieldsOptions {
|
|
1241
|
+
pdfViewerRef: RefObject<PDFViewer | null>;
|
|
1242
|
+
eventBusRef: RefObject<EventBus | null>;
|
|
1243
|
+
document: PDFDocumentProxy | undefined;
|
|
1244
|
+
formData?: Record<string, PdfFormFieldValue>;
|
|
1245
|
+
onFormSubmit?: (data: Record<string, PdfFormFieldValue>) => void;
|
|
1246
|
+
onFormChange?: (fieldName: string, value: PdfFormFieldValue) => void;
|
|
1247
|
+
}
|
|
1248
|
+
interface UsePdfFormFieldsResult {
|
|
1249
|
+
/** Whether the loaded PDF contains interactive form fields. */
|
|
1250
|
+
hasFormFields: boolean;
|
|
1251
|
+
/** Collect all current form field values and invoke onFormSubmit. */
|
|
1252
|
+
submitFormData: () => void;
|
|
1253
|
+
}
|
|
1254
|
+
/**
|
|
1255
|
+
* Hook that manages interactive PDF form fields.
|
|
1256
|
+
* Builds a field metadata map, pre-populates initial values,
|
|
1257
|
+
* listens for field changes, and collects values on submit.
|
|
1258
|
+
*/
|
|
1259
|
+
declare function usePdfFormFields({ pdfViewerRef, eventBusRef, document, formData, onFormSubmit, onFormChange, }: UsePdfFormFieldsOptions): UsePdfFormFieldsResult;
|
|
1260
|
+
|
|
1261
|
+
interface UsePdfHighlightModeOptions {
|
|
1262
|
+
pdfViewerRef: RefObject<PDFViewer | null>;
|
|
1263
|
+
document: PDFDocumentProxy | undefined;
|
|
1264
|
+
enabled: boolean;
|
|
1265
|
+
onTextHighlight?: (event: PdfTextHighlightEvent) => void;
|
|
1266
|
+
onHighlightDelete?: (event: PdfTextHighlightEvent) => void;
|
|
1267
|
+
}
|
|
1268
|
+
interface UsePdfHighlightModeResult {
|
|
1269
|
+
highlightModeActive: boolean;
|
|
1270
|
+
toggleHighlightMode: () => void;
|
|
1271
|
+
deleteHighlight: (editorId: string) => void;
|
|
1272
|
+
}
|
|
1273
|
+
/**
|
|
1274
|
+
* Hook that manages the PDF.js built-in highlight annotation editor mode.
|
|
1275
|
+
* When active, users can select text to create highlights.
|
|
1276
|
+
* A callback fires with the annotation details for persistence.
|
|
1277
|
+
*/
|
|
1278
|
+
declare function usePdfHighlightMode({ pdfViewerRef, document, enabled, onTextHighlight, onHighlightDelete, }: UsePdfHighlightModeOptions): UsePdfHighlightModeResult;
|
|
1279
|
+
|
|
1102
1280
|
declare function usePdfOutline(document: PDFDocumentProxy | undefined): OutlineItem[];
|
|
1103
1281
|
|
|
1104
1282
|
interface UsePdfViewerResult {
|
|
@@ -1133,6 +1311,64 @@ declare function usePdfViewerSync({ pdfViewerRef, eventBusRef, document, scale,
|
|
|
1133
1311
|
scrollToPage: (page: number) => void;
|
|
1134
1312
|
};
|
|
1135
1313
|
|
|
1314
|
+
/** The shape of the value provided by {@link PdfViewerProvider}. */
|
|
1315
|
+
interface PdfViewerContextValue {
|
|
1316
|
+
document: PDFDocumentProxy | undefined;
|
|
1317
|
+
numPages: number;
|
|
1318
|
+
loading: boolean;
|
|
1319
|
+
error: Error | undefined;
|
|
1320
|
+
containerRef: RefObject<HTMLDivElement>;
|
|
1321
|
+
viewerRef: RefObject<HTMLDivElement>;
|
|
1322
|
+
currentPage: number;
|
|
1323
|
+
scrollToPage: (page: number) => void;
|
|
1324
|
+
scale: number;
|
|
1325
|
+
setScale: (scale: number) => void;
|
|
1326
|
+
zoomIn: () => void;
|
|
1327
|
+
zoomOut: () => void;
|
|
1328
|
+
rotation: number;
|
|
1329
|
+
rotateLeft: () => void;
|
|
1330
|
+
rotateRight: () => void;
|
|
1331
|
+
sidebarOpen: boolean;
|
|
1332
|
+
sidebarMode: SidebarMode;
|
|
1333
|
+
setSidebarMode: (mode: SidebarMode) => void;
|
|
1334
|
+
toggleSidebar: () => void;
|
|
1335
|
+
search: UsePdfViewerSearchResult;
|
|
1336
|
+
outlineItems: OutlineItem[];
|
|
1337
|
+
download: (filename?: string) => void;
|
|
1338
|
+
portalTargets: AnnotationPortalTarget[];
|
|
1339
|
+
highlightEnabled: boolean;
|
|
1340
|
+
highlightModeActive: boolean;
|
|
1341
|
+
toggleHighlightMode: () => void;
|
|
1342
|
+
hasFormFields: boolean;
|
|
1343
|
+
submitFormData: () => void;
|
|
1344
|
+
annotations: PdfAnnotation[];
|
|
1345
|
+
annotationsByPage: Record<number, PdfAnnotation[]>;
|
|
1346
|
+
onAnnotationClick: ((annotation: PdfAnnotation) => void) | undefined;
|
|
1347
|
+
enableDownload: boolean;
|
|
1348
|
+
enableFormSave: boolean;
|
|
1349
|
+
outlineIcons: Partial<Record<number, React__default.ComponentType>> | undefined;
|
|
1350
|
+
pdfViewerRef: RefObject<PDFViewer | null>;
|
|
1351
|
+
eventBusRef: RefObject<EventBus | null>;
|
|
1352
|
+
findControllerRef: RefObject<PDFFindController | null>;
|
|
1353
|
+
}
|
|
1354
|
+
interface PdfViewerProviderProps {
|
|
1355
|
+
value: PdfViewerContextValue;
|
|
1356
|
+
children: React__default.ReactNode;
|
|
1357
|
+
}
|
|
1358
|
+
/** Provides {@link PdfViewerContextValue} to descendant components. */
|
|
1359
|
+
declare function PdfViewerProvider({ value, children }: PdfViewerProviderProps): React__default.ReactElement;
|
|
1360
|
+
/**
|
|
1361
|
+
* Returns the nearest {@link PdfViewerContextValue} from a {@link PdfViewerProvider}.
|
|
1362
|
+
* Throws if called outside a provider.
|
|
1363
|
+
*/
|
|
1364
|
+
declare function usePdfViewerContext(): PdfViewerContextValue;
|
|
1365
|
+
/**
|
|
1366
|
+
* Consumer-facing setup hook analogous to react-hook-form's `useForm()`.
|
|
1367
|
+
* Accepts viewer options and returns a {@link PdfViewerContextValue} suitable
|
|
1368
|
+
* for passing to {@link PdfViewerProvider}.
|
|
1369
|
+
*/
|
|
1370
|
+
declare function usePdfViewerInstance(options: PdfViewerInstanceOptions): PdfViewerContextValue;
|
|
1371
|
+
|
|
1136
1372
|
interface UsePdfViewerCoreOptions {
|
|
1137
1373
|
/** PDF source — URL string or ArrayBuffer */
|
|
1138
1374
|
src: string | ArrayBuffer;
|
|
@@ -1275,9 +1511,9 @@ interface FormFieldDefinition<Q extends ActionDefinition<unknown>, K extends Fie
|
|
|
1275
1511
|
validate?: (value: FieldValueType<Q, K>) => Promise<boolean>;
|
|
1276
1512
|
/**
|
|
1277
1513
|
* The component props for the form field
|
|
1278
|
-
* Excludes runtime props (
|
|
1514
|
+
* Excludes runtime props (value, onChange) which are managed by ActionForm
|
|
1279
1515
|
*/
|
|
1280
|
-
fieldComponentProps
|
|
1516
|
+
fieldComponentProps: Omit<FormFieldPropsByType[ValidFormFieldForPropertyType<FieldDescriptorType<Q, K>>], "value" | "onChange">;
|
|
1281
1517
|
}
|
|
1282
1518
|
type ValidationError = {
|
|
1283
1519
|
type: ValidationRule;
|
|
@@ -1393,6 +1629,7 @@ interface TextAreaFieldProps extends BaseFormFieldProps<string>, Pick<React__def
|
|
|
1393
1629
|
* If provided, this will be added to the field validation
|
|
1394
1630
|
*/
|
|
1395
1631
|
| "maxLength"> {
|
|
1632
|
+
placeholder?: string;
|
|
1396
1633
|
}
|
|
1397
1634
|
interface TextInputFieldProps extends BaseFormFieldProps<string>, Pick<React__default.InputHTMLAttributes<HTMLInputElement>,
|
|
1398
1635
|
/**
|
|
@@ -1423,7 +1660,11 @@ interface NumberInputFieldProps extends BaseFormFieldProps<number>, Pick<React__
|
|
|
1423
1660
|
*/
|
|
1424
1661
|
interface RadioButtonsFieldProps<V> extends BaseFormFieldProps<V> {
|
|
1425
1662
|
/**
|
|
1426
|
-
* Available options for radio buttons
|
|
1663
|
+
* Available options for radio buttons.
|
|
1664
|
+
*
|
|
1665
|
+
* Values are compared by reference equality (`===`). When options contain
|
|
1666
|
+
* non-primitive values, pass the same object references for `value` and
|
|
1667
|
+
* the corresponding option entry.
|
|
1427
1668
|
*/
|
|
1428
1669
|
options: Option<V>[];
|
|
1429
1670
|
}
|
|
@@ -1528,7 +1769,7 @@ type RendererFieldDefinition = {
|
|
|
1528
1769
|
placeholder?: string;
|
|
1529
1770
|
helperText?: string;
|
|
1530
1771
|
helperTextPlacement?: "bottom" | "tooltip";
|
|
1531
|
-
fieldComponentProps
|
|
1772
|
+
fieldComponentProps: Omit<FormFieldPropsByType[K], "value" | "onChange">;
|
|
1532
1773
|
};
|
|
1533
1774
|
}[FieldComponent];
|
|
1534
1775
|
/**
|
|
@@ -1632,4 +1873,4 @@ declare const ActionForm: <Q extends ActionDefinition<unknown>>(props: ActionFor
|
|
|
1632
1873
|
|
|
1633
1874
|
declare const BaseForm: React__default.FC<BaseFormProps>;
|
|
1634
1875
|
|
|
1635
|
-
export { ActionForm, type ActionFormProps, type ActionParameters, type AnnotationPortalTarget, type AnnotationType, BaseFilterList, type BaseFilterListProps, BaseForm, type BaseFormFieldProps, type BaseFormProps, BasePdfViewer, BaseTable, type BaseTableProps, type CellEditInfo, ColumnConfigDialog, type ColumnConfigDialogProps, type ColumnConfigOptions, type ColumnDefinition, type ColumnDefinitionLocator, type CustomColumnLocator, type CustomFieldProps, type DatetimePickerFieldProps, type DropdownFieldProps, type FieldComponent, type FieldValueType, type FilePickerProps, type FilterComponentType, type FilterDefinitionUnion, FilterList, type FilterListItemProps, type FilterListProps, type FilterState, type FormError, type FormFieldDefinition, type FormFieldPropsByType, type FormState, type FunctionColumnLocator, type NumberInputFieldProps, type ObjectSetFieldProps, ObjectTable, type ObjectTableProps, type Option, type OutlineItem, type PdfAnnotation, type PdfDownloadResult, PdfViewer, PdfViewerAnnotationLayer, type PdfViewerAnnotationLayerProps, PdfViewerContent, type PdfViewerContentProps, type PdfViewerMediaProps, PdfViewerOutlineSidebar, type PdfViewerOutlineSidebarProps, type PdfViewerProps, PdfViewerSearchBar, type PdfViewerSearchBarProps, PdfViewerSidebar, type PdfViewerSidebarProps, PdfViewerToolbar, type PdfViewerToolbarProps, type PropertyColumnLocator, type PropertyFilterDefinition, type RadioButtonsFieldProps, type RdpColumnLocator, type RenderFilterInput, type RendererFieldDefinition, type SidebarMode, type TextAreaFieldProps, type TextInputFieldProps, type UsePdfViewerCoreOptions, type UsePdfViewerCoreResult, type UsePdfViewerResult, type UsePdfViewerSearchResult, type UsePdfViewerStateOptions, type UsePdfViewerStateResult, deserializeFilterStates, serializeFilterStates, usePdfAnnotationPortals, usePdfDocument, usePdfOutline, usePdfViewer, usePdfViewerCore, usePdfViewerSearch, usePdfViewerState, usePdfViewerSync };
|
|
1876
|
+
export { ActionForm, type ActionFormProps, type ActionParameters, type AnnotationPortalTarget, type AnnotationType, BaseFilterList, type BaseFilterListProps, BaseForm, type BaseFormFieldProps, type BaseFormProps, BasePdfViewer, BaseTable, type BaseTableProps, type CellEditInfo, ColumnConfigDialog, type ColumnConfigDialogProps, type ColumnConfigOptions, type ColumnDefinition, type ColumnDefinitionLocator, type CustomColumnLocator, type CustomFieldProps, type DatetimePickerFieldProps, type DropdownFieldProps, type FieldComponent, type FieldValueType, type FilePickerProps, type FilterComponentType, type FilterDefinitionUnion, FilterList, type FilterListItemProps, type FilterListProps, type FilterState, type FormError, type FormFieldDefinition, type FormFieldPropsByType, type FormState, type FunctionColumnLocator, type NumberInputFieldProps, type ObjectSetFieldProps, ObjectTable, type ObjectTableProps, type Option, type OutlineItem, type PdfAnnotation, type PdfAnnotationRenderProps, type PdfCustomAnnotation, type PdfDownloadResult, type PdfFormFieldValue, type PdfRect, type PdfTextHighlightEvent, PdfViewer, PdfViewerAnnotationLayer, type PdfViewerAnnotationLayerProps, PdfViewerContent, type PdfViewerContentProps, type PdfViewerContextValue, type PdfViewerHandle, type PdfViewerInstanceOptions, type PdfViewerMediaProps, PdfViewerOutlineSidebar, type PdfViewerOutlineSidebarProps, type PdfViewerProps, PdfViewerProvider, PdfViewerSearchBar, type PdfViewerSearchBarProps, PdfViewerSidebar, type PdfViewerSidebarProps, PdfViewerToolbar, type PdfViewerToolbarProps, type PropertyColumnLocator, type PropertyFilterDefinition, type RadioButtonsFieldProps, type RdpColumnLocator, type RenderFilterInput, type RendererFieldDefinition, type SidebarMode, type TextAreaFieldProps, type TextInputFieldProps, type UsePdfFormFieldsOptions, type UsePdfFormFieldsResult, type UsePdfHighlightModeOptions, type UsePdfHighlightModeResult, type UsePdfViewerCoreOptions, type UsePdfViewerCoreResult, type UsePdfViewerResult, type UsePdfViewerSearchResult, type UsePdfViewerStateOptions, type UsePdfViewerStateResult, deserializeFilterStates, serializeFilterStates, usePdfAnnotationPortals, usePdfAnnotationsByPage, usePdfDocument, usePdfFormFields, usePdfHighlightMode, usePdfOutline, usePdfViewer, usePdfViewerContext, usePdfViewerCore, usePdfViewerInstance, usePdfViewerSearch, usePdfViewerState, usePdfViewerSync };
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkMRRRZN44_cjs = require('../chunk-MRRRZN44.cjs');
|
|
4
4
|
require('../chunk-HMQTYQEX.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "ActionButton", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkMRRRZN44_cjs.ActionButton; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "Dialog", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkMRRRZN44_cjs.Dialog; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "Tooltip", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkMRRRZN44_cjs.Tooltip; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "TooltipArrow", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkMRRRZN44_cjs.TooltipArrow; }
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=primitives.cjs.map
|
|
25
25
|
//# sourceMappingURL=primitives.cjs.map
|
|
@@ -8,13 +8,14 @@ declare function ActionButton({ variant, className, ...rest }: ButtonProps): Rea
|
|
|
8
8
|
|
|
9
9
|
interface DialogProps {
|
|
10
10
|
isOpen: boolean;
|
|
11
|
-
onOpenChange: () => void;
|
|
11
|
+
onOpenChange: (open: boolean) => void;
|
|
12
12
|
title: React__default.ReactNode;
|
|
13
13
|
children: React__default.ReactNode;
|
|
14
14
|
footer?: React__default.ReactNode;
|
|
15
15
|
className?: string;
|
|
16
|
+
disablePointerDismissal?: boolean;
|
|
16
17
|
}
|
|
17
|
-
declare function Dialog({ isOpen, onOpenChange, title, children, footer, className, }: DialogProps): React__default.ReactElement;
|
|
18
|
+
declare function Dialog({ isOpen, onOpenChange, title, children, footer, className, disablePointerDismissal, }: DialogProps): React__default.ReactElement;
|
|
18
19
|
|
|
19
20
|
interface TooltipProps extends Omit<TooltipRootProps, "className"> {
|
|
20
21
|
}
|
|
@@ -53,17 +53,21 @@ export const ActionForm = typedReactMemo(function ({
|
|
|
53
53
|
}
|
|
54
54
|
}, [metadataError, onError]);
|
|
55
55
|
const parameters = metadata?.parameters;
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
const customFieldDefinitions = useMemo(() => {
|
|
57
|
+
if (formFieldDefinitions == null) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
// RendererFieldDefinition is a discriminated union keyed by fieldComponent.
|
|
61
|
+
// TypeScript can't verify that the spread preserves the fieldComponent ↔
|
|
62
|
+
// fieldComponentProps pairing, but FormFieldDefinition guarantees it.
|
|
63
|
+
return formFieldDefinitions.map(def => ({
|
|
64
|
+
...def,
|
|
65
|
+
fieldKey: String(def.fieldKey),
|
|
66
|
+
fieldType: parameters?.[String(def.fieldKey)]?.type,
|
|
67
|
+
defaultValue: def.defaultValue
|
|
68
|
+
}));
|
|
69
|
+
}, [formFieldDefinitions, parameters]);
|
|
70
|
+
const rendererFieldDefinitions = useMemo(() => customFieldDefinitions ?? (metadata != null ? getDefaultFieldDefinitions(metadata) : EMPTY_FIELD_DEFINITIONS), [customFieldDefinitions, metadata]);
|
|
67
71
|
const coerceFormState = useCallback(rawState => {
|
|
68
72
|
const coerced = {};
|
|
69
73
|
for (const [key, value] of Object.entries(rawState)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionForm.js","names":["useOsdkMetadata","useOsdkAction","React","useCallback","useEffect","useMemo","typedReactMemo","BaseForm","coerceFieldValue","getDefaultFieldDefinitions","EMPTY_FIELD_DEFINITIONS","ActionForm","actionDefinition","formTitle","formFieldDefinitions","formState","controlledFormState","onFormStateChange","isSubmitDisabled","onSubmit","onValidationResponse","_onValidationResponse","onSuccess","onError","applyAction","osdkApplyAction","isPending","metadata","loading","metadataLoading","error","metadataError","type","parameters","
|
|
1
|
+
{"version":3,"file":"ActionForm.js","names":["useOsdkMetadata","useOsdkAction","React","useCallback","useEffect","useMemo","typedReactMemo","BaseForm","coerceFieldValue","getDefaultFieldDefinitions","EMPTY_FIELD_DEFINITIONS","ActionForm","actionDefinition","formTitle","formFieldDefinitions","formState","controlledFormState","onFormStateChange","isSubmitDisabled","onSubmit","onValidationResponse","_onValidationResponse","onSuccess","onError","applyAction","osdkApplyAction","isPending","metadata","loading","metadataLoading","error","metadataError","type","parameters","customFieldDefinitions","map","def","fieldKey","String","fieldType","defaultValue","rendererFieldDefinitions","coerceFormState","rawState","coerced","key","value","Object","entries","handleSubmit","rawFormState","result","e","handleFieldValueChange","prev","resolvedTitle","displayName","apiName","commonProps","fieldDefinitions","isLoading","onFieldValueChange","createElement","_extends"],"sources":["ActionForm.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ActionDefinition } from \"@osdk/api\";\nimport { useOsdkMetadata } from \"@osdk/react\";\nimport { useOsdkAction } from \"@osdk/react/experimental\";\nimport React, { useCallback, useEffect, useMemo } from \"react\";\nimport { typedReactMemo } from \"../shared/typedMemo.js\";\nimport type { ActionFormProps, FormState } from \"./ActionFormApi.js\";\nimport { BaseForm } from \"./BaseForm.js\";\nimport type { RendererFieldDefinition } from \"./FormFieldApi.js\";\nimport { coerceFieldValue } from \"./utils/coerceFieldValue.js\";\nimport { getDefaultFieldDefinitions } from \"./utils/getDefaultFieldDefinitions.js\";\n\nconst EMPTY_FIELD_DEFINITIONS: readonly [] = [];\n\nexport const ActionForm: <Q extends ActionDefinition<unknown>>(\n props: ActionFormProps<Q>,\n) => React.ReactElement = typedReactMemo(function ActionFormFn<\n Q extends ActionDefinition<unknown>,\n>({\n actionDefinition,\n formTitle,\n formFieldDefinitions,\n formState: controlledFormState,\n onFormStateChange,\n isSubmitDisabled,\n onSubmit,\n onValidationResponse: _onValidationResponse,\n onSuccess,\n onError,\n}: ActionFormProps<Q>): React.ReactElement {\n const { applyAction: osdkApplyAction, isPending } = useOsdkAction(\n actionDefinition,\n );\n const {\n metadata,\n loading: metadataLoading,\n error: metadataError,\n } = useOsdkMetadata(actionDefinition);\n\n useEffect(\n function saveMetadataError() {\n if (metadataError != null) {\n onError?.({ type: \"unknown\", error: metadataError });\n }\n },\n [metadataError, onError],\n );\n\n const parameters = metadata?.parameters;\n\n const customFieldDefinitions: ReadonlyArray<RendererFieldDefinition> | null =\n useMemo(() => {\n if (formFieldDefinitions == null) {\n return null;\n }\n // RendererFieldDefinition is a discriminated union keyed by fieldComponent.\n // TypeScript can't verify that the spread preserves the fieldComponent ↔\n // fieldComponentProps pairing, but FormFieldDefinition guarantees it.\n return formFieldDefinitions.map(\n (def) =>\n ({\n ...def,\n fieldKey: String(def.fieldKey),\n fieldType: parameters?.[String(def.fieldKey)]?.type,\n defaultValue: def.defaultValue,\n }) as RendererFieldDefinition,\n );\n }, [formFieldDefinitions, parameters]);\n\n const rendererFieldDefinitions = useMemo(\n () =>\n customFieldDefinitions\n ?? (metadata != null\n ? getDefaultFieldDefinitions(metadata)\n : EMPTY_FIELD_DEFINITIONS),\n [customFieldDefinitions, metadata],\n );\n\n const coerceFormState = useCallback(\n (rawState: Record<string, unknown>): Record<string, unknown> => {\n const coerced: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(rawState)) {\n coerced[key] = coerceFieldValue(parameters?.[key]?.type, value);\n }\n return coerced;\n },\n [parameters],\n );\n\n const handleSubmit = useCallback(\n async (rawFormState: Record<string, unknown>) => {\n const formState = coerceFormState(rawFormState) as FormState<Q>;\n try {\n if (onSubmit != null) {\n await onSubmit(formState, osdkApplyAction);\n } else {\n const result = await osdkApplyAction(formState);\n onSuccess?.(result);\n }\n } catch (e) {\n onError?.({ type: \"submission\", error: e });\n }\n },\n [coerceFormState, onSubmit, osdkApplyAction, onSuccess, onError],\n );\n\n const handleFieldValueChange = useCallback(\n (fieldKey: string, value: unknown) => {\n onFormStateChange?.(\n (prev) =>\n ({\n ...prev,\n [fieldKey]: value,\n }) as FormState<Q>,\n );\n },\n [onFormStateChange],\n );\n\n const resolvedTitle = formTitle ?? metadata?.displayName\n ?? actionDefinition.apiName;\n\n const isControlled = controlledFormState != null;\n\n const commonProps = {\n formTitle: resolvedTitle,\n fieldDefinitions: rendererFieldDefinitions,\n onSubmit: handleSubmit,\n isSubmitDisabled,\n isPending,\n isLoading: metadataLoading,\n onFieldValueChange: handleFieldValueChange,\n };\n\n if (!isControlled) {\n return <BaseForm {...commonProps} />;\n }\n\n return <BaseForm {...commonProps} formState={controlledFormState} />;\n});\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,eAAe,QAAQ,aAAa;AAC7C,SAASC,aAAa,QAAQ,0BAA0B;AACxD,OAAOC,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAC9D,SAASC,cAAc,QAAQ,wBAAwB;AAEvD,SAASC,QAAQ,QAAQ,eAAe;AAExC,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,0BAA0B,QAAQ,uCAAuC;AAElF,MAAMC,uBAAoC,GAAG,EAAE;AAE/C,OAAO,MAAMC,UAEU,GAAGL,cAAc,CAAC,UAEvC;EACAM,gBAAgB;EAChBC,SAAS;EACTC,oBAAoB;EACpBC,SAAS,EAAEC,mBAAmB;EAC9BC,iBAAiB;EACjBC,gBAAgB;EAChBC,QAAQ;EACRC,oBAAoB,EAAEC,qBAAqB;EAC3CC,SAAS;EACTC;AACkB,CAAC,EAAsB;EACzC,MAAM;IAAEC,WAAW,EAAEC,eAAe;IAAEC;EAAU,CAAC,GAAGzB,aAAa,CAC/DW,gBACF,CAAC;EACD,MAAM;IACJe,QAAQ;IACRC,OAAO,EAAEC,eAAe;IACxBC,KAAK,EAAEC;EACT,CAAC,GAAG/B,eAAe,CAACY,gBAAgB,CAAC;EAErCR,SAAS,CACP,YAA6B;IAC3B,IAAI2B,aAAa,IAAI,IAAI,EAAE;MACzBR,OAAO,GAAG;QAAES,IAAI,EAAE,SAAS;QAAEF,KAAK,EAAEC;MAAc,CAAC,CAAC;IACtD;EACF,CAAC,EACD,CAACA,aAAa,EAAER,OAAO,CACzB,CAAC;EAED,MAAMU,UAAU,GAAGN,QAAQ,EAAEM,UAAU;EAEvC,MAAMC,sBAAqE,GACzE7B,OAAO,CAAC,MAAM;IACZ,IAAIS,oBAAoB,IAAI,IAAI,EAAE;MAChC,OAAO,IAAI;IACb;IACA;IACA;IACA;IACA,OAAOA,oBAAoB,CAACqB,GAAG,CAC5BC,GAAG,KACD;MACC,GAAGA,GAAG;MACNC,QAAQ,EAAEC,MAAM,CAACF,GAAG,CAACC,QAAQ,CAAC;MAC9BE,SAAS,EAAEN,UAAU,GAAGK,MAAM,CAACF,GAAG,CAACC,QAAQ,CAAC,CAAC,EAAEL,IAAI;MACnDQ,YAAY,EAAEJ,GAAG,CAACI;IACpB,CAAC,CACL,CAAC;EACH,CAAC,EAAE,CAAC1B,oBAAoB,EAAEmB,UAAU,CAAC,CAAC;EAExC,MAAMQ,wBAAwB,GAAGpC,OAAO,CACtC,MACE6B,sBAAsB,KAChBP,QAAQ,IAAI,IAAI,GAChBlB,0BAA0B,CAACkB,QAAQ,CAAC,GACpCjB,uBAAuB,CAAC,EAChC,CAACwB,sBAAsB,EAAEP,QAAQ,CACnC,CAAC;EAED,MAAMe,eAAe,GAAGvC,WAAW,CAChCwC,QAAiC,IAA8B;IAC9D,MAAMC,OAAgC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,QAAQ,CAAC,EAAE;MACnDC,OAAO,CAACC,GAAG,CAAC,GAAGrC,gBAAgB,CAACyB,UAAU,GAAGY,GAAG,CAAC,EAAEb,IAAI,EAAEc,KAAK,CAAC;IACjE;IACA,OAAOF,OAAO;EAChB,CAAC,EACD,CAACX,UAAU,CACb,CAAC;EAED,MAAMgB,YAAY,GAAG9C,WAAW,CAC9B,MAAO+C,YAAqC,IAAK;IAC/C,MAAMnC,SAAS,GAAG2B,eAAe,CAACQ,YAAY,CAAiB;IAC/D,IAAI;MACF,IAAI/B,QAAQ,IAAI,IAAI,EAAE;QACpB,MAAMA,QAAQ,CAACJ,SAAS,EAAEU,eAAe,CAAC;MAC5C,CAAC,MAAM;QACL,MAAM0B,MAAM,GAAG,MAAM1B,eAAe,CAACV,SAAS,CAAC;QAC/CO,SAAS,GAAG6B,MAAM,CAAC;MACrB;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV7B,OAAO,GAAG;QAAES,IAAI,EAAE,YAAY;QAAEF,KAAK,EAAEsB;MAAE,CAAC,CAAC;IAC7C;EACF,CAAC,EACD,CAACV,eAAe,EAAEvB,QAAQ,EAAEM,eAAe,EAAEH,SAAS,EAAEC,OAAO,CACjE,CAAC;EAED,MAAM8B,sBAAsB,GAAGlD,WAAW,CACxC,CAACkC,QAAgB,EAAES,KAAc,KAAK;IACpC7B,iBAAiB,GACdqC,IAAI,KACF;MACC,GAAGA,IAAI;MACP,CAACjB,QAAQ,GAAGS;IACd,CAAC,CACL,CAAC;EACH,CAAC,EACD,CAAC7B,iBAAiB,CACpB,CAAC;EAED,MAAMsC,aAAa,GAAG1C,SAAS,IAAIc,QAAQ,EAAE6B,WAAW,IACnD5C,gBAAgB,CAAC6C,OAAO;EAI7B,MAAMC,WAAW,GAAG;IAClB7C,SAAS,EAAE0C,aAAa;IACxBI,gBAAgB,EAAElB,wBAAwB;IAC1CtB,QAAQ,EAAE8B,YAAY;IACtB/B,gBAAgB;IAChBQ,SAAS;IACTkC,SAAS,EAAE/B,eAAe;IAC1BgC,kBAAkB,EAAER;EACtB,CAAC;EAED,IAAI,EAZiBrC,mBAAmB,IAAI,IAAI,CAY/B,EAAE;IACjB,oBAAOd,KAAA,CAAA4D,aAAA,CAACvD,QAAQ,EAAKmD,WAAc,CAAC;EACtC;EAEA,oBAAOxD,KAAA,CAAA4D,aAAA,CAACvD,QAAQ,EAAAwD,QAAA,KAAKL,WAAW;IAAE3C,SAAS,EAAEC;EAAoB,EAAE,CAAC;AACtE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormFieldApi.js","names":[],"sources":["FormFieldApi.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 {\n ActionDefinition,\n ActionMetadata,\n ActionParam,\n CompileTimeMetadata,\n DataValueClientToWire,\n ObjectSet,\n ObjectTypeDefinition,\n} from \"@osdk/api\";\nimport type React from \"react\";\n\n/**\n * A form field definition specifies configuration for a single field\n */\nexport interface FormFieldDefinition<\n Q extends ActionDefinition<unknown>,\n K extends FieldKey<Q> = FieldKey<Q>,\n> {\n /**\n * The field's unique key\n */\n fieldKey: K;\n\n /**\n * Display label for the field\n * If not provided, the form field will not show any label.\n */\n label?: string;\n\n /**\n * Default value of the field\n */\n defaultValue?: FieldValueType<Q, K>;\n\n /**\n * The form field component type to render\n */\n fieldComponent: ValidFormFieldForPropertyType<FieldDescriptorType<Q, K>>;\n\n /**\n * Whether the field is required\n */\n isRequired?: boolean;\n\n /**\n * Placeholder text\n */\n placeholder?: string;\n\n /**\n * Additional information to display on this field\n * The placement of helper text depends on the value of helperTextPlacement prop\n */\n helperText?: string;\n\n /**\n * The placement of the helper text either below the field or in a tooltip\n *\n * @default \"tooltip\"\n */\n helperTextPlacement?: \"bottom\" | \"tooltip\";\n\n /**\n * Whether the field is disabled\n */\n isDisabled?: boolean;\n\n /**\n * A callback to return a custom error message if validation failed\n *\n * @param validationRule the validation rule that failed with the error message\n * @returns the error message to display\n */\n onValidationError?: (error: ValidationError) => string;\n\n /**\n * Additional function to validate the field\n *\n * @param value the current field value\n * @returns a boolean promise indicating whether the value is valid\n */\n validate?: (value: FieldValueType<Q, K>) => Promise<boolean>;\n\n /**\n * The component props for the form field\n * Excludes runtime props (key, onChange) which are managed by ActionForm\n */\n fieldComponentProps?: Omit<\n FormFieldPropsByType[\n ValidFormFieldForPropertyType<\n FieldDescriptorType<Q, K>\n >\n ],\n \"key\" | \"onChange\"\n >;\n}\n\ntype ValidationError = { type: ValidationRule; error: string };\n\ntype ValidationRule =\n | \"required\"\n | \"min\"\n | \"max\"\n | \"minLength\"\n | \"maxLength\"\n | \"pattern\"\n | \"validate\";\n\n/**\n * Maps field types to their corresponding props\n */\nexport interface FormFieldPropsByType {\n DATETIME_PICKER: DatetimePickerFieldProps;\n DROPDOWN: DropdownFieldProps<unknown, boolean>;\n FILE_PICKER: FilePickerProps;\n NUMBER_INPUT: NumberInputFieldProps;\n OBJECT_SET: ObjectSetFieldProps<ObjectTypeDefinition>;\n RADIO_BUTTONS: RadioButtonsFieldProps<unknown>;\n TEXT_AREA: TextAreaFieldProps;\n TEXT_INPUT: TextInputFieldProps;\n CUSTOM: CustomFieldProps<unknown>;\n}\n\n/**\n * Datetime picker field props.\n *\n * When `formatDate` is omitted, ISO-like format is used (YYYY-MM-DD / YYYY-MM-DD HH:mm).\n */\nexport interface DatetimePickerFieldProps extends BaseFormFieldProps<Date> {\n /**\n * The earliest date the user can select.\n * If provided, this will be added to the field validation.\n */\n min?: Date;\n\n /**\n * The latest date the user can select.\n * If provided, this will be added to the field validation.\n */\n max?: Date;\n\n /**\n * Whether to show time picker.\n */\n showTime?: boolean;\n\n /**\n * Whether to close the popover after selecting a date.\n * @default true when `showTime` is false, false when `showTime` is true\n */\n closeOnSelection?: boolean;\n\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n\n /** Formats a Date for display in the trigger button. */\n formatDate?: (date: Date) => string;\n}\n\n/**\n * Dropdown field props with selectable items\n */\nexport interface DropdownFieldProps<V, Multiple extends boolean = false>\n extends BaseFormFieldProps<Multiple extends true ? V[] : V>\n{\n /**\n * Available items for the dropdown\n */\n items: V[];\n\n /**\n * Converts an item to a display string. Defaults to `String()`.\n */\n itemToStringLabel?: (item: V) => string;\n\n /**\n * Returns a unique string key for a list item. Used as the React `key`.\n * Falls back to the item's index when not provided.\n */\n itemToKey?: (item: V) => string;\n\n /**\n * Custom equality check for item values. Defaults to `Object.is`.\n * Required when items are objects to ensure correct selection matching.\n */\n isItemEqual?: (a: V, b: V) => boolean;\n\n /**\n * Whether the dropdown allows searching/filtering.\n * When true, renders a Combobox with a search input.\n * When false (default), renders a Select dropdown.\n */\n isSearchable?: boolean;\n\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n\n /**\n * Whether multiple values can be selected\n */\n isMultiple?: Multiple;\n}\n\nexport interface FilePickerProps extends BaseFormFieldProps<File | File[]> {\n /**\n * Whether multiple files can be selected\n */\n isMulti?: boolean;\n\n /**\n * Accepted file types (e.g., \"image/*\", \".pdf\")\n */\n accept?: string | string[];\n\n /**\n * Maximum file size in bytes\n */\n maxSize?: number;\n}\n\n/**\n * Text area field props\n */\nexport interface TextAreaFieldProps extends\n BaseFormFieldProps<string>,\n Pick<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n | \"rows\"\n | \"wrap\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"minLength\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"maxLength\"\n >\n{}\n\nexport interface TextInputFieldProps extends\n BaseFormFieldProps<string>,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n /**\n * If provided, this will be added to the field validation\n */\n | \"minLength\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"maxLength\"\n >\n{\n placeholder?: string;\n}\n\n/**\n * Number input field props\n */\nexport interface NumberInputFieldProps extends\n BaseFormFieldProps<number>,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n /**\n * If provided, this will be added to the field validation\n */\n | \"min\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"max\"\n | \"step\"\n >\n{}\n\n/**\n * Radio buttons field props\n */\nexport interface RadioButtonsFieldProps<V> extends BaseFormFieldProps<V> {\n /**\n * Available options for radio buttons\n */\n options: Option<V>[];\n}\n\n/**\n * Option interface for radio button options\n */\nexport interface Option<V> {\n label: string;\n value: V;\n}\n\n/**\n * Object set field displays the summary of the count of the given object set\n */\nexport interface ObjectSetFieldProps<T extends ObjectTypeDefinition>\n extends BaseFormFieldProps<ObjectSet<T>>\n{}\n\n/**\n * Custom field props for user-defined renderers\n */\nexport interface CustomFieldProps<V> extends BaseFormFieldProps<V> {\n /**\n * Custom renderer function\n */\n customRenderer: (props: BaseFormFieldProps<V>) => React.ReactNode;\n}\n\nexport interface BaseFormFieldProps<V> {\n /**\n * The HTML `id` attribute for the field input element.\n * Used for `<label htmlFor>` association.\n */\n id?: string;\n\n /**\n * The value of the form field\n */\n value: V | null;\n /**\n * Called when the field value changes.\n *\n * ActionForm internally wraps this to pass the key to `onFieldValueChange`:\n * ```\n * <DropdownField\n * {...fieldDef}\n * onChange={(value) => onFieldValueChange(fieldDef.key, value)}\n * />\n * ```\n *\n * @param value The new value of the form field\n */\n onChange?: (value: V | null) => void;\n}\n\nexport type FieldKey<Q extends ActionDefinition<unknown>> =\n keyof ActionParameters<Q>;\n\n/**\n * Extracts parameters from an ActionDefinition\n */\nexport type ActionParameters<Q extends ActionDefinition<unknown>> =\n CompileTimeMetadata<Q>[\"parameters\"];\n\n/**\n * Extracts the value type for a specific parameter\n *\n * TODO: Re-use `BaseType`\n */\nexport type FieldValueType<\n Q extends ActionDefinition<unknown>,\n K extends keyof ActionParameters<Q> = keyof ActionParameters<Q>,\n> = ActionParameters<Q>[K][\"type\"] extends\n ActionMetadata.DataType.Object<infer T> ? ActionParam.ObjectType<T>\n : ActionParameters<Q>[K][\"type\"] extends ActionMetadata.DataType.ObjectSet<\n infer T\n > ? ActionParam.ObjectSetType<T>\n : ActionParameters<Q>[K][\"type\"] extends ActionMetadata.DataType.Struct<\n infer T\n > ? ActionParam.StructType<T>\n : ActionParameters<Q>[K][\"type\"] extends keyof DataValueClientToWire\n ? DataValueClientToWire[ActionParameters<Q>[K][\"type\"]]\n : never;\n\n/**\n * Extracts the parameter type descriptor for a specific action parameter.\n */\nexport type FieldDescriptorType<\n Q extends ActionDefinition<unknown> = ActionDefinition<unknown>,\n K extends keyof ActionParameters<Q> = keyof ActionParameters<Q>,\n> = ActionParameters<Q>[K][\"type\"];\n\n/**\n * Available form field component types\n */\nexport type FieldComponent =\n | \"DATETIME_PICKER\"\n | \"DROPDOWN\"\n | \"FILE_PICKER\"\n | \"NUMBER_INPUT\"\n | \"RADIO_BUTTONS\"\n | \"OBJECT_SET\"\n | \"TEXT_AREA\"\n | \"TEXT_INPUT\"\n | \"CUSTOM\";\n\n/**\n * Describes the data type of a form field, independent of OSDK.\n * Mirrors ActionMetadata.DataType to keep the rendering layer OSDK-agnostic.\n */\nexport type FieldType =\n | \"boolean\"\n | \"string\"\n | \"integer\"\n | \"long\"\n | \"double\"\n | \"datetime\"\n | \"timestamp\"\n | \"attachment\"\n | \"marking\"\n | \"mediaReference\"\n | \"objectType\"\n | \"geoshape\"\n | \"geohash\"\n | { type: \"object\"; object: string }\n | { type: \"objectSet\"; objectSet: string }\n | { type: \"interface\"; interface: string }\n | { type: \"struct\"; struct: Record<string, string> };\n\n/**\n * An OSDK-agnostic field definition used by BaseForm and FormFieldRenderer.\n * Contains only the information needed to render a single field — no generics,\n * no compile-time parameter constraints.\n *\n * Implemented as a distributed mapped type: switching on `fieldComponent`\n * narrows `fieldComponentProps` to the correct props type automatically.\n */\nexport type RendererFieldDefinition = {\n [K in FieldComponent]: {\n fieldKey: string;\n fieldComponent: K;\n fieldType?: FieldType;\n label?: string;\n defaultValue?: unknown;\n isRequired?: boolean;\n placeholder?: string;\n helperText?: string;\n helperTextPlacement?: \"bottom\" | \"tooltip\";\n fieldComponentProps?: Omit<FormFieldPropsByType[K], \"value\" | \"onChange\">;\n };\n}[FieldComponent];\n\n/**\n * Gets valid form field types for a given property type\n */\nexport type ValidFormFieldForPropertyType<P extends FieldDescriptorType> =\n P extends \"objectSet\" ? \"OBJECT_SET\"\n : P extends \"object\" ? \"DROPDOWN\"\n : P extends \"mediaReference\" | \"attachment\" ? \"FILE_PICKER\"\n : P extends \"boolean\" ? \"RADIO_BUTTONS\" | \"DROPDOWN\"\n : P extends \"string\" ? \"TEXT_INPUT\" | \"TEXT_AREA\"\n : P extends \"datetime\" | \"timestamp\" ? \"DATETIME_PICKER\"\n : P extends\n | \"double\"\n | \"integer\"\n | \"long\"\n | \"float\"\n | \"short\"\n | \"byte\"\n | \"decimal\" ? \"NUMBER_INPUT\"\n : never;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FormFieldApi.js","names":[],"sources":["FormFieldApi.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 {\n ActionDefinition,\n ActionMetadata,\n ActionParam,\n CompileTimeMetadata,\n DataValueClientToWire,\n ObjectSet,\n ObjectTypeDefinition,\n} from \"@osdk/api\";\nimport type React from \"react\";\n\n/**\n * A form field definition specifies configuration for a single field\n */\nexport interface FormFieldDefinition<\n Q extends ActionDefinition<unknown>,\n K extends FieldKey<Q> = FieldKey<Q>,\n> {\n /**\n * The field's unique key\n */\n fieldKey: K;\n\n /**\n * Display label for the field\n * If not provided, the form field will not show any label.\n */\n label?: string;\n\n /**\n * Default value of the field\n */\n defaultValue?: FieldValueType<Q, K>;\n\n /**\n * The form field component type to render\n */\n fieldComponent: ValidFormFieldForPropertyType<FieldDescriptorType<Q, K>>;\n\n /**\n * Whether the field is required\n */\n isRequired?: boolean;\n\n /**\n * Placeholder text\n */\n placeholder?: string;\n\n /**\n * Additional information to display on this field\n * The placement of helper text depends on the value of helperTextPlacement prop\n */\n helperText?: string;\n\n /**\n * The placement of the helper text either below the field or in a tooltip\n *\n * @default \"tooltip\"\n */\n helperTextPlacement?: \"bottom\" | \"tooltip\";\n\n /**\n * Whether the field is disabled\n */\n isDisabled?: boolean;\n\n /**\n * A callback to return a custom error message if validation failed\n *\n * @param validationRule the validation rule that failed with the error message\n * @returns the error message to display\n */\n onValidationError?: (error: ValidationError) => string;\n\n /**\n * Additional function to validate the field\n *\n * @param value the current field value\n * @returns a boolean promise indicating whether the value is valid\n */\n validate?: (value: FieldValueType<Q, K>) => Promise<boolean>;\n\n /**\n * The component props for the form field\n * Excludes runtime props (value, onChange) which are managed by ActionForm\n */\n fieldComponentProps: Omit<\n FormFieldPropsByType[\n ValidFormFieldForPropertyType<\n FieldDescriptorType<Q, K>\n >\n ],\n \"value\" | \"onChange\"\n >;\n}\n\ntype ValidationError = { type: ValidationRule; error: string };\n\ntype ValidationRule =\n | \"required\"\n | \"min\"\n | \"max\"\n | \"minLength\"\n | \"maxLength\"\n | \"pattern\"\n | \"validate\";\n\n/**\n * Maps field types to their corresponding props\n */\nexport interface FormFieldPropsByType {\n DATETIME_PICKER: DatetimePickerFieldProps;\n DROPDOWN: DropdownFieldProps<unknown, boolean>;\n FILE_PICKER: FilePickerProps;\n NUMBER_INPUT: NumberInputFieldProps;\n OBJECT_SET: ObjectSetFieldProps<ObjectTypeDefinition>;\n RADIO_BUTTONS: RadioButtonsFieldProps<unknown>;\n TEXT_AREA: TextAreaFieldProps;\n TEXT_INPUT: TextInputFieldProps;\n CUSTOM: CustomFieldProps<unknown>;\n}\n\n/**\n * Datetime picker field props.\n *\n * When `formatDate` is omitted, ISO-like format is used (YYYY-MM-DD / YYYY-MM-DD HH:mm).\n */\nexport interface DatetimePickerFieldProps extends BaseFormFieldProps<Date> {\n /**\n * The earliest date the user can select.\n * If provided, this will be added to the field validation.\n */\n min?: Date;\n\n /**\n * The latest date the user can select.\n * If provided, this will be added to the field validation.\n */\n max?: Date;\n\n /**\n * Whether to show time picker.\n */\n showTime?: boolean;\n\n /**\n * Whether to close the popover after selecting a date.\n * @default true when `showTime` is false, false when `showTime` is true\n */\n closeOnSelection?: boolean;\n\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n\n /** Formats a Date for display in the trigger button. */\n formatDate?: (date: Date) => string;\n}\n\n/**\n * Dropdown field props with selectable items\n */\nexport interface DropdownFieldProps<V, Multiple extends boolean = false>\n extends BaseFormFieldProps<Multiple extends true ? V[] : V>\n{\n /**\n * Available items for the dropdown\n */\n items: V[];\n\n /**\n * Converts an item to a display string. Defaults to `String()`.\n */\n itemToStringLabel?: (item: V) => string;\n\n /**\n * Returns a unique string key for a list item. Used as the React `key`.\n * Falls back to the item's index when not provided.\n */\n itemToKey?: (item: V) => string;\n\n /**\n * Custom equality check for item values. Defaults to `Object.is`.\n * Required when items are objects to ensure correct selection matching.\n */\n isItemEqual?: (a: V, b: V) => boolean;\n\n /**\n * Whether the dropdown allows searching/filtering.\n * When true, renders a Combobox with a search input.\n * When false (default), renders a Select dropdown.\n */\n isSearchable?: boolean;\n\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n\n /**\n * Whether multiple values can be selected\n */\n isMultiple?: Multiple;\n}\n\nexport interface FilePickerProps extends BaseFormFieldProps<File | File[]> {\n /**\n * Whether multiple files can be selected\n */\n isMulti?: boolean;\n\n /**\n * Accepted file types (e.g., \"image/*\", \".pdf\")\n */\n accept?: string | string[];\n\n /**\n * Maximum file size in bytes\n */\n maxSize?: number;\n}\n\n/**\n * Text area field props\n */\nexport interface TextAreaFieldProps extends\n BaseFormFieldProps<string>,\n Pick<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n | \"rows\"\n | \"wrap\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"minLength\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"maxLength\"\n >\n{\n placeholder?: string;\n}\n\nexport interface TextInputFieldProps extends\n BaseFormFieldProps<string>,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n /**\n * If provided, this will be added to the field validation\n */\n | \"minLength\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"maxLength\"\n >\n{\n placeholder?: string;\n}\n\n/**\n * Number input field props\n */\nexport interface NumberInputFieldProps extends\n BaseFormFieldProps<number>,\n Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n /**\n * If provided, this will be added to the field validation\n */\n | \"min\"\n /**\n * If provided, this will be added to the field validation\n */\n | \"max\"\n | \"step\"\n >\n{}\n\n/**\n * Radio buttons field props\n */\nexport interface RadioButtonsFieldProps<V> extends BaseFormFieldProps<V> {\n /**\n * Available options for radio buttons.\n *\n * Values are compared by reference equality (`===`). When options contain\n * non-primitive values, pass the same object references for `value` and\n * the corresponding option entry.\n */\n options: Option<V>[];\n}\n\n/**\n * Option interface for radio button options\n */\nexport interface Option<V> {\n label: string;\n value: V;\n}\n\n/**\n * Object set field displays the summary of the count of the given object set\n */\nexport interface ObjectSetFieldProps<T extends ObjectTypeDefinition>\n extends BaseFormFieldProps<ObjectSet<T>>\n{}\n\n/**\n * Custom field props for user-defined renderers\n */\nexport interface CustomFieldProps<V> extends BaseFormFieldProps<V> {\n /**\n * Custom renderer function\n */\n customRenderer: (props: BaseFormFieldProps<V>) => React.ReactNode;\n}\n\nexport interface BaseFormFieldProps<V> {\n /**\n * The HTML `id` attribute for the field input element.\n * Used for `<label htmlFor>` association.\n */\n id?: string;\n\n /**\n * The value of the form field\n */\n value: V | null;\n /**\n * Called when the field value changes.\n *\n * ActionForm internally wraps this to pass the key to `onFieldValueChange`:\n * ```\n * <DropdownField\n * {...fieldDef}\n * onChange={(value) => onFieldValueChange(fieldDef.key, value)}\n * />\n * ```\n *\n * @param value The new value of the form field\n */\n onChange?: (value: V | null) => void;\n}\n\nexport type FieldKey<Q extends ActionDefinition<unknown>> =\n keyof ActionParameters<Q>;\n\n/**\n * Extracts parameters from an ActionDefinition\n */\nexport type ActionParameters<Q extends ActionDefinition<unknown>> =\n CompileTimeMetadata<Q>[\"parameters\"];\n\n/**\n * Extracts the value type for a specific parameter\n *\n * TODO: Re-use `BaseType`\n */\nexport type FieldValueType<\n Q extends ActionDefinition<unknown>,\n K extends keyof ActionParameters<Q> = keyof ActionParameters<Q>,\n> = ActionParameters<Q>[K][\"type\"] extends\n ActionMetadata.DataType.Object<infer T> ? ActionParam.ObjectType<T>\n : ActionParameters<Q>[K][\"type\"] extends ActionMetadata.DataType.ObjectSet<\n infer T\n > ? ActionParam.ObjectSetType<T>\n : ActionParameters<Q>[K][\"type\"] extends ActionMetadata.DataType.Struct<\n infer T\n > ? ActionParam.StructType<T>\n : ActionParameters<Q>[K][\"type\"] extends keyof DataValueClientToWire\n ? DataValueClientToWire[ActionParameters<Q>[K][\"type\"]]\n : never;\n\n/**\n * Extracts the parameter type descriptor for a specific action parameter.\n */\nexport type FieldDescriptorType<\n Q extends ActionDefinition<unknown> = ActionDefinition<unknown>,\n K extends keyof ActionParameters<Q> = keyof ActionParameters<Q>,\n> = ActionParameters<Q>[K][\"type\"];\n\n/**\n * Available form field component types\n */\nexport type FieldComponent =\n | \"DATETIME_PICKER\"\n | \"DROPDOWN\"\n | \"FILE_PICKER\"\n | \"NUMBER_INPUT\"\n | \"RADIO_BUTTONS\"\n | \"OBJECT_SET\"\n | \"TEXT_AREA\"\n | \"TEXT_INPUT\"\n | \"CUSTOM\";\n\n/**\n * Describes the data type of a form field, independent of OSDK.\n * Mirrors ActionMetadata.DataType to keep the rendering layer OSDK-agnostic.\n */\nexport type FieldType =\n | \"boolean\"\n | \"string\"\n | \"integer\"\n | \"long\"\n | \"double\"\n | \"datetime\"\n | \"timestamp\"\n | \"attachment\"\n | \"marking\"\n | \"mediaReference\"\n | \"objectType\"\n | \"geoshape\"\n | \"geohash\"\n | { type: \"object\"; object: string }\n | { type: \"objectSet\"; objectSet: string }\n | { type: \"interface\"; interface: string }\n | { type: \"struct\"; struct: Record<string, string> };\n\n/**\n * An OSDK-agnostic field definition used by BaseForm and FormFieldRenderer.\n * Contains only the information needed to render a single field — no generics,\n * no compile-time parameter constraints.\n *\n * Implemented as a distributed mapped type: switching on `fieldComponent`\n * narrows `fieldComponentProps` to the correct props type automatically.\n */\nexport type RendererFieldDefinition = {\n [K in FieldComponent]: {\n fieldKey: string;\n fieldComponent: K;\n fieldType?: FieldType;\n label?: string;\n defaultValue?: unknown;\n isRequired?: boolean;\n placeholder?: string;\n helperText?: string;\n helperTextPlacement?: \"bottom\" | \"tooltip\";\n fieldComponentProps: Omit<FormFieldPropsByType[K], \"value\" | \"onChange\">;\n };\n}[FieldComponent];\n\n/**\n * Gets valid form field types for a given property type\n */\nexport type ValidFormFieldForPropertyType<P extends FieldDescriptorType> =\n P extends \"objectSet\" ? \"OBJECT_SET\"\n : P extends \"object\" ? \"DROPDOWN\"\n : P extends \"mediaReference\" | \"attachment\" ? \"FILE_PICKER\"\n : P extends \"boolean\" ? \"RADIO_BUTTONS\" | \"DROPDOWN\"\n : P extends \"string\" ? \"TEXT_INPUT\" | \"TEXT_AREA\"\n : P extends \"datetime\" | \"timestamp\" ? \"DATETIME_PICKER\"\n : P extends\n | \"double\"\n | \"integer\"\n | \"long\"\n | \"float\"\n | \"short\"\n | \"byte\"\n | \"decimal\" ? \"NUMBER_INPUT\"\n : never;\n"],"mappings":"","ignoreList":[]}
|