@servicetitan/dte-pdf-editor 1.0.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.
Files changed (179) hide show
  1. package/README.md +356 -0
  2. package/dist/components/data-model-field-type-list.d.ts +11 -0
  3. package/dist/components/data-model-field-type-list.d.ts.map +1 -0
  4. package/dist/components/data-model-field-type-list.js +23 -0
  5. package/dist/components/data-model-field-type-list.js.map +1 -0
  6. package/dist/components/e-sign-field-type-list.d.ts +9 -0
  7. package/dist/components/e-sign-field-type-list.d.ts.map +1 -0
  8. package/dist/components/e-sign-field-type-list.js +12 -0
  9. package/dist/components/e-sign-field-type-list.js.map +1 -0
  10. package/dist/components/field-config-panel-overlay.d.ts +13 -0
  11. package/dist/components/field-config-panel-overlay.d.ts.map +1 -0
  12. package/dist/components/field-config-panel-overlay.js +8 -0
  13. package/dist/components/field-config-panel-overlay.js.map +1 -0
  14. package/dist/components/field-config-panel.d.ts +12 -0
  15. package/dist/components/field-config-panel.d.ts.map +1 -0
  16. package/dist/components/field-config-panel.js +38 -0
  17. package/dist/components/field-config-panel.js.map +1 -0
  18. package/dist/components/field-sidebar.d.ts +10 -0
  19. package/dist/components/field-sidebar.d.ts.map +1 -0
  20. package/dist/components/field-sidebar.js +25 -0
  21. package/dist/components/field-sidebar.js.map +1 -0
  22. package/dist/components/field-type.d.ts +9 -0
  23. package/dist/components/field-type.d.ts.map +1 -0
  24. package/dist/components/field-type.js +12 -0
  25. package/dist/components/field-type.js.map +1 -0
  26. package/dist/components/fillable-field-type-list.d.ts +10 -0
  27. package/dist/components/fillable-field-type-list.d.ts.map +1 -0
  28. package/dist/components/fillable-field-type-list.js +17 -0
  29. package/dist/components/fillable-field-type-list.js.map +1 -0
  30. package/dist/components/pdf-canvas.d.ts +22 -0
  31. package/dist/components/pdf-canvas.d.ts.map +1 -0
  32. package/dist/components/pdf-canvas.js +14 -0
  33. package/dist/components/pdf-canvas.js.map +1 -0
  34. package/dist/components/pdf-document-renderer.d.ts +16 -0
  35. package/dist/components/pdf-document-renderer.d.ts.map +1 -0
  36. package/dist/components/pdf-document-renderer.js +28 -0
  37. package/dist/components/pdf-document-renderer.js.map +1 -0
  38. package/dist/components/pdf-editor.d.ts +21 -0
  39. package/dist/components/pdf-editor.d.ts.map +1 -0
  40. package/dist/components/pdf-editor.js +108 -0
  41. package/dist/components/pdf-editor.js.map +1 -0
  42. package/dist/components/pdf-field-overlay.d.ts +14 -0
  43. package/dist/components/pdf-field-overlay.d.ts.map +1 -0
  44. package/dist/components/pdf-field-overlay.js +32 -0
  45. package/dist/components/pdf-field-overlay.js.map +1 -0
  46. package/dist/constants/field.constants.d.ts +16 -0
  47. package/dist/constants/field.constants.d.ts.map +1 -0
  48. package/dist/constants/field.constants.js +28 -0
  49. package/dist/constants/field.constants.js.map +1 -0
  50. package/dist/constants/index.d.ts +3 -0
  51. package/dist/constants/index.d.ts.map +1 -0
  52. package/dist/constants/index.js +3 -0
  53. package/dist/constants/index.js.map +1 -0
  54. package/dist/constants/pdf-editor.constants.d.ts +2 -0
  55. package/dist/constants/pdf-editor.constants.d.ts.map +1 -0
  56. package/dist/constants/pdf-editor.constants.js +2 -0
  57. package/dist/constants/pdf-editor.constants.js.map +1 -0
  58. package/dist/hooks/index.d.ts +4 -0
  59. package/dist/hooks/index.d.ts.map +1 -0
  60. package/dist/hooks/index.js +4 -0
  61. package/dist/hooks/index.js.map +1 -0
  62. package/dist/hooks/useFieldDrag.d.ts +24 -0
  63. package/dist/hooks/useFieldDrag.d.ts.map +1 -0
  64. package/dist/hooks/useFieldDrag.js +34 -0
  65. package/dist/hooks/useFieldDrag.js.map +1 -0
  66. package/dist/hooks/useFieldResize.d.ts +17 -0
  67. package/dist/hooks/useFieldResize.d.ts.map +1 -0
  68. package/dist/hooks/useFieldResize.js +58 -0
  69. package/dist/hooks/useFieldResize.js.map +1 -0
  70. package/dist/hooks/usePdfDocumentRenderer.d.ts +9 -0
  71. package/dist/hooks/usePdfDocumentRenderer.d.ts.map +1 -0
  72. package/dist/hooks/usePdfDocumentRenderer.js +13 -0
  73. package/dist/hooks/usePdfDocumentRenderer.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/interface/pdf-editor.d.ts +64 -0
  79. package/dist/interface/pdf-editor.d.ts.map +1 -0
  80. package/dist/interface/pdf-editor.js +14 -0
  81. package/dist/interface/pdf-editor.js.map +1 -0
  82. package/dist/utils/calculate-drop-coordinates.utils.d.ts +15 -0
  83. package/dist/utils/calculate-drop-coordinates.utils.d.ts.map +1 -0
  84. package/dist/utils/calculate-drop-coordinates.utils.js +48 -0
  85. package/dist/utils/calculate-drop-coordinates.utils.js.map +1 -0
  86. package/dist/utils/extract-grouped-fields-from-data-model.utils.d.ts +7 -0
  87. package/dist/utils/extract-grouped-fields-from-data-model.utils.d.ts.map +1 -0
  88. package/dist/utils/extract-grouped-fields-from-data-model.utils.js +57 -0
  89. package/dist/utils/extract-grouped-fields-from-data-model.utils.js.map +1 -0
  90. package/dist/utils/generate-e-sign-path.d.ts +3 -0
  91. package/dist/utils/generate-e-sign-path.d.ts.map +1 -0
  92. package/dist/utils/generate-e-sign-path.js +4 -0
  93. package/dist/utils/generate-e-sign-path.js.map +1 -0
  94. package/dist/utils/get-page-dimensions.utils.d.ts +12 -0
  95. package/dist/utils/get-page-dimensions.utils.d.ts.map +1 -0
  96. package/dist/utils/get-page-dimensions.utils.js +31 -0
  97. package/dist/utils/get-page-dimensions.utils.js.map +1 -0
  98. package/dist/utils/get-page-number-from-client-y.utils.d.ts +9 -0
  99. package/dist/utils/get-page-number-from-client-y.utils.d.ts.map +1 -0
  100. package/dist/utils/get-page-number-from-client-y.utils.js +24 -0
  101. package/dist/utils/get-page-number-from-client-y.utils.js.map +1 -0
  102. package/dist/utils/get-page-position.utils.d.ts +12 -0
  103. package/dist/utils/get-page-position.utils.d.ts.map +1 -0
  104. package/dist/utils/get-page-position.utils.js +22 -0
  105. package/dist/utils/get-page-position.utils.js.map +1 -0
  106. package/dist/utils/handle-field-drag-start.utils.d.ts +16 -0
  107. package/dist/utils/handle-field-drag-start.utils.d.ts.map +1 -0
  108. package/dist/utils/handle-field-drag-start.utils.js +41 -0
  109. package/dist/utils/handle-field-drag-start.utils.js.map +1 -0
  110. package/dist/utils/handle-field-drag.utils.d.ts +19 -0
  111. package/dist/utils/handle-field-drag.utils.d.ts.map +1 -0
  112. package/dist/utils/handle-field-drag.utils.js +36 -0
  113. package/dist/utils/handle-field-drag.utils.js.map +1 -0
  114. package/dist/utils/handle-field-resize.utils.d.ts +35 -0
  115. package/dist/utils/handle-field-resize.utils.d.ts.map +1 -0
  116. package/dist/utils/handle-field-resize.utils.js +66 -0
  117. package/dist/utils/handle-field-resize.utils.js.map +1 -0
  118. package/dist/utils/index.d.ts +13 -0
  119. package/dist/utils/index.d.ts.map +1 -0
  120. package/dist/utils/index.js +13 -0
  121. package/dist/utils/index.js.map +1 -0
  122. package/dist/utils/is-drag-over-canvas.utils.d.ts +9 -0
  123. package/dist/utils/is-drag-over-canvas.utils.d.ts.map +1 -0
  124. package/dist/utils/is-drag-over-canvas.utils.js +26 -0
  125. package/dist/utils/is-drag-over-canvas.utils.js.map +1 -0
  126. package/dist/utils/map-colors-to-recipients.d.ts +3 -0
  127. package/dist/utils/map-colors-to-recipients.d.ts.map +1 -0
  128. package/dist/utils/map-colors-to-recipients.js +35 -0
  129. package/dist/utils/map-colors-to-recipients.js.map +1 -0
  130. package/dist/utils/pdfjs-init.d.ts +6 -0
  131. package/dist/utils/pdfjs-init.d.ts.map +1 -0
  132. package/dist/utils/pdfjs-init.js +25 -0
  133. package/dist/utils/pdfjs-init.js.map +1 -0
  134. package/package.json +28 -0
  135. package/src/components/data-model-field-type-list.tsx +58 -0
  136. package/src/components/e-sign-field-type-list.tsx +27 -0
  137. package/src/components/field-config-panel-overlay.tsx +51 -0
  138. package/src/components/field-config-panel.tsx +142 -0
  139. package/src/components/field-sidebar.tsx +93 -0
  140. package/src/components/field-type.tsx +28 -0
  141. package/src/components/fillable-field-type-list.tsx +42 -0
  142. package/src/components/pdf-canvas.tsx +81 -0
  143. package/src/components/pdf-document-renderer.tsx +78 -0
  144. package/src/components/pdf-editor.tsx +216 -0
  145. package/src/components/pdf-field-overlay.tsx +83 -0
  146. package/src/constants/field.constants.ts +31 -0
  147. package/src/constants/index.ts +2 -0
  148. package/src/constants/pdf-editor.constants.ts +1 -0
  149. package/src/hooks/index.ts +3 -0
  150. package/src/hooks/useFieldDrag.ts +56 -0
  151. package/src/hooks/useFieldResize.ts +95 -0
  152. package/src/hooks/usePdfDocumentRenderer.ts +21 -0
  153. package/src/index.ts +2 -0
  154. package/src/interface/pdf-editor.ts +74 -0
  155. package/src/styles/field-config-panel-overlay.css +33 -0
  156. package/src/styles/field-sidebar.css +31 -0
  157. package/src/styles/field-type-list.css +8 -0
  158. package/src/styles/field-type.css +10 -0
  159. package/src/styles/generic.css +3 -0
  160. package/src/styles/index.css +10 -0
  161. package/src/styles/pdf-canvas.css +9 -0
  162. package/src/styles/pdf-document-renderer.css +4 -0
  163. package/src/styles/pdf-editor.css +14 -0
  164. package/src/styles/pdf-field-overlay.css +54 -0
  165. package/src/styles/variables.css +26 -0
  166. package/src/utils/calculate-drop-coordinates.utils.ts +68 -0
  167. package/src/utils/extract-grouped-fields-from-data-model.utils.ts +73 -0
  168. package/src/utils/generate-e-sign-path.ts +5 -0
  169. package/src/utils/get-page-dimensions.utils.ts +39 -0
  170. package/src/utils/get-page-number-from-client-y.utils.ts +31 -0
  171. package/src/utils/get-page-position.utils.ts +30 -0
  172. package/src/utils/handle-field-drag-start.utils.ts +52 -0
  173. package/src/utils/handle-field-drag.utils.ts +55 -0
  174. package/src/utils/handle-field-resize.utils.ts +102 -0
  175. package/src/utils/index.ts +12 -0
  176. package/src/utils/is-drag-over-canvas.utils.ts +35 -0
  177. package/src/utils/map-colors-to-recipients.ts +37 -0
  178. package/src/utils/pdfjs-init.ts +27 -0
  179. package/src/vite-env.d.ts +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePdfDocumentRenderer.d.ts","sourceRoot":"","sources":["../../src/hooks/usePdfDocumentRenderer.ts"],"names":[],"mappings":"AAEA,UAAU,4BAA4B;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yBAAyB,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACnE;AAED,eAAO,MAAM,sBAAsB,QAAO,4BAazC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { useMemo, useState } from 'react';
