@servicetitan/dte-pdf-editor 1.12.0 → 1.14.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.js +11 -8
- package/dist/components/field-config-panel/field-config-panel.js.map +1 -1
- package/dist/components/pdf-canvas/pdf-document-renderer.d.ts +1 -0
- package/dist/components/pdf-canvas/pdf-document-renderer.d.ts.map +1 -1
- package/dist/components/pdf-canvas/pdf-document-renderer.js +2 -2
- package/dist/components/pdf-canvas/pdf-document-renderer.js.map +1 -1
- package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
- package/dist/components/pdf-editor/pdf-editor.js +1 -2
- package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/utils/pdf/index.d.ts +0 -1
- package/dist/utils/pdf/index.d.ts.map +1 -1
- package/dist/utils/pdf/index.js +0 -1
- package/dist/utils/pdf/index.js.map +1 -1
- package/dist/utils/pdf/pdfjs-init.d.ts +1 -6
- package/dist/utils/pdf/pdfjs-init.d.ts.map +1 -1
- package/dist/utils/pdf/pdfjs-init.js +14 -19
- package/dist/utils/pdf/pdfjs-init.js.map +1 -1
- package/package.json +3 -3
- package/src/components/field-config-panel/field-config-panel.tsx +23 -23
- package/src/components/pdf-canvas/pdf-document-renderer.tsx +2 -3
- package/src/components/pdf-editor/pdf-editor.tsx +1 -2
- package/src/hooks/index.ts +0 -1
- package/src/utils/pdf/index.ts +0 -1
- package/src/utils/pdf/pdfjs-init.ts +14 -20
- package/dist/hooks/useInitializePdfJsWorker.d.ts +0 -2
- package/dist/hooks/useInitializePdfJsWorker.d.ts.map +0 -1
- package/dist/hooks/useInitializePdfJsWorker.js +0 -8
- package/dist/hooks/useInitializePdfJsWorker.js.map +0 -1
- package/src/hooks/useInitializePdfJsWorker.ts +0 -8
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button,
|
|
2
|
+
import { Button, Combobox, Flex, Textarea, TextField } from '@servicetitan/anvil2';
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { E_SIGN_FIELD_TYPE_OPTIONS } from '../../constants';
|
|
5
5
|
import { FieldTypeEnum } from '../../interface/types';
|
|
6
|
-
import { generateESignPath } from '../../utils';
|
|
6
|
+
import { generateESignPath, generateFillablePath } from '../../utils';
|
|
7
7
|
export const FieldConfigPanel = ({ field, onDeleteField, onFieldConfigChange, recipients = [], }) => {
|
|
8
8
|
const recipientOptions = useMemo(() => recipients.map(recipient => ({
|
|
9
9
|
id: recipient.name,
|
|
@@ -12,11 +12,16 @@ export const FieldConfigPanel = ({ field, onDeleteField, onFieldConfigChange, re
|
|
|
12
12
|
const selectedRecipient = useMemo(() => { var _a; return (_a = recipientOptions.find(option => option.id === field.recipient)) !== null && _a !== void 0 ? _a : null; }, [recipientOptions, field.recipient]);
|
|
13
13
|
const handleRecipientChange = (item) => {
|
|
14
14
|
if (item) {
|
|
15
|
+
let path = field.path;
|
|
16
|
+
if (field.type === FieldTypeEnum.eSign) {
|
|
17
|
+
path = generateESignPath(item.id, field.subType);
|
|
18
|
+
}
|
|
19
|
+
if (field.type === FieldTypeEnum.fillable) {
|
|
20
|
+
path = generateFillablePath(item.id, field.id);
|
|
21
|
+
}
|
|
15
22
|
onFieldConfigChange({
|
|
16
23
|
recipient: item.id,
|
|
17
|
-
path
|
|
18
|
-
? generateESignPath(item.id, field.subType)
|
|
19
|
-
: field.path,
|
|
24
|
+
path,
|
|
20
25
|
});
|
|
21
26
|
}
|
|
22
27
|
};
|
|
@@ -31,9 +36,7 @@ export const FieldConfigPanel = ({ field, onDeleteField, onFieldConfigChange, re
|
|
|
31
36
|
};
|
|
32
37
|
return (_jsxs(Flex, { direction: "column", gap: "4", children: [(field.type === FieldTypeEnum.fillable || field.type === FieldTypeEnum.eSign) && (_jsx(TextField, { label: "Label", value: field.label, onChange: e => onFieldConfigChange({
|
|
33
38
|
label: e.target.value,
|
|
34
|
-
}) })), (field.type === FieldTypeEnum.fillable || field.type === FieldTypeEnum.eSign) && (_jsxs(Combobox, { items: recipientOptions, itemToString: item => { var _a; return (_a = item === null || item === void 0 ? void 0 : item.name) !== null && _a !== void 0 ? _a : ''; }, onChange: handleRecipientChange, selectedItem: selectedRecipient, children: [_jsx(Combobox.SearchField, { placeholder: "", label: "Recipient" }), _jsx(Combobox.Content, { children: ({ items }) => (_jsx(Combobox.List, { children: items.map((item, i) => (_jsx(Combobox.Item, { item: item, index: i, children: item.name }, item.id))) })) })] })), field.type === FieldTypeEnum.eSign && (_jsxs(Combobox, { items: E_SIGN_FIELD_TYPE_OPTIONS, itemToString: item => { var _a; return (_a = item === null || item === void 0 ? void 0 : item.name) !== null && _a !== void 0 ? _a : ''; }, onChange: handleESignFieldTypeChange, selectedItem: selectedESignFieldType, children: [_jsx(Combobox.SearchField, { label: "Field Type" }), _jsx(Combobox.Content, { children: ({ items }) => (_jsx(Combobox.List, { children: items.map((item, i) => (_jsx(Combobox.Item, { item: item, index: i, children: item.name }, item.id))) })) })] })), _jsx(TextField, { label: "Data Path", value: field.path, disabled: true }),
|
|
35
|
-
required: !field.required,
|
|
36
|
-
}) })), _jsx(Textarea, { label: "Description", value: field.description, onChange: e => {
|
|
39
|
+
}) })), (field.type === FieldTypeEnum.fillable || field.type === FieldTypeEnum.eSign) && (_jsxs(Combobox, { items: recipientOptions, itemToString: item => { var _a; return (_a = item === null || item === void 0 ? void 0 : item.name) !== null && _a !== void 0 ? _a : ''; }, onChange: handleRecipientChange, selectedItem: selectedRecipient, filterOptions: { keys: ['name'] }, children: [_jsx(Combobox.SearchField, { placeholder: "", label: "Recipient" }), _jsx(Combobox.Content, { children: ({ items }) => (_jsx(Combobox.List, { children: items.map((item, i) => (_jsx(Combobox.Item, { item: item, index: i, children: item.name }, item.id))) })) })] })), field.type === FieldTypeEnum.eSign && (_jsxs(Combobox, { items: E_SIGN_FIELD_TYPE_OPTIONS, itemToString: item => { var _a; return (_a = item === null || item === void 0 ? void 0 : item.name) !== null && _a !== void 0 ? _a : ''; }, onChange: handleESignFieldTypeChange, selectedItem: selectedESignFieldType, children: [_jsx(Combobox.SearchField, { label: "Field Type" }), _jsx(Combobox.Content, { children: ({ items }) => (_jsx(Combobox.List, { children: items.map((item, i) => (_jsx(Combobox.Item, { item: item, index: i, children: item.name }, item.id))) })) })] })), _jsx(TextField, { label: "Data Path", value: field.path, disabled: true }), _jsx(Textarea, { label: "Description", value: field.description, onChange: e => {
|
|
37
40
|
var _a;
|
|
38
41
|
return onFieldConfigChange({
|
|
39
42
|
description: (_a = e === null || e === void 0 ? void 0 : e.target.value) !== null && _a !== void 0 ? _a : '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-config-panel.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"field-config-panel.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAkB,aAAa,EAA2B,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAStE,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EACxD,KAAK,EACL,aAAa,EACb,mBAAmB,EACnB,UAAU,GAAG,EAAE,GAClB,EAAE,EAAE;IACD,MAAM,gBAAgB,GAAG,OAAO,CAC5B,GAAG,EAAE,CACD,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzB,EAAE,EAAE,SAAS,CAAC,IAAI;QAClB,IAAI,EAAE,SAAS,CAAC,WAAW;KAC9B,CAAC,CAAC,EACP,CAAC,UAAU,CAAC,CACf,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC7B,GAAG,EAAE,WAAC,OAAA,MAAA,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,mCAAI,IAAI,CAAA,EAAA,EAC5E,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,CACtC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,IAAyC,EAAE,EAAE;QACxE,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,OAAyB,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,mBAAmB,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,IAAI;aACP,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,OAAO,CAClC,GAAG,EAAE,WAAC,OAAA,MAAA,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,mCAAI,IAAI,CAAA,EAAA,EACnF,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,MAAM,0BAA0B,GAAG,CAAC,IAAiD,EAAE,EAAE;QACrF,IAAI,IAAI,EAAE,CAAC;YACP,mBAAmB,CAAC;gBAChB,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,CAAC,EAAE,CAAC;aACrD,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,aAC3B,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI,CAC9E,KAAC,SAAS,IACN,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,mBAAmB,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;iBACxB,CAAC,GAER,CACL,EACA,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI,CAC9E,MAAC,QAAQ,IACL,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,EAAE,CAAA,EAAA,EACtC,QAAQ,EAAE,qBAAqB,EAC/B,YAAY,EAAE,iBAAiB,EAC/B,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,aAEjC,KAAC,QAAQ,CAAC,WAAW,IAAC,WAAW,EAAC,EAAE,EAAC,KAAK,EAAC,WAAW,GAAG,EACzD,KAAC,QAAQ,CAAC,OAAO,cACZ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACZ,KAAC,QAAQ,CAAC,IAAI,cACT,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,KAAC,QAAQ,CAAC,IAAI,IAAe,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAC5C,IAAI,CAAC,IAAI,IADM,IAAI,CAAC,EAAE,CAEX,CACnB,CAAC,GACU,CACnB,GACc,IACZ,CACd,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,CACnC,MAAC,QAAQ,IACL,KAAK,EAAE,yBAAyB,EAChC,YAAY,EAAE,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,EAAE,CAAA,EAAA,EACtC,QAAQ,EAAE,0BAA0B,EACpC,YAAY,EAAE,sBAAsB,aAEpC,KAAC,QAAQ,CAAC,WAAW,IAAC,KAAK,EAAC,YAAY,GAAG,EAC3C,KAAC,QAAQ,CAAC,OAAO,cACZ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACZ,KAAC,QAAQ,CAAC,IAAI,cACT,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,KAAC,QAAQ,CAAC,IAAI,IAAe,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAC5C,IAAI,CAAC,IAAI,IADM,IAAI,CAAC,EAAE,CAEX,CACnB,CAAC,GACU,CACnB,GACc,IACZ,CACd,EACD,KAAC,SAAS,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,SAAG,EAa3D,KAAC,QAAQ,IACL,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,KAAK,CAAC,WAAW,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE;;oBACV,OAAA,mBAAmB,CAAC;wBAChB,WAAW,EAAE,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,KAAK,mCAAI,EAAE;qBACrC,CAAC,CAAA;iBAAA,GAER,EACF,KAAC,MAAM,IAAC,SAAS,EAAC,YAAY,EAAC,OAAO,EAAE,aAAa,6BAE5C,IACN,CACV,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-document-renderer.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-canvas/pdf-document-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,yCAAyC,CAAC;AACjD,OAAO,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf-document-renderer.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-canvas/pdf-document-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,yCAAyC,CAAC;AACjD,OAAO,mCAAmC,CAAC;AAE3C,OAAO,4BAA4B,CAAC;AAEpC,UAAU,wBAAwB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACnE;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAkE5D,CAAC"}
|
|
@@ -2,9 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Document, Page } from 'react-pdf';
|
|
3
3
|
import 'react-pdf/dist/Page/AnnotationLayer.css';
|
|
4
4
|
import 'react-pdf/dist/Page/TextLayer.css';
|
|
5
|
-
import {
|
|
5
|
+
import { usePdfDocumentRenderer } from '../../hooks';
|
|
6
|
+
import '../../utils/pdf/pdfjs-init'; // Initialize PDF.js worker at a module load
|
|
6
7
|
export const PdfDocumentRenderer = ({ errorPlaceholder, loading, loadingPlaceholder, onDocumentLoadSuccess, onDragOver, onDrop, pageWidth, pdfUrl, }) => {
|
|
7
|
-
useInitializePdfJsWorker();
|
|
8
8
|
const { handleDocumentLoadSuccess: handleLoadSuccess, numPages, pages, } = usePdfDocumentRenderer();
|
|
9
9
|
const handleDocumentLoadSuccess = ({ numPages }) => {
|
|
10
10
|
handleLoadSuccess({ numPages });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-document-renderer.js","sourceRoot":"","sources":["../../../src/components/pdf-canvas/pdf-document-renderer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,yCAAyC,CAAC;AACjD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pdf-document-renderer.js","sourceRoot":"","sources":["../../../src/components/pdf-canvas/pdf-document-renderer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,yCAAyC,CAAC;AACjD,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,4BAA4B,CAAC,CAAC,4CAA4C;AAajF,MAAM,CAAC,MAAM,mBAAmB,GAAiC,CAAC,EAC9D,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,MAAM,EACN,SAAS,EACT,MAAM,GACT,EAAE,EAAE;IACD,MAAM,EACF,yBAAyB,EAAE,iBAAiB,EAC5C,QAAQ,EACR,KAAK,GACR,GAAG,sBAAsB,EAAE,CAAC;IAE7B,MAAM,yBAAyB,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE;QACrE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,CAA4B,EAAE,UAAkB,EAAE,EAAE;QACxE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,CAA4B,EAAE,EAAE;QACxD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,QAAQ,IACL,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,yBAAyB,EACxC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,YAE/C,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACpB,OAAO,CACH,kCAEsB,UAAU,EAC5B,SAAS,EAAC,gCAAgC,EAC1C,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,YAE1C,KAAC,IAAI,IACD,OAAO,EAAE,kBAAkB,EAC3B,aAAa,EAAE,CAAC,CAAC,EAAE;wBACf,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;4BAChC,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,QAAQ,CAAC,CAAC;wBACtC,CAAC;oBACL,CAAC,EACD,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,eAAe,EAAE,KAAK,EACtB,qBAAqB,EAAE,KAAK,GAC9B,IAjBG,QAAQ,UAAU,EAAE,CAkBvB,CACT,CAAC;QACN,CAAC,CAAC,GACK,CACd,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-editor.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-editor/pdf-editor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAgC,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM9E,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"pdf-editor.d.ts","sourceRoot":"","sources":["../../../src/components/pdf-editor/pdf-editor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAgC,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM9E,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAuFxC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Flex } from '@servicetitan/anvil2';
|
|
3
3
|
import { useCallback, useMemo, useRef } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { usePdfFieldDnD, usePdfFieldSelection } from '../../hooks';
|
|
5
5
|
import { extractGroupedFieldsFromDataModel, mapColorsToRecipients } from '../../utils';
|
|
6
6
|
import { FieldConfigPanelOverlay } from '../field-config-panel/field-config-panel-overlay';
|
|
7
7
|
import { FieldSidebar } from '../field-sidebar/field-sidebar';
|
|
@@ -10,7 +10,6 @@ import '../../styles/index.css';
|
|
|
10
10
|
export const PdfEditor = ({ dataModel, errorPlaceholder, fields = [], loading = false, loadingPlaceholder, onFieldsChange, onLoadSuccess, pdfUrl, recipients = [], }) => {
|
|
11
11
|
const pdfContainerRef = useRef(null);
|
|
12
12
|
const pdfWrapperRef = useRef(null);
|
|
13
|
-
useInitializePdfJsWorker();
|
|
14
13
|
const { deleteSelectedField, deselectField, moveField, resizeField, selectField, selectedField, setSelectedFieldId, updateField, } = usePdfFieldSelection(fields, onFieldsChange);
|
|
15
14
|
const pdfFieldDnd = usePdfFieldDnD({
|
|
16
15
|
fields,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-editor.js","sourceRoot":"","sources":["../../../src/components/pdf-editor/pdf-editor.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAiB,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pdf-editor.js","sourceRoot":"","sources":["../../../src/components/pdf-editor/pdf-editor.tsx"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
|
package/dist/hooks/index.js
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/pdf/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/pdf/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
package/dist/utils/pdf/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/pdf/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/pdf/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Initializes PDF.js worker if not already initialized
|
|
3
|
-
* Safe to call multiple times - will only initialize once
|
|
4
|
-
* Should be called in a useEffect hook within React components
|
|
5
|
-
*/
|
|
6
|
-
export declare const initializePdfJsWorker: () => void;
|
|
1
|
+
export {};
|
|
7
2
|
//# sourceMappingURL=pdfjs-init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfjs-init.d.ts","sourceRoot":"","sources":["../../../src/utils/pdf/pdfjs-init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pdfjs-init.d.ts","sourceRoot":"","sources":["../../../src/utils/pdf/pdfjs-init.ts"],"names":[],"mappings":""}
|
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Initialize PDF.js worker - centralized configuration
|
|
3
3
|
* This ensures the worker is configured once and can be imported by any component
|
|
4
|
+
* For pdfjs-dist 5.x, this must be set before any PDF documents are loaded
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: Use pdfjs from 'react-pdf' to ensure we configure the same instance
|
|
7
|
+
* that react-pdf uses internally
|
|
4
8
|
*/
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
import { pdfjs } from 'react-pdf';
|
|
10
|
+
/*
|
|
11
|
+
* Initialize worker synchronously at module load time
|
|
12
|
+
* This ensures it's set before any Document components try to load PDFs
|
|
13
|
+
*
|
|
14
|
+
* Using unpkg CDN - reliable and works with webpack dev server
|
|
15
|
+
* unpkg serves npm packages directly, matching the exact version from package.json
|
|
12
16
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;
|
|
19
|
-
isInitialized = true;
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
throw new Error('Failed to initialize PDF.js worker:' + error.message);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
17
|
+
if (typeof window !== 'undefined' && !pdfjs.GlobalWorkerOptions.workerSrc) {
|
|
18
|
+
pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
|
|
19
|
+
}
|
|
25
20
|
//# sourceMappingURL=pdfjs-init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfjs-init.js","sourceRoot":"","sources":["../../../src/utils/pdf/pdfjs-init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pdfjs-init.js","sourceRoot":"","sources":["../../../src/utils/pdf/pdfjs-init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC;;;;;;GAMG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;IACxE,KAAK,CAAC,mBAAmB,CAAC,SAAS,GAAG,gCAAgC,KAAK,CAAC,OAAO,2BAA2B,CAAC;AACnH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/dte-pdf-editor",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"typings": "./dist/index.d.ts",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"webpack": false
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"pdfjs-dist": "^
|
|
20
|
-
"react-pdf": "^
|
|
19
|
+
"pdfjs-dist": "^5.4.530",
|
|
20
|
+
"react-pdf": "^10.3.0",
|
|
21
21
|
"uuid": "^9.0.0"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Button,
|
|
1
|
+
import { Button, Combobox, Flex, Textarea, TextField } from '@servicetitan/anvil2';
|
|
2
2
|
import { FC, useMemo } from 'react';
|
|
3
3
|
import { E_SIGN_FIELD_TYPE_OPTIONS } from '../../constants';
|
|
4
4
|
import { ESignFieldType, FieldTypeEnum, PdfField, RecipientInfo } from '../../interface/types';
|
|
5
|
-
import { generateESignPath } from '../../utils';
|
|
5
|
+
import { generateESignPath, generateFillablePath } from '../../utils';
|
|
6
6
|
|
|
7
7
|
interface FieldConfigPanelProps {
|
|
8
8
|
field: PdfField;
|
|
@@ -33,12 +33,16 @@ export const FieldConfigPanel: FC<FieldConfigPanelProps> = ({
|
|
|
33
33
|
|
|
34
34
|
const handleRecipientChange = (item: { id: string; name: string } | null) => {
|
|
35
35
|
if (item) {
|
|
36
|
+
let path = field.path;
|
|
37
|
+
if (field.type === FieldTypeEnum.eSign) {
|
|
38
|
+
path = generateESignPath(item.id, field.subType as ESignFieldType);
|
|
39
|
+
}
|
|
40
|
+
if (field.type === FieldTypeEnum.fillable) {
|
|
41
|
+
path = generateFillablePath(item.id, field.id);
|
|
42
|
+
}
|
|
36
43
|
onFieldConfigChange({
|
|
37
44
|
recipient: item.id,
|
|
38
|
-
path
|
|
39
|
-
field.type === FieldTypeEnum.eSign
|
|
40
|
-
? generateESignPath(item.id, field.subType as ESignFieldType)
|
|
41
|
-
: field.path,
|
|
45
|
+
path,
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
};
|
|
@@ -70,13 +74,13 @@ export const FieldConfigPanel: FC<FieldConfigPanelProps> = ({
|
|
|
70
74
|
}
|
|
71
75
|
/>
|
|
72
76
|
)}
|
|
73
|
-
|
|
74
77
|
{(field.type === FieldTypeEnum.fillable || field.type === FieldTypeEnum.eSign) && (
|
|
75
78
|
<Combobox
|
|
76
79
|
items={recipientOptions}
|
|
77
80
|
itemToString={item => item?.name ?? ''}
|
|
78
81
|
onChange={handleRecipientChange}
|
|
79
82
|
selectedItem={selectedRecipient}
|
|
83
|
+
filterOptions={{ keys: ['name'] }}
|
|
80
84
|
>
|
|
81
85
|
<Combobox.SearchField placeholder="" label="Recipient" />
|
|
82
86
|
<Combobox.Content>
|
|
@@ -92,7 +96,6 @@ export const FieldConfigPanel: FC<FieldConfigPanelProps> = ({
|
|
|
92
96
|
</Combobox.Content>
|
|
93
97
|
</Combobox>
|
|
94
98
|
)}
|
|
95
|
-
|
|
96
99
|
{field.type === FieldTypeEnum.eSign && (
|
|
97
100
|
<Combobox
|
|
98
101
|
items={E_SIGN_FIELD_TYPE_OPTIONS}
|
|
@@ -114,21 +117,19 @@ export const FieldConfigPanel: FC<FieldConfigPanelProps> = ({
|
|
|
114
117
|
</Combobox.Content>
|
|
115
118
|
</Combobox>
|
|
116
119
|
)}
|
|
117
|
-
|
|
118
120
|
<TextField label="Data Path" value={field.path} disabled />
|
|
119
|
-
|
|
120
|
-
{field.type === FieldTypeEnum.fillable && (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
)}
|
|
131
|
-
|
|
121
|
+
{/* Todo need to uncomment when in MFE starts handle validations */}
|
|
122
|
+
{/* {field.type === FieldTypeEnum.fillable && (*/}
|
|
123
|
+
{/* <Checkbox*/}
|
|
124
|
+
{/* label="Required"*/}
|
|
125
|
+
{/* checked={field.required}*/}
|
|
126
|
+
{/* onChange={() =>*/}
|
|
127
|
+
{/* onFieldConfigChange({*/}
|
|
128
|
+
{/* required: !field.required,*/}
|
|
129
|
+
{/* })*/}
|
|
130
|
+
{/* }*/}
|
|
131
|
+
{/* />*/}
|
|
132
|
+
{/* )}*/}
|
|
132
133
|
<Textarea
|
|
133
134
|
label="Description"
|
|
134
135
|
value={field.description}
|
|
@@ -138,7 +139,6 @@ export const FieldConfigPanel: FC<FieldConfigPanelProps> = ({
|
|
|
138
139
|
})
|
|
139
140
|
}
|
|
140
141
|
/>
|
|
141
|
-
|
|
142
142
|
<Button className="full-width" onClick={onDeleteField}>
|
|
143
143
|
Delete Field
|
|
144
144
|
</Button>
|
|
@@ -2,7 +2,8 @@ import { DragEvent, FC, ReactNode } from 'react';
|
|
|
2
2
|
import { Document, Page } from 'react-pdf';
|
|
3
3
|
import 'react-pdf/dist/Page/AnnotationLayer.css';
|
|
4
4
|
import 'react-pdf/dist/Page/TextLayer.css';
|
|
5
|
-
import {
|
|
5
|
+
import { usePdfDocumentRenderer } from '../../hooks';
|
|
6
|
+
import '../../utils/pdf/pdfjs-init'; // Initialize PDF.js worker at a module load
|
|
6
7
|
|
|
7
8
|
interface PdfDocumentRendererProps {
|
|
8
9
|
pdfUrl: string;
|
|
@@ -25,8 +26,6 @@ export const PdfDocumentRenderer: FC<PdfDocumentRendererProps> = ({
|
|
|
25
26
|
pageWidth,
|
|
26
27
|
pdfUrl,
|
|
27
28
|
}) => {
|
|
28
|
-
useInitializePdfJsWorker();
|
|
29
|
-
|
|
30
29
|
const {
|
|
31
30
|
handleDocumentLoadSuccess: handleLoadSuccess,
|
|
32
31
|
numPages,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Flex } from '@servicetitan/anvil2';
|
|
2
2
|
import { FC, ReactNode, useCallback, useMemo, useRef } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { usePdfFieldDnD, usePdfFieldSelection } from '../../hooks';
|
|
4
4
|
import { PdfField, RecipientInfo, SchemaObject } from '../../interface/types';
|
|
5
5
|
import { extractGroupedFieldsFromDataModel, mapColorsToRecipients } from '../../utils';
|
|
6
6
|
import { FieldConfigPanelOverlay } from '../field-config-panel/field-config-panel-overlay';
|
|
@@ -34,7 +34,6 @@ export const PdfEditor: FC<PdfEditorProps> = ({
|
|
|
34
34
|
}) => {
|
|
35
35
|
const pdfContainerRef = useRef<HTMLDivElement>(null);
|
|
36
36
|
const pdfWrapperRef = useRef<HTMLDivElement>(null);
|
|
37
|
-
useInitializePdfJsWorker();
|
|
38
37
|
const {
|
|
39
38
|
deleteSelectedField,
|
|
40
39
|
deselectField,
|
package/src/hooks/index.ts
CHANGED
package/src/utils/pdf/index.ts
CHANGED
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Initialize PDF.js worker - centralized configuration
|
|
3
3
|
* This ensures the worker is configured once and can be imported by any component
|
|
4
|
+
* For pdfjs-dist 5.x, this must be set before any PDF documents are loaded
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: Use pdfjs from 'react-pdf' to ensure we configure the same instance
|
|
7
|
+
* that react-pdf uses internally
|
|
4
8
|
*/
|
|
5
|
-
import
|
|
6
|
-
import workerSrc from 'pdfjs-dist/build/pdf.worker.min.js?url';
|
|
9
|
+
import { pdfjs } from 'react-pdf';
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
/*
|
|
12
|
+
* Initialize worker synchronously at module load time
|
|
13
|
+
* This ensures it's set before any Document components try to load PDFs
|
|
14
|
+
*
|
|
15
|
+
* Using unpkg CDN - reliable and works with webpack dev server
|
|
16
|
+
* unpkg serves npm packages directly, matching the exact version from package.json
|
|
14
17
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;
|
|
22
|
-
isInitialized = true;
|
|
23
|
-
} catch (error) {
|
|
24
|
-
throw new Error('Failed to initialize PDF.js worker:' + (error as Error).message);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
18
|
+
if (typeof window !== 'undefined' && !pdfjs.GlobalWorkerOptions.workerSrc) {
|
|
19
|
+
pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
|
|
20
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useInitializePdfJsWorker.d.ts","sourceRoot":"","sources":["../../src/hooks/useInitializePdfJsWorker.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,YAIpC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useInitializePdfJsWorker.js","sourceRoot":"","sources":["../../src/hooks/useInitializePdfJsWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,EAAE;IACzC,SAAS,CAAC,GAAG,EAAE;QACX,qBAAqB,EAAE,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC,CAAC"}
|