@servicetitan/dte-pdf-editor 1.92.3 → 1.92.4

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 (120) hide show
  1. package/dist/components/field-sidebar/calculated-field-type-list.d.ts.map +1 -1
  2. package/dist/components/field-sidebar/calculated-field-type-list.js +1 -1
  3. package/dist/components/field-sidebar/calculated-field-type-list.js.map +1 -1
  4. package/dist/components/field-sidebar/e-sign-field-type-list.d.ts.map +1 -1
  5. package/dist/components/field-sidebar/e-sign-field-type-list.js +1 -1
  6. package/dist/components/field-sidebar/e-sign-field-type-list.js.map +1 -1
  7. package/dist/components/field-sidebar/field-type.d.ts +0 -2
  8. package/dist/components/field-sidebar/field-type.d.ts.map +1 -1
  9. package/dist/components/field-sidebar/field-type.js +2 -2
  10. package/dist/components/field-sidebar/field-type.js.map +1 -1
  11. package/dist/components/field-sidebar/fillable-field-type-list.d.ts.map +1 -1
  12. package/dist/components/field-sidebar/fillable-field-type-list.js +1 -1
  13. package/dist/components/field-sidebar/fillable-field-type-list.js.map +1 -1
  14. package/dist/components/field-sidebar/generic-field-type-list.d.ts.map +1 -1
  15. package/dist/components/field-sidebar/generic-field-type-list.js +1 -1
  16. package/dist/components/field-sidebar/generic-field-type-list.js.map +1 -1
  17. package/dist/components/pdf-canvas/canvas-controls.d.ts +15 -9
  18. package/dist/components/pdf-canvas/canvas-controls.d.ts.map +1 -1
  19. package/dist/components/pdf-canvas/canvas-controls.js +14 -4
  20. package/dist/components/pdf-canvas/canvas-controls.js.map +1 -1
  21. package/dist/components/pdf-canvas/pdf-canvas.d.ts +2 -6
  22. package/dist/components/pdf-canvas/pdf-canvas.d.ts.map +1 -1
  23. package/dist/components/pdf-canvas/pdf-canvas.js +5 -11
  24. package/dist/components/pdf-canvas/pdf-canvas.js.map +1 -1
  25. package/dist/components/pdf-editor/pdf-editor.d.ts +0 -2
  26. package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
  27. package/dist/components/pdf-editor/pdf-editor.js +2 -2
  28. package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
  29. package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js +1 -4
  30. package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js.map +1 -1
  31. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.d.ts.map +1 -1
  32. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.js +2 -3
  33. package/dist/components/pdf-fields-overlay/pdf-overlay-field-e-sign.js.map +1 -1
  34. package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts.map +1 -1
  35. package/dist/components/pdf-fields-overlay/pdf-overlay-field.js +2 -4
  36. package/dist/components/pdf-fields-overlay/pdf-overlay-field.js.map +1 -1
  37. package/dist/components/pdf-view/pdf-view-e-sign.d.ts.map +1 -1
  38. package/dist/components/pdf-view/pdf-view-e-sign.js +2 -3
  39. package/dist/components/pdf-view/pdf-view-e-sign.js.map +1 -1
  40. package/dist/components/pdf-view/pdf-view-field-container.d.ts.map +1 -1
  41. package/dist/components/pdf-view/pdf-view-field-container.js +3 -10
  42. package/dist/components/pdf-view/pdf-view-field-container.js.map +1 -1
  43. package/dist/components/pdf-view/pdf-view-fillable.js +1 -1
  44. package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
  45. package/dist/components/pdf-view/pdf-view.d.ts +0 -5
  46. package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
  47. package/dist/components/pdf-view/pdf-view.js +24 -51
  48. package/dist/components/pdf-view/pdf-view.js.map +1 -1
  49. package/dist/constants/field.constants.d.ts.map +1 -1
  50. package/dist/constants/field.constants.js +6 -27
  51. package/dist/constants/field.constants.js.map +1 -1
  52. package/dist/hooks/index.d.ts +0 -1
  53. package/dist/hooks/index.d.ts.map +1 -1
  54. package/dist/hooks/index.js +0 -1
  55. package/dist/hooks/index.js.map +1 -1
  56. package/dist/hooks/useZoom.d.ts +0 -2
  57. package/dist/hooks/useZoom.d.ts.map +1 -1
  58. package/dist/hooks/useZoom.js +6 -18
  59. package/dist/hooks/useZoom.js.map +1 -1
  60. package/dist/interface/types.d.ts +0 -2
  61. package/dist/interface/types.d.ts.map +1 -1
  62. package/dist/interface/types.js.map +1 -1
  63. package/dist/styles/pdf-canvas.css +15 -91
  64. package/dist/styles/pdf-editor.css +0 -1
  65. package/dist/styles/pdf-field-overlay.css +78 -109
  66. package/dist/styles/variables.css +0 -3
  67. package/dist/utils/field/get-navigable-fields.utils.js +1 -1
  68. package/dist/utils/field/get-navigable-fields.utils.js.map +1 -1
  69. package/dist/utils/field/index.d.ts +0 -1
  70. package/dist/utils/field/index.d.ts.map +1 -1
  71. package/dist/utils/field/index.js +0 -1
  72. package/dist/utils/field/index.js.map +1 -1
  73. package/dist/utils/pdf/index.d.ts +0 -1
  74. package/dist/utils/pdf/index.d.ts.map +1 -1
  75. package/dist/utils/pdf/index.js +0 -1
  76. package/dist/utils/pdf/index.js.map +1 -1
  77. package/package.json +1 -1
  78. package/src/components/field-sidebar/calculated-field-type-list.tsx +0 -1
  79. package/src/components/field-sidebar/e-sign-field-type-list.tsx +0 -1
  80. package/src/components/field-sidebar/field-type.tsx +3 -13
  81. package/src/components/field-sidebar/fillable-field-type-list.tsx +0 -1
  82. package/src/components/field-sidebar/generic-field-type-list.tsx +0 -1
  83. package/src/components/pdf-canvas/canvas-controls.tsx +128 -30
  84. package/src/components/pdf-canvas/pdf-canvas.tsx +8 -18
  85. package/src/components/pdf-editor/pdf-editor.tsx +1 -4
  86. package/src/components/pdf-fields-overlay/pdf-fields-overlay.tsx +1 -1
  87. package/src/components/pdf-fields-overlay/pdf-overlay-field-e-sign.tsx +6 -8
  88. package/src/components/pdf-fields-overlay/pdf-overlay-field.tsx +1 -17
  89. package/src/components/pdf-view/pdf-view-e-sign.tsx +6 -8
  90. package/src/components/pdf-view/pdf-view-field-container.tsx +1 -21
  91. package/src/components/pdf-view/pdf-view-fillable.tsx +1 -1
  92. package/src/components/pdf-view/pdf-view.tsx +95 -156
  93. package/src/constants/field.constants.ts +6 -28
  94. package/src/hooks/index.ts +0 -1
  95. package/src/hooks/useZoom.ts +8 -20
  96. package/src/interface/types.ts +0 -3
  97. package/src/styles/pdf-canvas.css +15 -91
  98. package/src/styles/pdf-editor.css +0 -1
  99. package/src/styles/pdf-field-overlay.css +78 -109
  100. package/src/styles/variables.css +0 -3
  101. package/src/utils/field/get-navigable-fields.utils.ts +1 -1
  102. package/src/utils/field/index.ts +0 -1
  103. package/src/utils/pdf/index.ts +0 -1
  104. package/dist/hooks/usePinchZoom.d.ts +0 -14
  105. package/dist/hooks/usePinchZoom.d.ts.map +0 -1
  106. package/dist/hooks/usePinchZoom.js +0 -58
  107. package/dist/hooks/usePinchZoom.js.map +0 -1
  108. package/dist/utils/field/get-field-type-option.utils.d.ts +0 -3
  109. package/dist/utils/field/get-field-type-option.utils.d.ts.map +0 -1
  110. package/dist/utils/field/get-field-type-option.utils.js +0 -10
  111. package/dist/utils/field/get-field-type-option.utils.js.map +0 -1
  112. package/dist/utils/pdf/pinch-zoom.utils.d.ts +0 -6
  113. package/dist/utils/pdf/pinch-zoom.utils.d.ts.map +0 -1
  114. package/dist/utils/pdf/pinch-zoom.utils.js +0 -18
  115. package/dist/utils/pdf/pinch-zoom.utils.js.map +0 -1
  116. package/src/hooks/usePinchZoom.ts +0 -86
  117. package/src/utils/field/__tests__/get-field-type-option.utils.test.ts +0 -53
  118. package/src/utils/field/get-field-type-option.utils.ts +0 -16
  119. package/src/utils/pdf/__tests__/pinch-zoom.utils.test.ts +0 -58
  120. package/src/utils/pdf/pinch-zoom.utils.ts +0 -30
