@servicetitan/dte-pdf-editor 1.92.0 → 1.92.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/components/field-config-panel/field-sidebar.d.ts.map +1 -1
  2. package/dist/components/field-config-panel/field-sidebar.js +8 -4
  3. package/dist/components/field-config-panel/field-sidebar.js.map +1 -1
  4. package/dist/components/field-sidebar/calculated-field-type-list.d.ts.map +1 -1
  5. package/dist/components/field-sidebar/calculated-field-type-list.js +1 -1
  6. package/dist/components/field-sidebar/calculated-field-type-list.js.map +1 -1
  7. package/dist/components/field-sidebar/data-model-field-type-list.d.ts +15 -1
  8. package/dist/components/field-sidebar/data-model-field-type-list.d.ts.map +1 -1
  9. package/dist/components/field-sidebar/data-model-field-type-list.js +54 -10
  10. package/dist/components/field-sidebar/data-model-field-type-list.js.map +1 -1
  11. package/dist/components/field-sidebar/e-sign-field-type-list.d.ts.map +1 -1
  12. package/dist/components/field-sidebar/e-sign-field-type-list.js +1 -1
  13. package/dist/components/field-sidebar/e-sign-field-type-list.js.map +1 -1
  14. package/dist/components/field-sidebar/field-sidebar.d.ts +7 -0
  15. package/dist/components/field-sidebar/field-sidebar.d.ts.map +1 -1
  16. package/dist/components/field-sidebar/field-sidebar.js +8 -11
  17. package/dist/components/field-sidebar/field-sidebar.js.map +1 -1
  18. package/dist/components/field-sidebar/field-type.d.ts +0 -2
  19. package/dist/components/field-sidebar/field-type.d.ts.map +1 -1
  20. package/dist/components/field-sidebar/field-type.js +2 -2
  21. package/dist/components/field-sidebar/field-type.js.map +1 -1
  22. package/dist/components/field-sidebar/fillable-field-type-list.d.ts.map +1 -1
  23. package/dist/components/field-sidebar/fillable-field-type-list.js +1 -1
  24. package/dist/components/field-sidebar/fillable-field-type-list.js.map +1 -1
  25. package/dist/components/field-sidebar/form-fields-type-list.d.ts +28 -5
  26. package/dist/components/field-sidebar/form-fields-type-list.d.ts.map +1 -1
  27. package/dist/components/field-sidebar/form-fields-type-list.js +27 -6
  28. package/dist/components/field-sidebar/form-fields-type-list.js.map +1 -1
  29. package/dist/components/field-sidebar/generic-field-type-list.d.ts.map +1 -1
  30. package/dist/components/field-sidebar/generic-field-type-list.js +1 -1
  31. package/dist/components/field-sidebar/generic-field-type-list.js.map +1 -1
  32. package/dist/components/pdf-canvas/canvas-controls.d.ts +15 -9
  33. package/dist/components/pdf-canvas/canvas-controls.d.ts.map +1 -1
  34. package/dist/components/pdf-canvas/canvas-controls.js +14 -4
  35. package/dist/components/pdf-canvas/canvas-controls.js.map +1 -1
  36. package/dist/components/pdf-canvas/pdf-canvas.d.ts +2 -6
  37. package/dist/components/pdf-canvas/pdf-canvas.d.ts.map +1 -1
  38. package/dist/components/pdf-canvas/pdf-canvas.js +5 -11
  39. package/dist/components/pdf-canvas/pdf-canvas.js.map +1 -1
  40. package/dist/components/pdf-editor/pdf-editor.d.ts +0 -2
  41. package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
  42. package/dist/components/pdf-editor/pdf-editor.js +4 -3
  43. package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
  44. package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js +1 -4
  45. package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js.map +1 -1
  46. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.d.ts.map +1 -1
  47. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.js +2 -3
  48. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.js.map +1 -1
  49. package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts.map +1 -1
  50. package/dist/components/pdf-fields-overlay/pdf-overlay-field.js +2 -4
  51. package/dist/components/pdf-fields-overlay/pdf-overlay-field.js.map +1 -1
  52. package/dist/components/pdf-view/pdf-view-e-sign.d.ts.map +1 -1
  53. package/dist/components/pdf-view/pdf-view-e-sign.js +2 -3
  54. package/dist/components/pdf-view/pdf-view-e-sign.js.map +1 -1
  55. package/dist/components/pdf-view/pdf-view-field-container.d.ts.map +1 -1
  56. package/dist/components/pdf-view/pdf-view-field-container.js +3 -10
  57. package/dist/components/pdf-view/pdf-view-field-container.js.map +1 -1
  58. package/dist/components/pdf-view/pdf-view-fillable.js +1 -1
  59. package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
  60. package/dist/components/pdf-view/pdf-view.d.ts +0 -5
  61. package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
  62. package/dist/components/pdf-view/pdf-view.js +24 -51
  63. package/dist/components/pdf-view/pdf-view.js.map +1 -1
  64. package/dist/constants/field.constants.d.ts.map +1 -1
  65. package/dist/constants/field.constants.js +6 -27
  66. package/dist/constants/field.constants.js.map +1 -1
  67. package/dist/constants/menu-group.d.ts +5 -0
  68. package/dist/constants/menu-group.d.ts.map +1 -1
  69. package/dist/constants/menu-group.js +5 -2
  70. package/dist/constants/menu-group.js.map +1 -1
  71. package/dist/hooks/index.d.ts +0 -1
  72. package/dist/hooks/index.d.ts.map +1 -1
  73. package/dist/hooks/index.js +0 -1
  74. package/dist/hooks/index.js.map +1 -1
  75. package/dist/hooks/useFormFields.d.ts +3 -1
  76. package/dist/hooks/useFormFields.d.ts.map +1 -1
  77. package/dist/hooks/useFormFields.js +20 -3
  78. package/dist/hooks/useFormFields.js.map +1 -1
  79. package/dist/hooks/useZoom.d.ts +0 -2
  80. package/dist/hooks/useZoom.d.ts.map +1 -1
  81. package/dist/hooks/useZoom.js +6 -18
  82. package/dist/hooks/useZoom.js.map +1 -1
  83. package/dist/interface/types.d.ts +0 -2
  84. package/dist/interface/types.d.ts.map +1 -1
  85. package/dist/interface/types.js.map +1 -1
  86. package/dist/styles/field-type.css +5 -0
  87. package/dist/styles/formula-modal.css +17 -0
  88. package/dist/styles/pdf-canvas.css +15 -91
  89. package/dist/styles/pdf-editor.css +0 -1
  90. package/dist/styles/pdf-field-overlay.css +78 -109
  91. package/dist/styles/variables.css +0 -3
  92. package/dist/utils/field/get-navigable-fields.utils.js +1 -1
  93. package/dist/utils/field/get-navigable-fields.utils.js.map +1 -1
  94. package/dist/utils/field/index.d.ts +0 -1
  95. package/dist/utils/field/index.d.ts.map +1 -1
  96. package/dist/utils/field/index.js +0 -1
  97. package/dist/utils/field/index.js.map +1 -1
  98. package/dist/utils/pdf/index.d.ts +0 -1
  99. package/dist/utils/pdf/index.d.ts.map +1 -1
  100. package/dist/utils/pdf/index.js +0 -1
  101. package/dist/utils/pdf/index.js.map +1 -1
  102. package/package.json +1 -1
  103. package/src/components/field-config-panel/field-sidebar.tsx +24 -8
  104. package/src/components/field-sidebar/calculated-field-type-list.tsx +0 -1
  105. package/src/components/field-sidebar/data-model-field-type-list.tsx +143 -29
  106. package/src/components/field-sidebar/e-sign-field-type-list.tsx +0 -1
  107. package/src/components/field-sidebar/field-sidebar.tsx +19 -18
  108. package/src/components/field-sidebar/field-type.tsx +3 -13
  109. package/src/components/field-sidebar/fillable-field-type-list.tsx +0 -1
  110. package/src/components/field-sidebar/form-fields-type-list.tsx +137 -95
  111. package/src/components/field-sidebar/generic-field-type-list.tsx +0 -1
  112. package/src/components/pdf-canvas/canvas-controls.tsx +128 -30
  113. package/src/components/pdf-canvas/pdf-canvas.tsx +8 -18
  114. package/src/components/pdf-editor/pdf-editor.tsx +5 -7
  115. package/src/components/pdf-fields-overlay/pdf-fields-overlay.tsx +1 -1
  116. package/src/components/pdf-fields-overlay/pdf-overlay-field-e-sign.tsx +6 -8
  117. package/src/components/pdf-fields-overlay/pdf-overlay-field.tsx +1 -17
  118. package/src/components/pdf-view/pdf-view-e-sign.tsx +6 -8
  119. package/src/components/pdf-view/pdf-view-field-container.tsx +1 -21
  120. package/src/components/pdf-view/pdf-view-fillable.tsx +1 -1
  121. package/src/components/pdf-view/pdf-view.tsx +95 -156
  122. package/src/constants/field.constants.ts +6 -28
  123. package/src/constants/menu-group.ts +5 -2
  124. package/src/hooks/index.ts +0 -1
  125. package/src/hooks/useFormFields.ts +24 -2
  126. package/src/hooks/useZoom.ts +8 -20
  127. package/src/interface/types.ts +0 -3
  128. package/src/styles/field-type.css +5 -0
  129. package/src/styles/formula-modal.css +17 -0
  130. package/src/styles/pdf-canvas.css +15 -91
  131. package/src/styles/pdf-editor.css +0 -1
  132. package/src/styles/pdf-field-overlay.css +78 -109
  133. package/src/styles/variables.css +0 -3
  134. package/src/utils/field/get-navigable-fields.utils.ts +1 -1
  135. package/src/utils/field/index.ts +0 -1
  136. package/src/utils/pdf/index.ts +0 -1
  137. package/dist/hooks/usePinchZoom.d.ts +0 -14
  138. package/dist/hooks/usePinchZoom.d.ts.map +0 -1
  139. package/dist/hooks/usePinchZoom.js +0 -58
  140. package/dist/hooks/usePinchZoom.js.map +0 -1
  141. package/dist/utils/field/get-field-type-option.utils.d.ts +0 -3
  142. package/dist/utils/field/get-field-type-option.utils.d.ts.map +0 -1
  143. package/dist/utils/field/get-field-type-option.utils.js +0 -10
  144. package/dist/utils/field/get-field-type-option.utils.js.map +0 -1
  145. package/dist/utils/pdf/pinch-zoom.utils.d.ts +0 -6
  146. package/dist/utils/pdf/pinch-zoom.utils.d.ts.map +0 -1
  147. package/dist/utils/pdf/pinch-zoom.utils.js +0 -18
  148. package/dist/utils/pdf/pinch-zoom.utils.js.map +0 -1
  149. package/src/hooks/usePinchZoom.ts +0 -86
  150. package/src/utils/field/__tests__/get-field-type-option.utils.test.ts +0 -53
  151. package/src/utils/field/get-field-type-option.utils.ts +0 -16
  152. package/src/utils/pdf/__tests__/pinch-zoom.utils.test.ts +0 -58
  153. package/src/utils/pdf/pinch-zoom.utils.ts +0 -30
