@bindu-dashing/dam-solution-v2 5.9.230 → 5.9.232

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.
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { FileEntity } from "../../utilities/constants/interface";
3
+ declare const EditPdfModal: ({ open, handleClose, file, }: {
4
+ handleClose: () => void;
5
+ open: boolean;
6
+ file: FileEntity;
7
+ }) => React.ReactPortal | null;
8
+ export default EditPdfModal;
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import ReactDOM from "react-dom";
4
+ import PdfEditorComponent from "./PdfEditor";
5
+ const EditPdfModal = ({ open, handleClose, file, }) => {
6
+ const [state, setState] = useState({
7
+ visible: false,
8
+ });
9
+ const { visible } = state;
10
+ useEffect(() => {
11
+ if (open) {
12
+ setTimeout(() => setState((prevState) => (Object.assign(Object.assign({}, prevState), { visible: true }))), 10);
13
+ }
14
+ else {
15
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { visible: false })));
16
+ }
17
+ }, [open]);
18
+ if (!open && !visible)
19
+ return null;
20
+ const modalContent = (_jsx("div", { className: `md-lib-fixed md-lib-inset-0 md-lib-z-[1001] md-lib-w-screen md-lib-h-screen md-lib-bg-white dark:md-lib-bg-darkPrimary md-lib-text-black dark:md-lib-text-white md-lib-overflow-auto md-lib-transform md-lib-transition-all md-lib-duration-300 md-lib-ease-in-out ${open && visible
21
+ ? "md-lib-opacity-100 md-lib-translate-y-0"
22
+ : "md-lib-opacity-0 md-lib-translate-y-4"}`, onTransitionEnd: () => {
23
+ if (!open)
24
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { visible: false })));
25
+ }, children: _jsx(PdfEditorComponent, { file: file, handleClose: handleClose }) }));
26
+ return ReactDOM.createPortal(modalContent, document.body);
27
+ };
28
+ export default EditPdfModal;
@@ -0,0 +1,6 @@
1
+ import { FileEntity } from "../../utilities/constants/interface";
2
+ declare const PdfEditorComponent: ({ file, handleClose, }: {
3
+ file: FileEntity;
4
+ handleClose: () => void;
5
+ }) => JSX.Element;
6
+ export default PdfEditorComponent;
@@ -0,0 +1,201 @@
1
+ "use client";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
+ import { Tooltip, Popover } from "antd";
13
+ import { GoArrowLeft } from "react-icons/go";
14
+ import { PiFloppyDisk } from "react-icons/pi";
15
+ import { AiOutlineHighlight, AiOutlineLine, AiOutlineDelete, AiOutlineDrag, } from "react-icons/ai";
16
+ import { BsCursorText, BsPencil, BsSquare, BsCircle, } from "react-icons/bs";
17
+ import { MdOutlineRotateRight, } from "react-icons/md";
18
+ import { RiDeleteBin6Line, } from "react-icons/ri";
19
+ import { useMemo, useRef, useState } from "react";
20
+ import { NotificationStatus, } from "../../utilities/constants/interface";
21
+ import { get } from "lodash";
22
+ import CustomButton from "../../common/Button";
23
+ import { showNotification } from "../../common/notifications";
24
+ import { FILE_UPLOAD_ERROR, SOMETHING_WENT_WRONG, UPDATE_SUCCESS, } from "../../utilities/constants/messages";
25
+ import { SAVE_EDITED_FILE_THUMBNAIL_URL, SAVE_EDITED_FILE_URL, } from "../../utilities/constants/apiUrls";
26
+ import { generateFoldersQueryKey, invalidateData, QueryKeys, } from "../../utilities/constants/queryKeys";
27
+ import { useQueryClient } from "react-query";
28
+ import { useDamConfig } from "../../hocs/DamConfigContext";
29
+ import { createApiClient } from "../../hocs/configureAxios";
30
+ import useAppParams from "../../utilities/useAppParams";
31
+ import PdfEditorCanvas from "./PdfEditorCanvas";
32
+ const GoArrowLeftIcon = GoArrowLeft;
33
+ const PiFloppyDiskIcon = PiFloppyDisk;
34
+ const BsCursorTextIcon = BsCursorText;
35
+ const BsPencilIcon = BsPencil;
36
+ const BsSquareIcon = BsSquare;
37
+ const BsCircleIcon = BsCircle;
38
+ const AiOutlineHighlightIcon = AiOutlineHighlight;
39
+ const AiOutlineLineIcon = AiOutlineLine;
40
+ const AiOutlineDeleteIcon = AiOutlineDelete;
41
+ const MdOutlineRotateRightIcon = MdOutlineRotateRight;
42
+ const RiDeleteBin6LineIcon = RiDeleteBin6Line;
43
+ const AiOutlineDragIcon = AiOutlineDrag;
44
+ const COLORS = [
45
+ "#000000",
46
+ "#FF0000",
47
+ "#0000FF",
48
+ "#00AA00",
49
+ "#FF6600",
50
+ "#9900CC",
51
+ "#FFCC00",
52
+ "#FFFFFF",
53
+ ];
54
+ const PdfEditorComponent = ({ file, handleClose, }) => {
55
+ const queryClient = useQueryClient();
56
+ const damConfig = useDamConfig();
57
+ const { rootFolderId } = damConfig;
58
+ const api = useMemo(() => createApiClient(damConfig), [damConfig]);
59
+ const { type, folderId } = useAppParams();
60
+ const [state, setState] = useState({
61
+ loading: false,
62
+ });
63
+ const { loading } = state;
64
+ const editorRef = useRef(null);
65
+ const [currentTool, setCurrentTool] = useState("select");
66
+ const [color, setColor] = useState("#FF0000");
67
+ const [fontSize, setFontSize] = useState(20);
68
+ const [lineWidth, setLineWidth] = useState(3);
69
+ const [totalPages, setTotalPages] = useState(0);
70
+ const [pages, setPages] = useState([]);
71
+ const [pageRotations, setPageRotations] = useState({});
72
+ const handlePagesLoaded = (numPages) => {
73
+ setTotalPages(numPages);
74
+ setPages(Array.from({ length: numPages }, (_, i) => i));
75
+ };
76
+ const handleRotatePage = (pageIndex) => {
77
+ setPageRotations((prev) => (Object.assign(Object.assign({}, prev), { [pageIndex]: ((prev[pageIndex] || 0) + 90) % 360 })));
78
+ };
79
+ const handleDeletePage = (pageIndex) => {
80
+ if (pages.length <= 1) {
81
+ showNotification("Cannot delete the last page", NotificationStatus.ERROR);
82
+ return;
83
+ }
84
+ setPages((prev) => prev.filter((p) => p !== pageIndex));
85
+ };
86
+ const handleMovePage = (fromIndex, direction) => {
87
+ setPages((prev) => {
88
+ const idx = prev.indexOf(fromIndex);
89
+ if (idx < 0)
90
+ return prev;
91
+ const newIdx = direction === "up" ? idx - 1 : idx + 1;
92
+ if (newIdx < 0 || newIdx >= prev.length)
93
+ return prev;
94
+ const newPages = [...prev];
95
+ [newPages[idx], newPages[newIdx]] = [newPages[newIdx], newPages[idx]];
96
+ return newPages;
97
+ });
98
+ };
99
+ const handleSave = () => __awaiter(void 0, void 0, void 0, function* () {
100
+ var _a;
101
+ const editedFile = yield ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.getEditedPdfFile());
102
+ if (editedFile) {
103
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: true })));
104
+ try {
105
+ const response = yield api.put(SAVE_EDITED_FILE_URL, {
106
+ path: get(file, "s3Path"),
107
+ });
108
+ const url = get(response, "data");
109
+ if (url) {
110
+ try {
111
+ const response = yield fetch(url, {
112
+ method: "PUT",
113
+ headers: {
114
+ "Content-Type": "application/pdf",
115
+ },
116
+ body: editedFile,
117
+ });
118
+ if (response.ok) {
119
+ try {
120
+ yield api.put(SAVE_EDITED_FILE_THUMBNAIL_URL.replace(":fileId", get(file, "_id")), {});
121
+ invalidateData(queryClient, generateFoldersQueryKey(type), folderId ? folderId : rootFolderId);
122
+ invalidateData(queryClient, QueryKeys.FILE, get(file, "_id"));
123
+ showNotification(UPDATE_SUCCESS, NotificationStatus.SUCCESS);
124
+ handleClose();
125
+ }
126
+ catch (error) {
127
+ showNotification(get(error, "message", FILE_UPLOAD_ERROR), NotificationStatus.ERROR);
128
+ }
129
+ finally {
130
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: false })));
131
+ }
132
+ }
133
+ else {
134
+ showNotification(FILE_UPLOAD_ERROR, NotificationStatus.ERROR);
135
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: false })));
136
+ }
137
+ }
138
+ catch (error) {
139
+ showNotification(get(error, "message", FILE_UPLOAD_ERROR), NotificationStatus.ERROR);
140
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: false })));
141
+ }
142
+ }
143
+ else {
144
+ showNotification(FILE_UPLOAD_ERROR, NotificationStatus.ERROR);
145
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: false })));
146
+ }
147
+ }
148
+ catch (error) {
149
+ showNotification(get(error, "message", SOMETHING_WENT_WRONG), NotificationStatus.ERROR);
150
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { loading: false })));
151
+ }
152
+ }
153
+ else {
154
+ showNotification("Error while saving PDF", NotificationStatus.ERROR);
155
+ }
156
+ });
157
+ const toolButtons = [
158
+ {
159
+ tool: "select",
160
+ icon: _jsx(AiOutlineDragIcon, { size: 18 }),
161
+ label: "Select",
162
+ },
163
+ {
164
+ tool: "text",
165
+ icon: _jsx(BsCursorTextIcon, { size: 18 }),
166
+ label: "Add Text",
167
+ },
168
+ {
169
+ tool: "freehand",
170
+ icon: _jsx(BsPencilIcon, { size: 18 }),
171
+ label: "Draw",
172
+ },
173
+ {
174
+ tool: "rectangle",
175
+ icon: _jsx(BsSquareIcon, { size: 18 }),
176
+ label: "Rectangle",
177
+ },
178
+ {
179
+ tool: "circle",
180
+ icon: _jsx(BsCircleIcon, { size: 18 }),
181
+ label: "Circle",
182
+ },
183
+ {
184
+ tool: "line",
185
+ icon: _jsx(AiOutlineLineIcon, { size: 18 }),
186
+ label: "Line",
187
+ },
188
+ {
189
+ tool: "highlight",
190
+ icon: _jsx(AiOutlineHighlightIcon, { size: 18 }),
191
+ label: "Highlight",
192
+ },
193
+ ];
194
+ const colorPicker = (_jsxs("div", { className: "md-lib-flex md-lib-flex-wrap md-lib-gap-2 md-lib-p-2 md-lib-max-w-[160px]", children: [COLORS.map((c) => (_jsx("button", { className: `md-lib-w-7 md-lib-h-7 md-lib-rounded-full md-lib-border-2 ${color === c
195
+ ? "md-lib-border-white md-lib-ring-2 md-lib-ring-blue-400"
196
+ : "md-lib-border-gray-600"}`, style: { backgroundColor: c }, onClick: () => setColor(c) }, c))), _jsx("div", { className: "md-lib-w-full md-lib-mt-1", children: _jsx("input", { type: "color", value: color, onChange: (e) => setColor(e.target.value), className: "md-lib-w-full md-lib-h-8 md-lib-cursor-pointer" }) })] }));
197
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "md-lib-bg-darkPrimaryBg md-lib-py-3 md-lib-px-5 md-lib-flex md-lib-justify-between md-lib-items-center", children: [_jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-5", children: [_jsx(GoArrowLeftIcon, { className: "md-lib-text-darkTextColor md-lib-cursor-pointer", size: 24, onClick: handleClose }), _jsx("h4", { className: "md-lib-font-semibold md-lib-text-darkTextColor md-lib-text-base md-lib-truncate md-lib-w-96", title: get(file, "name", "N/A"), children: get(file, "name", "N/A") })] }), _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-4", children: [_jsx(CustomButton, { size: "large", onClick: handleClose, label: "Cancel", type: "default", className: "md-lib-bg-secondaryColor md-lib-hover:bg-secondaryHoverColor md-lib-border-none" }), _jsx(CustomButton, { size: "large", type: "primary", icon: _jsx(PiFloppyDiskIcon, { size: 24 }), onClick: handleSave, label: "Save", loading: loading })] })] }), _jsxs("div", { className: "md-lib-bg-[#3a3a3a] md-lib-px-4 md-lib-py-2 md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-flex-wrap md-lib-border-b md-lib-border-gray-600", children: [_jsx("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1", children: toolButtons.map(({ tool, icon, label }) => (_jsx(Tooltip, { title: label, placement: "bottom", children: _jsx("button", { className: `md-lib-p-2 md-lib-rounded md-lib-text-white md-lib-transition-colors ${currentTool === tool
198
+ ? "md-lib-bg-blue-600"
199
+ : "hover:md-lib-bg-gray-600"}`, onClick: () => setCurrentTool(tool), children: icon }) }, tool))) }), _jsx("div", { className: "md-lib-w-px md-lib-h-6 md-lib-bg-gray-500 md-lib-mx-2" }), _jsx(Popover, { content: colorPicker, trigger: "click", placement: "bottom", children: _jsx(Tooltip, { title: "Color", placement: "bottom", children: _jsx("button", { className: "md-lib-p-2 md-lib-rounded hover:md-lib-bg-gray-600 md-lib-flex md-lib-items-center md-lib-gap-1", children: _jsx("div", { className: "md-lib-w-5 md-lib-h-5 md-lib-rounded-full md-lib-border md-lib-border-gray-400", style: { backgroundColor: color } }) }) }) }), _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-text-white md-lib-text-xs", children: [_jsx("span", { children: "Size:" }), _jsx("select", { value: fontSize, onChange: (e) => setFontSize(Number(e.target.value)), className: "md-lib-bg-gray-700 md-lib-text-white md-lib-rounded md-lib-px-1 md-lib-py-0.5 md-lib-text-xs md-lib-border-none", children: [12, 16, 20, 24, 28, 32, 40, 48].map((s) => (_jsxs("option", { value: s, children: [s, "px"] }, s))) })] }), _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-text-white md-lib-text-xs", children: [_jsx("span", { children: "Width:" }), _jsx("select", { value: lineWidth, onChange: (e) => setLineWidth(Number(e.target.value)), className: "md-lib-bg-gray-700 md-lib-text-white md-lib-rounded md-lib-px-1 md-lib-py-0.5 md-lib-text-xs md-lib-border-none", children: [1, 2, 3, 4, 5, 8, 10].map((w) => (_jsxs("option", { value: w, children: [w, "px"] }, w))) })] }), _jsx("div", { className: "md-lib-w-px md-lib-h-6 md-lib-bg-gray-500 md-lib-mx-2" }), _jsx(Tooltip, { title: "Delete Selected", placement: "bottom", children: _jsx("button", { className: "md-lib-p-2 md-lib-rounded md-lib-text-white hover:md-lib-bg-red-700 md-lib-transition-colors", onClick: () => { var _a; return (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.deleteSelectedAnnotation(); }, children: _jsx(AiOutlineDeleteIcon, { size: 18 }) }) }), _jsx("div", { className: "md-lib-w-px md-lib-h-6 md-lib-bg-gray-500 md-lib-mx-2" }), _jsx("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1", children: _jsx(Popover, { trigger: "click", placement: "bottom", content: _jsxs("div", { className: "md-lib-max-h-[300px] md-lib-overflow-auto", children: [_jsx("p", { className: "md-lib-font-semibold md-lib-mb-2 md-lib-text-sm", children: "Page Operations" }), pages.map((pageIndex, idx) => (_jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-2 md-lib-py-1 md-lib-border-b md-lib-border-gray-200 last:md-lib-border-0", children: [_jsxs("span", { className: "md-lib-text-sm md-lib-min-w-[60px]", children: ["Page ", pageIndex + 1] }), _jsx(Tooltip, { title: "Move Up", children: _jsx("button", { className: "md-lib-p-1 md-lib-rounded hover:md-lib-bg-gray-100 md-lib-text-xs", onClick: () => handleMovePage(pageIndex, "up"), disabled: idx === 0, children: "\u2191" }) }), _jsx(Tooltip, { title: "Move Down", children: _jsx("button", { className: "md-lib-p-1 md-lib-rounded hover:md-lib-bg-gray-100 md-lib-text-xs", onClick: () => handleMovePage(pageIndex, "down"), disabled: idx === pages.length - 1, children: "\u2193" }) }), _jsx(Tooltip, { title: "Rotate 90\u00B0", children: _jsx("button", { className: "md-lib-p-1 md-lib-rounded hover:md-lib-bg-gray-100", onClick: () => handleRotatePage(pageIndex), children: _jsx(MdOutlineRotateRightIcon, { size: 16 }) }) }), _jsx(Tooltip, { title: "Delete Page", children: _jsx("button", { className: "md-lib-p-1 md-lib-rounded hover:md-lib-bg-red-100 md-lib-text-red-500", onClick: () => handleDeletePage(pageIndex), disabled: pages.length <= 1, children: _jsx(RiDeleteBin6LineIcon, { size: 16 }) }) })] }, pageIndex)))] }), children: _jsx(Tooltip, { title: "Page Operations", placement: "bottom", children: _jsxs("button", { className: "md-lib-p-2 md-lib-rounded md-lib-text-white hover:md-lib-bg-gray-600 md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-text-xs", children: ["Pages (", pages.length, "/", totalPages, ")"] }) }) }) })] }), _jsx(PdfEditorCanvas, { ref: editorRef, fileUrl: get(file, "s3Url") || get(file, "downloadUrl", ""), s3Path: get(file, "s3Path", ""), currentTool: currentTool, color: color, fontSize: fontSize, lineWidth: lineWidth, pages: pages, pageRotations: pageRotations, onPagesLoaded: handlePagesLoaded })] }));
200
+ };
201
+ export default PdfEditorComponent;
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ export type AnnotationType = "text" | "freehand" | "rectangle" | "circle" | "highlight" | "line";
3
+ export type Tool = "select" | "text" | "freehand" | "rectangle" | "circle" | "highlight" | "line";
4
+ export interface Annotation {
5
+ id: string;
6
+ type: AnnotationType;
7
+ pageIndex: number;
8
+ x: number;
9
+ y: number;
10
+ width?: number;
11
+ height?: number;
12
+ text?: string;
13
+ points?: {
14
+ x: number;
15
+ y: number;
16
+ }[];
17
+ color: string;
18
+ fontSize?: number;
19
+ lineWidth?: number;
20
+ opacity?: number;
21
+ }
22
+ interface PdfEditorCanvasProps {
23
+ fileUrl: string;
24
+ s3Path: string;
25
+ currentTool: Tool;
26
+ color: string;
27
+ fontSize: number;
28
+ lineWidth: number;
29
+ pages: number[];
30
+ pageRotations: Record<number, number>;
31
+ onPagesLoaded: (totalPages: number) => void;
32
+ }
33
+ export interface PdfEditorCanvasRef {
34
+ getEditedPdfFile: () => Promise<File | null>;
35
+ getAnnotations: () => Annotation[];
36
+ deleteSelectedAnnotation: () => void;
37
+ }
38
+ declare const PdfEditorCanvas: React.ForwardRefExoticComponent<PdfEditorCanvasProps & React.RefAttributes<PdfEditorCanvasRef>>;
39
+ export default PdfEditorCanvas;
@@ -0,0 +1,631 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { useEffect, useRef, useState, useCallback, forwardRef, useImperativeHandle, } from "react";
12
+ import * as pdfjsLib from "pdfjs-dist";
13
+ import { PDFDocument, rgb, StandardFonts, degrees } from "pdf-lib";
14
+ import { get } from "lodash";
15
+ import { useDamConfig } from "../../hocs/DamConfigContext";
16
+ import { useMemo } from "react";
17
+ import { createApiClient } from "../../hocs/configureAxios";
18
+ import { GET_BASE64_USING_PATH_URL } from "../../utilities/constants/apiUrls";
19
+ pdfjsLib.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@3.11.174/build/pdf.worker.min.js`;
20
+ const PdfEditorCanvas = forwardRef(({ fileUrl, s3Path, currentTool, color, fontSize, lineWidth, pages, pageRotations, onPagesLoaded, }, ref) => {
21
+ const containerRef = useRef(null);
22
+ const canvasRefs = useRef(new Map());
23
+ const overlayRefs = useRef(new Map());
24
+ const [annotations, setAnnotations] = useState([]);
25
+ const [selectedAnnotation, setSelectedAnnotation] = useState(null);
26
+ const [isDrawing, setIsDrawing] = useState(false);
27
+ const [currentAnnotation, setCurrentAnnotation] = useState(null);
28
+ const [pdfBytes, setPdfBytes] = useState(null);
29
+ const [pdfDoc, setPdfDoc] = useState(null);
30
+ const [editingTextId, setEditingTextId] = useState(null);
31
+ const [pageScales, setPageScales] = useState(new Map());
32
+ const damConfig = useDamConfig();
33
+ const api = useMemo(() => createApiClient(damConfig), [damConfig]);
34
+ // Load PDF bytes
35
+ useEffect(() => {
36
+ const loadPdf = () => __awaiter(void 0, void 0, void 0, function* () {
37
+ try {
38
+ // Try fetching via API base64 first (same as image editor)
39
+ if (s3Path) {
40
+ const response = yield api.get(`${GET_BASE64_USING_PATH_URL}?key=${s3Path}`);
41
+ const base64 = get(response, "base64", "");
42
+ if (base64) {
43
+ const binaryString = atob(base64);
44
+ const bytes = new Uint8Array(binaryString.length);
45
+ for (let i = 0; i < binaryString.length; i++) {
46
+ bytes[i] = binaryString.charCodeAt(i);
47
+ }
48
+ setPdfBytes(bytes);
49
+ const doc = yield pdfjsLib.getDocument({ data: bytes }).promise;
50
+ setPdfDoc(doc);
51
+ onPagesLoaded(doc.numPages);
52
+ return;
53
+ }
54
+ }
55
+ // Fallback: fetch from URL
56
+ const response = yield fetch(fileUrl);
57
+ const arrayBuffer = yield response.arrayBuffer();
58
+ const bytes = new Uint8Array(arrayBuffer);
59
+ setPdfBytes(bytes);
60
+ const doc = yield pdfjsLib.getDocument({ data: bytes }).promise;
61
+ setPdfDoc(doc);
62
+ onPagesLoaded(doc.numPages);
63
+ }
64
+ catch (err) {
65
+ console.error("Error loading PDF:", err);
66
+ }
67
+ });
68
+ loadPdf();
69
+ }, [fileUrl, s3Path]);
70
+ // Render PDF pages
71
+ useEffect(() => {
72
+ if (!pdfDoc)
73
+ return;
74
+ const renderPages = () => __awaiter(void 0, void 0, void 0, function* () {
75
+ for (const pageIndex of pages) {
76
+ const pageNum = pageIndex + 1;
77
+ if (pageNum > pdfDoc.numPages)
78
+ continue;
79
+ const page = yield pdfDoc.getPage(pageNum);
80
+ const rotation = pageRotations[pageIndex] || 0;
81
+ const viewport = page.getViewport({ scale: 1.5, rotation });
82
+ const canvas = canvasRefs.current.get(pageIndex);
83
+ if (!canvas)
84
+ continue;
85
+ canvas.width = viewport.width;
86
+ canvas.height = viewport.height;
87
+ const ctx = canvas.getContext("2d");
88
+ if (!ctx)
89
+ continue;
90
+ // Store scale for coordinate conversion
91
+ setPageScales((prev) => {
92
+ const newMap = new Map(prev);
93
+ newMap.set(pageIndex, 1.5);
94
+ return newMap;
95
+ });
96
+ yield page.render({
97
+ canvasContext: ctx,
98
+ viewport,
99
+ }).promise;
100
+ // Size overlay canvas to match
101
+ const overlay = overlayRefs.current.get(pageIndex);
102
+ if (overlay) {
103
+ overlay.width = viewport.width;
104
+ overlay.height = viewport.height;
105
+ }
106
+ }
107
+ });
108
+ renderPages();
109
+ }, [pdfDoc, pages, pageRotations]);
110
+ // Redraw annotations overlay
111
+ useEffect(() => {
112
+ for (const pageIndex of pages) {
113
+ const overlay = overlayRefs.current.get(pageIndex);
114
+ if (!overlay)
115
+ continue;
116
+ const ctx = overlay.getContext("2d");
117
+ if (!ctx)
118
+ continue;
119
+ ctx.clearRect(0, 0, overlay.width, overlay.height);
120
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === pageIndex);
121
+ for (const ann of pageAnnotations) {
122
+ const isSelected = ann.id === selectedAnnotation;
123
+ drawAnnotation(ctx, ann, isSelected);
124
+ }
125
+ }
126
+ }, [annotations, selectedAnnotation, pages]);
127
+ const drawAnnotation = (ctx, ann, isSelected) => {
128
+ ctx.save();
129
+ if (isSelected) {
130
+ ctx.strokeStyle = "#2196F3";
131
+ ctx.lineWidth = 2;
132
+ ctx.setLineDash([5, 3]);
133
+ const padding = 4;
134
+ if (ann.type === "text") {
135
+ ctx.font = `${ann.fontSize || 16}px Helvetica`;
136
+ const metrics = ctx.measureText(ann.text || "");
137
+ ctx.strokeRect(ann.x - padding, ann.y - (ann.fontSize || 16) - padding, metrics.width + padding * 2, (ann.fontSize || 16) + padding * 2);
138
+ }
139
+ else if (ann.type === "rectangle" || ann.type === "highlight") {
140
+ ctx.strokeRect(ann.x - padding, ann.y - padding, (ann.width || 0) + padding * 2, (ann.height || 0) + padding * 2);
141
+ }
142
+ else if (ann.type === "circle") {
143
+ const cx = ann.x + (ann.width || 0) / 2;
144
+ const cy = ann.y + (ann.height || 0) / 2;
145
+ const rx = Math.abs(ann.width || 0) / 2 + padding;
146
+ const ry = Math.abs(ann.height || 0) / 2 + padding;
147
+ ctx.beginPath();
148
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
149
+ ctx.stroke();
150
+ }
151
+ ctx.setLineDash([]);
152
+ }
153
+ switch (ann.type) {
154
+ case "text":
155
+ ctx.font = `${ann.fontSize || 16}px Helvetica`;
156
+ ctx.fillStyle = ann.color;
157
+ ctx.fillText(ann.text || "", ann.x, ann.y);
158
+ break;
159
+ case "freehand":
160
+ if (ann.points && ann.points.length > 1) {
161
+ ctx.strokeStyle = ann.color;
162
+ ctx.lineWidth = ann.lineWidth || 2;
163
+ ctx.lineCap = "round";
164
+ ctx.lineJoin = "round";
165
+ ctx.beginPath();
166
+ ctx.moveTo(ann.points[0].x, ann.points[0].y);
167
+ for (let i = 1; i < ann.points.length; i++) {
168
+ ctx.lineTo(ann.points[i].x, ann.points[i].y);
169
+ }
170
+ ctx.stroke();
171
+ }
172
+ break;
173
+ case "rectangle":
174
+ ctx.strokeStyle = ann.color;
175
+ ctx.lineWidth = ann.lineWidth || 2;
176
+ ctx.strokeRect(ann.x, ann.y, ann.width || 0, ann.height || 0);
177
+ break;
178
+ case "circle":
179
+ ctx.strokeStyle = ann.color;
180
+ ctx.lineWidth = ann.lineWidth || 2;
181
+ ctx.beginPath();
182
+ const cx = ann.x + (ann.width || 0) / 2;
183
+ const cy = ann.y + (ann.height || 0) / 2;
184
+ const rx = Math.abs(ann.width || 0) / 2;
185
+ const ry = Math.abs(ann.height || 0) / 2;
186
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
187
+ ctx.stroke();
188
+ break;
189
+ case "highlight":
190
+ ctx.fillStyle = ann.color;
191
+ ctx.globalAlpha = ann.opacity || 0.3;
192
+ ctx.fillRect(ann.x, ann.y, ann.width || 0, ann.height || 0);
193
+ ctx.globalAlpha = 1;
194
+ break;
195
+ case "line":
196
+ ctx.strokeStyle = ann.color;
197
+ ctx.lineWidth = ann.lineWidth || 2;
198
+ ctx.beginPath();
199
+ ctx.moveTo(ann.x, ann.y);
200
+ ctx.lineTo(ann.x + (ann.width || 0), ann.y + (ann.height || 0));
201
+ ctx.stroke();
202
+ break;
203
+ }
204
+ ctx.restore();
205
+ };
206
+ const getCanvasCoords = (e, canvas) => {
207
+ const rect = canvas.getBoundingClientRect();
208
+ const scaleX = canvas.width / rect.width;
209
+ const scaleY = canvas.height / rect.height;
210
+ return {
211
+ x: (e.clientX - rect.left) * scaleX,
212
+ y: (e.clientY - rect.top) * scaleY,
213
+ };
214
+ };
215
+ const handleMouseDown = useCallback((e, pageIndex) => {
216
+ const overlay = overlayRefs.current.get(pageIndex);
217
+ if (!overlay)
218
+ return;
219
+ const coords = getCanvasCoords(e, overlay);
220
+ if (currentTool === "select") {
221
+ // Check if clicked on an annotation
222
+ const clicked = findAnnotationAt(coords.x, coords.y, pageIndex);
223
+ setSelectedAnnotation((clicked === null || clicked === void 0 ? void 0 : clicked.id) || null);
224
+ setEditingTextId(null);
225
+ return;
226
+ }
227
+ if (currentTool === "text") {
228
+ const id = `ann-${Date.now()}`;
229
+ const newAnn = {
230
+ id,
231
+ type: "text",
232
+ pageIndex,
233
+ x: coords.x,
234
+ y: coords.y,
235
+ text: "",
236
+ color,
237
+ fontSize,
238
+ };
239
+ setAnnotations((prev) => [...prev, newAnn]);
240
+ setEditingTextId(id);
241
+ setSelectedAnnotation(id);
242
+ return;
243
+ }
244
+ setIsDrawing(true);
245
+ const id = `ann-${Date.now()}`;
246
+ const newAnn = Object.assign({ id, type: currentTool, pageIndex, x: coords.x, y: coords.y, color,
247
+ lineWidth,
248
+ fontSize, opacity: currentTool === "highlight" ? 0.3 : 1 }, (currentTool === "freehand"
249
+ ? { points: [{ x: coords.x, y: coords.y }] }
250
+ : { width: 0, height: 0 }));
251
+ setCurrentAnnotation(newAnn);
252
+ }, [currentTool, color, fontSize, lineWidth]);
253
+ const handleMouseMove = useCallback((e, pageIndex) => {
254
+ if (!isDrawing || !currentAnnotation)
255
+ return;
256
+ const overlay = overlayRefs.current.get(pageIndex);
257
+ if (!overlay)
258
+ return;
259
+ const coords = getCanvasCoords(e, overlay);
260
+ if (currentAnnotation.type === "freehand") {
261
+ setCurrentAnnotation((prev) => {
262
+ if (!prev)
263
+ return prev;
264
+ return Object.assign(Object.assign({}, prev), { points: [...(prev.points || []), { x: coords.x, y: coords.y }] });
265
+ });
266
+ }
267
+ else {
268
+ setCurrentAnnotation((prev) => {
269
+ if (!prev)
270
+ return prev;
271
+ return Object.assign(Object.assign({}, prev), { width: coords.x - prev.x, height: coords.y - prev.y });
272
+ });
273
+ }
274
+ }, [isDrawing, currentAnnotation]);
275
+ const handleMouseUp = useCallback(() => {
276
+ var _a;
277
+ if (!isDrawing || !currentAnnotation)
278
+ return;
279
+ setIsDrawing(false);
280
+ // Only add if it has meaningful size
281
+ const hasSize = currentAnnotation.type === "freehand"
282
+ ? (((_a = currentAnnotation.points) === null || _a === void 0 ? void 0 : _a.length) || 0) > 2
283
+ : Math.abs(currentAnnotation.width || 0) > 5 ||
284
+ Math.abs(currentAnnotation.height || 0) > 5;
285
+ if (hasSize) {
286
+ setAnnotations((prev) => [...prev, currentAnnotation]);
287
+ setSelectedAnnotation(currentAnnotation.id);
288
+ }
289
+ setCurrentAnnotation(null);
290
+ }, [isDrawing, currentAnnotation]);
291
+ // Draw current annotation in progress
292
+ useEffect(() => {
293
+ if (!currentAnnotation)
294
+ return;
295
+ const overlay = overlayRefs.current.get(currentAnnotation.pageIndex);
296
+ if (!overlay)
297
+ return;
298
+ const ctx = overlay.getContext("2d");
299
+ if (!ctx)
300
+ return;
301
+ // Redraw all annotations + current
302
+ ctx.clearRect(0, 0, overlay.width, overlay.height);
303
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === currentAnnotation.pageIndex);
304
+ for (const ann of pageAnnotations) {
305
+ drawAnnotation(ctx, ann, false);
306
+ }
307
+ drawAnnotation(ctx, currentAnnotation, false);
308
+ }, [currentAnnotation]);
309
+ const findAnnotationAt = (x, y, pageIndex) => {
310
+ var _a;
311
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === pageIndex);
312
+ for (let i = pageAnnotations.length - 1; i >= 0; i--) {
313
+ const ann = pageAnnotations[i];
314
+ const hitPadding = 10;
315
+ switch (ann.type) {
316
+ case "text": {
317
+ const approxWidth = (((_a = ann.text) === null || _a === void 0 ? void 0 : _a.length) || 0) * (ann.fontSize || 16) * 0.6;
318
+ if (x >= ann.x - hitPadding &&
319
+ x <= ann.x + approxWidth + hitPadding &&
320
+ y >= ann.y - (ann.fontSize || 16) - hitPadding &&
321
+ y <= ann.y + hitPadding) {
322
+ return ann;
323
+ }
324
+ break;
325
+ }
326
+ case "freehand": {
327
+ if (ann.points) {
328
+ for (const p of ann.points) {
329
+ if (Math.abs(p.x - x) < hitPadding &&
330
+ Math.abs(p.y - y) < hitPadding) {
331
+ return ann;
332
+ }
333
+ }
334
+ }
335
+ break;
336
+ }
337
+ default: {
338
+ const minX = Math.min(ann.x, ann.x + (ann.width || 0));
339
+ const maxX = Math.max(ann.x, ann.x + (ann.width || 0));
340
+ const minY = Math.min(ann.y, ann.y + (ann.height || 0));
341
+ const maxY = Math.max(ann.y, ann.y + (ann.height || 0));
342
+ if (x >= minX - hitPadding &&
343
+ x <= maxX + hitPadding &&
344
+ y >= minY - hitPadding &&
345
+ y <= maxY + hitPadding) {
346
+ return ann;
347
+ }
348
+ break;
349
+ }
350
+ }
351
+ }
352
+ return null;
353
+ };
354
+ const handleTextChange = (id, text) => {
355
+ setAnnotations((prev) => prev.map((a) => (a.id === id ? Object.assign(Object.assign({}, a), { text }) : a)));
356
+ };
357
+ const deleteSelectedAnnotation = useCallback(() => {
358
+ if (selectedAnnotation) {
359
+ setAnnotations((prev) => prev.filter((a) => a.id !== selectedAnnotation));
360
+ setSelectedAnnotation(null);
361
+ setEditingTextId(null);
362
+ }
363
+ }, [selectedAnnotation]);
364
+ // Build final PDF with annotations baked in
365
+ const getEditedPdfFile = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
366
+ if (!pdfBytes)
367
+ return null;
368
+ try {
369
+ const pdfDocLib = yield PDFDocument.load(pdfBytes);
370
+ const helveticaFont = yield pdfDocLib.embedFont(StandardFonts.Helvetica);
371
+ const allPages = pdfDocLib.getPages();
372
+ // Apply page rotations
373
+ for (const [pageIdx, rotation] of Object.entries(pageRotations)) {
374
+ const idx = parseInt(pageIdx);
375
+ if (idx < allPages.length && rotation !== 0) {
376
+ allPages[idx].setRotation(degrees(rotation));
377
+ }
378
+ }
379
+ // Remove deleted pages (pages not in the pages array)
380
+ const allPageIndices = Array.from({ length: allPages.length }, (_, i) => i);
381
+ const pagesToRemove = allPageIndices
382
+ .filter((i) => !pages.includes(i))
383
+ .sort((a, b) => b - a); // Remove from end to preserve indices
384
+ for (const idx of pagesToRemove) {
385
+ pdfDocLib.removePage(idx);
386
+ }
387
+ // Reorder pages if needed
388
+ // pdf-lib doesn't have a native reorder, so we create a new doc
389
+ if (pages.length > 0 &&
390
+ !pages.every((p, i) => p ===
391
+ allPageIndices.filter((idx) => pages.includes(idx))[i])) {
392
+ const newDoc = yield PDFDocument.create();
393
+ for (const pageIdx of pages) {
394
+ // Find where this page ended up after removals
395
+ const remainingPages = allPageIndices.filter((i) => pages.includes(i));
396
+ const newIdx = remainingPages.indexOf(pageIdx);
397
+ if (newIdx >= 0 && newIdx < pdfDocLib.getPageCount()) {
398
+ const [copiedPage] = yield newDoc.copyPages(pdfDocLib, [newIdx]);
399
+ newDoc.addPage(copiedPage);
400
+ }
401
+ }
402
+ // Apply annotations to the reordered doc
403
+ yield applyAnnotations(newDoc, helveticaFont, pages);
404
+ const editedBytes = yield newDoc.save();
405
+ return new File([editedBytes], "edited.pdf", {
406
+ type: "application/pdf",
407
+ });
408
+ }
409
+ // Apply annotations to the current doc
410
+ const remainingPages = pdfDocLib.getPages();
411
+ const scale = 1.5; // Must match render scale
412
+ for (const ann of annotations) {
413
+ const pageOrder = pages.indexOf(ann.pageIndex);
414
+ if (pageOrder < 0 || pageOrder >= remainingPages.length)
415
+ continue;
416
+ const page = remainingPages[pageOrder];
417
+ const { width: pageWidth, height: pageHeight } = page.getSize();
418
+ // Convert canvas coordinates to PDF coordinates
419
+ // Canvas y goes down, PDF y goes up
420
+ const pdfX = ann.x / scale;
421
+ const pdfY = pageHeight - ann.y / scale;
422
+ const [r, g, b] = hexToRgb(ann.color);
423
+ switch (ann.type) {
424
+ case "text":
425
+ if (ann.text) {
426
+ page.drawText(ann.text, {
427
+ x: pdfX,
428
+ y: pdfY,
429
+ size: (ann.fontSize || 16) / scale,
430
+ font: helveticaFont,
431
+ color: rgb(r, g, b),
432
+ });
433
+ }
434
+ break;
435
+ case "freehand":
436
+ if (ann.points && ann.points.length > 1) {
437
+ for (let i = 1; i < ann.points.length; i++) {
438
+ page.drawLine({
439
+ start: {
440
+ x: ann.points[i - 1].x / scale,
441
+ y: pageHeight - ann.points[i - 1].y / scale,
442
+ },
443
+ end: {
444
+ x: ann.points[i].x / scale,
445
+ y: pageHeight - ann.points[i].y / scale,
446
+ },
447
+ thickness: (ann.lineWidth || 2) / scale,
448
+ color: rgb(r, g, b),
449
+ });
450
+ }
451
+ }
452
+ break;
453
+ case "rectangle":
454
+ page.drawRectangle({
455
+ x: pdfX,
456
+ y: pdfY - Math.abs((ann.height || 0) / scale),
457
+ width: (ann.width || 0) / scale,
458
+ height: Math.abs((ann.height || 0) / scale),
459
+ borderColor: rgb(r, g, b),
460
+ borderWidth: (ann.lineWidth || 2) / scale,
461
+ });
462
+ break;
463
+ case "circle":
464
+ page.drawEllipse({
465
+ x: pdfX + (ann.width || 0) / scale / 2,
466
+ y: pdfY - Math.abs((ann.height || 0) / scale) / 2,
467
+ xScale: Math.abs((ann.width || 0) / scale) / 2,
468
+ yScale: Math.abs((ann.height || 0) / scale) / 2,
469
+ borderColor: rgb(r, g, b),
470
+ borderWidth: (ann.lineWidth || 2) / scale,
471
+ });
472
+ break;
473
+ case "highlight":
474
+ page.drawRectangle({
475
+ x: pdfX,
476
+ y: pdfY - Math.abs((ann.height || 0) / scale),
477
+ width: (ann.width || 0) / scale,
478
+ height: Math.abs((ann.height || 0) / scale),
479
+ color: rgb(r, g, b),
480
+ opacity: ann.opacity || 0.3,
481
+ });
482
+ break;
483
+ case "line":
484
+ page.drawLine({
485
+ start: { x: pdfX, y: pdfY },
486
+ end: {
487
+ x: pdfX + (ann.width || 0) / scale,
488
+ y: pdfY - (ann.height || 0) / scale,
489
+ },
490
+ thickness: (ann.lineWidth || 2) / scale,
491
+ color: rgb(r, g, b),
492
+ });
493
+ break;
494
+ }
495
+ }
496
+ const editedBytes = yield pdfDocLib.save();
497
+ return new File([editedBytes], "edited.pdf", {
498
+ type: "application/pdf",
499
+ });
500
+ }
501
+ catch (err) {
502
+ console.error("Error generating edited PDF:", err);
503
+ return null;
504
+ }
505
+ }), [pdfBytes, annotations, pages, pageRotations]);
506
+ const applyAnnotations = (doc, font, pageOrder) => __awaiter(void 0, void 0, void 0, function* () {
507
+ const docPages = doc.getPages();
508
+ const scale = 1.5;
509
+ for (const ann of annotations) {
510
+ const orderIdx = pageOrder.indexOf(ann.pageIndex);
511
+ if (orderIdx < 0 || orderIdx >= docPages.length)
512
+ continue;
513
+ const page = docPages[orderIdx];
514
+ const { height: pageHeight } = page.getSize();
515
+ const pdfX = ann.x / scale;
516
+ const pdfY = pageHeight - ann.y / scale;
517
+ const [r, g, b] = hexToRgb(ann.color);
518
+ switch (ann.type) {
519
+ case "text":
520
+ if (ann.text) {
521
+ page.drawText(ann.text, {
522
+ x: pdfX,
523
+ y: pdfY,
524
+ size: (ann.fontSize || 16) / scale,
525
+ font,
526
+ color: rgb(r, g, b),
527
+ });
528
+ }
529
+ break;
530
+ case "freehand":
531
+ if (ann.points && ann.points.length > 1) {
532
+ for (let i = 1; i < ann.points.length; i++) {
533
+ page.drawLine({
534
+ start: {
535
+ x: ann.points[i - 1].x / scale,
536
+ y: pageHeight - ann.points[i - 1].y / scale,
537
+ },
538
+ end: {
539
+ x: ann.points[i].x / scale,
540
+ y: pageHeight - ann.points[i].y / scale,
541
+ },
542
+ thickness: (ann.lineWidth || 2) / scale,
543
+ color: rgb(r, g, b),
544
+ });
545
+ }
546
+ }
547
+ break;
548
+ case "highlight":
549
+ page.drawRectangle({
550
+ x: pdfX,
551
+ y: pdfY - Math.abs((ann.height || 0) / scale),
552
+ width: (ann.width || 0) / scale,
553
+ height: Math.abs((ann.height || 0) / scale),
554
+ color: rgb(r, g, b),
555
+ opacity: ann.opacity || 0.3,
556
+ });
557
+ break;
558
+ default:
559
+ break;
560
+ }
561
+ }
562
+ });
563
+ useImperativeHandle(ref, () => ({
564
+ getEditedPdfFile,
565
+ getAnnotations: () => annotations,
566
+ deleteSelectedAnnotation,
567
+ }));
568
+ const getCursorStyle = () => {
569
+ switch (currentTool) {
570
+ case "text":
571
+ return "text";
572
+ case "freehand":
573
+ return "crosshair";
574
+ case "select":
575
+ return "default";
576
+ default:
577
+ return "crosshair";
578
+ }
579
+ };
580
+ return (_jsx("div", { ref: containerRef, className: "md-lib-flex md-lib-flex-col md-lib-items-center md-lib-gap-4 md-lib-py-4 md-lib-overflow-auto", style: { height: "calc(100vh - 120px)", background: "#525659" }, children: pages.map((pageIndex) => (_jsxs("div", { className: "md-lib-relative md-lib-shadow-lg", style: { cursor: getCursorStyle() }, children: [_jsx("canvas", { ref: (el) => {
581
+ if (el)
582
+ canvasRefs.current.set(pageIndex, el);
583
+ }, className: "md-lib-block" }), _jsx("canvas", { ref: (el) => {
584
+ if (el)
585
+ overlayRefs.current.set(pageIndex, el);
586
+ }, className: "md-lib-absolute md-lib-top-0 md-lib-left-0", onMouseDown: (e) => handleMouseDown(e, pageIndex), onMouseMove: (e) => handleMouseMove(e, pageIndex), onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp }), annotations
587
+ .filter((a) => a.type === "text" &&
588
+ a.pageIndex === pageIndex &&
589
+ a.id === editingTextId)
590
+ .map((ann) => {
591
+ const overlay = overlayRefs.current.get(pageIndex);
592
+ if (!overlay)
593
+ return null;
594
+ const rect = overlay.getBoundingClientRect();
595
+ const scaleX = rect.width / overlay.width;
596
+ const scaleY = rect.height / overlay.height;
597
+ return (_jsx("input", { type: "text", autoFocus: true, value: ann.text || "", onChange: (e) => handleTextChange(ann.id, e.target.value), onBlur: () => {
598
+ if (!ann.text) {
599
+ setAnnotations((prev) => prev.filter((a) => a.id !== ann.id));
600
+ }
601
+ setEditingTextId(null);
602
+ }, onKeyDown: (e) => {
603
+ if (e.key === "Enter") {
604
+ if (!ann.text) {
605
+ setAnnotations((prev) => prev.filter((a) => a.id !== ann.id));
606
+ }
607
+ setEditingTextId(null);
608
+ }
609
+ }, className: "md-lib-absolute md-lib-border-none md-lib-outline-none md-lib-bg-transparent", style: {
610
+ left: ann.x * scaleX,
611
+ top: (ann.y - (ann.fontSize || 16)) * scaleY,
612
+ fontSize: (ann.fontSize || 16) * scaleY,
613
+ color: ann.color,
614
+ fontFamily: "Helvetica, Arial, sans-serif",
615
+ minWidth: "100px",
616
+ } }, ann.id));
617
+ }), _jsxs("div", { className: "md-lib-text-center md-lib-text-white md-lib-text-xs md-lib-py-1 md-lib-bg-black/30", children: ["Page ", pageIndex + 1] })] }, pageIndex))) }));
618
+ });
619
+ function hexToRgb(hex) {
620
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
621
+ if (result) {
622
+ return [
623
+ parseInt(result[1], 16) / 255,
624
+ parseInt(result[2], 16) / 255,
625
+ parseInt(result[3], 16) / 255,
626
+ ];
627
+ }
628
+ return [0, 0, 0];
629
+ }
630
+ PdfEditorCanvas.displayName = "PdfEditorCanvas";
631
+ export default PdfEditorCanvas;
@@ -1,9 +1,10 @@
1
1
  import { FileEntity, FolderEntity } from "../../utilities/constants/interface";
2
- declare const PdfOptions: ({ zoom, setZoom, currentPage, totalPages, file, }: {
2
+ declare const PdfOptions: ({ zoom, setZoom, currentPage, totalPages, file, showFilePreview, }: {
3
3
  zoom: number;
4
4
  setZoom: (z: number) => void;
5
5
  currentPage: number;
6
6
  totalPages: number;
7
7
  file: FileEntity & FolderEntity;
8
+ showFilePreview?: boolean;
8
9
  }) => JSX.Element;
9
10
  export default PdfOptions;
@@ -1,20 +1,23 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { AiOutlineInfoCircle, AiOutlineZoomIn, AiOutlineZoomOut, } from "react-icons/ai";
3
+ import { AiOutlineInfoCircle, AiOutlineZoomIn, AiOutlineZoomOut, AiOutlineEdit, } from "react-icons/ai";
4
4
  import { FiChevronDown } from "react-icons/fi";
5
5
  import { Dropdown, Popover } from "antd";
6
6
  import { FileInfoContent } from "../../common/CustomElements";
7
7
  import ManageFile from "./ManageFile";
8
+ import EditPdfModal from "../PdfEditor/EditPdfModal";
8
9
  const AiOutlineInfoCircleIcon = AiOutlineInfoCircle;
9
10
  const AiOutlineZoomOutIcon = AiOutlineZoomOut;
10
11
  const FiChevronDownIcon = FiChevronDown;
11
12
  const AiOutlineZoomInIcon = AiOutlineZoomIn;
13
+ const AiOutlineEditIcon = AiOutlineEdit;
12
14
  const zoomLevels = [0.1, 0.25, 0.5, 0.75, 1.0];
13
- const PdfOptions = ({ zoom, setZoom, currentPage, totalPages, file, }) => {
15
+ const PdfOptions = ({ zoom, setZoom, currentPage, totalPages, file, showFilePreview, }) => {
14
16
  const [state, setState] = useState({
15
17
  showFileAccess: false,
18
+ showEditModal: false,
16
19
  });
17
- const { showFileAccess } = state;
20
+ const { showFileAccess, showEditModal } = state;
18
21
  const handleZoomChange = ({ key }) => {
19
22
  setZoom(parseFloat(key));
20
23
  };
@@ -25,11 +28,14 @@ const PdfOptions = ({ zoom, setZoom, currentPage, totalPages, file, }) => {
25
28
  const toggleFileAccess = () => {
26
29
  setState((prevState) => (Object.assign(Object.assign({}, prevState), { showFileAccess: !prevState.showFileAccess })));
27
30
  };
31
+ const toggleEditModal = () => {
32
+ setState((prevState) => (Object.assign(Object.assign({}, prevState), { showEditModal: !prevState.showEditModal })));
33
+ };
28
34
  return (_jsxs("div", { className: "md-lib-fixed md-lib-bottom-10 md-lib-left-1/2 -md-lib-translate-x-1/2 md-lib-bg-white dark:md-lib-bg-darkPrimary md-lib-rounded-xl md-lib-shadow-md md-lib-px-4 md-lib-py-2 md-lib-flex md-lib-items-center md-lib-gap-4 md-lib-border md-lib-border-borderColor dark:md-lib-border-darkBorderColor md-lib-z-50", children: [_jsx(Popover, { content: _jsx(FileInfoContent, { file: file }), title: "File Info", placement: "top", children: _jsx("button", { className: "md-lib-p-2 hover:md-lib-bg-secondaryColor hover:dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", onClick: toggleFileAccess, children: _jsx(AiOutlineInfoCircleIcon, { className: "md-lib-text-[20px]" }) }) }), _jsx("p", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center md-lib-text-base md-lib-text-secondaryTextColor dark:md-lib-text-darkSecondaryTextColor md-lib-border-borderColor md-lib-border md-lib-rounded-lg", children: currentPage + 1 }), _jsx("p", { className: "md-lib-text-textColor dark:md-lib-text-darkTextColor", children: "/" }), _jsx("p", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center md-lib-bg-secondaryColor dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", children: totalPages }), _jsx("div", { className: "md-lib-w-[1px] md-lib-h-5 md-lib-bg-borderColor dark:md-lib-bg-darkBorderColor" }), _jsx("button", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center hover:md-lib-bg-secondaryColor hover:dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", onClick: () => setZoom(Math.max(0.5, zoom - 0.1)), disabled: zoom <= 0.1, children: _jsx(AiOutlineZoomOutIcon, { className: "md-lib-text-[20px]" }) }), _jsx(Dropdown, { menu: {
29
35
  items: items,
30
36
  onClick: handleZoomChange,
31
37
  selectable: true,
32
38
  selectedKeys: [`${Math.round(zoom * 100)}%`],
33
- }, trigger: ["click"], placement: "top", children: _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-px-3 md-lib-py-1 md-lib-bg-secondaryColor dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-md md-lib-cursor-pointer md-lib-text-sm md-lib-text-textColor dark:md-lib-text-darkTextColor", children: [`${Math.round(zoom * 100)}%`, _jsx(FiChevronDownIcon, { className: "md-lib-text-[16px]" })] }) }), _jsx("button", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center hover:md-lib-bg-secondaryColor hover:dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", onClick: () => setZoom(Math.min(1.5, zoom + 0.1)), disabled: zoom >= 1.5, children: _jsx(AiOutlineZoomInIcon, { className: "md-lib-text-[20px]" }) }), showFileAccess && (_jsx(ManageFile, { file: file, onClose: toggleFileAccess, open: showFileAccess }))] }));
39
+ }, trigger: ["click"], placement: "top", children: _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-1 md-lib-px-3 md-lib-py-1 md-lib-bg-secondaryColor dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-md md-lib-cursor-pointer md-lib-text-sm md-lib-text-textColor dark:md-lib-text-darkTextColor", children: [`${Math.round(zoom * 100)}%`, _jsx(FiChevronDownIcon, { className: "md-lib-text-[16px]" })] }) }), _jsx("button", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center hover:md-lib-bg-secondaryColor hover:dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", onClick: () => setZoom(Math.min(1.5, zoom + 0.1)), disabled: zoom >= 1.5, children: _jsx(AiOutlineZoomInIcon, { className: "md-lib-text-[20px]" }) }), showFilePreview && (_jsxs(_Fragment, { children: [_jsx("div", { className: "md-lib-w-[1px] md-lib-h-5 md-lib-bg-borderColor dark:md-lib-bg-darkBorderColor" }), _jsx("button", { className: "md-lib-h-10 md-lib-w-10 md-lib-flex md-lib-items-center md-lib-justify-center hover:md-lib-bg-secondaryColor hover:dark:md-lib-bg-darkPrimaryHoverColor md-lib-rounded-lg", onClick: toggleEditModal, title: "Edit PDF", children: _jsx(AiOutlineEditIcon, { className: "md-lib-text-[20px]" }) })] })), showFileAccess && (_jsx(ManageFile, { file: file, onClose: toggleFileAccess, open: showFileAccess })), showEditModal && (_jsx(EditPdfModal, { open: showEditModal, handleClose: toggleEditModal, file: file }))] }));
34
40
  };
35
41
  export default PdfOptions;
@@ -1,8 +1,9 @@
1
1
  import "@react-pdf-viewer/core/lib/styles/index.css";
2
2
  import "@react-pdf-viewer/zoom/lib/styles/index.css";
3
3
  import { FileEntity } from "../../utilities/constants/interface";
4
- declare const PDFViewer: ({ fileUrl, file, }: {
4
+ declare const PDFViewer: ({ fileUrl, file, showFilePreview, }: {
5
5
  fileUrl: string;
6
6
  file: FileEntity;
7
+ showFilePreview?: boolean;
7
8
  }) => JSX.Element;
8
9
  export default PDFViewer;
@@ -5,7 +5,7 @@ import { zoomPlugin } from "@react-pdf-viewer/zoom";
5
5
  import "@react-pdf-viewer/core/lib/styles/index.css";
6
6
  import "@react-pdf-viewer/zoom/lib/styles/index.css";
7
7
  import PdfOptions from "./PdfOptions";
8
- const PDFViewer = ({ fileUrl, file, }) => {
8
+ const PDFViewer = ({ fileUrl, file, showFilePreview, }) => {
9
9
  const [currentPage, setCurrentPage] = useState(0);
10
10
  const [totalPages, setTotalPages] = useState(0);
11
11
  const [zoom, setZoom] = useState(1.0);
@@ -13,6 +13,6 @@ const PDFViewer = ({ fileUrl, file, }) => {
13
13
  useEffect(() => {
14
14
  zoomPluginInstance.zoomTo(zoom);
15
15
  }, [zoom]);
16
- return (_jsxs("div", { className: "md-lib-relative md-lib-w-full", children: [_jsx(Worker, { workerUrl: `https://unpkg.com/pdfjs-dist@3.11.174/build/pdf.worker.min.js`, children: _jsx("div", { style: { height: "calc(100vh - 80px)" }, children: _jsx(Viewer, { fileUrl: fileUrl, scrollMode: ScrollMode.Vertical, plugins: [zoomPluginInstance], onPageChange: (e) => setCurrentPage(e.currentPage), onDocumentLoad: (e) => setTotalPages(e.doc.numPages), initialPage: currentPage, defaultScale: zoom }) }) }), _jsx(PdfOptions, { zoom: zoom, setZoom: setZoom, currentPage: currentPage, totalPages: totalPages, file: file })] }));
16
+ return (_jsxs("div", { className: "md-lib-relative md-lib-w-full", children: [_jsx(Worker, { workerUrl: `https://unpkg.com/pdfjs-dist@3.11.174/build/pdf.worker.min.js`, children: _jsx("div", { style: { height: "calc(100vh - 80px)" }, children: _jsx(Viewer, { fileUrl: fileUrl, scrollMode: ScrollMode.Vertical, plugins: [zoomPluginInstance], onPageChange: (e) => setCurrentPage(e.currentPage), onDocumentLoad: (e) => setTotalPages(e.doc.numPages), initialPage: currentPage, defaultScale: zoom }) }) }), _jsx(PdfOptions, { zoom: zoom, setZoom: setZoom, currentPage: currentPage, totalPages: totalPages, file: file, showFilePreview: showFilePreview })] }));
17
17
  };
18
18
  export default PDFViewer;
@@ -3,9 +3,9 @@ import { Button } from "antd";
3
3
  import { GoArrowLeft, GoArrowRight } from "react-icons/go";
4
4
  import { get, startsWith } from "lodash";
5
5
  import ImageViewer from "./ImageViewer";
6
- import { useMemo } from "react";
6
+ import { lazy, Suspense, useMemo } from "react";
7
7
  import VideoPlayer from "./VideoPlayer";
8
- // const PDFViewer = lazy(() => import("./PdfViewer"));
8
+ const PDFViewer = lazy(() => import("./PdfViewer"));
9
9
  const GoArrowLeftIcon = GoArrowLeft;
10
10
  const GoArrowRightIcon = GoArrowRight;
11
11
  const PreviewDetails = ({ file, hasPrev, hasNext, onPrev, onNext, showFilePreview, }) => {
@@ -23,27 +23,9 @@ const PreviewDetails = ({ file, hasPrev, hasNext, onPrev, onNext, showFilePrevie
23
23
  else if (startsWith(mimetype, "video/")) {
24
24
  return _jsx(VideoPlayer, { src: get(file, "s3Url") || get(file, "downloadUrl") || get(file, "thumbnailUrl", "") });
25
25
  }
26
- // else if (mimetype === "application/pdf") {
27
- // // return <PDFViewer fileUrl={get(file, "s3Url")} file={file} />;
28
- // } else if (
29
- // includes(
30
- // [
31
- // "text/csv",
32
- // "application/vnd.ms-excel",
33
- // "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
34
- // ],
35
- // mimetype
36
- // )
37
- // ) {
38
- // return (
39
- // <div className="p-4 text-center text-lg text-textColor dark:text-darkTextColor">
40
- // Preview not supported for this file type.{" "}
41
- // <a href={get(file, "s3Url")} className="underline ml-1">
42
- // Download File
43
- // </a>
44
- // </div>
45
- // );
46
- // }
26
+ else if (mimetype === "application/pdf") {
27
+ return (_jsx(Suspense, { fallback: _jsx("div", { className: "md-lib-p-4 md-lib-text-center md-lib-text-textColor dark:md-lib-text-darkTextColor", children: "Loading PDF viewer..." }), children: _jsx(PDFViewer, { fileUrl: get(file, "s3Url") || get(file, "downloadUrl", ""), file: file, showFilePreview: showFilePreview }) }));
28
+ }
47
29
  else {
48
30
  return (_jsxs("div", { className: "p-4 text-center text-lg text-textColor dark:text-darkTextColor", children: ["Preview not supported for this file type.", " ", _jsx("a", { href: get(file, "s3Url"), download: true, className: "underline ml-1", children: "Download File" })] })
49
31
  // <div className="p-4 text-center text-lg text-textColor dark:text-darkTextColor">
package/build/style.css CHANGED
@@ -1 +1 @@
1
- *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.md-lib-pointer-events-none{pointer-events:none}.md-lib-fixed{position:fixed}.md-lib-absolute{position:absolute}.md-lib-relative{position:relative}.md-lib-inset-0{inset:0}.\!-md-lib-left-full{left:-100%!important}.md-lib--top-3{top:-.75rem}.md-lib-bottom-10{bottom:2.5rem}.md-lib-bottom-6{bottom:1.5rem}.md-lib-left-0{left:0}.md-lib-left-1{left:.25rem}.md-lib-left-1\/2{left:50%}.md-lib-left-6{left:1.5rem}.md-lib-right-1{right:.25rem}.md-lib-right-3{right:.75rem}.md-lib-right-6{right:1.5rem}.md-lib-top-0{top:0}.md-lib-top-1{top:.25rem}.md-lib-top-1\/2{top:50%}.md-lib-top-16{top:4rem}.md-lib-z-30{z-index:30}.md-lib-z-50{z-index:50}.md-lib-z-\[1000\]{z-index:1000}.md-lib-z-\[1001\]{z-index:1001}.md-lib-order-2{order:2}.md-lib-col-span-1{grid-column:span 1/span 1}.md-lib-col-span-2{grid-column:span 2/span 2}.md-lib-col-span-3{grid-column:span 3/span 3}.md-lib-m-2{margin:.5rem}.md-lib-mx-2\.5{margin-left:.625rem;margin-right:.625rem}.md-lib-mx-8{margin-left:2rem;margin-right:2rem}.md-lib-mx-auto{margin-left:auto;margin-right:auto}.md-lib-my-3{margin-bottom:.75rem;margin-top:.75rem}.md-lib-my-4{margin-bottom:1rem;margin-top:1rem}.\!md-lib-mb-4{margin-bottom:1rem!important}.md-lib-mb-0{margin-bottom:0}.md-lib-mb-1{margin-bottom:.25rem}.md-lib-mb-2{margin-bottom:.5rem}.md-lib-mb-3{margin-bottom:.75rem}.md-lib-mb-4{margin-bottom:1rem}.md-lib-mb-5{margin-bottom:1.25rem}.md-lib-mb-6{margin-bottom:1.5rem}.md-lib-mb-8{margin-bottom:2rem}.md-lib-ml-1{margin-left:.25rem}.md-lib-ml-12{margin-left:3rem}.md-lib-ml-2{margin-left:.5rem}.md-lib-ml-4{margin-left:1rem}.md-lib-ml-auto{margin-left:auto}.md-lib-mr-2{margin-right:.5rem}.md-lib-mt-1{margin-top:.25rem}.md-lib-mt-2{margin-top:.5rem}.md-lib-mt-3{margin-top:.75rem}.md-lib-mt-4{margin-top:1rem}.md-lib-mt-6{margin-top:1.5rem}.md-lib-mt-8{margin-top:2rem}.md-lib-mt-\[3px\]{margin-top:3px}.md-lib-block{display:block}.md-lib-inline-block{display:inline-block}.md-lib-flex{display:flex}.md-lib-inline-table{display:inline-table}.md-lib-grid{display:grid}.md-lib-hidden{display:none}.md-lib-aspect-square{aspect-ratio:1/1}.md-lib-aspect-video{aspect-ratio:16/9}.\!md-lib-h-screen{height:100vh!important}.md-lib-h-10{height:2.5rem}.md-lib-h-11{height:2.75rem}.md-lib-h-12{height:3rem}.md-lib-h-16{height:4rem}.md-lib-h-20{height:5rem}.md-lib-h-28{height:7rem}.md-lib-h-4{height:1rem}.md-lib-h-5{height:1.25rem}.md-lib-h-52{height:13rem}.md-lib-h-72{height:18rem}.md-lib-h-8{height:2rem}.md-lib-h-\[300px\]{height:300px}.md-lib-h-\[33px\]{height:33px}.md-lib-h-\[calc\(100vh-281px\)\]{height:calc(100vh - 281px)}.md-lib-h-\[calc\(100vh-65px\)\]{height:calc(100vh - 65px)}.md-lib-h-\[inherit\]{height:inherit}.md-lib-h-auto{height:auto}.md-lib-h-full{height:100%}.md-lib-h-screen{height:100vh}.md-lib-max-h-\[calc\(100\%-76px\)\]{max-height:calc(100% - 76px)}.md-lib-max-h-\[calc\(100vh-100px\)\]{max-height:calc(100vh - 100px)}.md-lib-max-h-\[calc\(100vh-161px\)\]{max-height:calc(100vh - 161px)}.md-lib-max-h-\[calc\(100vh-65px\)\]{max-height:calc(100vh - 65px)}.md-lib-max-h-full{max-height:100%}.md-lib-min-h-0{min-height:0}.md-lib-min-h-14{min-height:3.5rem}.md-lib-min-h-36{min-height:9rem}.md-lib-min-h-\[200px\]{min-height:200px}.md-lib-min-h-\[calc\(100vh-127px\)\]{min-height:calc(100vh - 127px)}.md-lib-min-h-\[calc\(100vh-135px\)\]{min-height:calc(100vh - 135px)}.md-lib-min-h-full{min-height:100%}.\!md-lib-w-12{width:3rem!important}.md-lib-w-10{width:2.5rem}.md-lib-w-11\/12{width:91.666667%}.md-lib-w-12{width:3rem}.md-lib-w-4{width:1rem}.md-lib-w-4\/5{width:80%}.md-lib-w-40{width:10rem}.md-lib-w-5{width:1.25rem}.md-lib-w-56{width:14rem}.md-lib-w-6{width:1.5rem}.md-lib-w-8{width:2rem}.md-lib-w-80{width:20rem}.md-lib-w-96{width:24rem}.md-lib-w-\[100px\]{width:100px}.md-lib-w-\[120px\]{width:120px}.md-lib-w-\[150px\]{width:150px}.md-lib-w-\[1px\]{width:1px}.md-lib-w-\[280px\]{width:280px}.md-lib-w-\[400px\]{width:400px}.md-lib-w-\[80px\]{width:80px}.md-lib-w-\[calc\(100\%-20px\)\]{width:calc(100% - 20px)}.md-lib-w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)}.md-lib-w-\[calc\(100\%-5px\)\]{width:calc(100% - 5px)}.md-lib-w-full{width:100%}.md-lib-w-screen{width:100vw}.md-lib-min-w-0{min-width:0}.md-lib-min-w-\[120px\]{min-width:120px}.md-lib-min-w-\[200px\]{min-width:200px}.md-lib-min-w-\[280px\]{min-width:280px}.md-lib-min-w-\[320px\]{min-width:320px}.md-lib-min-w-\[3rem\]{min-width:3rem}.md-lib-min-w-fit{min-width:fit-content}.md-lib-max-w-28{max-width:7rem}.md-lib-max-w-2xl{max-width:42rem}.md-lib-max-w-3xl{max-width:48rem}.md-lib-max-w-40{max-width:10rem}.md-lib-max-w-4xl{max-width:56rem}.md-lib-max-w-64{max-width:16rem}.md-lib-max-w-6xl{max-width:72rem}.md-lib-max-w-7xl{max-width:80rem}.md-lib-max-w-\[180px\]{max-width:180px}.md-lib-max-w-\[200px\]{max-width:200px}.md-lib-max-w-\[240px\]{max-width:240px}.md-lib-max-w-\[280px\]{max-width:280px}.md-lib-max-w-\[calc\(100vw-180px\)\]{max-width:calc(100vw - 180px)}.md-lib-max-w-full{max-width:100%}.md-lib-max-w-md{max-width:28rem}.md-lib-flex-1{flex:1 1 0%}.md-lib-flex-shrink-0,.md-lib-shrink-0{flex-shrink:0}.-md-lib-translate-x-1\/2{--tw-translate-x:-50%}.-md-lib-translate-x-1\/2,.-md-lib-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-md-lib-translate-y-1\/2{--tw-translate-y:-50%}.md-lib-translate-y-0{--tw-translate-y:0px}.md-lib-translate-y-0,.md-lib-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md-lib-translate-y-4{--tw-translate-y:1rem}.md-lib-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md-lib-cursor-default{cursor:default}.md-lib-cursor-not-allowed{cursor:not-allowed}.md-lib-cursor-pointer{cursor:pointer}.md-lib-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md-lib-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md-lib-flex-col{flex-direction:column}.md-lib-flex-wrap{flex-wrap:wrap}.md-lib-items-start{align-items:flex-start}.md-lib-items-end{align-items:flex-end}.md-lib-items-center{align-items:center}.md-lib-justify-end{justify-content:flex-end}.md-lib-justify-center{justify-content:center}.md-lib-justify-between{justify-content:space-between}.md-lib-gap-1{gap:.25rem}.md-lib-gap-2{gap:.5rem}.md-lib-gap-3{gap:.75rem}.md-lib-gap-4{gap:1rem}.md-lib-gap-5{gap:1.25rem}.md-lib-gap-8{gap:2rem}.md-lib-gap-x-4{column-gap:1rem}.md-lib-gap-y-10{row-gap:2.5rem}.md-lib-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.md-lib-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.md-lib-self-start{align-self:flex-start}.md-lib-overflow-auto{overflow:auto}.md-lib-overflow-hidden{overflow:hidden}.md-lib-overflow-x-auto{overflow-x:auto}.md-lib-overflow-y-auto{overflow-y:auto}.md-lib-overflow-y-scroll{overflow-y:scroll}.md-lib-truncate{overflow:hidden;text-overflow:ellipsis}.md-lib-truncate,.md-lib-whitespace-nowrap{white-space:nowrap}.\!md-lib-rounded-lg{border-radius:.5rem!important}.md-lib-rounded{border-radius:.25rem}.md-lib-rounded-\[20px\]{border-radius:20px}.md-lib-rounded-full{border-radius:9999px}.md-lib-rounded-lg{border-radius:.5rem}.md-lib-rounded-md{border-radius:.375rem}.md-lib-rounded-none{border-radius:0}.md-lib-rounded-xl{border-radius:.75rem}.md-lib-rounded-s{border-end-start-radius:.25rem;border-start-start-radius:.25rem}.md-lib-border{border-width:1px}.md-lib-border-0{border-width:0}.md-lib-border-2{border-width:2px}.md-lib-border-4{border-width:4px}.md-lib-border-b{border-bottom-width:1px}.md-lib-border-l{border-left-width:1px}.md-lib-border-r{border-right-width:1px}.md-lib-border-t{border-top-width:1px}.md-lib-border-dashed{border-style:dashed}.md-lib-border-none{border-style:none}.md-lib-border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.md-lib-border-borderColor{border-color:var(--color-border,#9aa8bc33)}.md-lib-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.md-lib-border-primaryColor{border-color:var(--color-primary,#0b6d97)}.md-lib-border-secondaryBorderColor{--tw-border-opacity:1;border-color:rgb(237 242 247/var(--tw-border-opacity,1))}.md-lib-border-secondaryHoverColor{--tw-border-opacity:1;border-color:rgb(203 212 225/var(--tw-border-opacity,1))}.md-lib-border-secondaryTextColor{--tw-border-opacity:1;border-color:rgb(114 129 151/var(--tw-border-opacity,1))}.md-lib-bg-\[\#DEE4ED\]{--tw-bg-opacity:1;background-color:rgb(222 228 237/var(--tw-bg-opacity,1))}.md-lib-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.md-lib-bg-black\/50{background-color:#00000080}.md-lib-bg-borderColor{background-color:var(--color-border,#9aa8bc33)}.md-lib-bg-darkPrimaryBg{--tw-bg-opacity:1;background-color:rgb(22 28 85/var(--tw-bg-opacity,1))}.md-lib-bg-primaryColor{background-color:var(--color-primary,#0b6d97)}.md-lib-bg-secondaryColor{background-color:var(--color-secondary,#eceff4)}.md-lib-bg-secondaryHoverColor{--tw-bg-opacity:1;background-color:rgb(203 212 225/var(--tw-bg-opacity,1))}.md-lib-bg-secondaryTextColor{--tw-bg-opacity:1;background-color:rgb(114 129 151/var(--tw-bg-opacity,1))}.md-lib-bg-textColorActive{background-color:var(--color-text-active,#f6f8fb)}.md-lib-bg-transparent{background-color:initial}.md-lib-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.md-lib-object-contain{object-fit:contain}.md-lib-object-cover{object-fit:cover}.md-lib-p-1{padding:.25rem}.md-lib-p-2{padding:.5rem}.md-lib-p-3{padding:.75rem}.md-lib-p-4{padding:1rem}.md-lib-p-5{padding:1.25rem}.md-lib-p-6{padding:1.5rem}.md-lib-p-8{padding:2rem}.\!md-lib-px-4{padding-left:1rem!important;padding-right:1rem!important}.md-lib-px-2{padding-left:.5rem;padding-right:.5rem}.md-lib-px-3{padding-left:.75rem;padding-right:.75rem}.md-lib-px-4{padding-left:1rem;padding-right:1rem}.md-lib-px-5{padding-left:1.25rem;padding-right:1.25rem}.md-lib-px-6{padding-left:1.5rem;padding-right:1.5rem}.md-lib-py-1{padding-bottom:.25rem;padding-top:.25rem}.md-lib-py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.md-lib-py-2{padding-bottom:.5rem;padding-top:.5rem}.md-lib-py-3{padding-bottom:.75rem;padding-top:.75rem}.md-lib-py-4{padding-bottom:1rem;padding-top:1rem}.md-lib-py-8{padding-bottom:2rem;padding-top:2rem}.\!md-lib-pt-0{padding-top:0!important}.md-lib-pb-2{padding-bottom:.5rem}.md-lib-pb-20{padding-bottom:5rem}.md-lib-pb-4{padding-bottom:1rem}.md-lib-pb-6{padding-bottom:1.5rem}.md-lib-pb-7{padding-bottom:1.75rem}.md-lib-pl-2{padding-left:.5rem}.md-lib-pl-4{padding-left:1rem}.md-lib-pr-2{padding-right:.5rem}.md-lib-pr-4{padding-right:1rem}.md-lib-pr-\[10px\]{padding-right:10px}.md-lib-pt-1{padding-top:.25rem}.md-lib-pt-2{padding-top:.5rem}.md-lib-pt-2\.5{padding-top:.625rem}.md-lib-pt-3{padding-top:.75rem}.md-lib-pt-4{padding-top:1rem}.md-lib-pt-5{padding-top:1.25rem}.md-lib-text-center{text-align:center}.md-lib-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.md-lib-text-2xl{font-size:1.5rem;line-height:2rem}.md-lib-text-3xl{font-size:1.875rem;line-height:2.25rem}.md-lib-text-4xl{font-size:2.25rem;line-height:2.5rem}.md-lib-text-\[15px\]{font-size:15px}.md-lib-text-\[16px\]{font-size:16px}.md-lib-text-\[20px\]{font-size:20px}.md-lib-text-\[22px\]{font-size:22px}.md-lib-text-base{font-size:1rem;line-height:1.5rem}.md-lib-text-lg{font-size:1.125rem;line-height:1.75rem}.md-lib-text-sm{font-size:.875rem;line-height:1.25rem}.md-lib-text-xl{font-size:1.25rem;line-height:1.75rem}.md-lib-text-xs{font-size:.75rem;line-height:1rem}.md-lib-font-bold{font-weight:700}.md-lib-font-medium{font-weight:500}.md-lib-font-semibold{font-weight:600}.md-lib-capitalize{text-transform:capitalize}.md-lib-leading-normal{line-height:1.5}.md-lib-leading-relaxed{line-height:1.625}.md-lib-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.md-lib-text-borderColor{color:var(--color-border,#9aa8bc33)}.md-lib-text-dangerColor{color:var(--color-danger,#e42131)}.md-lib-text-darkTextColor{--tw-text-opacity:1;color:rgb(238 238 238/var(--tw-text-opacity,1))}.md-lib-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.md-lib-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.md-lib-text-headingText{--tw-text-opacity:1;color:rgb(0 19 37/var(--tw-text-opacity,1))}.md-lib-text-imagesColor{--tw-text-opacity:1;color:rgb(251 137 81/var(--tw-text-opacity,1))}.md-lib-text-musicColor{--tw-text-opacity:1;color:rgb(95 140 230/var(--tw-text-opacity,1))}.md-lib-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.md-lib-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.md-lib-text-otherColor{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity,1))}.md-lib-text-primaryColor{color:var(--color-primary,#0b6d97)}.md-lib-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.md-lib-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.md-lib-text-secondaryTextColor{--tw-text-opacity:1;color:rgb(114 129 151/var(--tw-text-opacity,1))}.md-lib-text-textColor{color:var(--color-text,#1a212b)}.md-lib-text-themeGreen{--tw-text-opacity:1;color:rgb(1 106 28/var(--tw-text-opacity,1))}.md-lib-text-videosColor{--tw-text-opacity:1;color:rgb(81 224 152/var(--tw-text-opacity,1))}.md-lib-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.md-lib-underline{text-decoration-line:underline}.md-lib-opacity-0{opacity:0}.md-lib-opacity-100{opacity:1}.\!md-lib-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.md-lib-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.md-lib-shadow-lg,.md-lib-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.md-lib-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.md-lib-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.md-lib-shadow-none,.md-lib-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.md-lib-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.md-lib-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.md-lib-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.md-lib-duration-300{transition-duration:.3s}.md-lib-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255;--icon-color:#000;--table-bgcolor:#f8f9fa;--hover-color:#efeffe;--box-shadow-small:0px 4px 8px #090b1980;--theme-primary:#0b6d97;--text-color:#fff;--text-primary:#001325eb;--theme-primary-hover:#0b6d97cc;--theme-secondary:#eceff4;--arrrow-color:#fff;--border-color:#9aa8bc33;--shadow-color:hsla(0,0%,79%,.667);--theme-danger:#e42131;--theme-danger-hover:#e42131cc;--menu-arrow:#fff;--text-disabled:#00000040;--radio-btn:#c2c2c2;--bar-bg-color:#f5f5f5}.dark{--icon-color:#d5d8df!important;--table-bgcolor:#30324e!important;--hover-color:#3f4259!important;--box-shadow-small:0px 4px 8px #090b1980;--theme-primary:#181b34!important;--text-color:#d5d8df!important;--text-primary:#e5e6ea!important;--theme-secondary:#30324e!important;--theme-primary-hover:#212642!important;--foreground-rgb:255,255,255!important;--background-start-rgb:0,0,0!important;--background-end-rgb:0,0,0!important;--arrrow-color:#30324e!important;--border-color:#4b4e69!important;--shadow-color:rgba(33,33,33,.667);--menu-arrow:#212642!important;--text-disabled:#ffffff40!important;--radio-btn:#4b4e69!important;--bar-bg-color:#30324e!important}.ant-layout-sider-children{display:flex;flex-direction:column}body{background:rgb(var(--background-start-rgb));color:rgb(var(--foreground-rgb));font-family:Inter}.ant-form-item-label label{color:#728197!important;font-size:12px!important;font-style:normal;line-height:18px}.search-input{border-radius:100px;width:320px}.page-height{height:calc(100vh - 65px)!important}.ant-btn-dangerous{background-color:var(--theme-danger)!important}.description{--tw-text-opacity:1;color:rgb(0 19 37/var(--tw-text-opacity,1));font-size:.75rem;font-style:normal;font-weight:500;line-height:1rem;line-height:18px}.grid-radio-btns label{align-items:center;display:inline-flex;justify-content:center;width:6rem}.grid-radio-btns label:first-child{border-bottom-left-radius:9999px!important;border-top-left-radius:9999px!important}.grid-radio-btns label:last-child{border-bottom-right-radius:9999px!important;border-top-right-radius:9999px!important}*{box-sizing:border-box;margin:0;padding:0}.asset-management-page{max-height:calc(100vh - 115px);overflow-y:scroll;padding:10px 20px}.asset-management-page .asset-management-table .header{align-items:center;display:flex;margin-bottom:20px;margin-top:10px}.asset-management-page .asset-management-table .header .page-title{width:300px}.asset-management-page .asset-management-table .header .right-section{display:contents;margin-left:auto}.asset-management-page .asset-management-table .header .right-section .search-bar{margin-right:20px}.asset-management-page .asset-management-table .mobile-search-bar{display:none}.page-title.ant-typography{margin:0!important}.asset-management-table{margin-top:30px}.create-asset-page .form .metadata-field-container{align-items:center;display:flex;margin-bottom:10px;width:100%}.create-asset-page .form .metadata-field{background-color:#f5f5f5;border-radius:4px;padding:20px}.create-asset-page .form .metadata-field .ant-row{margin:0!important}.assetType-table .ant-table-content{min-height:calc(100vh - 210px)}.assetType-table .ant-table-footer .assetType-pagination{display:flex;justify-content:flex-end}.row-dragging{background:var(--color,#18bfcd);border:1px solid #f0f0f0;color:#fff}.asset-management-table .ant-table-container .ant-table-cell{width:50%}.is-dragging-over .row-dragging{background:var(--color,#18bfcd)}.asset-management-table .ant-table-container .ant-typography-ellipsis-single-line{max-width:400px}@media (max-width:767px){.asset-management-page .asset-management-table .header .right-section .search-bar{display:none}.asset-management-page .asset-management-table .mobile-search-bar{display:block;margin-bottom:10px}.asset-management-page .asset-management-table .header{margin-bottom:5px}.assetType-table .ant-table-content{min-height:calc(100vh - 235px)}.asset-management-table .ant-table-container .ant-typography-ellipsis-single-line{max-width:160px}}.create-asset-page .dam-loading{align-items:center;display:flex;height:calc(100vh - 200px);justify-content:center}.ant-typography{margin-bottom:0!important}.ant-btn-color-default{box-shadow:none!important}.ant-switch .ant-switch-inner{background-color:#9aa8bc33}.ant-btn-primary{color:#fff!important}.ant-btn-color-primary{box-shadow:none!important}.ant-tree-treenode{height:34px!important}.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{vertical-align:-webkit-baseline-middle}.ant-tree .ant-tree-switcher{margin-inline-end:0!important}.ant-tree .ant-tree-switcher:before{height:33px!important}.ant-tree .ant-tree-node-content-wrapper{padding-left:0!important}.ant-tree .ant-tree-node-selected:hover{color:#eee!important}.tui-image-editor-header-logo{display:none!important}.ant-tree-treenode-draggable .ant-tree-draggable-icon{width:0!important}.ant-tree-list .ant-tree-treenode .ant-tree-title{font-size:14px!important;margin-left:0!important}.share-link-dropdown .ant-select-selection-wrap,.share-link-dropdown .ant-select-selection-wrap .ant-select-selection-item{height:100%}.hover\:md-lib-border-black:hover{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.hover\:md-lib-border-primaryColor:hover{border-color:var(--color-primary,#0b6d97)}.hover\:md-lib-bg-black\/70:hover{background-color:#000000b3}.hover\:md-lib-bg-borderColor:hover{background-color:var(--color-border,#9aa8bc33)}.hover\:md-lib-bg-secondaryColor:hover{background-color:var(--color-secondary,#eceff4)}.hover\:md-lib-bg-secondaryHoverColor:hover{--tw-bg-opacity:1;background-color:rgb(203 212 225/var(--tw-bg-opacity,1))}.hover\:md-lib-opacity-80:hover{opacity:.8}.hover\:md-lib-opacity-90:hover{opacity:.9}.focus\:md-lib-outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:md-lib-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:md-lib-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.dark\:md-lib-border-darkBorderColor:is(.md-lib-dark *){--tw-border-opacity:1;border-color:rgb(75 78 105/var(--tw-border-opacity,1))}.dark\:md-lib-bg-darkBorderColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(75 78 105/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimary:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(24 27 52/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimaryBg:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(22 28 85/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimaryHoverColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(33 38 66/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkSecondaryColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(48 50 78/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkSecondaryTextColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(150 153 166/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-white\/20:is(.md-lib-dark *){background-color:#fff3}.dark\:md-lib-text-darkBorderColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(75 78 105/var(--tw-text-opacity,1))}.dark\:md-lib-text-darkSecondaryTextColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(150 153 166/var(--tw-text-opacity,1))}.dark\:md-lib-text-darkTextColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(238 238 238/var(--tw-text-opacity,1))}.dark\:md-lib-text-gray-400:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:md-lib-text-white:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:hover\:md-lib-bg-darkSecondaryColor:hover:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(48 50 78/var(--tw-bg-opacity,1))}.dark\:hover\:md-lib-bg-white\/30:hover:is(.md-lib-dark *){background-color:#ffffff4d}.hover\:dark\:md-lib-bg-darkPrimaryHoverColor:is(.md-lib-dark *):hover{--tw-bg-opacity:1;background-color:rgb(33 38 66/var(--tw-bg-opacity,1))}@media (min-width:640px){.sm\:md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\:md-lib-block{display:block}.md\:md-lib-w-\[720px\]{width:720px}.md\:md-lib-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:md-lib-grid-cols-\[auto\2c 1fr\]{grid-template-columns:auto 1fr}}@media (min-width:1024px){.lg\:md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1280px){.xl\:md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:1536px){.\32xl\:md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.md-lib-pointer-events-none{pointer-events:none}.md-lib-fixed{position:fixed}.md-lib-absolute{position:absolute}.md-lib-relative{position:relative}.md-lib-inset-0{inset:0}.\!-md-lib-left-full{left:-100%!important}.md-lib--top-3{top:-.75rem}.md-lib-bottom-10{bottom:2.5rem}.md-lib-bottom-6{bottom:1.5rem}.md-lib-left-0{left:0}.md-lib-left-1{left:.25rem}.md-lib-left-1\/2{left:50%}.md-lib-left-6{left:1.5rem}.md-lib-right-1{right:.25rem}.md-lib-right-3{right:.75rem}.md-lib-right-6{right:1.5rem}.md-lib-top-0{top:0}.md-lib-top-1{top:.25rem}.md-lib-top-1\/2{top:50%}.md-lib-top-16{top:4rem}.md-lib-z-30{z-index:30}.md-lib-z-50{z-index:50}.md-lib-z-\[1000\]{z-index:1000}.md-lib-z-\[1001\]{z-index:1001}.md-lib-order-2{order:2}.md-lib-col-span-1{grid-column:span 1/span 1}.md-lib-col-span-2{grid-column:span 2/span 2}.md-lib-col-span-3{grid-column:span 3/span 3}.md-lib-m-2{margin:.5rem}.md-lib-mx-2{margin-left:.5rem;margin-right:.5rem}.md-lib-mx-2\.5{margin-left:.625rem;margin-right:.625rem}.md-lib-mx-8{margin-left:2rem;margin-right:2rem}.md-lib-mx-auto{margin-left:auto;margin-right:auto}.md-lib-my-3{margin-bottom:.75rem;margin-top:.75rem}.md-lib-my-4{margin-bottom:1rem;margin-top:1rem}.\!md-lib-mb-4{margin-bottom:1rem!important}.md-lib-mb-0{margin-bottom:0}.md-lib-mb-1{margin-bottom:.25rem}.md-lib-mb-2{margin-bottom:.5rem}.md-lib-mb-3{margin-bottom:.75rem}.md-lib-mb-4{margin-bottom:1rem}.md-lib-mb-5{margin-bottom:1.25rem}.md-lib-mb-6{margin-bottom:1.5rem}.md-lib-mb-8{margin-bottom:2rem}.md-lib-ml-1{margin-left:.25rem}.md-lib-ml-12{margin-left:3rem}.md-lib-ml-2{margin-left:.5rem}.md-lib-ml-4{margin-left:1rem}.md-lib-ml-auto{margin-left:auto}.md-lib-mr-2{margin-right:.5rem}.md-lib-mt-1{margin-top:.25rem}.md-lib-mt-2{margin-top:.5rem}.md-lib-mt-3{margin-top:.75rem}.md-lib-mt-4{margin-top:1rem}.md-lib-mt-6{margin-top:1.5rem}.md-lib-mt-8{margin-top:2rem}.md-lib-mt-\[3px\]{margin-top:3px}.md-lib-block{display:block}.md-lib-inline-block{display:inline-block}.md-lib-flex{display:flex}.md-lib-inline-table{display:inline-table}.md-lib-grid{display:grid}.md-lib-hidden{display:none}.md-lib-aspect-square{aspect-ratio:1/1}.md-lib-aspect-video{aspect-ratio:16/9}.\!md-lib-h-screen{height:100vh!important}.md-lib-h-10{height:2.5rem}.md-lib-h-11{height:2.75rem}.md-lib-h-12{height:3rem}.md-lib-h-16{height:4rem}.md-lib-h-20{height:5rem}.md-lib-h-28{height:7rem}.md-lib-h-4{height:1rem}.md-lib-h-5{height:1.25rem}.md-lib-h-52{height:13rem}.md-lib-h-6{height:1.5rem}.md-lib-h-7{height:1.75rem}.md-lib-h-72{height:18rem}.md-lib-h-8{height:2rem}.md-lib-h-\[300px\]{height:300px}.md-lib-h-\[33px\]{height:33px}.md-lib-h-\[calc\(100vh-281px\)\]{height:calc(100vh - 281px)}.md-lib-h-\[calc\(100vh-65px\)\]{height:calc(100vh - 65px)}.md-lib-h-\[inherit\]{height:inherit}.md-lib-h-auto{height:auto}.md-lib-h-full{height:100%}.md-lib-h-screen{height:100vh}.md-lib-max-h-\[300px\]{max-height:300px}.md-lib-max-h-\[calc\(100\%-76px\)\]{max-height:calc(100% - 76px)}.md-lib-max-h-\[calc\(100vh-100px\)\]{max-height:calc(100vh - 100px)}.md-lib-max-h-\[calc\(100vh-161px\)\]{max-height:calc(100vh - 161px)}.md-lib-max-h-\[calc\(100vh-65px\)\]{max-height:calc(100vh - 65px)}.md-lib-max-h-full{max-height:100%}.md-lib-min-h-0{min-height:0}.md-lib-min-h-14{min-height:3.5rem}.md-lib-min-h-36{min-height:9rem}.md-lib-min-h-\[200px\]{min-height:200px}.md-lib-min-h-\[calc\(100vh-127px\)\]{min-height:calc(100vh - 127px)}.md-lib-min-h-\[calc\(100vh-135px\)\]{min-height:calc(100vh - 135px)}.md-lib-min-h-full{min-height:100%}.\!md-lib-w-12{width:3rem!important}.md-lib-w-10{width:2.5rem}.md-lib-w-11\/12{width:91.666667%}.md-lib-w-12{width:3rem}.md-lib-w-4{width:1rem}.md-lib-w-4\/5{width:80%}.md-lib-w-40{width:10rem}.md-lib-w-5{width:1.25rem}.md-lib-w-56{width:14rem}.md-lib-w-6{width:1.5rem}.md-lib-w-7{width:1.75rem}.md-lib-w-8{width:2rem}.md-lib-w-80{width:20rem}.md-lib-w-96{width:24rem}.md-lib-w-\[100px\]{width:100px}.md-lib-w-\[120px\]{width:120px}.md-lib-w-\[150px\]{width:150px}.md-lib-w-\[1px\]{width:1px}.md-lib-w-\[280px\]{width:280px}.md-lib-w-\[400px\]{width:400px}.md-lib-w-\[80px\]{width:80px}.md-lib-w-\[calc\(100\%-20px\)\]{width:calc(100% - 20px)}.md-lib-w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)}.md-lib-w-\[calc\(100\%-5px\)\]{width:calc(100% - 5px)}.md-lib-w-full{width:100%}.md-lib-w-px{width:1px}.md-lib-w-screen{width:100vw}.md-lib-min-w-0{min-width:0}.md-lib-min-w-\[120px\]{min-width:120px}.md-lib-min-w-\[200px\]{min-width:200px}.md-lib-min-w-\[280px\]{min-width:280px}.md-lib-min-w-\[320px\]{min-width:320px}.md-lib-min-w-\[3rem\]{min-width:3rem}.md-lib-min-w-\[60px\]{min-width:60px}.md-lib-min-w-fit{min-width:fit-content}.md-lib-max-w-28{max-width:7rem}.md-lib-max-w-2xl{max-width:42rem}.md-lib-max-w-3xl{max-width:48rem}.md-lib-max-w-40{max-width:10rem}.md-lib-max-w-4xl{max-width:56rem}.md-lib-max-w-64{max-width:16rem}.md-lib-max-w-6xl{max-width:72rem}.md-lib-max-w-7xl{max-width:80rem}.md-lib-max-w-\[160px\]{max-width:160px}.md-lib-max-w-\[180px\]{max-width:180px}.md-lib-max-w-\[200px\]{max-width:200px}.md-lib-max-w-\[240px\]{max-width:240px}.md-lib-max-w-\[280px\]{max-width:280px}.md-lib-max-w-\[calc\(100vw-180px\)\]{max-width:calc(100vw - 180px)}.md-lib-max-w-full{max-width:100%}.md-lib-max-w-md{max-width:28rem}.md-lib-flex-1{flex:1 1 0%}.md-lib-flex-shrink-0,.md-lib-shrink-0{flex-shrink:0}.-md-lib-translate-x-1\/2{--tw-translate-x:-50%}.-md-lib-translate-x-1\/2,.-md-lib-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-md-lib-translate-y-1\/2{--tw-translate-y:-50%}.md-lib-translate-y-0{--tw-translate-y:0px}.md-lib-translate-y-0,.md-lib-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md-lib-translate-y-4{--tw-translate-y:1rem}.md-lib-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md-lib-cursor-default{cursor:default}.md-lib-cursor-not-allowed{cursor:not-allowed}.md-lib-cursor-pointer{cursor:pointer}.md-lib-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md-lib-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md-lib-flex-col{flex-direction:column}.md-lib-flex-wrap{flex-wrap:wrap}.md-lib-items-start{align-items:flex-start}.md-lib-items-end{align-items:flex-end}.md-lib-items-center{align-items:center}.md-lib-justify-end{justify-content:flex-end}.md-lib-justify-center{justify-content:center}.md-lib-justify-between{justify-content:space-between}.md-lib-gap-1{gap:.25rem}.md-lib-gap-2{gap:.5rem}.md-lib-gap-3{gap:.75rem}.md-lib-gap-4{gap:1rem}.md-lib-gap-5{gap:1.25rem}.md-lib-gap-8{gap:2rem}.md-lib-gap-x-4{column-gap:1rem}.md-lib-gap-y-10{row-gap:2.5rem}.md-lib-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.md-lib-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.md-lib-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.md-lib-self-start{align-self:flex-start}.md-lib-overflow-auto{overflow:auto}.md-lib-overflow-hidden{overflow:hidden}.md-lib-overflow-x-auto{overflow-x:auto}.md-lib-overflow-y-auto{overflow-y:auto}.md-lib-overflow-y-scroll{overflow-y:scroll}.md-lib-truncate{overflow:hidden;text-overflow:ellipsis}.md-lib-truncate,.md-lib-whitespace-nowrap{white-space:nowrap}.\!md-lib-rounded-lg{border-radius:.5rem!important}.md-lib-rounded{border-radius:.25rem}.md-lib-rounded-\[20px\]{border-radius:20px}.md-lib-rounded-full{border-radius:9999px}.md-lib-rounded-lg{border-radius:.5rem}.md-lib-rounded-md{border-radius:.375rem}.md-lib-rounded-none{border-radius:0}.md-lib-rounded-xl{border-radius:.75rem}.md-lib-rounded-s{border-end-start-radius:.25rem;border-start-start-radius:.25rem}.md-lib-border{border-width:1px}.md-lib-border-0{border-width:0}.md-lib-border-2{border-width:2px}.md-lib-border-4{border-width:4px}.md-lib-border-b{border-bottom-width:1px}.md-lib-border-l{border-left-width:1px}.md-lib-border-r{border-right-width:1px}.md-lib-border-t{border-top-width:1px}.md-lib-border-dashed{border-style:dashed}.md-lib-border-none{border-style:none}.md-lib-border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.md-lib-border-borderColor{border-color:var(--color-border,#9aa8bc33)}.md-lib-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.md-lib-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.md-lib-border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.md-lib-border-primaryColor{border-color:var(--color-primary,#0b6d97)}.md-lib-border-secondaryBorderColor{--tw-border-opacity:1;border-color:rgb(237 242 247/var(--tw-border-opacity,1))}.md-lib-border-secondaryHoverColor{--tw-border-opacity:1;border-color:rgb(203 212 225/var(--tw-border-opacity,1))}.md-lib-border-secondaryTextColor{--tw-border-opacity:1;border-color:rgb(114 129 151/var(--tw-border-opacity,1))}.md-lib-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.md-lib-bg-\[\#3a3a3a\]{--tw-bg-opacity:1;background-color:rgb(58 58 58/var(--tw-bg-opacity,1))}.md-lib-bg-\[\#DEE4ED\]{--tw-bg-opacity:1;background-color:rgb(222 228 237/var(--tw-bg-opacity,1))}.md-lib-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.md-lib-bg-black\/30{background-color:#0000004d}.md-lib-bg-black\/50{background-color:#00000080}.md-lib-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.md-lib-bg-borderColor{background-color:var(--color-border,#9aa8bc33)}.md-lib-bg-darkPrimaryBg{--tw-bg-opacity:1;background-color:rgb(22 28 85/var(--tw-bg-opacity,1))}.md-lib-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.md-lib-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.md-lib-bg-primaryColor{background-color:var(--color-primary,#0b6d97)}.md-lib-bg-secondaryColor{background-color:var(--color-secondary,#eceff4)}.md-lib-bg-secondaryHoverColor{--tw-bg-opacity:1;background-color:rgb(203 212 225/var(--tw-bg-opacity,1))}.md-lib-bg-secondaryTextColor{--tw-bg-opacity:1;background-color:rgb(114 129 151/var(--tw-bg-opacity,1))}.md-lib-bg-textColorActive{background-color:var(--color-text-active,#f6f8fb)}.md-lib-bg-transparent{background-color:initial}.md-lib-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.md-lib-object-contain{object-fit:contain}.md-lib-object-cover{object-fit:cover}.md-lib-p-1{padding:.25rem}.md-lib-p-2{padding:.5rem}.md-lib-p-3{padding:.75rem}.md-lib-p-4{padding:1rem}.md-lib-p-5{padding:1.25rem}.md-lib-p-6{padding:1.5rem}.md-lib-p-8{padding:2rem}.\!md-lib-px-4{padding-left:1rem!important;padding-right:1rem!important}.md-lib-px-1{padding-left:.25rem;padding-right:.25rem}.md-lib-px-2{padding-left:.5rem;padding-right:.5rem}.md-lib-px-3{padding-left:.75rem;padding-right:.75rem}.md-lib-px-4{padding-left:1rem;padding-right:1rem}.md-lib-px-5{padding-left:1.25rem;padding-right:1.25rem}.md-lib-px-6{padding-left:1.5rem;padding-right:1.5rem}.md-lib-py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.md-lib-py-1{padding-bottom:.25rem;padding-top:.25rem}.md-lib-py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.md-lib-py-2{padding-bottom:.5rem;padding-top:.5rem}.md-lib-py-3{padding-bottom:.75rem;padding-top:.75rem}.md-lib-py-4{padding-bottom:1rem;padding-top:1rem}.md-lib-py-8{padding-bottom:2rem;padding-top:2rem}.\!md-lib-pt-0{padding-top:0!important}.md-lib-pb-2{padding-bottom:.5rem}.md-lib-pb-20{padding-bottom:5rem}.md-lib-pb-4{padding-bottom:1rem}.md-lib-pb-6{padding-bottom:1.5rem}.md-lib-pb-7{padding-bottom:1.75rem}.md-lib-pl-2{padding-left:.5rem}.md-lib-pl-4{padding-left:1rem}.md-lib-pr-2{padding-right:.5rem}.md-lib-pr-4{padding-right:1rem}.md-lib-pr-\[10px\]{padding-right:10px}.md-lib-pt-1{padding-top:.25rem}.md-lib-pt-2{padding-top:.5rem}.md-lib-pt-2\.5{padding-top:.625rem}.md-lib-pt-3{padding-top:.75rem}.md-lib-pt-4{padding-top:1rem}.md-lib-pt-5{padding-top:1.25rem}.md-lib-text-center{text-align:center}.md-lib-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.md-lib-text-2xl{font-size:1.5rem;line-height:2rem}.md-lib-text-3xl{font-size:1.875rem;line-height:2.25rem}.md-lib-text-4xl{font-size:2.25rem;line-height:2.5rem}.md-lib-text-\[15px\]{font-size:15px}.md-lib-text-\[16px\]{font-size:16px}.md-lib-text-\[20px\]{font-size:20px}.md-lib-text-\[22px\]{font-size:22px}.md-lib-text-base{font-size:1rem;line-height:1.5rem}.md-lib-text-lg{font-size:1.125rem;line-height:1.75rem}.md-lib-text-sm{font-size:.875rem;line-height:1.25rem}.md-lib-text-xl{font-size:1.25rem;line-height:1.75rem}.md-lib-text-xs{font-size:.75rem;line-height:1rem}.md-lib-font-bold{font-weight:700}.md-lib-font-medium{font-weight:500}.md-lib-font-semibold{font-weight:600}.md-lib-capitalize{text-transform:capitalize}.md-lib-leading-normal{line-height:1.5}.md-lib-leading-relaxed{line-height:1.625}.md-lib-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.md-lib-text-borderColor{color:var(--color-border,#9aa8bc33)}.md-lib-text-dangerColor{color:var(--color-danger,#e42131)}.md-lib-text-darkTextColor{--tw-text-opacity:1;color:rgb(238 238 238/var(--tw-text-opacity,1))}.md-lib-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.md-lib-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.md-lib-text-headingText{--tw-text-opacity:1;color:rgb(0 19 37/var(--tw-text-opacity,1))}.md-lib-text-imagesColor{--tw-text-opacity:1;color:rgb(251 137 81/var(--tw-text-opacity,1))}.md-lib-text-musicColor{--tw-text-opacity:1;color:rgb(95 140 230/var(--tw-text-opacity,1))}.md-lib-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.md-lib-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.md-lib-text-otherColor{--tw-text-opacity:1;color:rgb(167 139 250/var(--tw-text-opacity,1))}.md-lib-text-primaryColor{color:var(--color-primary,#0b6d97)}.md-lib-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.md-lib-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.md-lib-text-secondaryTextColor{--tw-text-opacity:1;color:rgb(114 129 151/var(--tw-text-opacity,1))}.md-lib-text-textColor{color:var(--color-text,#1a212b)}.md-lib-text-themeGreen{--tw-text-opacity:1;color:rgb(1 106 28/var(--tw-text-opacity,1))}.md-lib-text-videosColor{--tw-text-opacity:1;color:rgb(81 224 152/var(--tw-text-opacity,1))}.md-lib-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.md-lib-underline{text-decoration-line:underline}.md-lib-opacity-0{opacity:0}.md-lib-opacity-100{opacity:1}.\!md-lib-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.md-lib-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.md-lib-shadow-lg,.md-lib-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.md-lib-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.md-lib-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.md-lib-shadow-none,.md-lib-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.md-lib-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.md-lib-outline-none{outline:2px solid #0000;outline-offset:2px}.md-lib-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.md-lib-ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.md-lib-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.md-lib-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.md-lib-duration-300{transition-duration:.3s}.md-lib-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--foreground-rgb:0,0,0;--background-start-rgb:255,255,255;--background-end-rgb:255,255,255;--icon-color:#000;--table-bgcolor:#f8f9fa;--hover-color:#efeffe;--box-shadow-small:0px 4px 8px #090b1980;--theme-primary:#0b6d97;--text-color:#fff;--text-primary:#001325eb;--theme-primary-hover:#0b6d97cc;--theme-secondary:#eceff4;--arrrow-color:#fff;--border-color:#9aa8bc33;--shadow-color:hsla(0,0%,79%,.667);--theme-danger:#e42131;--theme-danger-hover:#e42131cc;--menu-arrow:#fff;--text-disabled:#00000040;--radio-btn:#c2c2c2;--bar-bg-color:#f5f5f5}.dark{--icon-color:#d5d8df!important;--table-bgcolor:#30324e!important;--hover-color:#3f4259!important;--box-shadow-small:0px 4px 8px #090b1980;--theme-primary:#181b34!important;--text-color:#d5d8df!important;--text-primary:#e5e6ea!important;--theme-secondary:#30324e!important;--theme-primary-hover:#212642!important;--foreground-rgb:255,255,255!important;--background-start-rgb:0,0,0!important;--background-end-rgb:0,0,0!important;--arrrow-color:#30324e!important;--border-color:#4b4e69!important;--shadow-color:rgba(33,33,33,.667);--menu-arrow:#212642!important;--text-disabled:#ffffff40!important;--radio-btn:#4b4e69!important;--bar-bg-color:#30324e!important}.ant-layout-sider-children{display:flex;flex-direction:column}body{background:rgb(var(--background-start-rgb));color:rgb(var(--foreground-rgb));font-family:Inter}.ant-form-item-label label{color:#728197!important;font-size:12px!important;font-style:normal;line-height:18px}.search-input{border-radius:100px;width:320px}.page-height{height:calc(100vh - 65px)!important}.ant-btn-dangerous{background-color:var(--theme-danger)!important}.description{--tw-text-opacity:1;color:rgb(0 19 37/var(--tw-text-opacity,1));font-size:.75rem;font-style:normal;font-weight:500;line-height:1rem;line-height:18px}.grid-radio-btns label{align-items:center;display:inline-flex;justify-content:center;width:6rem}.grid-radio-btns label:first-child{border-bottom-left-radius:9999px!important;border-top-left-radius:9999px!important}.grid-radio-btns label:last-child{border-bottom-right-radius:9999px!important;border-top-right-radius:9999px!important}*{box-sizing:border-box;margin:0;padding:0}.asset-management-page{max-height:calc(100vh - 115px);overflow-y:scroll;padding:10px 20px}.asset-management-page .asset-management-table .header{align-items:center;display:flex;margin-bottom:20px;margin-top:10px}.asset-management-page .asset-management-table .header .page-title{width:300px}.asset-management-page .asset-management-table .header .right-section{display:contents;margin-left:auto}.asset-management-page .asset-management-table .header .right-section .search-bar{margin-right:20px}.asset-management-page .asset-management-table .mobile-search-bar{display:none}.page-title.ant-typography{margin:0!important}.asset-management-table{margin-top:30px}.create-asset-page .form .metadata-field-container{align-items:center;display:flex;margin-bottom:10px;width:100%}.create-asset-page .form .metadata-field{background-color:#f5f5f5;border-radius:4px;padding:20px}.create-asset-page .form .metadata-field .ant-row{margin:0!important}.assetType-table .ant-table-content{min-height:calc(100vh - 210px)}.assetType-table .ant-table-footer .assetType-pagination{display:flex;justify-content:flex-end}.row-dragging{background:var(--color,#18bfcd);border:1px solid #f0f0f0;color:#fff}.asset-management-table .ant-table-container .ant-table-cell{width:50%}.is-dragging-over .row-dragging{background:var(--color,#18bfcd)}.asset-management-table .ant-table-container .ant-typography-ellipsis-single-line{max-width:400px}@media (max-width:767px){.asset-management-page .asset-management-table .header .right-section .search-bar{display:none}.asset-management-page .asset-management-table .mobile-search-bar{display:block;margin-bottom:10px}.asset-management-page .asset-management-table .header{margin-bottom:5px}.assetType-table .ant-table-content{min-height:calc(100vh - 235px)}.asset-management-table .ant-table-container .ant-typography-ellipsis-single-line{max-width:160px}}.create-asset-page .dam-loading{align-items:center;display:flex;height:calc(100vh - 200px);justify-content:center}.ant-typography{margin-bottom:0!important}.ant-btn-color-default{box-shadow:none!important}.ant-switch .ant-switch-inner{background-color:#9aa8bc33}.ant-btn-primary{color:#fff!important}.ant-btn-color-primary{box-shadow:none!important}.ant-tree-treenode{height:34px!important}.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{vertical-align:-webkit-baseline-middle}.ant-tree .ant-tree-switcher{margin-inline-end:0!important}.ant-tree .ant-tree-switcher:before{height:33px!important}.ant-tree .ant-tree-node-content-wrapper{padding-left:0!important}.ant-tree .ant-tree-node-selected:hover{color:#eee!important}.tui-image-editor-header-logo{display:none!important}.ant-tree-treenode-draggable .ant-tree-draggable-icon{width:0!important}.ant-tree-list .ant-tree-treenode .ant-tree-title{font-size:14px!important;margin-left:0!important}.share-link-dropdown .ant-select-selection-wrap,.share-link-dropdown .ant-select-selection-wrap .ant-select-selection-item{height:100%}.last\:md-lib-border-0:last-child{border-width:0}.hover\:md-lib-border-black:hover{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.hover\:md-lib-border-primaryColor:hover{border-color:var(--color-primary,#0b6d97)}.hover\:md-lib-bg-black\/70:hover{background-color:#000000b3}.hover\:md-lib-bg-borderColor:hover{background-color:var(--color-border,#9aa8bc33)}.hover\:md-lib-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:md-lib-bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.hover\:md-lib-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:md-lib-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:md-lib-bg-secondaryColor:hover{background-color:var(--color-secondary,#eceff4)}.hover\:md-lib-bg-secondaryHoverColor:hover{--tw-bg-opacity:1;background-color:rgb(203 212 225/var(--tw-bg-opacity,1))}.hover\:md-lib-opacity-80:hover{opacity:.8}.hover\:md-lib-opacity-90:hover{opacity:.9}.focus\:md-lib-outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:md-lib-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:md-lib-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.dark\:md-lib-border-darkBorderColor:is(.md-lib-dark *){--tw-border-opacity:1;border-color:rgb(75 78 105/var(--tw-border-opacity,1))}.dark\:md-lib-bg-darkBorderColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(75 78 105/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimary:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(24 27 52/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimaryBg:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(22 28 85/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkPrimaryHoverColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(33 38 66/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkSecondaryColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(48 50 78/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-darkSecondaryTextColor:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(150 153 166/var(--tw-bg-opacity,1))}.dark\:md-lib-bg-white\/20:is(.md-lib-dark *){background-color:#fff3}.dark\:md-lib-text-darkBorderColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(75 78 105/var(--tw-text-opacity,1))}.dark\:md-lib-text-darkSecondaryTextColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(150 153 166/var(--tw-text-opacity,1))}.dark\:md-lib-text-darkTextColor:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(238 238 238/var(--tw-text-opacity,1))}.dark\:md-lib-text-gray-400:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:md-lib-text-white:is(.md-lib-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:hover\:md-lib-bg-darkSecondaryColor:hover:is(.md-lib-dark *){--tw-bg-opacity:1;background-color:rgb(48 50 78/var(--tw-bg-opacity,1))}.dark\:hover\:md-lib-bg-white\/30:hover:is(.md-lib-dark *){background-color:#ffffff4d}.hover\:dark\:md-lib-bg-darkPrimaryHoverColor:is(.md-lib-dark *):hover{--tw-bg-opacity:1;background-color:rgb(33 38 66/var(--tw-bg-opacity,1))}@media (min-width:640px){.sm\:md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\:md-lib-block{display:block}.md\:md-lib-w-\[720px\]{width:720px}.md\:md-lib-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:md-lib-grid-cols-\[auto\2c 1fr\]{grid-template-columns:auto 1fr}}@media (min-width:1024px){.lg\:md-lib-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1280px){.xl\:md-lib-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:1536px){.\32xl\:md-lib-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bindu-dashing/dam-solution-v2",
3
- "version": "5.9.230",
3
+ "version": "5.9.232",
4
4
  "dependencies": {
5
5
  "@ant-design/icons": "^5.0.1",
6
6
  "@emoji-mart/data": "^1.2.1",
@@ -24,6 +24,7 @@
24
24
  "emoji-mart": "^5.6.0",
25
25
  "lodash": "^4.17.21",
26
26
  "moment-timezone": "^0.6.0",
27
+ "pdf-lib": "^1.17.1",
27
28
  "pdfjs-dist": "^3.11.174",
28
29
  "react-beautiful-dnd": "^13.1.1",
29
30
  "react-dom": "^18.2.0",