2
+ export const usePdfDocumentRenderer = () => {
3
+ const [numPages, setNumPages] = useState(0);
4
+ const handleDocumentLoadSuccess = ({ numPages }) => {
5
+ setNumPages(numPages);
6
+ };
7
+ const pages = useMemo(() => Array.from({ length: numPages }, (_, i) => i + 1), [numPages]);
8
+ return {
9
+ pages,
10
+ handleDocumentLoadSuccess,
11
+ };
12
+ };
13
+ //# sourceMappingURL=usePdfDocumentRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePdfDocumentRenderer.js","sourceRoot":"","sources":["../../src/hooks/usePdfDocumentRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAO1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAiC,EAAE;IACrE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAEpD,MAAM,yBAAyB,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE;QACrE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE3F,OAAO;QACH,KAAK;QACL,yBAAyB;KAC5B,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type * from './interface/pdf-editor';
2
+ export * from './components/pdf-editor';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,wBAAwB,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './components/pdf-editor';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,64 @@
1
+ export declare enum FieldTypeEnum {
2
+ dataModel = "data-model",
3
+ eSign = "e-sign",
4
+ fillable = "fillable"
5
+ }
6
+ export declare enum ESignFieldType {
7
+ signature = "signature",
8
+ initials = "initials",
9
+ dateSigned = "dateSigned",
10
+ fullName = "fullName"
11
+ }
12
+ export type FillableFieldType = 'text' | 'date' | 'checkbox' | 'e-sign';
13
+ export interface PdfField {
14
+ id: string;
15
+ type: FieldTypeEnum;
16
+ subType?: FillableFieldType | ESignFieldType;
17
+ x: number;
18
+ y: number;
19
+ page: number;
20
+ label: string;
21
+ width: number;
22
+ height: number;
23
+ required?: boolean;
24
+ path?: string;
25
+ recipient?: string;
26
+ }
27
+ export interface FieldTypeOption {
28
+ label: string;
29
+ type: FieldTypeEnum;
30
+ subType?: FillableFieldType | ESignFieldType;
31
+ path?: string;
32
+ }
33
+ export interface DataModelFieldGroup {
34
+ groupName: string;
35
+ fields: FieldTypeOption[];
36
+ }
37
+ export interface SchemaFieldBaseOptions {
38
+ placeholder?: any;
39
+ description?: any;
40
+ sampleData?: any;
41
+ showInEditor?: boolean;
42
+ isHighlighted?: boolean;
43
+ }
44
+ interface SchemaNodeProps {
45
+ title?: string;
46
+ options?: SchemaFieldBaseOptions;
47
+ }
48
+ export interface SchemaObject extends SchemaNodeProps {
49
+ type: 'object';
50
+ properties: Record<string, SchemaNode>;
51
+ }
52
+ export type SchemaNode = SchemaObject | SchemaArray | SchemaSimple;
53
+ export interface SchemaArray extends SchemaNodeProps {
54
+ type: 'array';
55
+ items: SchemaNode;
56
+ }
57
+ export type SchemaNodeStringSubTypes = 'string' | 'text' | 'html' | 'image';
58
+ export interface SchemaSimpleString extends SchemaNodeProps {
59
+ type: 'string';
60
+ subType?: SchemaNodeStringSubTypes;
61
+ }
62
+ export type SchemaSimple = SchemaSimpleString;
63
+ export {};
64
+ //# sourceMappingURL=pdf-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-editor.d.ts","sourceRoot":"","sources":["../../src/interface/pdf-editor.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACrB,SAAS,eAAe;IACxB,KAAK,WAAW;IAChB,QAAQ,aAAa;CACxB;AAED,oBAAY,cAAc;IACtB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;CACxB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;IAC7C,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACnC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,eAAe;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED,MAAM,WAAW,YAAa,SAAQ,eAAe;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnE,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;CACrB;AACD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export var FieldTypeEnum;
2
+ (function (FieldTypeEnum) {
3
+ FieldTypeEnum["dataModel"] = "data-model";
4
+ FieldTypeEnum["eSign"] = "e-sign";
5
+ FieldTypeEnum["fillable"] = "fillable";
6
+ })(FieldTypeEnum || (FieldTypeEnum = {}));
7
+ export var ESignFieldType;
8
+ (function (ESignFieldType) {
9
+ ESignFieldType["signature"] = "signature";
10
+ ESignFieldType["initials"] = "initials";
11
+ ESignFieldType["dateSigned"] = "dateSigned";
12
+ ESignFieldType["fullName"] = "fullName";
13
+ })(ESignFieldType || (ESignFieldType = {}));
14
+ //# sourceMappingURL=pdf-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-editor.js","sourceRoot":"","sources":["../../src/interface/pdf-editor.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,yCAAwB,CAAA;IACxB,iCAAgB,CAAA;IAChB,sCAAqB,CAAA;AACzB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,MAAM,CAAN,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,yCAAuB,CAAA;IACvB,uCAAqB,CAAA;IACrB,2CAAyB,CAAA;IACzB,uCAAqB,CAAA;AACzB,CAAC,EALW,cAAc,KAAd,cAAc,QAKzB"}
@@ -0,0 +1,15 @@
1
+ import { DragEvent, RefObject } from 'react';
2
+ interface DropCoordinates {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ /**
7
+ * Calculates field coordinates from a drop event on a PDF page
8
+ * @param e - The drag event
9
+ * @param pageNumber - The page number where the drop occurred
10
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
11
+ * @returns Drop coordinates (x, y) or null if a drop is invalid
12
+ */
13
+ export declare const calculateDropCoordinates: (e: DragEvent<HTMLDivElement>, pageNumber: number, pdfWrapperRef: RefObject<HTMLDivElement>) => DropCoordinates | null;
14
+ export {};
15
+ //# sourceMappingURL=calculate-drop-coordinates.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-drop-coordinates.utils.d.ts","sourceRoot":"","sources":["../../src/utils/calculate-drop-coordinates.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG7C,UAAU,eAAe;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GACjC,GAAG,SAAS,CAAC,cAAc,CAAC,EAC5B,YAAY,MAAM,EAClB,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC,eAAe,GAAG,IAgDpB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { FIELD_CONSTANTS } from '../constants';
2
+ /**
3
+ * Calculates field coordinates from a drop event on a PDF page
4
+ * @param e - The drag event
5
+ * @param pageNumber - The page number where the drop occurred
6
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
7
+ * @returns Drop coordinates (x, y) or null if a drop is invalid
8
+ */
9
+ export const calculateDropCoordinates = (e, pageNumber, pdfWrapperRef) => {
10
+ if (!pdfWrapperRef.current) {
11
+ return null;
12
+ }
13
+ const pageElement = pdfWrapperRef.current.querySelector(`[data-page-number="${pageNumber}"]`);
14
+ if (!pageElement) {
15
+ return null;
16
+ }
17
+ const canvas = pageElement.querySelector('canvas');
18
+ if (!canvas) {
19
+ return null;
20
+ }
21
+ const canvasRect = canvas.getBoundingClientRect();
22
+ const pageRect = pageElement.getBoundingClientRect();
23
+ const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
24
+ /*
25
+ * Strictly check if the drop is within the actual PDF canvas boundaries
26
+ * Only allow drops directly on the canvas, not on the page wrapper outside the canvas
27
+ */
28
+ const isWithinCanvas = e.clientX >= canvasRect.left &&
29
+ e.clientX <= canvasRect.right &&
30
+ e.clientY >= canvasRect.top &&
31
+ e.clientY <= canvasRect.bottom;
32
+ if (!isWithinCanvas) {
33
+ return null;
34
+ }
35
+ /*
36
+ * Calculate coordinates relative to the page element (matching the overlay's coordinate system).
37
+ * This matches how pdf-field-overlay.tsx calculates positions: pagePos.left + field.x
38
+ */
39
+ const pagePosLeft = pageRect.left - wrapperRect.left;
40
+ const pagePosTop = pageRect.top - wrapperRect.top;
41
+ const x = e.clientX - wrapperRect.left - pagePosLeft;
42
+ const y = e.clientY - wrapperRect.top - pagePosTop;
43
+ // Center the field on the drop point (half of width/height)
44
+ const fieldX = Math.max(0, x - FIELD_CONSTANTS.dropOffsetX);
45
+ const fieldY = Math.max(0, y - FIELD_CONSTANTS.dropOffsetY);
46
+ return { x: fieldX, y: fieldY };
47
+ };
48
+ //# sourceMappingURL=calculate-drop-coordinates.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-drop-coordinates.utils.js","sourceRoot":"","sources":["../../src/utils/calculate-drop-coordinates.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAO/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,CAA4B,EAC5B,UAAkB,EAClB,aAAwC,EAClB,EAAE;IACxB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,sBAAsB,UAAU,IAAI,CAAC,CAAC;IAE9F,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAElE;;;OAGG;IACH,MAAM,cAAc,GAChB,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI;QAC5B,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK;QAC7B,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,GAAG;QAC3B,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC;IACrD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC;IAEnD,4DAA4D;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE5D,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { DataModelFieldGroup, SchemaObject } from '../interface/pdf-editor';
2
+ /**
3
+ * Utility function to extract grouped fields from DataModel structure
4
+ * Filters out array types and only processes object properties, generating correct paths for data replacement
5
+ */
6
+ export declare const extractGroupedFieldsFromDataModel: (dataModel: SchemaObject) => DataModelFieldGroup[];
7
+ //# sourceMappingURL=extract-grouped-fields-from-data-model.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-grouped-fields-from-data-model.utils.d.ts","sourceRoot":"","sources":["../../src/utils/extract-grouped-fields-from-data-model.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EAGnB,YAAY,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,iCAAiC,GAC1C,WAAW,YAAY,KACxB,mBAAmB,EA0BrB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { FieldTypeEnum, } from '../interface/pdf-editor';
2
+ /**
3
+ * Utility function to extract grouped fields from DataModel structure
4
+ * Filters out array types and only processes object properties, generating correct paths for data replacement
5
+ */
6
+ export const extractGroupedFieldsFromDataModel = (dataModel) => {
7
+ const groups = [];
8
+ if (!(dataModel === null || dataModel === void 0 ? void 0 : dataModel.properties)) {
9
+ return groups;
10
+ }
11
+ Object.keys(dataModel.properties).forEach(key => {
12
+ var _a;
13
+ const property = dataModel.properties[key];
14
+ if (property.type === 'object' && property.properties) {
15
+ const fields = [];
16
+ extractFieldsRecursive(property.properties, key, fields, key);
17
+ if (fields.length > 0) {
18
+ groups.push({
19
+ groupName: (_a = property.title) !== null && _a !== void 0 ? _a : key,
20
+ fields,
21
+ });
22
+ }
23
+ }
24
+ else if (property.type === 'array' && property.items) {
25
+ // Skip array types - filter them out from the data model
26
+ }
27
+ });
28
+ return groups;
29
+ };
30
+ // Recursive function to extract fields from nested structures
31
+ const extractFieldsRecursive = (properties, basePath, fields, groupName) => {
32
+ Object.keys(properties).forEach(fieldKey => {
33
+ var _a;
34
+ const fieldProperty = properties[fieldKey];
35
+ const currentPath = basePath.includes('[]')
36
+ ? `${basePath}.${fieldKey}`
37
+ : `${basePath}.${fieldKey}`;
38
+ if (fieldProperty.type === 'string' ||
39
+ fieldProperty.type === 'number' ||
40
+ fieldProperty.type === 'boolean') {
41
+ // Leaf property - add as a field
42
+ const label = (_a = fieldProperty.title) !== null && _a !== void 0 ? _a : fieldKey;
43
+ fields.push({
44
+ label,
45
+ type: FieldTypeEnum.dataModel,
46
+ path: currentPath,
47
+ });
48
+ }
49
+ else if (fieldProperty.type === 'object' && fieldProperty.properties) {
50
+ extractFieldsRecursive(fieldProperty.properties, currentPath, fields, groupName);
51
+ }
52
+ else if (fieldProperty.type === 'array' && fieldProperty.items) {
53
+ // Skip array types - filter them out from the data model
54
+ }
55
+ });
56
+ };
57
+ //# sourceMappingURL=extract-grouped-fields-from-data-model.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-grouped-fields-from-data-model.utils.js","sourceRoot":"","sources":["../../src/utils/extract-grouped-fields-from-data-model.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,GAGhB,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,SAAuB,EACF,EAAE;IACvB,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,CAAA,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;QAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;YACrC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAE9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC;oBACR,SAAS,EAAE,MAAA,QAAQ,CAAC,KAAK,mCAAI,GAAG;oBAChC,MAAM;iBACT,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACrD,yDAAyD;QAC7D,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,sBAAsB,GAAG,CAC3B,UAAe,EACf,QAAgB,EAChB,MAAyB,EACzB,SAAiB,EACb,EAAE;IACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;;QACvC,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE;YAC3B,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAEhC,IACI,aAAa,CAAC,IAAI,KAAK,QAAQ;YAC/B,aAAa,CAAC,IAAI,KAAK,QAAQ;YAC/B,aAAa,CAAC,IAAI,KAAK,SAAS,EAClC,CAAC;YACC,iCAAiC;YACjC,MAAM,KAAK,GAAG,MAAA,aAAa,CAAC,KAAK,mCAAI,QAAQ,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK;gBACL,IAAI,EAAE,aAAa,CAAC,SAAS;gBAC7B,IAAI,EAAE,WAAW;aACpB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YACrE,sBAAsB,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACrF,CAAC;aAAM,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YAC/D,yDAAyD;QAC7D,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ESignFieldType } from '../interface/pdf-editor';
2
+ export declare const generateESignPath: (recipient: string, subType: ESignFieldType) => string;
3
+ //# sourceMappingURL=generate-e-sign-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-e-sign-path.d.ts","sourceRoot":"","sources":["../../src/utils/generate-e-sign-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,SAAS,cAAc,KAAG,MAE9E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const generateESignPath = (recipient, subType) => {
2
+ return `esign_${recipient}_${subType}`;
3
+ };
4
+ //# sourceMappingURL=generate-e-sign-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-e-sign-path.js","sourceRoot":"","sources":["../../src/utils/generate-e-sign-path.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,OAAuB,EAAU,EAAE;IACpF,OAAO,SAAS,SAAS,IAAI,OAAO,EAAE,CAAC;AAC3C,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Gets the dimensions of a PDF page (width and height)
4
+ * @param pageNumber - The page number to get dimensions for
5
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
6
+ * @returns Dimensions object with width and height, or { width: 0, height: 0 } if not found
7
+ */
8
+ export declare const getPageDimensions: (pageNumber: number, pdfWrapperRef: RefObject<HTMLDivElement>) => {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ //# sourceMappingURL=get-page-dimensions.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-dimensions.utils.d.ts","sourceRoot":"","sources":["../../src/utils/get-page-dimensions.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC1B,YAAY,MAAM,EAClB,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CA2BjC,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Gets the dimensions of a PDF page (width and height)
3
+ * @param pageNumber - The page number to get dimensions for
4
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
5
+ * @returns Dimensions object with width and height, or { width: 0, height: 0 } if not found
6
+ */
7
+ export const getPageDimensions = (pageNumber, pdfWrapperRef) => {
8
+ if (!pdfWrapperRef.current) {
9
+ return { width: 0, height: 0 };
10
+ }
11
+ const pageElement = pdfWrapperRef.current.querySelector(`[data-page-number="${pageNumber}"]`);
12
+ if (!pageElement) {
13
+ return { width: 0, height: 0 };
14
+ }
15
+ // Get the canvas element inside the page to get actual PDF dimensions
16
+ const canvas = pageElement.querySelector('canvas');
17
+ if (canvas) {
18
+ const canvasRect = canvas.getBoundingClientRect();
19
+ return {
20
+ width: canvasRect.width,
21
+ height: canvasRect.height,
22
+ };
23
+ }
24
+ // Fallback to page element dimensions
25
+ const pageRect = pageElement.getBoundingClientRect();
26
+ return {
27
+ width: pageRect.width,
28
+ height: pageRect.height,
29
+ };
30
+ };
31
+ //# sourceMappingURL=get-page-dimensions.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-dimensions.utils.js","sourceRoot":"","sources":["../../src/utils/get-page-dimensions.utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,UAAkB,EAClB,aAAwC,EACP,EAAE;IACnC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,sBAAsB,UAAU,IAAI,CAAC,CAAC;IAE9F,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED,sEAAsE;IACtE,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAClD,OAAO;YACH,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC;IACN,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;IACrD,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;KAC1B,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Determines which page number a client Y coordinate falls within
4
+ * @param clientY - The client Y coordinate to check
5
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
6
+ * @returns The page number (defaults to 1 if not found or wrapper is null)
7
+ */
8
+ export declare const getPageNumberFromClientY: (clientY: number, pdfWrapperRef: RefObject<HTMLDivElement>) => number;
9
+ //# sourceMappingURL=get-page-number-from-client-y.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-number-from-client-y.utils.d.ts","sourceRoot":"","sources":["../../src/utils/get-page-number-from-client-y.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACjC,SAAS,MAAM,EACf,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC,MAmBF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Determines which page number a client Y coordinate falls within
3
+ * @param clientY - The client Y coordinate to check
4
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
5
+ * @returns The page number (defaults to 1 if not found or wrapper is null)
6
+ */
7
+ export const getPageNumberFromClientY = (clientY, pdfWrapperRef) => {
8
+ if (!pdfWrapperRef.current) {
9
+ return 1;
10
+ }
11
+ const pageElements = pdfWrapperRef.current.querySelectorAll('[data-page-number]');
12
+ let targetPage = 1;
13
+ pageElements.forEach(pageElement => {
14
+ const rect = pageElement.getBoundingClientRect();
15
+ if (clientY >= rect.top && clientY <= rect.bottom) {
16
+ const pageNumber = pageElement.getAttribute('data-page-number');
17
+ if (pageNumber) {
18
+ targetPage = parseInt(pageNumber, 10);
19
+ }
20
+ }
21
+ });
22
+ return targetPage;
23
+ };
24
+ //# sourceMappingURL=get-page-number-from-client-y.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-number-from-client-y.utils.js","sourceRoot":"","sources":["../../src/utils/get-page-number-from-client-y.utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,OAAe,EACf,aAAwC,EAClC,EAAE;IACR,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAClF,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QAC/B,MAAM,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;QACjD,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;YAChE,IAAI,UAAU,EAAE,CAAC;gBACb,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Gets the position of a PDF page relative to the wrapper element
4
+ * @param pageNumber - The page number to get the position for
5
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
6
+ * @returns Position object with top and left coordinates, or { top: 0, left: 0 } if not found
7
+ */
8
+ export declare const getPagePosition: (pageNumber: number, pdfWrapperRef: RefObject<HTMLDivElement>) => {
9
+ top: number;
10
+ left: number;
11
+ };
12
+ //# sourceMappingURL=get-page-position.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-position.utils.d.ts","sourceRoot":"","sources":["../../src/utils/get-page-position.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GACxB,YAAY,MAAM,EAClB,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAkB7B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Gets the position of a PDF page relative to the wrapper element
3
+ * @param pageNumber - The page number to get the position for
4
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
5
+ * @returns Position object with top and left coordinates, or { top: 0, left: 0 } if not found
6
+ */
7
+ export const getPagePosition = (pageNumber, pdfWrapperRef) => {
8
+ if (!pdfWrapperRef.current) {
9
+ return { top: 0, left: 0 };
10
+ }
11
+ const pageElement = pdfWrapperRef.current.querySelector(`[data-page-number="${pageNumber}"]`);
12
+ if (!pageElement) {
13
+ return { top: 0, left: 0 };
14
+ }
15
+ const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
16
+ const pageRect = pageElement.getBoundingClientRect();
17
+ return {
18
+ top: pageRect.top - wrapperRect.top,
19
+ left: pageRect.left - wrapperRect.left,
20
+ };
21
+ };
22
+ //# sourceMappingURL=get-page-position.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-position.utils.js","sourceRoot":"","sources":["../../src/utils/get-page-position.utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC3B,UAAkB,EAClB,aAAwC,EACX,EAAE;IAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,sBAAsB,UAAU,IAAI,CAAC,CAAC;IAE9F,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;IAErD,OAAO;QACH,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG;QACnC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;KACzC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { DragEvent, RefObject } from 'react';
2
+ import { PdfField } from '../interface/pdf-editor';
3
+ /**
4
+ * Handles the drag start event for a PDF field
5
+ * Calculates drag offset and sets up drag data transfer
6
+ * @param e - The drag event
7
+ * @param field - The field being dragged
8
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
9
+ * @returns The drag offset object or null if wrapper is not available
10
+ */
11
+ export declare const handleFieldDragStart: (e: DragEvent<HTMLDivElement>, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement>) => {
12
+ x: number;
13
+ y: number;
14
+ page: number;
15
+ } | null;
16
+ //# sourceMappingURL=handle-field-drag-start.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-field-drag-start.utils.d.ts","sourceRoot":"","sources":["../../src/utils/handle-field-drag-start.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC7B,GAAG,SAAS,CAAC,cAAc,CAAC,EAC5B,OAAO,QAAQ,EACf,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAmC3C,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { getPagePosition } from './get-page-position.utils';
2
+ /**
3
+ * Handles the drag start event for a PDF field
4
+ * Calculates drag offset and sets up drag data transfer
5
+ * @param e - The drag event
6
+ * @param field - The field being dragged
7
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
8
+ * @returns The drag offset object or null if wrapper is not available
9
+ */
10
+ export const handleFieldDragStart = (e, field, pdfWrapperRef) => {
11
+ if (!pdfWrapperRef.current) {
12
+ return null;
13
+ }
14
+ /*
15
+ * Calculate drag offset in page-relative coordinates
16
+ */
17
+ const startPagePos = getPagePosition(field.page, pdfWrapperRef);
18
+ const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
19
+ const cursorXInPage = e.clientX - wrapperRect.left - startPagePos.left;
20
+ const cursorYInPage = e.clientY - wrapperRect.top - startPagePos.top;
21
+ const dragOffset = {
22
+ x: cursorXInPage - field.x,
23
+ y: cursorYInPage - field.y,
24
+ page: field.page,
25
+ };
26
+ // Mark that we're dragging an existing field, not a new field type
27
+ e.dataTransfer.effectAllowed = 'move';
28
+ e.dataTransfer.setData('text/plain', 'existing-field');
29
+ // Create a transparent drag image to hide the default browser drag image
30
+ const dragImage = document.createElement('div');
31
+ dragImage.style.position = 'absolute';
32
+ dragImage.style.top = '-9999px';
33
+ dragImage.style.width = '1px';
34
+ dragImage.style.height = '1px';
35
+ dragImage.style.opacity = '0';
36
+ document.body.appendChild(dragImage);
37
+ e.dataTransfer.setDragImage(dragImage, 0, 0);
38
+ setTimeout(() => document.body.removeChild(dragImage), 0);
39
+ return dragOffset;
40
+ };
41
+ //# sourceMappingURL=handle-field-drag-start.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-field-drag-start.utils.js","sourceRoot":"","sources":["../../src/utils/handle-field-drag-start.utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,CAA4B,EAC5B,KAAe,EACf,aAAwC,EACK,EAAE;IAC/C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAClE,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IACvE,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;IAErE,MAAM,UAAU,GAAG;QACf,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;KACnB,CAAC;IAEF,mEAAmE;IACnE,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAC;IACtC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAEvD,yEAAyE;IACzE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACtC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IAC/B,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { DragEvent, RefObject } from 'react';
2
+ import { PdfField } from '../interface/pdf-editor';
3
+ interface DragOffset {
4
+ x: number;
5
+ y: number;
6
+ page: number;
7
+ }
8
+ /**
9
+ * Handles the drag event for a PDF field
10
+ * Calculates new position and clamps it to page boundaries
11
+ * @param e - The drag event
12
+ * @param field - The field being dragged
13
+ * @param dragOffset - The drag offset from drag start
14
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
15
+ * @param onFieldMove - Callback to update field position
16
+ */
17
+ export declare const handleFieldDrag: (e: DragEvent<HTMLDivElement>, field: PdfField, dragOffset: DragOffset, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldMove: (fieldId: string, newX: number, newY: number, pageNumber: number) => void) => void;
18
+ export {};
19
+ //# sourceMappingURL=handle-field-drag.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-field-drag.utils.d.ts","sourceRoot":"","sources":["../../src/utils/handle-field-drag.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAKnD,UAAU,UAAU;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GACxB,GAAG,SAAS,CAAC,cAAc,CAAC,EAC5B,OAAO,QAAQ,EACf,YAAY,UAAU,EACtB,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,KACvF,IA2BF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { getPageDimensions } from './get-page-dimensions.utils';
2
+ import { getPageNumberFromClientY } from './get-page-number-from-client-y.utils';
3
+ import { getPagePosition } from './get-page-position.utils';
4
+ /**
5
+ * Handles the drag event for a PDF field
6
+ * Calculates new position and clamps it to page boundaries
7
+ * @param e - The drag event
8
+ * @param field - The field being dragged
9
+ * @param dragOffset - The drag offset from drag start
10
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
11
+ * @param onFieldMove - Callback to update field position
12
+ */
13
+ export const handleFieldDrag = (e, field, dragOffset, pdfWrapperRef, onFieldMove) => {
14
+ if (!pdfWrapperRef.current || e.clientX === 0 || e.clientY === 0) {
15
+ return;
16
+ }
17
+ const currentPage = getPageNumberFromClientY(e.clientY, pdfWrapperRef);
18
+ const currentPagePos = getPagePosition(currentPage, pdfWrapperRef);
19
+ const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
20
+ const pageDimensions = getPageDimensions(currentPage, pdfWrapperRef);
21
+ // Calculate position in page coordinates
22
+ const x = e.clientX - wrapperRect.left - currentPagePos.left - dragOffset.x;
23
+ const y = e.clientY - wrapperRect.top - currentPagePos.top - dragOffset.y;
24
+ /*
25
+ * Clamp x and y to stay within page boundaries.
26
+ * Account for field width and height to prevent dragging outside.
27
+ */
28
+ const minX = 0;
29
+ const minY = 0;
30
+ const maxX = Math.max(0, pageDimensions.width - field.width);
31
+ const maxY = Math.max(0, pageDimensions.height - field.height);
32
+ const clampedX = Math.max(minX, Math.min(maxX, x));
33
+ const clampedY = Math.max(minY, Math.min(maxY, y));
34
+ onFieldMove(field.id, clampedX, clampedY, currentPage);
35
+ };
36
+ //# sourceMappingURL=handle-field-drag.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-field-drag.utils.js","sourceRoot":"","sources":["../../src/utils/handle-field-drag.utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAQ5D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC3B,CAA4B,EAC5B,KAAe,EACf,UAAsB,EACtB,aAAwC,EACxC,WAAsF,EAClF,EAAE;IACN,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO;IACX,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAClE,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAErE,yCAAyC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC;IAE1E;;;OAGG;IACH,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { RefObject } from 'react';
2
+ import { PdfField } from '../interface/pdf-editor';
3
+ interface ResizeStartData {
4
+ startX: number;
5
+ startY: number;
6
+ startWidth: number;
7
+ startHeight: number;
8
+ page: number;
9
+ }
10
+ /**
11
+ * Calculates the initial resize data when user starts resizing
12
+ * @param e - Mouse event
13
+ * @param field - The field being resized
14
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
15
+ * @returns Resize start data or null if calculation fails
16
+ */
17
+ export declare const handleFieldResizeStart: (e: {
18
+ clientX: number;
19
+ clientY: number;
20
+ }, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement>) => ResizeStartData | null;
21
+ /**
22
+ * Handles the resize event for a PDF field from bottom-right corner
23
+ * Only changes width and height, keeping x and y coordinates unchanged
24
+ * @param e - Mouse event
25
+ * @param field - The field being resized
26
+ * @param resizeStartData - Data from resize start
27
+ * @param pdfWrapperRef - Reference to the PDF wrapper element
28
+ * @param onFieldResize - Callback to update field dimensions
29
+ */
30
+ export declare const handleFieldResize: (e: {
31
+ clientX: number;
32
+ clientY: number;
33
+ }, field: PdfField, resizeStartData: ResizeStartData, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldResize: (fieldId: string, newWidth: number, newHeight: number, pageNumber: number) => void) => void;
34
+ export {};
35
+ //# sourceMappingURL=handle-field-resize.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-field-resize.utils.d.ts","sourceRoot":"","sources":["../../src/utils/handle-field-resize.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD,UAAU,eAAe;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAC/B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,QAAQ,EACf,eAAe,SAAS,CAAC,cAAc,CAAC,KACzC,eAAe,GAAG,IAmBpB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC1B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,QAAQ,EACf,iBAAiB,eAAe,EAChC,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,eAAe,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACjB,IAAI,KACV,IAmCF,CAAC"}