@servicetitan/dte-pdf-editor 1.92.1 → 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,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
- };
@@ -1,58 +0,0 @@
1
- import { ZOOM_MAX, ZOOM_MIN } from '../../../constants';
2
- import {
3
- clampZoom,
4
- getPinchZoomValue,
5
- getTouchDistance,
6
- getWheelZoomFactor,
7
- } from '../pinch-zoom.utils';
8
-
9
- describe('clampZoom', () => {
10
- const subject = (value: number) => clampZoom(value);
11
-
12
- test('returns the value when inside the range', () => {
13
- expect(subject(1)).toBe(1);
14
- expect(subject(1.25)).toBe(1.25);
15
- });
16
-
17
- test('clamps to the minimum and maximum', () => {
18
- expect(subject(ZOOM_MIN - 0.5)).toBe(ZOOM_MIN);
19
- expect(subject(ZOOM_MAX + 0.5)).toBe(ZOOM_MAX);
20
- });
21
- });
22
-
23
- describe('getWheelZoomFactor', () => {
24
- const subject = (deltaY: number) => getWheelZoomFactor(deltaY);
25
-
26
- test('zooms out for a positive delta', () => {
27
- expect(subject(20)).toBeLessThan(1);
28
- });
29
-
30
- test('zooms in for a negative delta', () => {
31
- expect(subject(-20)).toBeGreaterThan(1);
32
- });
33
- });
34
-
35
- describe('getTouchDistance', () => {
36
- const subject = (
37
- first: Pick<Touch, 'clientX' | 'clientY'>,
38
- second: Pick<Touch, 'clientX' | 'clientY'>,
39
- ) => getTouchDistance(first, second);
40
-
41
- test('returns the distance between two points', () => {
42
- expect(subject({ clientX: 0, clientY: 0 }, { clientX: 3, clientY: 4 })).toBe(5);
43
- });
44
- });
45
-
46
- describe('getPinchZoomValue', () => {
47
- const subject = (startZoom: number, startDistance: number, currentDistance: number) =>
48
- getPinchZoomValue(startZoom, startDistance, currentDistance);
49
-
50
- test('scales zoom by the pinch distance ratio', () => {
51
- expect(subject(1, 100, 150)).toBe(1.5);
52
- expect(subject(1, 100, 50)).toBe(0.5);
53
- });
54
-
55
- test('returns the start zoom when the start distance is invalid', () => {
56
- expect(subject(1.2, 0, 80)).toBe(1.2);
57
- });
58
- });
@@ -1,30 +0,0 @@
1
- import { ZOOM_MAX, ZOOM_MIN } from '../../constants';
2
-
3
- export const WHEEL_ZOOM_SENSITIVITY = 0.01;
4
-
5
- export const clampZoom = (value: number) => {
6
- return Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, Math.round(value * 100) / 100));
7
- };
8
-
9
- export const getWheelZoomFactor = (deltaY: number) => {
10
- return Math.exp(-deltaY * WHEEL_ZOOM_SENSITIVITY);
11
- };
12
-
13
- export const getTouchDistance = (
14
- first: Pick<Touch, 'clientX' | 'clientY'>,
15
- second: Pick<Touch, 'clientX' | 'clientY'>,
16
- ) => {
17
- return Math.hypot(first.clientX - second.clientX, first.clientY - second.clientY);
18
- };
19
-
20
- export const getPinchZoomValue = (
21
- startZoom: number,
22
- startDistance: number,
23
- currentDistance: number,
24
- ) => {
25
- if (startDistance <= 0) {
26
- return startZoom;
27
- }
28
-
29
- return startZoom * (currentDistance / startDistance);
30
- };