@servicetitan/dte-pdf-editor 1.49.0 → 1.51.0
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/dist/components/field-config-panel/field-config-panel.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-config-panel.js +15 -4
- package/dist/components/field-config-panel/field-config-panel.js.map +1 -1
- package/dist/components/field-config-panel/field-sidebar.d.ts.map +1 -1
- package/dist/components/field-config-panel/field-sidebar.js +42 -6
- package/dist/components/field-config-panel/field-sidebar.js.map +1 -1
- package/dist/components/field-config-panel/formula-modal.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-modal.js +55 -2
- package/dist/components/field-config-panel/formula-modal.js.map +1 -1
- package/dist/components/field-config-panel/formula-workspace.d.ts +1 -0
- package/dist/components/field-config-panel/formula-workspace.d.ts.map +1 -1
- package/dist/components/field-config-panel/formula-workspace.js +3 -3
- package/dist/components/field-config-panel/formula-workspace.js.map +1 -1
- package/dist/components/field-sidebar/data-model-field-type-list.d.ts.map +1 -1
- package/dist/components/field-sidebar/data-model-field-type-list.js +2 -1
- package/dist/components/field-sidebar/data-model-field-type-list.js.map +1 -1
- package/dist/components/field-sidebar/field-type.d.ts +1 -0
- package/dist/components/field-sidebar/field-type.d.ts.map +1 -1
- package/dist/components/field-sidebar/field-type.js +3 -3
- package/dist/components/field-sidebar/field-type.js.map +1 -1
- package/dist/components/field-sidebar/form-fields-type-list.d.ts.map +1 -1
- package/dist/components/field-sidebar/form-fields-type-list.js +2 -1
- package/dist/components/field-sidebar/form-fields-type-list.js.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js +4 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js.map +1 -1
- package/dist/components/pdf-view/pdf-view-field-container.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-field-container.js +4 -1
- package/dist/components/pdf-view/pdf-view-field-container.js.map +1 -1
- package/dist/components/pdf-view/pdf-view-fillable.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-fillable.js +3 -0
- package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
- package/dist/constants/field.constants.d.ts +2 -0
- package/dist/constants/field.constants.d.ts.map +1 -1
- package/dist/constants/field.constants.js +4 -0
- package/dist/constants/field.constants.js.map +1 -1
- package/dist/hooks/usePdfFieldDnD.d.ts.map +1 -1
- package/dist/hooks/usePdfFieldDnD.js +10 -3
- package/dist/hooks/usePdfFieldDnD.js.map +1 -1
- package/dist/interface/types.d.ts +5 -0
- package/dist/interface/types.d.ts.map +1 -1
- package/dist/interface/types.js.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.d.ts.map +1 -1
- package/dist/utils/data-model/extract-fields.utils.js +4 -2
- package/dist/utils/data-model/extract-fields.utils.js.map +1 -1
- package/dist/utils/field/get-field-font-size.utils.d.ts +7 -0
- package/dist/utils/field/get-field-font-size.utils.d.ts.map +1 -0
- package/dist/utils/field/get-field-font-size.utils.js +23 -0
- package/dist/utils/field/get-field-font-size.utils.js.map +1 -0
- package/dist/utils/field/index.d.ts +1 -0
- package/dist/utils/field/index.d.ts.map +1 -1
- package/dist/utils/field/index.js +1 -0
- package/dist/utils/field/index.js.map +1 -1
- package/dist/utils/pdf/index.d.ts +1 -0
- package/dist/utils/pdf/index.d.ts.map +1 -1
- package/dist/utils/pdf/index.js +1 -0
- package/dist/utils/pdf/index.js.map +1 -1
- package/dist/utils/pdf/unit-conversion.utils.d.ts +22 -0
- package/dist/utils/pdf/unit-conversion.utils.d.ts.map +1 -0
- package/dist/utils/pdf/unit-conversion.utils.js +27 -0
- package/dist/utils/pdf/unit-conversion.utils.js.map +1 -0
- package/dist/utils/shared/index.d.ts +1 -0
- package/dist/utils/shared/index.d.ts.map +1 -1
- package/dist/utils/shared/index.js +1 -0
- package/dist/utils/shared/index.js.map +1 -1
- package/dist/utils/shared/sample-data.utils.d.ts +3 -0
- package/dist/utils/shared/sample-data.utils.d.ts.map +1 -0
- package/dist/utils/shared/sample-data.utils.js +20 -0
- package/dist/utils/shared/sample-data.utils.js.map +1 -0
- package/package.json +1 -1
- package/src/components/field-config-panel/field-config-panel.tsx +43 -3
- package/src/components/field-config-panel/field-sidebar.tsx +71 -7
- package/src/components/field-config-panel/formula-modal.tsx +61 -0
- package/src/components/field-config-panel/formula-workspace.tsx +8 -0
- package/src/components/field-sidebar/data-model-field-type-list.tsx +6 -1
- package/src/components/field-sidebar/field-type.tsx +16 -3
- package/src/components/field-sidebar/form-fields-type-list.tsx +5 -0
- package/src/components/pdf-fields-overlay/pdf-overlay-field.tsx +9 -1
- package/src/components/pdf-view/pdf-view-field-container.tsx +10 -1
- package/src/components/pdf-view/pdf-view-fillable.tsx +3 -0
- package/src/constants/field.constants.ts +6 -0
- package/src/hooks/usePdfFieldDnD.ts +10 -1
- package/src/interface/types.ts +6 -0
- package/src/styles/formula-modal.css +10 -0
- package/src/styles/pdf-field-overlay.css +1 -0
- package/src/utils/data-model/extract-fields.utils.ts +2 -0
- package/src/utils/field/get-field-font-size.utils.ts +28 -0
- package/src/utils/field/index.ts +1 -0
- package/src/utils/pdf/__tests__/unit-conversion.utils.test.ts +35 -0
- package/src/utils/pdf/index.ts +1 -0
- package/src/utils/pdf/unit-conversion.utils.ts +31 -0
- package/src/utils/shared/index.ts +1 -0
- package/src/utils/shared/sample-data.utils.ts +29 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EDITOR_PAGE_WIDTH_PX,
|
|
3
|
+
PDF_PAGE_WIDTH_PT,
|
|
4
|
+
PIXELS_TO_POINTS_RATIO,
|
|
5
|
+
pixelsToPoints,
|
|
6
|
+
pointsToPixels,
|
|
7
|
+
} from '../unit-conversion.utils';
|
|
8
|
+
|
|
9
|
+
describe('unit-conversion.utils', () => {
|
|
10
|
+
describe('with PIXELS_TO_POINTS_RATIO', () => {
|
|
11
|
+
test('matches backend page width conversion', () => {
|
|
12
|
+
expect(PIXELS_TO_POINTS_RATIO).toBe(PDF_PAGE_WIDTH_PT / EDITOR_PAGE_WIDTH_PX);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
describe('with pointsToPixels', () => {
|
|
17
|
+
const subject = (points: number) => pointsToPixels(points);
|
|
18
|
+
|
|
19
|
+
test.each([
|
|
20
|
+
[612, 980],
|
|
21
|
+
[14, (14 * EDITOR_PAGE_WIDTH_PX) / PDF_PAGE_WIDTH_PT],
|
|
22
|
+
])('converts %p points to %p pixels', (points, expectedPixels) => {
|
|
23
|
+
expect(subject(points)).toBeCloseTo(expectedPixels);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('with pixelsToPoints', () => {
|
|
28
|
+
const subject = (pixels: number) => pixelsToPoints(pixels);
|
|
29
|
+
|
|
30
|
+
test('is the inverse of pointsToPixels', () => {
|
|
31
|
+
const points = 14;
|
|
32
|
+
expect(subject(pointsToPixels(points))).toBe(points);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
package/src/utils/pdf/index.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BASE_PAGE_WIDTH } from '../../constants';
|
|
2
|
+
|
|
3
|
+
/** Page width the FE editor uses to lay out an 8.5" page, in pixels. */
|
|
4
|
+
export const EDITOR_PAGE_WIDTH_PX = BASE_PAGE_WIDTH;
|
|
5
|
+
|
|
6
|
+
/** Page width PdfSharp uses for an 8.5" page at 72 DPI, in points. */
|
|
7
|
+
export const PDF_PAGE_WIDTH_PT = 612;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Backend `DpiToPointsRatio`: pixels -> points (612 / 980 ≈ 0.6245).
|
|
11
|
+
* Kept here so any drift from the backend constant is a single-line change.
|
|
12
|
+
*/
|
|
13
|
+
export const PIXELS_TO_POINTS_RATIO = PDF_PAGE_WIDTH_PT / EDITOR_PAGE_WIDTH_PX;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Converts a point value (as used by the backend PDF renderer) to editor pixels.
|
|
17
|
+
*
|
|
18
|
+
* Use this for a BYOD field `fontSize` so the editor renders text at the same
|
|
19
|
+
* physical size the backend draws it in the PDF.
|
|
20
|
+
*/
|
|
21
|
+
export const pointsToPixels = (points: number) => {
|
|
22
|
+
return points / PIXELS_TO_POINTS_RATIO;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Converts an editor pixels value to points. Inverse of {@link pointsToPixels};
|
|
27
|
+
* mirrors the backend `ToPoints` conversion.
|
|
28
|
+
*/
|
|
29
|
+
export const pixelsToPoints = (pixels: number) => {
|
|
30
|
+
return pixels * PIXELS_TO_POINTS_RATIO;
|
|
31
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PdfFieldSubType } from '../../interface/types';
|
|
2
|
+
|
|
3
|
+
const DEFAULT_NUMBER_SAMPLE = 350;
|
|
4
|
+
|
|
5
|
+
const toPrimitiveSample = (value: unknown): string | number | undefined => {
|
|
6
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
return undefined;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const getFieldSampleData = (
|
|
13
|
+
sampleData: unknown,
|
|
14
|
+
fieldSubType?: PdfFieldSubType,
|
|
15
|
+
): string | number | null => {
|
|
16
|
+
const primitiveSample = toPrimitiveSample(sampleData);
|
|
17
|
+
|
|
18
|
+
if (fieldSubType === 'date') {
|
|
19
|
+
const candidate = primitiveSample !== undefined ? new Date(primitiveSample) : new Date();
|
|
20
|
+
const source = Number.isNaN(candidate.getTime()) ? new Date() : candidate;
|
|
21
|
+
return source.toISOString().slice(0, 10);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (fieldSubType === 'number') {
|
|
25
|
+
return primitiveSample ?? DEFAULT_NUMBER_SAMPLE;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return primitiveSample ?? null;
|
|
29
|
+
};
|