@@ -5,10 +5,10 @@
5
5
  width: 100%;
6
6
  height: 100%;
7
7
  pointer-events: none;
8
+ }
8
9
 
9
- &.--view-mode {
10
- pointer-events: auto;
11
- }
10
+ .dte-pdf-field-overlay.--view-mode {
11
+ pointer-events: auto;
12
12
  }
13
13
 
14
14
  /* Editor-only chrome. Layout metrics come from getFieldBoundsStyle. */
@@ -17,34 +17,33 @@
17
17
  outline-offset: 0;
18
18
  border: none;
19
19
  pointer-events: auto;
20
- border-radius: 4px;
20
+ }
21
21
 
22
- &.--edit-mode {
23
- overflow: unset !important;
24
- }
22
+ .dte-pdf-field-editor.fillable-radio.--edit-mode {
23
+ overflow: unset !important;
24
+ }
25
25
 
26
- &.--selected {
27
- outline: 2px solid var(--border-color-active);
28
- cursor: move;
29
- }
26
+ .dte-pdf-field-editor.--selected {
27
+ outline: 2px solid var(--border-color-active);
28
+ cursor: move;
29
+ }
30
30
 
31
- &.--unselected {
32
- cursor: pointer;
33
- }
31
+ .dte-pdf-field-editor.--unselected {
32
+ cursor: pointer;
33
+ }
34
34
 