@@ -1,32 +1,23 @@
1
1
  import { Button, Divider, Flex, Icon, Text } from '@servicetitan/anvil2';
2
+ import IconNavigateDown from '@servicetitan/anvil2/assets/icons/material/round/arrow_downward.svg';
3
+ import IconNavigateUp from '@servicetitan/anvil2/assets/icons/material/round/arrow_upward.svg';
4
+ import IconNavigateBefore from '@servicetitan/anvil2/assets/icons/material/round/navigate_before.svg';
5
+ import IconNavigateNext from '@servicetitan/anvil2/assets/icons/material/round/navigate_next.svg';
2
6
  import IconZoomIn from '@servicetitan/anvil2/assets/icons/material/round/zoom_in.svg';
3
7
  import IconZoomOut from '@servicetitan/anvil2/assets/icons/material/round/zoom_out.svg';
4
8
  import { FC } from 'react';
5
9
  import { ZOOM_MAX, ZOOM_MIN } from '../../constants';
6
10
 
7
- export interface ZoomControlsProps {
11
+ interface ZoomControlsProps {
8
12
  zoom: number;
9
- vertical?: boolean;
10
- position?: 'right-center' | 'right-bottom';
11
13
  onZoomIn(): void;
12
14
  onZoomOut(): void;
13
15
  onResetZoom(): void;
14
16
  }
15
17
 
16
- export const ZoomControls: FC<ZoomControlsProps> = ({
17
- onResetZoom,
18
- onZoomIn,
19
- onZoomOut,
20
- position = 'right-center',
21
- vertical,
22
- zoom,
23
- }) => {
18
+ const ZoomControls: FC<ZoomControlsProps> = ({ onResetZoom, onZoomIn, onZoomOut, zoom }) => {
24
19
  return (
25
- <Flex
26
- alignItems="center"
27
- gap={1}
28
- className={`dte-pdf-zoom-controls ${vertical ? '--vertical' : '--horizontal'} --${position}`}
29
- >
20
+ <Flex alignItems="center" gap={1} className="dte-pdf-zoom-controls">
30
21
  <Button
31
22
  size="xsmall"
32
23
  appearance="ghost"
@@ -37,7 +28,7 @@ export const ZoomControls: FC<ZoomControlsProps> = ({
37
28
  >
38
29
  <Icon svg={IconZoomOut} size="medium" />
39
30
  </Button>
40
- <Divider vertical={!vertical} style={vertical ? { width: 20 } : { height: 20 }} />
31
+
41
32
  <Text
42
33
  variant="body"
43
34
  size="small"
@@ -47,7 +38,7 @@ export const ZoomControls: FC<ZoomControlsProps> = ({
47
38
  >
48
39
  {Math.round(zoom * 100)}%
49
40
  </Text>
50
- <Divider vertical={!vertical} style={vertical ? { width: 20 } : { height: 20 }} />
41
+
51
42
  <Button
52
43
  size="xsmall"
53
44
  appearance="ghost"
@@ -63,23 +54,130 @@ export const ZoomControls: FC<ZoomControlsProps> = ({
63
54
  };
64
55
 
65
56
  interface FieldNavigationControlsProps {
66
- isStarted: boolean;
67
- disabled?: boolean;
57
+ disabledNext: boolean;
58
+ disabledOnFirstField: boolean;
59
+ disabledOnLastField: boolean;
60
+ disabledPrev: boolean;
68
61
  onNextField(): void;
62
+ onPrevField(): void;
63
+ onFirstField(): void;
64
+ onLastField(): void;
69
65
  }
70
66
 
71
- export const FieldNavigationControls: FC<FieldNavigationControlsProps> = ({
72
- disabled,
73
- isStarted,
67
+ const FieldNavigationControls: FC<FieldNavigationControlsProps> = ({
68
+ disabledNext,
69
+ disabledOnFirstField,
70
+ disabledOnLastField,
71
+ disabledPrev,
72
+ onFirstField,
73
+ onLastField,
74
74
  onNextField,
75
+ onPrevField,
75
76
  }) => {
76
77
  return (
77
- <div
78
- className={`dte-pdf-field-next-controls-button ${disabled && '--disabled'} ${isStarted && '--started'}`}
79
- role="button"
80
- onClick={onNextField}
81
- >
82
- <span>{isStarted ? 'Next' : 'Start'}</span>
83
- </div>
78
+ <Flex alignItems="center" gap="2" className="dte-pdf-field-navigation-controls">
79
+ <Button
80
+ size="xsmall"
81
+ appearance="ghost"
82
+ onClick={onPrevField}
83
+ disabled={disabledPrev}
84
+ aria-label="Go to previous field"
85
+ title="Go to previous field"
86
+ >
87
+ <Icon svg={IconNavigateBefore} size="medium" />
88
+ </Button>
89
+ <Button
90
+ size="xsmall"
91
+ appearance="ghost"
92
+ onClick={onNextField}
93
+ disabled={disabledNext}
94
+ aria-label="Go to next field"
95
+ title="Go to next field"
96
+ >
97
+ <Icon svg={IconNavigateNext} size="medium" />
98
+ </Button>
99
+ <Divider vertical style={{ height: '100%' }} />
100
+ <Button
101
+ size="xsmall"
102
+ appearance="ghost"
103
+ onClick={onFirstField}
104
+ disabled={disabledOnFirstField}
105
+ aria-label="Go to first field"
106
+ title="Go to first field"
107
+ >
108
+ <Icon svg={IconNavigateUp} size="medium" />
109
+ </Button>
110
+ <Button
111
+ size="xsmall"
112
+ appearance="ghost"
113
+ onClick={onLastField}
114
+ disabled={disabledOnLastField}
115
+ aria-label="Go to last field"
116
+ title="Go to last field"
117
+ >
118
+ <Icon svg={IconNavigateDown} size="medium" />
119
+ </Button>
120
+ </Flex>
121
+ );
122
+ };
123
+
124
+ export interface CanvasControlsProps extends ZoomControlsProps {
125
+ /** Show the zoom in/out/reset controls. */
126
+ zoomable?: boolean;
127
+ /** Show the previous/next fillable-field navigation controls. */
128
+ enableInputNavigation?: boolean;
129
+ disabledNext?: boolean;
130
+ disabledPrev?: boolean;
131
+ disabledOnFirstField?: boolean;
132
+ disabledOnLastField?: boolean;
133
+ onNextField?(): void;
134
+ onPrevField?(): void;
135
+ onFirstField?(): void;
136
+ onLastField?(): void;
137
+ }
138
+
139
+ export const CanvasControls: FC<CanvasControlsProps> = ({
140
+ disabledNext = false,
141
+ disabledOnFirstField = false,
142
+ disabledOnLastField = false,
143
+ disabledPrev = false,
144
+ enableInputNavigation = false,
145
+ onFirstField = () => {},
146
+ onLastField = () => {},
147
+ onNextField = () => {},
148
+ onPrevField = () => {},
149
+ onResetZoom,
150
+ onZoomIn,
151
+ onZoomOut,
152
+ zoom,
153
+ zoomable = false,
154
+ }) => {
155
+ if (!zoomable && !enableInputNavigation) {
156
+ return null;
157
+ }
158
+
159
+ return (
160
+ <Flex justifyContent="center" gap={2} className="dte-pdf-canvas-controls">
161
+ {zoomable && (
162
+ <ZoomControls
163
+ zoom={zoom}
164
+ onZoomIn={onZoomIn}
165
+ onZoomOut={onZoomOut}
166
+ onResetZoom={onResetZoom}
167
+ />
168
+ )}
169
+ {enableInputNavigation && (
170
+ <FieldNavigationControls
171
+ disabledOnFirstField={disabledOnFirstField}
172
+ disabledOnLastField={disabledOnLastField}
173
+ onFirstField={onFirstField}
174
+ onLastField={onLastField}
175
+ disabledNext={disabledNext}
176
+ disabledPrev={disabledPrev}
177
+ onNextField={onNextField}
178
+ onPrevField={onPrevField}
179
+ />
180
+ )}
181
+ </Flex>
84
182
  );
85
183
  };
@@ -10,13 +10,13 @@ import {
10
10
  useState,
11
11
  } from 'react';
12
12
  import { BASE_PAGE_WIDTH } from '../../constants';
13
- import { usePinchZoom, useZoom } from '../../hooks';
13
+ import { useZoom } from '../../hooks';
14
14
  import { type PdfField } from '../../interface/types';
15
15
  import { PdfFieldsOverlay } from '../pdf-fields-overlay/pdf-fields-overlay';
16
- import { ZoomControls, ZoomControlsProps } from './canvas-controls';
16
+ import { CanvasControls } from './canvas-controls';
17
17
  import { PdfDocumentRenderer } from './pdf-document-renderer';
18
18
 
19
- export interface PdfCanvasProps {
19
+ interface PdfCanvasProps {
20
20
  pdfUrl: string;
21
21
  zoomable: boolean;
22
22
  errorPlaceholder?: ReactNode;
@@ -29,10 +29,6 @@ export interface PdfCanvasProps {
29
29
  pdfWrapperRef: RefObject<HTMLDivElement>;
30
30
  recipientsColors: Record<string, string>;
31
31
  fieldWrapperClassNames?: string;
32
- zoomProps?: {
33
- vertical: ZoomControlsProps['vertical'];
34
- position: ZoomControlsProps['position'];
35
- };
36
32
  onLoadSuccess?(pageNums: number): void;
37
33
  handleAddNewField(field: PdfField): void;
38
34
  onDragOver(e: DragEvent<HTMLDivElement>): void;
@@ -65,17 +61,10 @@ export const PdfCanvas: FC<PdfCanvasProps> = ({
65
61
  pdfWrapperRef,
66
62
  recipientsColors,
67
63
  selectedField,
68
- zoomProps,
69
64
  zoomable,
70
65
  }) => {
71
66
  const [isPdfLoaded, setIsPdfLoaded] = useState<boolean>(false);
72
- const { resetZoom, setZoomValue, zoom, zoomByFactor, zoomIn, zoomOut } = useZoom();
73
- usePinchZoom(pdfContainerRef, {
74
- enabled: zoomable,
75
- setZoomValue,
76
- zoom,
77
- zoomByFactor,
78
- });
67
+ const { resetZoom, zoom, zoomIn, zoomOut } = useZoom();
79
68
 
80
69
  const onDocumentLoadSuccess = (pageNum: number) => {
81
70
  setIsPdfLoaded(true);
@@ -88,9 +77,10 @@ export const PdfCanvas: FC<PdfCanvasProps> = ({
88
77
 
89
78
  return (
90
79
  <Fragment>
91
- {isPdfLoaded && zoomable && (
92
- <ZoomControls
93
- {...zoomProps}
80
+ {isPdfLoaded && (
81
+ <CanvasControls
82
+ enableInputNavigation={false}
83
+ zoomable={zoomable}
94
84
  zoom={zoom}
95
85
  onZoomIn={zoomIn}
96
86
  onZoomOut={zoomOut}
@@ -12,7 +12,7 @@ import {
12
12
  import { extractGroupedFieldsFromDataModel, mapColorsToRecipients } from '../../utils';
13
13
  import { FieldConfigPanelOverlay } from '../field-config-panel/field-config-panel-overlay';
14
14
  import { FieldSidebar } from '../field-sidebar/field-sidebar';
15
- import { PdfCanvas, PdfCanvasProps } from '../pdf-canvas/pdf-canvas';
15
+ import { PdfCanvas } from '../pdf-canvas/pdf-canvas';
16
16
 
17
17
  import '../../styles/index.css';
18
18
 
@@ -29,7 +29,6 @@ export interface PdfEditorProps {
29
29
  hideFields?: FieldTypeEnum[];
30
30
  hideConditionalLogic?: boolean;
31
31
  forms?: FormInfo[];
32
- zoomProps?: PdfCanvasProps['zoomProps'];
33
32
  onFormSelect?: (
34
33
  formIds: number[],
35
34
  sendFormFields: (formFieldsByFormId: FormFieldsByFormIdI) => void,
@@ -53,13 +52,12 @@ export const PdfEditor: FC<PdfEditorProps> = ({
53
52
  onLoadSuccess,
54
53
  pdfUrl,
55
54
  recipients = [],
56
- zoomProps,
57
55
  zoomable = true,
58
56
  }) => {
59
57
  const pdfContainerRef = useRef<HTMLDivElement>(null);
60
58
  const pdfWrapperRef = useRef<HTMLDivElement>(null);
61
59
  const pdfFieldSelection = usePdfFieldSelection(fields, onFieldsChange);
62
- const formFields = useFormFields(fields, onFormSelect);
60
+ const formFields = useFormFields(fields, onFormSelect, forms);
63
61
  const pdfFieldDnd = usePdfFieldDnD({
64
62
  fields,
65
63
  recipients,
@@ -90,7 +88,7 @@ export const PdfEditor: FC<PdfEditorProps> = ({
90
88
  dataModel={dataModel}
91
89
  documentFields={fields}
92
90
  formFieldsByFormId={formFields.formFieldsByFormId}
93
- forms={forms ?? []}
91
+ forms={formFields.formsWithFields}
94
92
  formulaLoadingFormId={formFields.formulaLoadingFormId}
95
93
  selectedField={pdfFieldSelection.selectedField}
96
94
  onFieldConfigChange={pdfFieldSelection.updateField}
@@ -108,7 +106,8 @@ export const PdfEditor: FC<PdfEditorProps> = ({
108
106
  hideFields={hideFields}
109
107
  dataModelGroups={dataModelGroups}
110
108
  formFieldOptions={formFields.formFieldOptions}
111
- forms={forms}
109
+ forms={formFields.formsWithFields}
110
+ loadingFormsCount={formFields.isLoadingForms ? (forms?.length ?? 0) : 0}
112
111
  isLoadingFormFields={formFields.isLoading}
113
112
  onDragStart={pdfFieldDnd.handleDragStart}
114
113
  onDragEnd={pdfFieldDnd.handleDragEnd}
@@ -123,7 +122,6 @@ export const PdfEditor: FC<PdfEditorProps> = ({
123
122
  className="dte-pdf-editor-content-container skeleton-item"
124
123
  >
125
124
  <PdfCanvas
126
- zoomProps={zoomProps}
127
125
  zoomable={zoomable}
128
126
  pdfUrl={pdfUrl}
129
127
  fields={fields}
@@ -49,7 +49,7 @@ export const PdfFieldsOverlay: FC<PdfFieldsOverlayProps> = ({
49
49
  field={field}
50
50
  fieldWrapperClassNames={fieldWrapperClassNames}
51
51
  onFieldConfigChange={onFieldConfigChange}
52
- error={errors[field.id] ?? errors[field.path ?? '']}
52
+ error={errors[field.id]}
53
53
  handleAddNewField={handleAddNewField}
54
54
  onFieldMove={onFieldMove}
55
55
  onFieldClick={onFieldClick}
@@ -1,4 +1,3 @@
1
- import { Flex } from '@servicetitan/anvil2';
2
1
  import { FC } from 'react';
3
2
  import { type PdfField } from '../../interface/types';
4
3
 
@@ -8,12 +7,11 @@ interface PdfOverlayFieldESignProps {
8
7
 
9
8
  export const PdfOverlayFieldESign: FC<PdfOverlayFieldESignProps> = ({ field }) => {
10
9
  return (
11
- <Flex
12
- alignItems="center"
13
- className="dte-pdf-field-value"
14
- style={{ fontSize: '8px', height: '100%' }}
15
- >
16
- {field.path} {field.required ? '*' : ''}
17
- </Flex>
10
+ <span>
11
+ {field.label} {field.required ? '*' : ''}
12
+ <div className="dte-pdf-field-value" style={{ fontSize: '8px' }}>
13
+ {field.path}
14
+ </div>
15
+ </span>
18
16
  );
19
17
  };
@@ -1,14 +1,8 @@
1
- import { Icon } from '@servicetitan/anvil2';
2
1
  import { FC, MouseEvent, RefObject } from 'react';
3
2
  import { DISABLE_FIELD_RESIZE } from '../../constants';
4
3
  import { useFieldDrag, useFieldResize } from '../../hooks';
5
4
  import { FieldTypeEnum, type PdfField } from '../../interface/types';
6
- import {
7
- getFieldBackgroundColor,
8
- getFieldBoundsStyle,
9
- getFieldTypeOption,
10
- getPagePosition,
11
- } from '../../utils';
5
+ import { getFieldBackgroundColor, getFieldBoundsStyle, getPagePosition } from '../../utils';
12
6
  import { PdfOverlayFieldCalculated } from './pdf-overlay-field-calculated';
13
7
  import { PdfOverlayFieldDataModel } from './pdf-overlay-field-data-model';
14
8
  import { PdfOverlayFieldESign } from './pdf-overlay-field-e-sign';
@@ -91,8 +85,6 @@ export const PdfOverlayField: FC<PdfOverlayFieldProps> = ({
91
85
  .filter(Boolean)
92
86
  .join(' ');
93
87
 
94
- const fieldTypeOption = getFieldTypeOption(field);
95
-
96
88
  return (
97
89
  <div
98
90
  title={field.description}
@@ -104,14 +96,6 @@ export const PdfOverlayField: FC<PdfOverlayFieldProps> = ({
104
96
  className={className}
105
97
  style={style}
106
98
  >
107
- {fieldTypeOption && (
108
- <div className="dte-pdf-field-label">
109
- {fieldTypeOption.icon && (
110
- <Icon svg={fieldTypeOption.icon} size="small" color="inherit" />
111
- )}
112
- {fieldTypeOption.label}
113
- </div>
114
- )}
115
99
  {field.type === FieldTypeEnum.calculated && (
116
100
  <PdfOverlayFieldCalculated field={field} pathToLabel={pathToLabel} />
117
101
  )}
@@ -1,4 +1,3 @@
1
- import { Flex } from '@servicetitan/anvil2';
2
1
  import { FC } from 'react';
3
2
  import { type PdfField } from '../../interface/types';
4
3
 
@@ -8,12 +7,11 @@ interface PdfViewESignProps {
8
7
 
9
8
  export const PdfViewESign: FC<PdfViewESignProps> = ({ field }) => {
10
9
  return (
11
- <Flex
12
- alignItems="center"
13
- className="dte-pdf-field-value"
14
- style={{ fontSize: '8px', height: '100%' }}
15
- >
16
- {field.path} {field.required ? '*' : ''}
17
- </Flex>
10
+ <span>
11
+ {field.label} {field.required ? '*' : ''}
12
+ <div className="dte-pdf-field-value" style={{ fontSize: '8px' }}>
13
+ {field.path}
14
+ </div>
15
+ </span>
18
16
  );
19
17
  };
@@ -1,11 +1,9 @@
1
- import { Icon } from '@servicetitan/anvil2';
2
1
  import { FC, Fragment, PropsWithChildren, RefObject } from 'react';
3
2
  import { type DataModelValues, type PdfField } from '../../interface/types';
4
3
  import {
5
4
  evaluateDisplayCondition,
6
5
  getFieldBackgroundColor,
7
6
  getFieldBoundsStyle,
8
- getFieldTypeOption,
9
7
  getPagePosition,
10
8
  } from '../../utils';
11
9
 
@@ -38,8 +36,6 @@ export const PdfViewFieldContainer: FC<PropsWithChildren<PdfViewFieldContainer>>
38
36
 
39
37
  const pagePos = getPagePosition(field.page, pdfWrapperRef);
40
38
  const bgColor = getFieldBackgroundColor(field.recipient, recipientsColors);
41
- const fieldTypeOption = getFieldTypeOption(field);
42
-
43
39
  return (
44
40
  <Fragment>
45
41
  <div
@@ -49,28 +45,13 @@ export const PdfViewFieldContainer: FC<PropsWithChildren<PdfViewFieldContainer>>
49
45
  style={getFieldBoundsStyle(field, {
50
46
  pageOffset: pagePos,
51
47
  backgroundColor: bgColor,
52
- borderColor: error ? 'red' : bgColor.replace('1f', '7d'),
48
+ borderColor: error ? 'red' : undefined,
53
49
  zoom,
54
50
  })}
55
51
  onFocus={() => onFocus?.(field.id)}
56
52
  >
57
53
  {children}
58
54
  </div>
59
- {fieldTypeOption && (
60
- <div
61
- className="dte-pdf-field-label"
62
- style={{
63
- top: pagePos.top + field.y * zoom - 10,
64
- left: pagePos.left + field.x * zoom + 3,
65
- position: 'absolute',
66
- }}
67
- >
68
- {fieldTypeOption.icon && (
69
- <Icon svg={fieldTypeOption.icon} size="small" color="inherit" />
70
- )}
71
- {fieldTypeOption.label}
72
- </div>
73
- )}
74
55
  {error && (
75
56
  <span
76
57
  style={{
@@ -78,7 +59,6 @@ export const PdfViewFieldContainer: FC<PropsWithChildren<PdfViewFieldContainer>>
78
59
  top: pagePos.top + (field.y + field.height) * zoom + 8,
79
60
  left: pagePos.left + field.x * zoom,
80
61
  minWidth: '100px',
81
- fontSize: '10px',
82
62
  position: 'absolute',
83
63
  }}
84
64
  >
@@ -31,7 +31,7 @@ interface FillableTextInputProps {
31
31
  }
32
32
 
33
33
  const fillableTextStyles = {
34
- background: 'transparent',
34
+ background: 'inherit',
35
35
  width: '100%',
36
36
  height: '100%',
37
37
  border: 'none',