@bindu-dashing/dam-solution-v2 5.9.231 → 5.9.233

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.
@@ -151,7 +151,7 @@ const CreateClientForm = ({ teamsApi, username, password, toggleShow, onSuccess,
151
151
  }
152
152
  });
153
153
  fetchClientData();
154
- }, [isEditMode, existingClientData === null || existingClientData === void 0 ? void 0 : existingClientData.brandId, existingClientData === null || existingClientData === void 0 ? void 0 : existingClientData.subdomain, form]);
154
+ }, [isEditMode, existingClientData === null || existingClientData === void 0 ? void 0 : existingClientData.brandId, existingClientData === null || existingClientData === void 0 ? void 0 : existingClientData.subdomain, api, form]);
155
155
  const onFinish = (data) => __awaiter(void 0, void 0, void 0, function* () {
156
156
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
157
157
  try {
@@ -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,652 @@
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 direct URL fetch first (most reliable for binary data)
39
+ if (fileUrl) {
40
+ try {
41
+ const response = yield fetch(fileUrl);
42
+ if (response.ok) {
43
+ const arrayBuffer = yield response.arrayBuffer();
44
+ const bytes = new Uint8Array(arrayBuffer);
45
+ // Verify PDF header (%PDF-)
46
+ if (bytes.length > 4 &&
47
+ bytes[0] === 0x25 &&
48
+ bytes[1] === 0x50 &&
49
+ bytes[2] === 0x44 &&
50
+ bytes[3] === 0x46) {
51
+ setPdfBytes(bytes);
52
+ const doc = yield pdfjsLib.getDocument({ data: bytes.slice() })
53
+ .promise;
54
+ setPdfDoc(doc);
55
+ onPagesLoaded(doc.numPages);
56
+ return;
57
+ }
58
+ }
59
+ }
60
+ catch (fetchErr) {
61
+ console.warn("Direct URL fetch failed, trying base64 API:", fetchErr);
62
+ }
63
+ }
64
+ // Fallback: fetch via API base64 endpoint
65
+ if (s3Path) {
66
+ const response = yield api.get(`${GET_BASE64_USING_PATH_URL}?key=${s3Path}`);
67
+ const base64Data = get(response, "data.base64") ||
68
+ get(response, "base64", "");
69
+ if (base64Data) {
70
+ const binaryString = atob(base64Data);
71
+ const bytes = new Uint8Array(binaryString.length);
72
+ for (let i = 0; i < binaryString.length; i++) {
73
+ bytes[i] = binaryString.charCodeAt(i);
74
+ }
75
+ setPdfBytes(bytes);
76
+ const doc = yield pdfjsLib.getDocument({ data: bytes.slice() })
77
+ .promise;
78
+ setPdfDoc(doc);
79
+ onPagesLoaded(doc.numPages);
80
+ return;
81
+ }
82
+ }
83
+ console.error("Could not load PDF from any source");
84
+ }
85
+ catch (err) {
86
+ console.error("Error loading PDF:", err);
87
+ }
88
+ });
89
+ loadPdf();
90
+ }, [fileUrl, s3Path]);
91
+ // Render PDF pages
92
+ useEffect(() => {
93
+ if (!pdfDoc)
94
+ return;
95
+ const renderPages = () => __awaiter(void 0, void 0, void 0, function* () {
96
+ for (const pageIndex of pages) {
97
+ const pageNum = pageIndex + 1;
98
+ if (pageNum > pdfDoc.numPages)
99
+ continue;
100
+ const page = yield pdfDoc.getPage(pageNum);
101
+ const rotation = pageRotations[pageIndex] || 0;
102
+ const viewport = page.getViewport({ scale: 1.5, rotation });
103
+ const canvas = canvasRefs.current.get(pageIndex);
104
+ if (!canvas)
105
+ continue;
106
+ canvas.width = viewport.width;
107
+ canvas.height = viewport.height;
108
+ const ctx = canvas.getContext("2d");
109
+ if (!ctx)
110
+ continue;
111
+ // Store scale for coordinate conversion
112
+ setPageScales((prev) => {
113
+ const newMap = new Map(prev);
114
+ newMap.set(pageIndex, 1.5);
115
+ return newMap;
116
+ });
117
+ yield page.render({
118
+ canvasContext: ctx,
119
+ viewport,
120
+ }).promise;
121
+ // Size overlay canvas to match
122
+ const overlay = overlayRefs.current.get(pageIndex);
123
+ if (overlay) {
124
+ overlay.width = viewport.width;
125
+ overlay.height = viewport.height;
126
+ }
127
+ }
128
+ });
129
+ renderPages();
130
+ }, [pdfDoc, pages, pageRotations]);
131
+ // Redraw annotations overlay
132
+ useEffect(() => {
133
+ for (const pageIndex of pages) {
134
+ const overlay = overlayRefs.current.get(pageIndex);
135
+ if (!overlay)
136
+ continue;
137
+ const ctx = overlay.getContext("2d");
138
+ if (!ctx)
139
+ continue;
140
+ ctx.clearRect(0, 0, overlay.width, overlay.height);
141
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === pageIndex);
142
+ for (const ann of pageAnnotations) {
143
+ const isSelected = ann.id === selectedAnnotation;
144
+ drawAnnotation(ctx, ann, isSelected);
145
+ }
146
+ }
147
+ }, [annotations, selectedAnnotation, pages]);
148
+ const drawAnnotation = (ctx, ann, isSelected) => {
149
+ ctx.save();
150
+ if (isSelected) {
151
+ ctx.strokeStyle = "#2196F3";
152
+ ctx.lineWidth = 2;
153
+ ctx.setLineDash([5, 3]);
154
+ const padding = 4;
155
+ if (ann.type === "text") {
156
+ ctx.font = `${ann.fontSize || 16}px Helvetica`;
157
+ const metrics = ctx.measureText(ann.text || "");
158
+ ctx.strokeRect(ann.x - padding, ann.y - (ann.fontSize || 16) - padding, metrics.width + padding * 2, (ann.fontSize || 16) + padding * 2);
159
+ }
160
+ else if (ann.type === "rectangle" || ann.type === "highlight") {
161
+ ctx.strokeRect(ann.x - padding, ann.y - padding, (ann.width || 0) + padding * 2, (ann.height || 0) + padding * 2);
162
+ }
163
+ else if (ann.type === "circle") {
164
+ const cx = ann.x + (ann.width || 0) / 2;
165
+ const cy = ann.y + (ann.height || 0) / 2;
166
+ const rx = Math.abs(ann.width || 0) / 2 + padding;
167
+ const ry = Math.abs(ann.height || 0) / 2 + padding;
168
+ ctx.beginPath();
169
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
170
+ ctx.stroke();
171
+ }
172
+ ctx.setLineDash([]);
173
+ }
174
+ switch (ann.type) {
175
+ case "text":
176
+ ctx.font = `${ann.fontSize || 16}px Helvetica`;
177
+ ctx.fillStyle = ann.color;
178
+ ctx.fillText(ann.text || "", ann.x, ann.y);
179
+ break;
180
+ case "freehand":
181
+ if (ann.points && ann.points.length > 1) {
182
+ ctx.strokeStyle = ann.color;
183
+ ctx.lineWidth = ann.lineWidth || 2;
184
+ ctx.lineCap = "round";
185
+ ctx.lineJoin = "round";
186
+ ctx.beginPath();
187
+ ctx.moveTo(ann.points[0].x, ann.points[0].y);
188
+ for (let i = 1; i < ann.points.length; i++) {
189
+ ctx.lineTo(ann.points[i].x, ann.points[i].y);
190
+ }
191
+ ctx.stroke();
192
+ }
193
+ break;
194
+ case "rectangle":
195
+ ctx.strokeStyle = ann.color;
196
+ ctx.lineWidth = ann.lineWidth || 2;
197
+ ctx.strokeRect(ann.x, ann.y, ann.width || 0, ann.height || 0);
198
+ break;
199
+ case "circle":
200
+ ctx.strokeStyle = ann.color;
201
+ ctx.lineWidth = ann.lineWidth || 2;
202
+ ctx.beginPath();
203
+ const cx = ann.x + (ann.width || 0) / 2;
204
+ const cy = ann.y + (ann.height || 0) / 2;
205
+ const rx = Math.abs(ann.width || 0) / 2;
206
+ const ry = Math.abs(ann.height || 0) / 2;
207
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
208
+ ctx.stroke();
209
+ break;
210
+ case "highlight":
211
+ ctx.fillStyle = ann.color;
212
+ ctx.globalAlpha = ann.opacity || 0.3;
213
+ ctx.fillRect(ann.x, ann.y, ann.width || 0, ann.height || 0);
214
+ ctx.globalAlpha = 1;
215
+ break;
216
+ case "line":
217
+ ctx.strokeStyle = ann.color;
218
+ ctx.lineWidth = ann.lineWidth || 2;
219
+ ctx.beginPath();
220
+ ctx.moveTo(ann.x, ann.y);
221
+ ctx.lineTo(ann.x + (ann.width || 0), ann.y + (ann.height || 0));
222
+ ctx.stroke();
223
+ break;
224
+ }
225
+ ctx.restore();
226
+ };
227
+ const getCanvasCoords = (e, canvas) => {
228
+ const rect = canvas.getBoundingClientRect();
229
+ const scaleX = canvas.width / rect.width;
230
+ const scaleY = canvas.height / rect.height;
231
+ return {
232
+ x: (e.clientX - rect.left) * scaleX,
233
+ y: (e.clientY - rect.top) * scaleY,
234
+ };
235
+ };
236
+ const handleMouseDown = useCallback((e, pageIndex) => {
237
+ const overlay = overlayRefs.current.get(pageIndex);
238
+ if (!overlay)
239
+ return;
240
+ const coords = getCanvasCoords(e, overlay);
241
+ if (currentTool === "select") {
242
+ // Check if clicked on an annotation
243
+ const clicked = findAnnotationAt(coords.x, coords.y, pageIndex);
244
+ setSelectedAnnotation((clicked === null || clicked === void 0 ? void 0 : clicked.id) || null);
245
+ setEditingTextId(null);
246
+ return;
247
+ }
248
+ if (currentTool === "text") {
249
+ const id = `ann-${Date.now()}`;
250
+ const newAnn = {
251
+ id,
252
+ type: "text",
253
+ pageIndex,
254
+ x: coords.x,
255
+ y: coords.y,
256
+ text: "",
257
+ color,
258
+ fontSize,
259
+ };
260
+ setAnnotations((prev) => [...prev, newAnn]);
261
+ setEditingTextId(id);
262
+ setSelectedAnnotation(id);
263
+ return;
264
+ }
265
+ setIsDrawing(true);
266
+ const id = `ann-${Date.now()}`;
267
+ const newAnn = Object.assign({ id, type: currentTool, pageIndex, x: coords.x, y: coords.y, color,
268
+ lineWidth,
269
+ fontSize, opacity: currentTool === "highlight" ? 0.3 : 1 }, (currentTool === "freehand"
270
+ ? { points: [{ x: coords.x, y: coords.y }] }
271
+ : { width: 0, height: 0 }));
272
+ setCurrentAnnotation(newAnn);
273
+ }, [currentTool, color, fontSize, lineWidth]);
274
+ const handleMouseMove = useCallback((e, pageIndex) => {
275
+ if (!isDrawing || !currentAnnotation)
276
+ return;
277
+ const overlay = overlayRefs.current.get(pageIndex);
278
+ if (!overlay)
279
+ return;
280
+ const coords = getCanvasCoords(e, overlay);
281
+ if (currentAnnotation.type === "freehand") {
282
+ setCurrentAnnotation((prev) => {
283
+ if (!prev)
284
+ return prev;
285
+ return Object.assign(Object.assign({}, prev), { points: [...(prev.points || []), { x: coords.x, y: coords.y }] });
286
+ });
287
+ }
288
+ else {
289
+ setCurrentAnnotation((prev) => {
290
+ if (!prev)
291
+ return prev;
292
+ return Object.assign(Object.assign({}, prev), { width: coords.x - prev.x, height: coords.y - prev.y });
293
+ });
294
+ }
295
+ }, [isDrawing, currentAnnotation]);
296
+ const handleMouseUp = useCallback(() => {
297
+ var _a;
298
+ if (!isDrawing || !currentAnnotation)
299
+ return;
300
+ setIsDrawing(false);
301
+ // Only add if it has meaningful size
302
+ const hasSize = currentAnnotation.type === "freehand"
303
+ ? (((_a = currentAnnotation.points) === null || _a === void 0 ? void 0 : _a.length) || 0) > 2
304
+ : Math.abs(currentAnnotation.width || 0) > 5 ||
305
+ Math.abs(currentAnnotation.height || 0) > 5;
306
+ if (hasSize) {
307
+ setAnnotations((prev) => [...prev, currentAnnotation]);
308
+ setSelectedAnnotation(currentAnnotation.id);
309
+ }
310
+ setCurrentAnnotation(null);
311
+ }, [isDrawing, currentAnnotation]);
312
+ // Draw current annotation in progress
313
+ useEffect(() => {
314
+ if (!currentAnnotation)
315
+ return;
316
+ const overlay = overlayRefs.current.get(currentAnnotation.pageIndex);
317
+ if (!overlay)
318
+ return;
319
+ const ctx = overlay.getContext("2d");
320
+ if (!ctx)
321
+ return;
322
+ // Redraw all annotations + current
323
+ ctx.clearRect(0, 0, overlay.width, overlay.height);
324
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === currentAnnotation.pageIndex);
325
+ for (const ann of pageAnnotations) {
326
+ drawAnnotation(ctx, ann, false);
327
+ }
328
+ drawAnnotation(ctx, currentAnnotation, false);
329
+ }, [currentAnnotation]);
330
+ const findAnnotationAt = (x, y, pageIndex) => {
331
+ var _a;
332
+ const pageAnnotations = annotations.filter((a) => a.pageIndex === pageIndex);
333
+ for (let i = pageAnnotations.length - 1; i >= 0; i--) {
334
+ const ann = pageAnnotations[i];
335
+ const hitPadding = 10;
336
+ switch (ann.type) {
337
+ case "text": {
338
+ const approxWidth = (((_a = ann.text) === null || _a === void 0 ? void 0 : _a.length) || 0) * (ann.fontSize || 16) * 0.6;
339
+ if (x >= ann.x - hitPadding &&
340
+ x <= ann.x + approxWidth + hitPadding &&
341
+ y >= ann.y - (ann.fontSize || 16) - hitPadding &&
342
+ y <= ann.y + hitPadding) {
343
+ return ann;
344
+ }
345
+ break;
346
+ }
347
+ case "freehand": {
348
+ if (ann.points) {
349
+ for (const p of ann.points) {
350
+ if (Math.abs(p.x - x) < hitPadding &&
351
+ Math.abs(p.y - y) < hitPadding) {
352
+ return ann;
353
+ }
354
+ }
355
+ }
356
+ break;
357
+ }
358
+ default: {
359
+ const minX = Math.min(ann.x, ann.x + (ann.width || 0));
360
+ const maxX = Math.max(ann.x, ann.x + (ann.width || 0));
361
+ const minY = Math.min(ann.y, ann.y + (ann.height || 0));
362
+ const maxY = Math.max(ann.y, ann.y + (ann.height || 0));
363
+ if (x >= minX - hitPadding &&
364
+ x <= maxX + hitPadding &&
365
+ y >= minY - hitPadding &&
366
+ y <= maxY + hitPadding) {
367
+ return ann;
368
+ }
369
+ break;
370
+ }
371
+ }
372
+ }
373
+ return null;
374
+ };
375
+ const handleTextChange = (id, text) => {
376
+ setAnnotations((prev) => prev.map((a) => (a.id === id ? Object.assign(Object.assign({}, a), { text }) : a)));
377
+ };
378
+ const deleteSelectedAnnotation = useCallback(() => {
379
+ if (selectedAnnotation) {
380
+ setAnnotations((prev) => prev.filter((a) => a.id !== selectedAnnotation));
381
+ setSelectedAnnotation(null);
382
+ setEditingTextId(null);
383
+ }
384
+ }, [selectedAnnotation]);
385
+ // Build final PDF with annotations baked in
386
+ const getEditedPdfFile = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
387
+ if (!pdfBytes)
388
+ return null;
389
+ try {
390
+ const pdfDocLib = yield PDFDocument.load(pdfBytes);
391
+ const helveticaFont = yield pdfDocLib.embedFont(StandardFonts.Helvetica);
392
+ const allPages = pdfDocLib.getPages();
393
+ // Apply page rotations
394
+ for (const [pageIdx, rotation] of Object.entries(pageRotations)) {
395
+ const idx = parseInt(pageIdx);
396
+ if (idx < allPages.length && rotation !== 0) {
397
+ allPages[idx].setRotation(degrees(rotation));
398
+ }
399
+ }
400
+ // Remove deleted pages (pages not in the pages array)
401
+ const allPageIndices = Array.from({ length: allPages.length }, (_, i) => i);
402
+ const pagesToRemove = allPageIndices
403
+ .filter((i) => !pages.includes(i))
404
+ .sort((a, b) => b - a); // Remove from end to preserve indices
405
+ for (const idx of pagesToRemove) {
406
+ pdfDocLib.removePage(idx);
407
+ }
408
+ // Reorder pages if needed
409
+ // pdf-lib doesn't have a native reorder, so we create a new doc
410
+ if (pages.length > 0 &&
411
+ !pages.every((p, i) => p ===
412
+ allPageIndices.filter((idx) => pages.includes(idx))[i])) {
413
+ const newDoc = yield PDFDocument.create();
414
+ for (const pageIdx of pages) {
415
+ // Find where this page ended up after removals
416
+ const remainingPages = allPageIndices.filter((i) => pages.includes(i));
417
+ const newIdx = remainingPages.indexOf(pageIdx);
418
+ if (newIdx >= 0 && newIdx < pdfDocLib.getPageCount()) {
419
+ const [copiedPage] = yield newDoc.copyPages(pdfDocLib, [newIdx]);
420
+ newDoc.addPage(copiedPage);
421
+ }
422
+ }
423
+ // Apply annotations to the reordered doc
424
+ yield applyAnnotations(newDoc, helveticaFont, pages);
425
+ const editedBytes = yield newDoc.save();
426
+ return new File([editedBytes], "edited.pdf", {
427
+ type: "application/pdf",
428
+ });
429
+ }
430
+ // Apply annotations to the current doc
431
+ const remainingPages = pdfDocLib.getPages();
432
+ const scale = 1.5; // Must match render scale
433
+ for (const ann of annotations) {
434
+ const pageOrder = pages.indexOf(ann.pageIndex);
435
+ if (pageOrder < 0 || pageOrder >= remainingPages.length)
436
+ continue;
437
+ const page = remainingPages[pageOrder];
438
+ const { width: pageWidth, height: pageHeight } = page.getSize();
439
+ // Convert canvas coordinates to PDF coordinates
440
+ // Canvas y goes down, PDF y goes up
441
+ const pdfX = ann.x / scale;
442
+ const pdfY = pageHeight - ann.y / scale;
443
+ const [r, g, b] = hexToRgb(ann.color);
444
+ switch (ann.type) {
445
+ case "text":
446
+ if (ann.text) {
447
+ page.drawText(ann.text, {
448
+ x: pdfX,
449
+ y: pdfY,
450
+ size: (ann.fontSize || 16) / scale,
451
+ font: helveticaFont,
452
+ color: rgb(r, g, b),
453
+ });
454
+ }
455
+ break;
456
+ case "freehand":
457
+ if (ann.points && ann.points.length > 1) {
458
+ for (let i = 1; i < ann.points.length; i++) {
459
+ page.drawLine({
460
+ start: {
461
+ x: ann.points[i - 1].x / scale,
462
+ y: pageHeight - ann.points[i - 1].y / scale,
463
+ },
464
+ end: {
465
+ x: ann.points[i].x / scale,
466
+ y: pageHeight - ann.points[i].y / scale,
467
+ },
468
+ thickness: (ann.lineWidth || 2) / scale,
469
+ color: rgb(r, g, b),
470
+ });
471
+ }
472
+ }
473
+ break;
474
+ case "rectangle":
475
+ page.drawRectangle({
476
+ x: pdfX,
477
+ y: pdfY - Math.abs((ann.height || 0) / scale),
478
+ width: (ann.width || 0) / scale,
479
+ height: Math.abs((ann.height || 0) / scale),
480
+ borderColor: rgb(r, g, b),
481
+ borderWidth: (ann.lineWidth || 2) / scale,
482
+ });
483
+ break;
484
+ case "circle":
485
+ page.drawEllipse({
486
+ x: pdfX + (ann.width || 0) / scale / 2,
487
+ y: pdfY - Math.abs((ann.height || 0) / scale) / 2,
488
+ xScale: Math.abs((ann.width || 0) / scale) / 2,
489
+ yScale: Math.abs((ann.height || 0) / scale) / 2,
490
+ borderColor: rgb(r, g, b),
491
+ borderWidth: (ann.lineWidth || 2) / scale,
492
+ });
493
+ break;
494
+ case "highlight":
495
+ page.drawRectangle({
496
+ x: pdfX,
497
+ y: pdfY - Math.abs((ann.height || 0) / scale),
498
+ width: (ann.width || 0) / scale,
499
+ height: Math.abs((ann.height || 0) / scale),
500
+ color: rgb(r, g, b),
501
+ opacity: ann.opacity || 0.3,
502
+ });
503
+ break;
504
+ case "line":
505
+ page.drawLine({
506
+ start: { x: pdfX, y: pdfY },
507
+ end: {
508
+ x: pdfX + (ann.width || 0) / scale,
509
+ y: pdfY - (ann.height || 0) / scale,
510
+ },
511
+ thickness: (ann.lineWidth || 2) / scale,
512
+ color: rgb(r, g, b),
513
+ });
514
+ break;
515
+ }
516
+ }
517
+ const editedBytes = yield pdfDocLib.save();
518
+ return new File([editedBytes], "edited.pdf", {
519
+ type: "application/pdf",
520
+ });
521
+ }
522
+ catch (err) {
523
+ console.error("Error generating edited PDF:", err);
524
+ return null;
525
+ }
526
+ }), [pdfBytes, annotations, pages, pageRotations]);
527
+ const applyAnnotations = (doc, font, pageOrder) => __awaiter(void 0, void 0, void 0, function* () {
528
+ const docPages = doc.getPages();
529
+ const scale = 1.5;
530
+ for (const ann of annotations) {
531
+ const orderIdx = pageOrder.indexOf(ann.pageIndex);
532
+ if (orderIdx < 0 || orderIdx >= docPages.length)
533
+ continue;
534
+ const page = docPages[orderIdx];
535
+ const { height: pageHeight } = page.getSize();
536
+ const pdfX = ann.x / scale;
537
+ const pdfY = pageHeight - ann.y / scale;
538
+ const [r, g, b] = hexToRgb(ann.color);
539
+ switch (ann.type) {
540
+ case "text":
541
+ if (ann.text) {
542
+ page.drawText(ann.text, {
543
+ x: pdfX,
544
+ y: pdfY,
545
+ size: (ann.fontSize || 16) / scale,
546
+ font,
547
+ color: rgb(r, g, b),
548
+ });
549
+ }
550
+ break;
551
+ case "freehand":
552
+ if (ann.points && ann.points.length > 1) {
553
+ for (let i = 1; i < ann.points.length; i++) {
554
+ page.drawLine({
555
+ start: {
556
+ x: ann.points[i - 1].x / scale,
557
+ y: pageHeight - ann.points[i - 1].y / scale,
558
+ },
559
+ end: {
560
+ x: ann.points[i].x / scale,
561
+ y: pageHeight - ann.points[i].y / scale,
562
+ },
563
+ thickness: (ann.lineWidth || 2) / scale,
564
+ color: rgb(r, g, b),
565
+ });
566
+ }
567
+ }
568
+ break;
569
+ case "highlight":
570
+ page.drawRectangle({
571
+ x: pdfX,
572
+ y: pdfY - Math.abs((ann.height || 0) / scale),
573
+ width: (ann.width || 0) / scale,
574
+ height: Math.abs((ann.height || 0) / scale),
575
+ color: rgb(r, g, b),
576
+ opacity: ann.opacity || 0.3,
577
+ });
578
+ break;
579
+ default:
580
+ break;
581
+ }
582
+ }
583
+ });
584
+ useImperativeHandle(ref, () => ({
585
+ getEditedPdfFile,
586
+ getAnnotations: () => annotations,
587
+ deleteSelectedAnnotation,
588
+ }));
589
+ const getCursorStyle = () => {
590
+ switch (currentTool) {
591
+ case "text":
592
+ return "text";
593
+ case "freehand":
594
+ return "crosshair";
595
+ case "select":
596
+ return "default";
597
+ default:
598
+ return "crosshair";
599
+ }
600
+ };
601
+ 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) => {
602
+ if (el)
603
+ canvasRefs.current.set(pageIndex, el);
604
+ }, className: "md-lib-block" }), _jsx("canvas", { ref: (el) => {
605
+ if (el)
606
+ overlayRefs.current.set(pageIndex, el);
607
+ }, 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
608
+ .filter((a) => a.type === "text" &&
609
+ a.pageIndex === pageIndex &&
610
+ a.id === editingTextId)
611
+ .map((ann) => {
612
+ const overlay = overlayRefs.current.get(pageIndex);
613
+ if (!overlay)
614
+ return null;
615
+ const rect = overlay.getBoundingClientRect();
616
+ const scaleX = rect.width / overlay.width;
617
+ const scaleY = rect.height / overlay.height;
618
+ return (_jsx("input", { type: "text", autoFocus: true, value: ann.text || "", onChange: (e) => handleTextChange(ann.id, e.target.value), onBlur: () => {
619
+ if (!ann.text) {
620
+ setAnnotations((prev) => prev.filter((a) => a.id !== ann.id));
621
+ }
622
+ setEditingTextId(null);
623
+ }, onKeyDown: (e) => {
624
+ if (e.key === "Enter") {
625
+ if (!ann.text) {
626
+ setAnnotations((prev) => prev.filter((a) => a.id !== ann.id));
627
+ }
628
+ setEditingTextId(null);
629
+ }
630
+ }, className: "md-lib-absolute md-lib-border-none md-lib-outline-none md-lib-bg-transparent", style: {
631
+ left: ann.x * scaleX,
632
+ top: (ann.y - (ann.fontSize || 16)) * scaleY,
633
+ fontSize: (ann.fontSize || 16) * scaleY,
634
+ color: ann.color,
635
+ fontFamily: "Helvetica, Arial, sans-serif",
636
+ minWidth: "100px",
637
+ } }, ann.id));
638
+ }), _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))) }));
639
+ });
640
+ function hexToRgb(hex) {
641
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
642
+ if (result) {
643
+ return [
644
+ parseInt(result[1], 16) / 255,
645
+ parseInt(result[2], 16) / 255,
646
+ parseInt(result[3], 16) / 255,
647
+ ];
648
+ }
649
+ return [0, 0, 0];
650
+ }
651
+ PdfEditorCanvas.displayName = "PdfEditorCanvas";
652
+ 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.231",
3
+ "version": "5.9.233",
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",