35
- &.--dragging {
36
- opacity: 0.5;
37
- }
35
+ .dte-pdf-field-editor.--dragging {
36
+ opacity: 0.5;
37
+ }
38
38
 
39
- &.--colored:not(.--selected) {
40
- outline-color: var(--border-color-active) !important;
41
- box-shadow: 0 0 2px 0 var(--border-color-active);
42
- }
39
+ .dte-pdf-field-editor.--colored:not(.--selected) {
40
+ outline-color: var(--border-color-active) !important;
41
+ box-shadow: 0 0 2px 0 var(--border-color-active);
42
+ }
43
43
 
44
- &.--error {
45
- outline-color: var(--danger) !important;
46
- box-shadow: 0 0 4px 0 var(--danger);
47
- }
44
+ .dte-pdf-field-editor.--error {
45
+ outline-color: var(--danger) !important;
46
+ box-shadow: 0 0 4px 0 var(--danger);
48
47
  }
49
48
 
50
49
  .dte-pdf-field-error-message {
@@ -53,26 +52,7 @@
53
52
  position: absolute;
54
53
  margin-top: var(--spacing-half, 4px);
55
54
  color: var(--danger);
56
- font-size: var(--typescale-small, 10px);
57
- }
58
-
59
- .dte-pdf-field-label {
60
- position: absolute;
61
- display: flex;
62
- align-items: center;
63
- gap: var(--spacing-half, 4px);
64
- background-color: var(--color-neutral-0, #ffffff);
65
- border-radius: 4px;
66
- padding: 1px var(--spacing-half, 4px);
67
- top: -10px;
68
- left: 3px;
69
- font-size: var(--typescale-small, 10px);
70
- line-height: 1;
71
- white-space: nowrap;
72
- color: var(--menu-active-color, #2270ee);
73
- border-width: 1px;
74
- border-style: solid;
75
- border-color: inherit;
55
+ font-size: var(--typescale-1, 12px);
76
56
  }
77
57
 
78
58
  .dte-pdf-field-resize-handle {
@@ -85,10 +65,10 @@
85
65
  cursor: nwse-resize;
86
66
  z-index: 10;
87
67
  box-sizing: border-box;
68
+ }
88
69
 
89
- &:hover {
90
- border-color: var(--border-color-active);
91
- }
70
+ .dte-pdf-field-resize-handle:hover {
71
+ border-color: var(--border-color-active);
92
72
  }
93
73
 
94
74
  .dte-add-field-button {
@@ -100,10 +80,10 @@
100
80
  padding: var(--spacing-0, 0);
101
81
  width: 20px;
102
82
  height: 20px;
83
+ }
103
84
 
104
- .dte-pdf-field-editor:hover & {
105
- display: block;
106
- }
85
+ .dte-pdf-field-editor:hover .dte-add-field-button {
86
+ display: block;
107
87
  }
108
88
 
109
89
  .dte-pdf-field-view {
@@ -111,17 +91,6 @@
111
91
  outline: none;
112
92
  cursor: default;
113
93
  pointer-events: auto;
114
-
115
- &.--fillable,
116
- &.--eSign {
117
- border-style: dashed;
118
- border-width: 1px;
119
- border-radius: 4px;
120
-
121
- &:focus {
122
- outline: 2px solid var(--border-color-active);
123
- }
124
- }
125
94
  }
126
95
 
127
96
  .dte-pdf-field-content {
@@ -130,15 +99,15 @@
130
99
  min-height: 0;
131
100
  overflow: hidden;
132
101
  line-height: 1;
102
+ }
133
103
 
134
- input[type='checkbox']:focus,
135
- input[type='checkbox']:active,
136
- input[type='radio']:active,
137
- input[type='radio']:focus {
138
- box-shadow:
139
- 0 0 0 2px var(--border-color-active, #2270ee) inset,
140
- 0 0 0 3px var(--color-neutral-0, #ffffff) inset;
141
- }
104
+ .dte-pdf-field-content input[type='checkbox']:focus,
105
+ .dte-pdf-field-content input[type='checkbox']:active,
106
+ .dte-pdf-field-content input[type='radio']:active,
107
+ .dte-pdf-field-content input[type='radio']:focus {
108
+ box-shadow:
109
+ 0 0 0 2px var(--border-color-active, #2270ee) inset,
110
+ 0 0 0 3px var(--color-neutral-0, #ffffff) inset;
142
111
  }
143
112
 
144
113
  /*
@@ -181,37 +150,37 @@
181
150
  min-width: 0;
182
151
  min-height: 0;
183
152
  box-sizing: border-box;
184
- background: transparent;
153
+ background: inherit;
185
154
  border: none;
186
155
  padding: var(--spacing-0);
187
156
  margin: var(--spacing-0);
188
157
  line-height: 1;
189
158
  font-size: inherit;
159
+ }
190
160
 
191
- &.dte-pdf-field-text--single-line {
192
- white-space: nowrap;
193
- overflow: hidden;
194
- }
161
+ .dte-pdf-field-editor .dte-pdf-field-fillable {
162
+ pointer-events: none;
163
+ }
195
164
 
196
- &.dte-pdf-field-text--multiline {
197
- white-space: pre-wrap;
198
- overflow-wrap: break-word;
199
- overflow: hidden;
200
- resize: none;
201
- }
165
+ .dte-pdf-field-view .dte-pdf-field-fillable {
166
+ pointer-events: auto;
167
+ }
202
168
 
203
- &:focus {
204
- outline: 2px solid var(--border-color-active, #2270ee);
205
- outline-offset: 2px;
206
- }
169
+ .dte-pdf-field-fillable.dte-pdf-field-text--single-line {
170
+ white-space: nowrap;
171
+ overflow: hidden;
172
+ }
207
173
 
208
- .dte-pdf-field-editor & {
209
- pointer-events: none;
210
- }
174
+ .dte-pdf-field-fillable.dte-pdf-field-text--multiline {
175
+ white-space: pre-wrap;
176
+ overflow-wrap: break-word;
177
+ overflow: hidden;
178
+ resize: none;
179
+ }
211
180
 
212
- .dte-pdf-field-view & {
213
- pointer-events: auto;
214
- }
181
+ .dte-pdf-field-fillable:focus {
182
+ outline: 2px solid var(--border-color-active, #2270ee);
183
+ outline-offset: 2px;
215
184
  }
216
185
 
217
186
  .dte-pdf-field-generic-table {
@@ -220,27 +189,27 @@
220
189
  border-spacing: var(--spacing-0, 0);
221
190
  width: 100%;
222
191
  table-layout: fixed;
192
+ }
223
193
 
224
- td {
225
- border-top: 1px solid var(--border-color);
226
- border-left: 1px solid var(--border-color);
227
- padding-inline: var(--spacing-1, 8px);
228
- }
194
+ .dte-pdf-field-generic-table td {
195
+ border-top: 1px solid var(--border-color);
196
+ border-left: 1px solid var(--border-color);
197
+ padding-inline: var(--spacing-1, 8px);
198
+ }
229
199
 
230
- .dte-pdf-field-generic-table-header td {
231
- background-color: var(--bg-color);
232
- font-weight: bold;
233
- }
200
+ .dte-pdf-field-generic-table .dte-pdf-field-generic-table-header td {
201
+ background-color: var(--bg-color);
202
+ font-weight: bold;
203
+ }
234
204
 
235
- tr:not(.dte-pdf-field-generic-table-header) td {
236
- background-color: var(--bg-color-light);
237
- }
205
+ .dte-pdf-field-generic-table tr:not(.dte-pdf-field-generic-table-header) td {
206
+ background-color: var(--bg-color-light);
207
+ }
238
208
 
239
- tr:last-child td {
240
- border-bottom: 1px solid var(--border-color);
241
- }
209
+ .dte-pdf-field-generic-table tr:last-child td {
210
+ border-bottom: 1px solid var(--border-color);
211
+ }
242
212
 
243
- tr td:last-child {
244
- border-right: 1px solid var(--border-color);
245
- }
213
+ .dte-pdf-field-generic-table tr td:last-child {
214
+ border-right: 1px solid var(--border-color);
246
215
  }
@@ -6,7 +6,6 @@
6
6
  --menu-hover-color: var(--color-neutral-100, #606162);
7
7
 
8
8
  /* Typography */
9
- --typescale-small: 10px;
10
9
  --typescale-0: var(--typescale-1, 12px);
11
10
  --typescale-1: var(--typescale-1, 14px);
12
11
 
@@ -21,7 +20,6 @@
21
20
  --radius-0: 0;
22
21
  --radius-1: 4px;
23
22
  --radius-2: 8px;
24
- --radius-3: 16px;
25
23
 
26
24
  /* Colors - Neutral */
27
25
  --color-neutral-0: var(--color-neutral-0, #ffffff);
@@ -33,7 +31,6 @@
33
31
  --color-blue-100: var(--color-blue-100, #fafcff);
34
32
 
35
33
  /* Background colors */
36
- --bg-color-highlited: var(--color-blue-400);
37
34
  --bg-color-light: var(--color-neutral-0, #ffffff);
38
35
  --bg-color-main: var(--color-neutral-20, #fafafa);
39
36
  --bg-color-secondary: var(--color-neutral-50, #eeeeee);
@@ -1,7 +1,7 @@
1
1
  import { type DataModelValues, FieldTypeEnum, PdfField } from '../../interface/types';
2
2
  import { evaluateDisplayCondition } from '../conditions';
3
3
 
4
- const navigableFields = [FieldTypeEnum.fillable];
4
+ const navigableFields = [FieldTypeEnum.fillable, FieldTypeEnum.eSign];
5
5
 
6
6
  export const getNavigableFieldsUtils = (
7
7
  fields: PdfField[],
@@ -8,6 +8,5 @@ export * from './field-resize.utils';
8
8
  export * from './get-field-bounds-style.utils';
9
9
  export * from './get-field-font-size.utils';
10
10
  export * from './get-field-text-clip.utils';
11
- export * from './get-field-type-option.utils';
12
11
  export * from './get-field-typography.utils';
13
12
  export * from './get-navigable-fields.utils';
@@ -1,3 +1,2 @@
1
1
  export * from './pdf-rendering.utils';
2
- export * from './pinch-zoom.utils';
3
2
  export * from './unit-conversion.utils';
@@ -1,14 +0,0 @@
1
- import { RefObject } from 'react';
2
- interface UsePinchZoomOptions {
3
- enabled: boolean;
4
- zoom: number;
5
- setZoomValue(value: number): void;
6
- zoomByFactor(factor: number): void;
7
- }
8
- /**
9
- * Trackpad pinch (wheel + ctrlKey) and two-finger mobile pinch on `containerRef`.
10
- * Regular two-finger trackpad scroll is left alone so the page can still pan.
11
- */
12
- export declare const usePinchZoom: (containerRef: RefObject<HTMLElement | null>, { enabled, setZoomValue, zoom, zoomByFactor }: UsePinchZoomOptions) => void;
13
- export {};
14
- //# sourceMappingURL=usePinchZoom.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePinchZoom.d.ts","sourceRoot":"","sources":["../../src/hooks/usePinchZoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,OAAO,CAAC;AAQrD,UAAU,mBAAmB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GACrB,cAAc,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC3C,+CAA+C,mBAAmB,SAgErE,CAAC"}
@@ -1,58 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import { clampZoom, getPinchZoomValue, getTouchDistance, getWheelZoomFactor, } from '../utils';
3
- /**
4
- * Trackpad pinch (wheel + ctrlKey) and two-finger mobile pinch on `containerRef`.
5
- * Regular two-finger trackpad scroll is left alone so the page can still pan.
6
- */
7
- export const usePinchZoom = (containerRef, { enabled, setZoomValue, zoom, zoomByFactor }) => {
8
- const zoomRef = useRef(zoom);
9
- zoomRef.current = zoom;
10
- useEffect(() => {
11
- const container = containerRef.current;
12
- if (!container || !enabled) {
13
- return;
14
- }
15
- let pinchStartDistance = 0;
16
- let pinchStartZoom = zoomRef.current;
17
- const handleWheel = (event) => {
18
- if (!event.ctrlKey) {
19
- return;
20
- }
21
- event.preventDefault();
22
- zoomByFactor(getWheelZoomFactor(event.deltaY));
23
- };
24
- const handleTouchStart = (event) => {
25
- if (event.touches.length !== 2) {
26
- return;
27
- }
28
- pinchStartDistance = getTouchDistance(event.touches[0], event.touches[1]);
29
- pinchStartZoom = zoomRef.current;
30
- };
31
- const handleTouchMove = (event) => {
32
- if (event.touches.length !== 2 || pinchStartDistance <= 0) {
33
- return;
34
- }
35
- event.preventDefault();
36
- const currentDistance = getTouchDistance(event.touches[0], event.touches[1]);
37
- setZoomValue(clampZoom(getPinchZoomValue(pinchStartZoom, pinchStartDistance, currentDistance)));
38
- };
39
- const handleTouchEnd = (event) => {
40
- if (event.touches.length < 2) {
41
- pinchStartDistance = 0;
42
- }
43
- };
44
- container.addEventListener('wheel', handleWheel, { passive: false });
45
- container.addEventListener('touchstart', handleTouchStart, { passive: true });
46
- container.addEventListener('touchmove', handleTouchMove, { passive: false });
47
- container.addEventListener('touchend', handleTouchEnd);
48
- container.addEventListener('touchcancel', handleTouchEnd);
49
- return () => {
50
- container.removeEventListener('wheel', handleWheel);
51
- container.removeEventListener('touchstart', handleTouchStart);
52
- container.removeEventListener('touchmove', handleTouchMove);
53
- container.removeEventListener('touchend', handleTouchEnd);
54
- container.removeEventListener('touchcancel', handleTouchEnd);
55
- };
56
- }, [containerRef, enabled, setZoomValue, zoomByFactor]);
57
- };
58
- //# sourceMappingURL=usePinchZoom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePinchZoom.js","sourceRoot":"","sources":["../../src/hooks/usePinchZoom.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type PdfField } from '../../interface/types';
2
- export declare const getFieldTypeOption: (field: Pick<PdfField, "type" | "subType">) => import("../..").FieldTypeOption | undefined;
3
- //# sourceMappingURL=get-field-type-option.utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-field-type-option.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/get-field-type-option.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD,eAAO,MAAM,kBAAkB,GAAI,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,gDAQ3E,CAAC"}
@@ -1,10 +0,0 @@
1
- import { E_SIGN_FIELD_TYPES, FILLABLE_FIELD_TYPES } from '../../constants';
2
- const HIDDEN_OVERLAY_LABEL_SUBTYPES = new Set(['checkbox', 'radio']);
3
- const FIELD_TYPE_OPTIONS = [...FILLABLE_FIELD_TYPES, ...E_SIGN_FIELD_TYPES];
4
- export const getFieldTypeOption = (field) => {
5
- if (field.subType && HIDDEN_OVERLAY_LABEL_SUBTYPES.has(field.subType)) {
6
- return undefined;
7
- }
8
- return FIELD_TYPE_OPTIONS.find(option => option.type === field.type && option.subType === field.subType);
9
- };
10
- //# sourceMappingURL=get-field-type-option.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-field-type-option.utils.js","sourceRoot":"","sources":["../../../src/utils/field/get-field-type-option.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG3E,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAErE,MAAM,kBAAkB,GAAG,CAAC,GAAG,oBAAoB,EAAE,GAAG,kBAAkB,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAyC,EAAE,EAAE;IAC5E,IAAI,KAAK,CAAC,OAAO,IAAI,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,kBAAkB,CAAC,IAAI,CAC1B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAC3E,CAAC;AACN,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- export declare const WHEEL_ZOOM_SENSITIVITY = 0.01;
2
- export declare const clampZoom: (value: number) => number;
3
- export declare const getWheelZoomFactor: (deltaY: number) => number;
4
- export declare const getTouchDistance: (first: Pick<Touch, "clientX" | "clientY">, second: Pick<Touch, "clientX" | "clientY">) => number;
5
- export declare const getPinchZoomValue: (startZoom: number, startDistance: number, currentDistance: number) => number;
6
- //# sourceMappingURL=pinch-zoom.utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pinch-zoom.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/pdf/pinch-zoom.utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,WAEtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,WAEhD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,OAAO,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC,EACzC,QAAQ,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC,WAG7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC1B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,iBAAiB,MAAM,WAO1B,CAAC"}
@@ -1,18 +0,0 @@
1
- import { ZOOM_MAX, ZOOM_MIN } from '../../constants';
2
- export const WHEEL_ZOOM_SENSITIVITY = 0.01;
3
- export const clampZoom = (value) => {
4
- return Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, Math.round(value * 100) / 100));
5
- };
6
- export const getWheelZoomFactor = (deltaY) => {
7
- return Math.exp(-deltaY * WHEEL_ZOOM_SENSITIVITY);
8
- };
9
- export const getTouchDistance = (first, second) => {
10
- return Math.hypot(first.clientX - second.clientX, first.clientY - second.clientY);
11
- };
12
- export const getPinchZoomValue = (startZoom, startDistance, currentDistance) => {
13
- if (startDistance <= 0) {
14
- return startZoom;
15
- }
16
- return startZoom * (currentDistance / startDistance);
17
- };
18
- //# sourceMappingURL=pinch-zoom.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pinch-zoom.utils.js","sourceRoot":"","sources":["../../../src/utils/pdf/pinch-zoom.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,EAAE;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,KAAyC,EACzC,MAA0C,EAC5C,EAAE;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,SAAiB,EACjB,aAAqB,EACrB,eAAuB,EACzB,EAAE;IACA,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,GAAG,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC;AACzD,CAAC,CAAC"}
@@ -1,86 +0,0 @@
1
- import { RefObject, useEffect, useRef } from 'react';
2
- import {
3
- clampZoom,
4
- getPinchZoomValue,
5
- getTouchDistance,
6
- getWheelZoomFactor,
7
- } from '../utils';
8
-
9
- interface UsePinchZoomOptions {
10
- enabled: boolean;
11
- zoom: number;
12
- setZoomValue(value: number): void;
13
- zoomByFactor(factor: number): void;
14
- }
15
-
16
- /**
17
- * Trackpad pinch (wheel + ctrlKey) and two-finger mobile pinch on `containerRef`.
18
- * Regular two-finger trackpad scroll is left alone so the page can still pan.
19
- */
20
- export const usePinchZoom = (
21
- containerRef: RefObject<HTMLElement | null>,
22
- { enabled, setZoomValue, zoom, zoomByFactor }: UsePinchZoomOptions,
23
- ) => {
24
- const zoomRef = useRef(zoom);
25
- zoomRef.current = zoom;
26
-
27
- useEffect(() => {
28
- const container = containerRef.current;
29
- if (!container || !enabled) {
30
- return;
31
- }
32
-
33
- let pinchStartDistance = 0;
34
- let pinchStartZoom = zoomRef.current;
35
-
36
- const handleWheel = (event: WheelEvent) => {
37
- if (!event.ctrlKey) {
38
- return;
39
- }
40
-
41
- event.preventDefault();
42
- zoomByFactor(getWheelZoomFactor(event.deltaY));
43
- };
44
-
45
- const handleTouchStart = (event: TouchEvent) => {
46
- if (event.touches.length !== 2) {
47
- return;
48
- }
49
-
50
- pinchStartDistance = getTouchDistance(event.touches[0], event.touches[1]);
51
- pinchStartZoom = zoomRef.current;
52
- };
53
-
54
- const handleTouchMove = (event: TouchEvent) => {
55
- if (event.touches.length !== 2 || pinchStartDistance <= 0) {
56
- return;
57
- }
58
-
59
- event.preventDefault();
60
- const currentDistance = getTouchDistance(event.touches[0], event.touches[1]);
61
- setZoomValue(
62
- clampZoom(getPinchZoomValue(pinchStartZoom, pinchStartDistance, currentDistance)),
63
- );
64
- };
65
-
66
- const handleTouchEnd = (event: TouchEvent) => {
67
- if (event.touches.length < 2) {
68
- pinchStartDistance = 0;
69
- }
70
- };
71
-
72
- container.addEventListener('wheel', handleWheel, { passive: false });
73
- container.addEventListener('touchstart', handleTouchStart, { passive: true });
74
- container.addEventListener('touchmove', handleTouchMove, { passive: false });
75
- container.addEventListener('touchend', handleTouchEnd);
76
- container.addEventListener('touchcancel', handleTouchEnd);
77
-
78
- return () => {
79
- container.removeEventListener('wheel', handleWheel);
80
- container.removeEventListener('touchstart', handleTouchStart);
81
- container.removeEventListener('touchmove', handleTouchMove);
82
- container.removeEventListener('touchend', handleTouchEnd);
83
- container.removeEventListener('touchcancel', handleTouchEnd);
84
- };
85
- }, [containerRef, enabled, setZoomValue, zoomByFactor]);
86
- };
@@ -1,53 +0,0 @@
1
- import { E_SIGN_FIELD_TYPES, FILLABLE_FIELD_TYPES } from '../../../constants';
2
- import { ESignFieldType, FieldTypeEnum, type PdfField } from '../../../interface/types';
3
- import { getFieldTypeOption } from '../get-field-type-option.utils';
4
-
5
- const buildField = (overrides: Partial<PdfField> = {}): PdfField => ({
6
- id: 'field-1',
7
- type: FieldTypeEnum.fillable,
8
- subType: 'text',
9
- x: 0,
10
- y: 0,
11
- page: 1,
12
- label: 'Label',
13
- width: 200,
14
- height: 25,
15
- ...overrides,
16
- });
17
-
18
- describe('getFieldTypeOption', () => {
19
- const subject = (field: Pick<PdfField, 'type' | 'subType'>) => getFieldTypeOption(field);
20
-
21
- test.each(
22
- [...FILLABLE_FIELD_TYPES, ...E_SIGN_FIELD_TYPES].filter(
23
- option => option.subType !== 'checkbox' && option.subType !== 'radio',
24
- ),
25
- )('returns $label for $type $subType', option => {
26
- expect(subject(buildField({ type: option.type, subType: option.subType }))).toBe(option);
27
- });
28
-
29
- test.each(['checkbox', 'radio'] as const)('returns undefined for fillable %s', subType => {
30
- expect(subject(buildField({ type: FieldTypeEnum.fillable, subType }))).toBeUndefined();
31
- });
32
-
33
- test.each([
34
- FieldTypeEnum.calculated,
35
- FieldTypeEnum.generic,
36
- FieldTypeEnum.dataModel,
37
- FieldTypeEnum.forms,
38
- ])('returns undefined for %s fields', type => {
39
- const subType = type === FieldTypeEnum.generic ? 'text' : undefined;
40
- expect(subject(buildField({ type, subType }))).toBeUndefined();
41
- });
42
-
43
- test('returns undefined for unknown e-sign subtype', () => {
44
- expect(
45
- subject(
46
- buildField({
47
- type: FieldTypeEnum.eSign,
48
- subType: 'unknown' as ESignFieldType,
49
- }),
50
- ),
51
- ).toBeUndefined();
52
- });
53
- });
@@ -1,16 +0,0 @@
1
- import { E_SIGN_FIELD_TYPES, FILLABLE_FIELD_TYPES } from '../../constants';
2
- import { type PdfField } from '../../interface/types';
3
-
4
- const HIDDEN_OVERLAY_LABEL_SUBTYPES = new Set(['checkbox', 'radio']);
5
-
6
- const FIELD_TYPE_OPTIONS = [...FILLABLE_FIELD_TYPES, ...E_SIGN_FIELD_TYPES];
7
-
8
- export const getFieldTypeOption = (field: Pick<PdfField, 'type' | 'subType'>) => {
9
- if (field.subType && HIDDEN_OVERLAY_LABEL_SUBTYPES.has(field.subType)) {
10
- return undefined;
11
- }
12
-
13
- return FIELD_TYPE_OPTIONS.find(
14
- option => option.type === field.type && option.subType === field.subType,
15
- );
16
- };