@ynput/ayon-frontend-shared 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.cjs5.js +3 -5
- package/dist/_virtual/index.cjs5.js.map +1 -1
- package/dist/_virtual/index.cjs6.js +5 -3
- package/dist/_virtual/index.cjs6.js.map +1 -1
- package/dist/_virtual/index.es5.js +2 -5
- package/dist/_virtual/index.es5.js.map +1 -1
- package/dist/_virtual/index.es6.js +5 -2
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
- package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +21 -2
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +22 -3
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +18 -0
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +19 -1
- package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +7 -4
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +7 -4
- package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/helpers.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.cjs.js +27 -15
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js +27 -15
- package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +40 -12
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +41 -13
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js +33 -19
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js +33 -19
- package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js +14 -12
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js +14 -12
- package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +8 -8
- package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +8 -8
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js +18 -0
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js.map +1 -0
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js +19 -0
- package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js.map +1 -0
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js +12 -3
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js +12 -3
- package/dist/shared/src/containers/Feed/hooks/useCommentMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useTransformActivities.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/hooks/useTransformActivities.es.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.cjs.js +3 -0
- package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
- package/dist/shared/src/context/DetailsPanelContext.es.js +3 -0
- package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
- package/dist/types/containers/Feed/components/CommentInput/CommentInput.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/helpers.d.ts +6 -1
- package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.d.ts +1 -1
- package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.d.ts +5 -1
- package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.d.ts +5 -2
- package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.styled.d.ts +4 -0
- package/dist/types/containers/Feed/components/FilesGrid/FilesGrid.d.ts +1 -1
- package/dist/types/containers/Feed/helpers/mergeAnnotationAttachments.d.ts +2 -0
- package/dist/types/containers/Feed/hooks/useCommentMutations.d.ts +1 -1
- package/dist/types/containers/Feed/index.d.ts +6 -0
- package/dist/types/context/DetailsPanelContext.d.ts +4 -0
- package/package.json +1 -1
package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js
CHANGED
|
@@ -6,37 +6,49 @@ const useAnnotationsUpload = ({ projectName, onSuccess }) => {
|
|
|
6
6
|
const uploadAnnotations = async (annotations) => {
|
|
7
7
|
try {
|
|
8
8
|
const uploadPromises = annotations.map(async (annotation) => {
|
|
9
|
-
const
|
|
10
|
-
if (!
|
|
9
|
+
const composite = await (exportAnnotationComposite == null ? void 0 : exportAnnotationComposite(annotation.id));
|
|
10
|
+
if (!composite) {
|
|
11
11
|
throw new Error(`Exporting composite image for annotation ${annotation.id} failed`);
|
|
12
12
|
}
|
|
13
|
-
const
|
|
13
|
+
const compositeFile = new File([composite], annotation.name, {
|
|
14
14
|
type: "image/png"
|
|
15
15
|
});
|
|
16
|
-
|
|
16
|
+
const transparent = await fetch(annotation.annotationData).then((r) => r.blob());
|
|
17
|
+
const transparentFile = new File([transparent], `annotation-${annotation.name}`, {
|
|
18
|
+
type: "image/png"
|
|
17
19
|
});
|
|
20
|
+
const uploads = await Promise.all([
|
|
21
|
+
uploadFile(compositeFile, projectName, () => {
|
|
22
|
+
}),
|
|
23
|
+
uploadFile(transparentFile, projectName, () => {
|
|
24
|
+
})
|
|
25
|
+
]);
|
|
26
|
+
return { annotation, uploads };
|
|
18
27
|
});
|
|
19
28
|
const res = await Promise.allSettled(uploadPromises);
|
|
20
29
|
const successfulFiles = [];
|
|
30
|
+
const metadata = [];
|
|
21
31
|
res.forEach((result) => {
|
|
22
|
-
var _a;
|
|
23
32
|
if (result.status === "fulfilled") {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
const { uploads, annotation } = result.value;
|
|
34
|
+
uploads.forEach((upload) => {
|
|
35
|
+
successfulFiles.push(onSuccess(upload));
|
|
36
|
+
});
|
|
37
|
+
metadata.push({
|
|
38
|
+
range: annotation.range,
|
|
39
|
+
id: annotation.id,
|
|
40
|
+
composite: uploads[0].data.id,
|
|
41
|
+
transparent: uploads[1].data.id
|
|
42
|
+
});
|
|
43
|
+
removeAnnotation == null ? void 0 : removeAnnotation(annotation.id);
|
|
32
44
|
} else {
|
|
33
45
|
toast.error("Upload failed: " + result.reason.message);
|
|
34
46
|
}
|
|
35
47
|
});
|
|
36
|
-
return successfulFiles;
|
|
48
|
+
return { files: successfulFiles, metadata };
|
|
37
49
|
} catch (error) {
|
|
38
50
|
toast.error("Upload failed: " + error.message);
|
|
39
|
-
return [];
|
|
51
|
+
return { files: [], metadata: [] };
|
|
40
52
|
}
|
|
41
53
|
};
|
|
42
54
|
return uploadAnnotations;
|
package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnnotationsUpload.es.js","sources":["../../../../../../../../src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.ts"],"sourcesContent":["import { uploadFile } from '../helpers'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../../../context/FeedContext'\n\ntype Props = {\n projectName: string\n onSuccess: (data: any) => void\n}\n\nconst useAnnotationsUpload = ({ projectName, onSuccess }: Props) => {\n const { removeAnnotation, exportAnnotationComposite } = useFeedContext()\n\n const uploadAnnotations = async (annotations: any[]) => {\n try {\n const uploadPromises = annotations.map(async (annotation) => {\n const
|
|
1
|
+
{"version":3,"file":"useAnnotationsUpload.es.js","sources":["../../../../../../../../src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.ts"],"sourcesContent":["import { uploadFile } from '../helpers'\nimport { toast } from 'react-toastify'\nimport { useFeedContext } from '../../../context/FeedContext'\nimport { SavedAnnotationMetadata } from '../../../index'\n\ntype Props = {\n projectName: string\n onSuccess: (data: any) => void\n}\n\nconst useAnnotationsUpload = ({ projectName, onSuccess }: Props) => {\n const { removeAnnotation, exportAnnotationComposite } = useFeedContext()\n\n const uploadAnnotations = async (annotations: any[]) => {\n try {\n const uploadPromises = annotations.map(async (annotation) => {\n const composite = await exportAnnotationComposite?.(annotation.id)\n if (!composite) {\n throw new Error(`Exporting composite image for annotation ${annotation.id} failed`)\n }\n\n const compositeFile = new File([composite], annotation.name, {\n type: 'image/png',\n })\n\n const transparent = await fetch(annotation.annotationData).then(r => r.blob())\n const transparentFile = new File([transparent], `annotation-${annotation.name}`, {\n type: 'image/png',\n })\n\n const uploads = await Promise.all([\n uploadFile(compositeFile, projectName, () => {}),\n uploadFile(transparentFile, projectName, () => {}),\n ])\n\n return { annotation, uploads }\n })\n\n const res = await Promise.allSettled(uploadPromises)\n\n const successfulFiles: any[] = []\n const metadata: SavedAnnotationMetadata[] = []\n\n res.forEach((result) => {\n if (result.status === 'fulfilled') {\n const { uploads, annotation } = result.value\n\n uploads.forEach((upload: any) => {\n successfulFiles.push(onSuccess(upload))\n })\n\n metadata.push({\n range: annotation.range,\n id: annotation.id,\n composite: uploads[0].data.id,\n transparent: uploads[1].data.id,\n })\n\n removeAnnotation?.(annotation.id)\n } else {\n toast.error('Upload failed: ' + result.reason.message)\n }\n })\n\n return { files: successfulFiles, metadata }\n } catch (error: any) {\n toast.error('Upload failed: ' + error.message)\n return { files: [], metadata: [] }\n }\n }\n\n return uploadAnnotations\n}\n\nexport default useAnnotationsUpload\n\nconst base64ToBlob = (base64: string) => {\n const byteString = atob(base64.split(',')[1])\n const mimeString = base64.split(',')[0].split(':')[1].split(';')[0]\n const ab = new ArrayBuffer(byteString.length)\n const ia = new Uint8Array(ab)\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n return new Blob([ab], { type: mimeString })\n}\n"],"names":[],"mappings":";;;AAUA,MAAM,uBAAuB,CAAC,EAAE,aAAa,gBAAuB;AAClE,QAAM,EAAE,kBAAkB,0BAA0B,IAAI,eAAe;AAEjE,QAAA,oBAAoB,OAAO,gBAAuB;AAClD,QAAA;AACF,YAAM,iBAAiB,YAAY,IAAI,OAAO,eAAe;AAC3D,cAAM,YAAY,OAAM,uEAA4B,WAAW;AAC/D,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,4CAA4C,WAAW,EAAE,SAAS;AAAA,QAAA;AAGpF,cAAM,gBAAgB,IAAI,KAAK,CAAC,SAAS,GAAG,WAAW,MAAM;AAAA,UAC3D,MAAM;AAAA,QAAA,CACP;AAEK,cAAA,cAAc,MAAM,MAAM,WAAW,cAAc,EAAE,KAAK,CAAA,MAAK,EAAE,MAAM;AACvE,cAAA,kBAAkB,IAAI,KAAK,CAAC,WAAW,GAAG,cAAc,WAAW,IAAI,IAAI;AAAA,UAC/E,MAAM;AAAA,QAAA,CACP;AAEK,cAAA,UAAU,MAAM,QAAQ,IAAI;AAAA,UAChC,WAAW,eAAe,aAAa,MAAM;AAAA,UAAA,CAAE;AAAA,UAC/C,WAAW,iBAAiB,aAAa,MAAM;AAAA,UAAE,CAAA;AAAA,QAAA,CAClD;AAEM,eAAA,EAAE,YAAY,QAAQ;AAAA,MAAA,CAC9B;AAED,YAAM,MAAM,MAAM,QAAQ,WAAW,cAAc;AAEnD,YAAM,kBAAyB,CAAC;AAChC,YAAM,WAAsC,CAAC;AAEzC,UAAA,QAAQ,CAAC,WAAW;AAClB,YAAA,OAAO,WAAW,aAAa;AACjC,gBAAM,EAAE,SAAS,WAAW,IAAI,OAAO;AAE/B,kBAAA,QAAQ,CAAC,WAAgB;AACf,4BAAA,KAAK,UAAU,MAAM,CAAC;AAAA,UAAA,CACvC;AAED,mBAAS,KAAK;AAAA,YACZ,OAAO,WAAW;AAAA,YAClB,IAAI,WAAW;AAAA,YACf,WAAW,QAAQ,CAAC,EAAE,KAAK;AAAA,YAC3B,aAAa,QAAQ,CAAC,EAAE,KAAK;AAAA,UAAA,CAC9B;AAED,+DAAmB,WAAW;AAAA,QAAE,OAC3B;AACL,gBAAM,MAAM,oBAAoB,OAAO,OAAO,OAAO;AAAA,QAAA;AAAA,MACvD,CACD;AAEM,aAAA,EAAE,OAAO,iBAAiB,SAAS;AAAA,aACnC,OAAY;AACb,YAAA,MAAM,oBAAoB,MAAM,OAAO;AAC7C,aAAO,EAAE,OAAO,IAAI,UAAU,CAAA,EAAG;AAAA,IAAA;AAAA,EAErC;AAEO,SAAA;AACT;"}
|
|
@@ -5,6 +5,15 @@ const FileUploadCard_styled = require("./FileUploadCard.styled.cjs.js");
|
|
|
5
5
|
const clsx = require("clsx");
|
|
6
6
|
const React = require("react");
|
|
7
7
|
const FileUploadPreview = require("../FileUploadPreview/FileUploadPreview.cjs.js");
|
|
8
|
+
require("../../../../context/RemoteModulesContext.cjs.js");
|
|
9
|
+
const DetailsPanelContext = require("../../../../context/DetailsPanelContext.cjs.js");
|
|
10
|
+
require("../../../../context/ThumbnailUploaderContext.cjs.js");
|
|
11
|
+
require("../../../../context/SettingsPanelContext.cjs.js");
|
|
12
|
+
require("../../../../context/pip/PiPProvider.cjs.js");
|
|
13
|
+
require("react-dom");
|
|
14
|
+
require("../../../../context/pip/PiPWrapper.cjs.js");
|
|
15
|
+
require("../../../../context/AddonProjectContext.cjs.js");
|
|
16
|
+
require("../../../../context/AddonContext.cjs.js");
|
|
8
17
|
const fileIcons = {
|
|
9
18
|
// special cases
|
|
10
19
|
description: ["doc"],
|
|
@@ -60,31 +69,30 @@ const FileUploadCard = ({
|
|
|
60
69
|
name,
|
|
61
70
|
mime,
|
|
62
71
|
src,
|
|
63
|
-
|
|
72
|
+
isUnsavedAnnotation,
|
|
73
|
+
savedAnnotation,
|
|
64
74
|
size,
|
|
65
75
|
progress,
|
|
66
76
|
onRemove,
|
|
67
77
|
isCompact,
|
|
68
78
|
isDownloadable = false,
|
|
69
79
|
onExpand,
|
|
80
|
+
onJumpTo,
|
|
70
81
|
className,
|
|
71
82
|
...props
|
|
72
83
|
}) => {
|
|
73
84
|
const inProgress = progress && progress < 100;
|
|
74
85
|
const [imageError, setImageError] = React.useState(false);
|
|
86
|
+
const { feedAnnotationsEnabled } = DetailsPanelContext.useDetailsPanelContext();
|
|
75
87
|
const nameParts = name.split(".");
|
|
76
88
|
const extension = nameParts.pop() || "";
|
|
77
89
|
const fileName = nameParts.join(".");
|
|
78
90
|
const isPreviewable = FileUploadPreview.isFilePreviewable(mime || "." + extension);
|
|
79
|
-
const isImage = (mime == null ? void 0 : mime.includes("image/")) ||
|
|
91
|
+
const isImage = (mime == null ? void 0 : mime.includes("image/")) || isUnsavedAnnotation;
|
|
80
92
|
const downloadComponent = /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(jsxRuntime.jsxRuntimeExports.Fragment, { children: [
|
|
81
93
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("span", { className: "size", children: ayonReactComponents.getFileSizeString(size) }),
|
|
82
94
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(ayonReactComponents.Icon, { icon: "download", className: "download-icon" })
|
|
83
95
|
] });
|
|
84
|
-
const handleImageClick = () => {
|
|
85
|
-
if (!isPreviewable && !isAnnotation || !onExpand || imageError) return;
|
|
86
|
-
onExpand();
|
|
87
|
-
};
|
|
88
96
|
return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
|
|
89
97
|
FileUploadCard_styled.File,
|
|
90
98
|
{
|
|
@@ -92,21 +100,23 @@ const FileUploadCard = ({
|
|
|
92
100
|
compact: isCompact,
|
|
93
101
|
isDownloadable,
|
|
94
102
|
isPreviewable,
|
|
95
|
-
|
|
103
|
+
isUnsavedAnnotation
|
|
96
104
|
}),
|
|
97
105
|
...props,
|
|
98
106
|
children: [
|
|
99
107
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
|
|
100
108
|
FileUploadCard_styled.ContentWrapper,
|
|
101
109
|
{
|
|
102
|
-
className: clsx("content-wrapper", { isPreviewable,
|
|
103
|
-
onClick: handleImageClick,
|
|
110
|
+
className: clsx("content-wrapper", { isPreviewable, isUnsavedAnnotation }),
|
|
104
111
|
children: [
|
|
105
112
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(ayonReactComponents.Icon, { icon: getIconForType(mime || "." + extension), className: "type-icon" }),
|
|
106
113
|
isImage && src && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
|
|
107
114
|
FileUploadCard_styled.ImageWrapper,
|
|
108
115
|
{
|
|
109
|
-
className: clsx({
|
|
116
|
+
className: clsx({
|
|
117
|
+
"image-wrapper": true,
|
|
118
|
+
isDownloadable: isDownloadable || isPreviewable || isUnsavedAnnotation
|
|
119
|
+
}),
|
|
110
120
|
children: /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
|
|
111
121
|
"img",
|
|
112
122
|
{
|
|
@@ -119,8 +129,26 @@ const FileUploadCard = ({
|
|
|
119
129
|
)
|
|
120
130
|
}
|
|
121
131
|
),
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(FileUploadCard_styled.Buttons, { className: "expand-buttons", children: [
|
|
133
|
+
isPreviewable && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
|
|
134
|
+
FileUploadCard_styled.ExpandButton,
|
|
135
|
+
{
|
|
136
|
+
"data-tooltip": "Open preview",
|
|
137
|
+
icon: "open_in_full",
|
|
138
|
+
variant: "nav",
|
|
139
|
+
onClick: onExpand
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
(isUnsavedAnnotation || feedAnnotationsEnabled && savedAnnotation) && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
|
|
143
|
+
FileUploadCard_styled.ExpandButton,
|
|
144
|
+
{
|
|
145
|
+
"data-tooltip": "Jump to annotation",
|
|
146
|
+
icon: "play_circle",
|
|
147
|
+
variant: "nav",
|
|
148
|
+
onClick: onJumpTo
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
] })
|
|
124
152
|
]
|
|
125
153
|
}
|
|
126
154
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadCard.cjs.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.tsx"],"sourcesContent":["import { Button, getFileSizeString, Icon } from '@ynput/ayon-react-components'\nimport * as Styled from './FileUploadCard.styled'\nimport clsx from 'clsx'\nimport { useState } from 'react'\nimport { isFilePreviewable } from '../FileUploadPreview'\n\nexport interface FileUploadCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n mime?: string\n src?: string\n
|
|
1
|
+
{"version":3,"file":"FileUploadCard.cjs.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.tsx"],"sourcesContent":["import { Button, getFileSizeString, Icon } from '@ynput/ayon-react-components'\nimport * as Styled from './FileUploadCard.styled'\nimport clsx from 'clsx'\nimport { useState } from 'react'\nimport { isFilePreviewable } from '../FileUploadPreview'\nimport { SavedAnnotationMetadata } from '@shared/containers'\nimport { useDetailsPanelContext } from '@shared/context'\n\nexport interface FileUploadCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n mime?: string\n src?: string\n isUnsavedAnnotation?: boolean\n savedAnnotation: SavedAnnotationMetadata\n size: number\n progress: number\n onRemove?: () => void\n isCompact?: boolean\n isDownloadable?: boolean\n onExpand?: () => void\n onJumpTo?: () => void\n}\n\nconst fileIcons: { [key: string]: string[] } = {\n // special cases\n description: ['doc'],\n folder_zip: ['zip'],\n code_blocks: [\n 'json',\n 'javascript',\n 'python',\n 'html',\n 'css',\n '.py',\n '.js',\n '.html',\n '.css',\n '.json',\n '.ts',\n ],\n brush: ['.psd', '.ai', '.xd', '.sketch'],\n '3d_rotation': [\n '.mb',\n '.ma',\n '.c4d',\n '.blend',\n '.max',\n '.3ds',\n '.lwo',\n '.lws',\n '.lxo',\n '.hip',\n '.hda',\n ],\n theaters: ['.aep', '.tpl', '.clip', '.nk', '.fusion', '.prproj', '.spsm', '.drp'],\n picture_as_pdf: ['pdf', '.pdf'],\n // default\n image: ['image', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp'],\n videocam: ['video', '.mp4', '.mov', '.avi', '.mkv', '.webm', '.mxf'],\n business_center: ['application'],\n audio_file: ['audio'],\n text_snippet: ['text'],\n filter_none: ['sequence'],\n font_download: ['font'],\n deployed_code: ['model', '.obj', '.abc', '.stl', '.fbx', '.gltf', '.glb', '.usd'],\n}\n\nconst getIconForType = (type: string): string => {\n for (const [icon, keywords] of Object.entries(fileIcons)) {\n if (keywords.some((keyword) => type.includes(keyword))) {\n return icon\n }\n }\n return 'draft'\n}\n\nconst FileUploadCard = ({\n name,\n mime,\n src,\n isUnsavedAnnotation,\n savedAnnotation,\n size,\n progress,\n onRemove,\n isCompact,\n isDownloadable = false,\n onExpand,\n onJumpTo,\n className,\n ...props\n}: FileUploadCardProps) => {\n const inProgress = progress && progress < 100\n\n const [imageError, setImageError] = useState(false)\n const { feedAnnotationsEnabled } = useDetailsPanelContext()\n\n // split name and file extension\n const nameParts = name.split('.')\n const extension = nameParts.pop() || ''\n const fileName = nameParts.join('.')\n\n const isPreviewable = isFilePreviewable(mime || '.' + extension)\n const isImage = mime?.includes('image/') || isUnsavedAnnotation\n\n const downloadComponent = (\n <>\n <span className=\"size\">{getFileSizeString(size)}</span>\n <Icon icon=\"download\" className=\"download-icon\" />\n </>\n )\n\n return (\n <Styled.File\n className={clsx(className, {\n compact: isCompact,\n isDownloadable,\n isPreviewable,\n isUnsavedAnnotation,\n })}\n {...props}\n >\n <Styled.ContentWrapper\n className={clsx('content-wrapper', { isPreviewable, isUnsavedAnnotation })}\n >\n <Icon icon={getIconForType(mime || '.' + extension)} className=\"type-icon\" />\n {isImage && src && (\n <Styled.ImageWrapper\n className={clsx({\n 'image-wrapper': true,\n isDownloadable: isDownloadable || isPreviewable || isUnsavedAnnotation,\n })}\n >\n <img\n src={src}\n onError={() => setImageError(true)}\n style={{\n display: imageError ? 'none' : 'block',\n }}\n />\n </Styled.ImageWrapper>\n )}\n <Styled.Buttons className=\"expand-buttons\">\n {isPreviewable && (\n <Styled.ExpandButton\n data-tooltip=\"Open preview\"\n icon=\"open_in_full\"\n variant=\"nav\"\n onClick={onExpand}\n />\n )}\n {(isUnsavedAnnotation || (feedAnnotationsEnabled && savedAnnotation)) && (\n <Styled.ExpandButton\n data-tooltip=\"Jump to annotation\"\n icon=\"play_circle\"\n variant=\"nav\"\n onClick={onJumpTo}\n />\n )}\n </Styled.Buttons>\n </Styled.ContentWrapper>\n <Styled.Footer className={clsx({ inProgress, isPreviewable, isDownloadable })}>\n <span className=\"progress\" style={{ right: `${100 - progress}%` }} />\n <div className=\"name-wrapper\">\n <span className=\"name\">{fileName}</span>\n </div>\n <span className=\"extension\">.{extension}</span>\n {isDownloadable &&\n (!onRemove ? (\n <a href={src} download className=\"download\">\n {downloadComponent}\n </a>\n ) : (\n <div className=\"download\">{downloadComponent}</div>\n ))}\n </Styled.Footer>\n {onRemove && <Button className=\"remove\" onClick={onRemove} icon=\"close\" />}\n </Styled.File>\n )\n}\n\nexport default FileUploadCard\n"],"names":["useState","useDetailsPanelContext","isFilePreviewable","jsxs","Fragment","jsx","getFileSizeString","Icon","Styled.File","Styled.ContentWrapper","Styled.ImageWrapper","Styled.Buttons","Styled.ExpandButton","Styled.Footer","Button"],"mappings":"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"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { j as jsxRuntimeExports } from "../../../../../../_virtual/jsx-runtime.es.js";
|
|
2
2
|
import { getFileSizeString, Icon, Button } from "@ynput/ayon-react-components";
|
|
3
|
-
import { File, ContentWrapper, ImageWrapper, Footer } from "./FileUploadCard.styled.es.js";
|
|
3
|
+
import { File, ContentWrapper, ImageWrapper, Buttons, ExpandButton, Footer } from "./FileUploadCard.styled.es.js";
|
|
4
4
|
import clsx from "clsx";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { isFilePreviewable } from "../FileUploadPreview/FileUploadPreview.es.js";
|
|
7
|
+
import "../../../../context/RemoteModulesContext.es.js";
|
|
8
|
+
import { useDetailsPanelContext } from "../../../../context/DetailsPanelContext.es.js";
|
|
9
|
+
import "../../../../context/ThumbnailUploaderContext.es.js";
|
|
10
|
+
import "../../../../context/SettingsPanelContext.es.js";
|
|
11
|
+
import "../../../../context/pip/PiPProvider.es.js";
|
|
12
|
+
import "react-dom";
|
|
13
|
+
import "../../../../context/pip/PiPWrapper.es.js";
|
|
14
|
+
import "../../../../context/AddonProjectContext.es.js";
|
|
15
|
+
import "../../../../context/AddonContext.es.js";
|
|
7
16
|
const fileIcons = {
|
|
8
17
|
// special cases
|
|
9
18
|
description: ["doc"],
|
|
@@ -59,31 +68,30 @@ const FileUploadCard = ({
|
|
|
59
68
|
name,
|
|
60
69
|
mime,
|
|
61
70
|
src,
|
|
62
|
-
|
|
71
|
+
isUnsavedAnnotation,
|
|
72
|
+
savedAnnotation,
|
|
63
73
|
size,
|
|
64
74
|
progress,
|
|
65
75
|
onRemove,
|
|
66
76
|
isCompact,
|
|
67
77
|
isDownloadable = false,
|
|
68
78
|
onExpand,
|
|
79
|
+
onJumpTo,
|
|
69
80
|
className,
|
|
70
81
|
...props
|
|
71
82
|
}) => {
|
|
72
83
|
const inProgress = progress && progress < 100;
|
|
73
84
|
const [imageError, setImageError] = useState(false);
|
|
85
|
+
const { feedAnnotationsEnabled } = useDetailsPanelContext();
|
|
74
86
|
const nameParts = name.split(".");
|
|
75
87
|
const extension = nameParts.pop() || "";
|
|
76
88
|
const fileName = nameParts.join(".");
|
|
77
89
|
const isPreviewable = isFilePreviewable(mime || "." + extension);
|
|
78
|
-
const isImage = (mime == null ? void 0 : mime.includes("image/")) ||
|
|
90
|
+
const isImage = (mime == null ? void 0 : mime.includes("image/")) || isUnsavedAnnotation;
|
|
79
91
|
const downloadComponent = /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
80
92
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "size", children: getFileSizeString(size) }),
|
|
81
93
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { icon: "download", className: "download-icon" })
|
|
82
94
|
] });
|
|
83
|
-
const handleImageClick = () => {
|
|
84
|
-
if (!isPreviewable && !isAnnotation || !onExpand || imageError) return;
|
|
85
|
-
onExpand();
|
|
86
|
-
};
|
|
87
95
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
88
96
|
File,
|
|
89
97
|
{
|
|
@@ -91,21 +99,23 @@ const FileUploadCard = ({
|
|
|
91
99
|
compact: isCompact,
|
|
92
100
|
isDownloadable,
|
|
93
101
|
isPreviewable,
|
|
94
|
-
|
|
102
|
+
isUnsavedAnnotation
|
|
95
103
|
}),
|
|
96
104
|
...props,
|
|
97
105
|
children: [
|
|
98
106
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
99
107
|
ContentWrapper,
|
|
100
108
|
{
|
|
101
|
-
className: clsx("content-wrapper", { isPreviewable,
|
|
102
|
-
onClick: handleImageClick,
|
|
109
|
+
className: clsx("content-wrapper", { isPreviewable, isUnsavedAnnotation }),
|
|
103
110
|
children: [
|
|
104
111
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { icon: getIconForType(mime || "." + extension), className: "type-icon" }),
|
|
105
112
|
isImage && src && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
106
113
|
ImageWrapper,
|
|
107
114
|
{
|
|
108
|
-
className: clsx({
|
|
115
|
+
className: clsx({
|
|
116
|
+
"image-wrapper": true,
|
|
117
|
+
isDownloadable: isDownloadable || isPreviewable || isUnsavedAnnotation
|
|
118
|
+
}),
|
|
109
119
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
110
120
|
"img",
|
|
111
121
|
{
|
|
@@ -118,8 +128,26 @@ const FileUploadCard = ({
|
|
|
118
128
|
)
|
|
119
129
|
}
|
|
120
130
|
),
|
|
121
|
-
|
|
122
|
-
|
|
131
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Buttons, { className: "expand-buttons", children: [
|
|
132
|
+
isPreviewable && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
133
|
+
ExpandButton,
|
|
134
|
+
{
|
|
135
|
+
"data-tooltip": "Open preview",
|
|
136
|
+
icon: "open_in_full",
|
|
137
|
+
variant: "nav",
|
|
138
|
+
onClick: onExpand
|
|
139
|
+
}
|
|
140
|
+
),
|
|
141
|
+
(isUnsavedAnnotation || feedAnnotationsEnabled && savedAnnotation) && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
142
|
+
ExpandButton,
|
|
143
|
+
{
|
|
144
|
+
"data-tooltip": "Jump to annotation",
|
|
145
|
+
icon: "play_circle",
|
|
146
|
+
variant: "nav",
|
|
147
|
+
onClick: onJumpTo
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
] })
|
|
123
151
|
]
|
|
124
152
|
}
|
|
125
153
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadCard.es.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.tsx"],"sourcesContent":["import { Button, getFileSizeString, Icon } from '@ynput/ayon-react-components'\nimport * as Styled from './FileUploadCard.styled'\nimport clsx from 'clsx'\nimport { useState } from 'react'\nimport { isFilePreviewable } from '../FileUploadPreview'\n\nexport interface FileUploadCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n mime?: string\n src?: string\n
|
|
1
|
+
{"version":3,"file":"FileUploadCard.es.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.tsx"],"sourcesContent":["import { Button, getFileSizeString, Icon } from '@ynput/ayon-react-components'\nimport * as Styled from './FileUploadCard.styled'\nimport clsx from 'clsx'\nimport { useState } from 'react'\nimport { isFilePreviewable } from '../FileUploadPreview'\nimport { SavedAnnotationMetadata } from '@shared/containers'\nimport { useDetailsPanelContext } from '@shared/context'\n\nexport interface FileUploadCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n mime?: string\n src?: string\n isUnsavedAnnotation?: boolean\n savedAnnotation: SavedAnnotationMetadata\n size: number\n progress: number\n onRemove?: () => void\n isCompact?: boolean\n isDownloadable?: boolean\n onExpand?: () => void\n onJumpTo?: () => void\n}\n\nconst fileIcons: { [key: string]: string[] } = {\n // special cases\n description: ['doc'],\n folder_zip: ['zip'],\n code_blocks: [\n 'json',\n 'javascript',\n 'python',\n 'html',\n 'css',\n '.py',\n '.js',\n '.html',\n '.css',\n '.json',\n '.ts',\n ],\n brush: ['.psd', '.ai', '.xd', '.sketch'],\n '3d_rotation': [\n '.mb',\n '.ma',\n '.c4d',\n '.blend',\n '.max',\n '.3ds',\n '.lwo',\n '.lws',\n '.lxo',\n '.hip',\n '.hda',\n ],\n theaters: ['.aep', '.tpl', '.clip', '.nk', '.fusion', '.prproj', '.spsm', '.drp'],\n picture_as_pdf: ['pdf', '.pdf'],\n // default\n image: ['image', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp'],\n videocam: ['video', '.mp4', '.mov', '.avi', '.mkv', '.webm', '.mxf'],\n business_center: ['application'],\n audio_file: ['audio'],\n text_snippet: ['text'],\n filter_none: ['sequence'],\n font_download: ['font'],\n deployed_code: ['model', '.obj', '.abc', '.stl', '.fbx', '.gltf', '.glb', '.usd'],\n}\n\nconst getIconForType = (type: string): string => {\n for (const [icon, keywords] of Object.entries(fileIcons)) {\n if (keywords.some((keyword) => type.includes(keyword))) {\n return icon\n }\n }\n return 'draft'\n}\n\nconst FileUploadCard = ({\n name,\n mime,\n src,\n isUnsavedAnnotation,\n savedAnnotation,\n size,\n progress,\n onRemove,\n isCompact,\n isDownloadable = false,\n onExpand,\n onJumpTo,\n className,\n ...props\n}: FileUploadCardProps) => {\n const inProgress = progress && progress < 100\n\n const [imageError, setImageError] = useState(false)\n const { feedAnnotationsEnabled } = useDetailsPanelContext()\n\n // split name and file extension\n const nameParts = name.split('.')\n const extension = nameParts.pop() || ''\n const fileName = nameParts.join('.')\n\n const isPreviewable = isFilePreviewable(mime || '.' + extension)\n const isImage = mime?.includes('image/') || isUnsavedAnnotation\n\n const downloadComponent = (\n <>\n <span className=\"size\">{getFileSizeString(size)}</span>\n <Icon icon=\"download\" className=\"download-icon\" />\n </>\n )\n\n return (\n <Styled.File\n className={clsx(className, {\n compact: isCompact,\n isDownloadable,\n isPreviewable,\n isUnsavedAnnotation,\n })}\n {...props}\n >\n <Styled.ContentWrapper\n className={clsx('content-wrapper', { isPreviewable, isUnsavedAnnotation })}\n >\n <Icon icon={getIconForType(mime || '.' + extension)} className=\"type-icon\" />\n {isImage && src && (\n <Styled.ImageWrapper\n className={clsx({\n 'image-wrapper': true,\n isDownloadable: isDownloadable || isPreviewable || isUnsavedAnnotation,\n })}\n >\n <img\n src={src}\n onError={() => setImageError(true)}\n style={{\n display: imageError ? 'none' : 'block',\n }}\n />\n </Styled.ImageWrapper>\n )}\n <Styled.Buttons className=\"expand-buttons\">\n {isPreviewable && (\n <Styled.ExpandButton\n data-tooltip=\"Open preview\"\n icon=\"open_in_full\"\n variant=\"nav\"\n onClick={onExpand}\n />\n )}\n {(isUnsavedAnnotation || (feedAnnotationsEnabled && savedAnnotation)) && (\n <Styled.ExpandButton\n data-tooltip=\"Jump to annotation\"\n icon=\"play_circle\"\n variant=\"nav\"\n onClick={onJumpTo}\n />\n )}\n </Styled.Buttons>\n </Styled.ContentWrapper>\n <Styled.Footer className={clsx({ inProgress, isPreviewable, isDownloadable })}>\n <span className=\"progress\" style={{ right: `${100 - progress}%` }} />\n <div className=\"name-wrapper\">\n <span className=\"name\">{fileName}</span>\n </div>\n <span className=\"extension\">.{extension}</span>\n {isDownloadable &&\n (!onRemove ? (\n <a href={src} download className=\"download\">\n {downloadComponent}\n </a>\n ) : (\n <div className=\"download\">{downloadComponent}</div>\n ))}\n </Styled.Footer>\n {onRemove && <Button className=\"remove\" onClick={onRemove} icon=\"close\" />}\n </Styled.File>\n )\n}\n\nexport default FileUploadCard\n"],"names":["jsxs","Fragment","jsx","Styled.File","Styled.ContentWrapper","Styled.ImageWrapper","Styled.Buttons","Styled.ExpandButton","Styled.Footer"],"mappings":"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"}
|
package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const ayonReactComponents = require("@ynput/ayon-react-components");
|
|
3
4
|
const styled = require("styled-components");
|
|
4
5
|
const File = styled.div`
|
|
5
6
|
position: relative;
|
|
@@ -47,17 +48,6 @@ const File = styled.div`
|
|
|
47
48
|
.download-icon {
|
|
48
49
|
color: var(--md-sys-color-outline);
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
.expand-icon {
|
|
52
|
-
pointer-events: none;
|
|
53
|
-
position: absolute;
|
|
54
|
-
/* center */
|
|
55
|
-
left: 50%;
|
|
56
|
-
bottom: calc(50% - 20px);
|
|
57
|
-
transform: translate(-50%, -50%);
|
|
58
|
-
|
|
59
|
-
display: none;
|
|
60
|
-
}
|
|
61
51
|
`;
|
|
62
52
|
const Footer = styled.footer`
|
|
63
53
|
background-color: var(--md-sys-color-surface-container-low);
|
|
@@ -171,20 +161,24 @@ const ContentWrapper = styled.div`
|
|
|
171
161
|
}
|
|
172
162
|
|
|
173
163
|
/* previewable styles (it can be expanded) */
|
|
174
|
-
/* on hover it shows the expand
|
|
164
|
+
/* on hover it shows the expand buttons */
|
|
175
165
|
&.isPreviewable,
|
|
176
|
-
&.
|
|
166
|
+
&.isUnsavedAnnotation {
|
|
177
167
|
cursor: pointer;
|
|
178
168
|
|
|
179
169
|
&:hover {
|
|
180
|
-
.expand-
|
|
181
|
-
display:
|
|
170
|
+
.expand-buttons {
|
|
171
|
+
display: flex;
|
|
182
172
|
}
|
|
183
173
|
.type-icon {
|
|
184
174
|
display: none;
|
|
185
175
|
}
|
|
186
176
|
}
|
|
187
177
|
}
|
|
178
|
+
|
|
179
|
+
&:hover .image-wrapper::after {
|
|
180
|
+
opacity: 0.8;
|
|
181
|
+
}
|
|
188
182
|
`;
|
|
189
183
|
const ImageWrapper = styled.div`
|
|
190
184
|
position: absolute;
|
|
@@ -213,10 +207,6 @@ const ImageWrapper = styled.div`
|
|
|
213
207
|
|
|
214
208
|
&.isDownloadable {
|
|
215
209
|
&:hover {
|
|
216
|
-
&::after {
|
|
217
|
-
opacity: 0.8;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
210
|
.icon {
|
|
221
211
|
display: block;
|
|
222
212
|
z-index: 10;
|
|
@@ -224,7 +214,31 @@ const ImageWrapper = styled.div`
|
|
|
224
214
|
}
|
|
225
215
|
}
|
|
226
216
|
`;
|
|
217
|
+
const Buttons = styled.div`
|
|
218
|
+
display: none;
|
|
219
|
+
position: absolute;
|
|
220
|
+
left: 0;
|
|
221
|
+
top: 0;
|
|
222
|
+
transform: none;
|
|
223
|
+
height: calc(100% - 20px);
|
|
224
|
+
width: 100%;
|
|
225
|
+
gap: 0;
|
|
226
|
+
`;
|
|
227
|
+
const ExpandButton = styled(ayonReactComponents.Button)`
|
|
228
|
+
height: 100%;
|
|
229
|
+
width: 100%;
|
|
230
|
+
border: none;
|
|
231
|
+
opacity: 0.5;
|
|
232
|
+
transition: opacity 250ms;
|
|
233
|
+
|
|
234
|
+
&:hover {
|
|
235
|
+
background: none;
|
|
236
|
+
opacity: 1;
|
|
237
|
+
}
|
|
238
|
+
`;
|
|
239
|
+
exports.Buttons = Buttons;
|
|
227
240
|
exports.ContentWrapper = ContentWrapper;
|
|
241
|
+
exports.ExpandButton = ExpandButton;
|
|
228
242
|
exports.File = File;
|
|
229
243
|
exports.Footer = Footer;
|
|
230
244
|
exports.ImageWrapper = ImageWrapper;
|
package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadCard.styled.cjs.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.ts"],"sourcesContent":["import styled from 'styled-components'\n\nexport const File = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n border-radius: var(--border-radius-m);\n overflow: hidden;\n background-color: var(--md-sys-color-surface-container-low);\n z-index: 0;\n user-select: none;\n\n height: 105px;\n\n &.compact {\n height: 75px;\n }\n\n .icon {\n font-size: 30px;\n }\n\n .remove {\n position: absolute;\n top: 2px;\n right: 2px;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n }\n\n .icon {\n font-size: 20px;\n }\n }\n\n /* move icon up slightly to center it */\n .type-icon {\n margin-top: -20px;\n }\n\n /* set download default color outline */\n .download,\n .download-icon {\n color: var(--md-sys-color-outline);\n }\n
|
|
1
|
+
{"version":3,"file":"FileUploadCard.styled.cjs.js","sources":["../../../../../../../src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.ts"],"sourcesContent":["import { Button } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const File = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n border-radius: var(--border-radius-m);\n overflow: hidden;\n background-color: var(--md-sys-color-surface-container-low);\n z-index: 0;\n user-select: none;\n\n height: 105px;\n\n &.compact {\n height: 75px;\n }\n\n .icon {\n font-size: 30px;\n }\n\n .remove {\n position: absolute;\n top: 2px;\n right: 2px;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n }\n\n .icon {\n font-size: 20px;\n }\n }\n\n /* move icon up slightly to center it */\n .type-icon {\n margin-top: -20px;\n }\n\n /* set download default color outline */\n .download,\n .download-icon {\n color: var(--md-sys-color-outline);\n }\n`\n\nexport const Footer = styled.footer`\n background-color: var(--md-sys-color-surface-container-low);\n display: flex;\n align-items: center;\n position: relative;\n padding: 0 var(--padding-s);\n overflow: hidden;\n color: var(--md-sys-color-on-surface);\n\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n\n transition: padding 0.2s ease;\n\n span {\n font-size: 12px;\n }\n\n .name-wrapper {\n overflow: hidden;\n }\n\n .download {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n display: none;\n color: var(--md-sys-color-on-surface);\n }\n\n .name {\n position: relative;\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n z-index: 20;\n display: inherit;\n }\n\n .extension {\n z-index: 20;\n min-width: fit-content;\n overflow: hidden;\n }\n\n .progress {\n position: absolute;\n inset: 0;\n background-color: var(--md-sys-color-primary-container);\n z-index: 10;\n\n transition: right 0.3s;\n\n display: none;\n }\n\n &.inProgress {\n .progress {\n display: block;\n }\n }\n\n .download-icon {\n font-size: 20px;\n }\n\n &.isDownloadable {\n &:hover {\n cursor: pointer;\n\n padding: var(--padding-m) var(--padding-s);\n\n background-color: var(--md-sys-color-surface-container-low-hover);\n\n .download,\n .download-icon {\n color: var(--md-sys-color-on-surface);\n }\n\n /* reveal size and download */\n .download {\n display: flex;\n }\n .name-wrapper,\n .extension {\n display: none;\n }\n }\n }\n`\n\nexport const ContentWrapper = styled.div`\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: var(--md-sys-color-surface-container-lowest);\n\n flex: 1;\n\n .icon {\n user-select: none;\n }\n\n .download-icon {\n display: none;\n }\n\n /* previewable styles (it can be expanded) */\n /* on hover it shows the expand buttons */\n &.isPreviewable,\n &.isUnsavedAnnotation {\n cursor: pointer;\n\n &:hover {\n .expand-buttons {\n display: flex;\n }\n .type-icon {\n display: none;\n }\n }\n }\n\n &:hover .image-wrapper::after {\n opacity: 0.8;\n }\n`\n\nexport const ImageWrapper = styled.div`\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n background-color: var(--md-sys-color-surface-container-lowest);\n img {\n position: absolute;\n max-height: 100%;\n max-width: 100%;\n object-fit: contain;\n height: calc(100% - 20px);\n\n transition: scale 0.2s ease;\n }\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--md-sys-color-surface-container-lowest);\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n &.isDownloadable {\n &:hover {\n .icon {\n display: block;\n z-index: 10;\n }\n }\n }\n`\n\nexport const Buttons = styled.div`\n display: none;\n position: absolute;\n left: 0;\n top: 0;\n transform: none;\n height: calc(100% - 20px);\n width: 100%;\n gap: 0;\n`\n\nexport const ExpandButton = styled(Button)`\n height: 100%;\n width: 100%;\n border: none;\n opacity: 0.5;\n transition: opacity 250ms;\n\n &:hover {\n background: none;\n opacity: 1;\n }\n`\n"],"names":["Button"],"mappings":";;;;AAGO,MAAM,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDpB,MAAM,SAAS,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+FtB,MAAM,iBAAiB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsC9B,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmC5B,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWjB,MAAA,eAAe,OAAOA,0BAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;"}
|
package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Button } from "@ynput/ayon-react-components";
|
|
1
2
|
import styled from "styled-components";
|
|
2
3
|
const File = styled.div`
|
|
3
4
|
position: relative;
|
|
@@ -45,17 +46,6 @@ const File = styled.div`
|
|
|
45
46
|
.download-icon {
|
|
46
47
|
color: var(--md-sys-color-outline);
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
.expand-icon {
|
|
50
|
-
pointer-events: none;
|
|
51
|
-
position: absolute;
|
|
52
|
-
/* center */
|
|
53
|
-
left: 50%;
|
|
54
|
-
bottom: calc(50% - 20px);
|
|
55
|
-
transform: translate(-50%, -50%);
|
|
56
|
-
|
|
57
|
-
display: none;
|
|
58
|
-
}
|
|
59
49
|
`;
|
|
60
50
|
const Footer = styled.footer`
|
|
61
51
|
background-color: var(--md-sys-color-surface-container-low);
|
|
@@ -169,20 +159,24 @@ const ContentWrapper = styled.div`
|
|
|
169
159
|
}
|
|
170
160
|
|
|
171
161
|
/* previewable styles (it can be expanded) */
|
|
172
|
-
/* on hover it shows the expand
|
|
162
|
+
/* on hover it shows the expand buttons */
|
|
173
163
|
&.isPreviewable,
|
|
174
|
-
&.
|
|
164
|
+
&.isUnsavedAnnotation {
|
|
175
165
|
cursor: pointer;
|
|
176
166
|
|
|
177
167
|
&:hover {
|
|
178
|
-
.expand-
|
|
179
|
-
display:
|
|
168
|
+
.expand-buttons {
|
|
169
|
+
display: flex;
|
|
180
170
|
}
|
|
181
171
|
.type-icon {
|
|
182
172
|
display: none;
|
|
183
173
|
}
|
|
184
174
|
}
|
|
185
175
|
}
|
|
176
|
+
|
|
177
|
+
&:hover .image-wrapper::after {
|
|
178
|
+
opacity: 0.8;
|
|
179
|
+
}
|
|
186
180
|
`;
|
|
187
181
|
const ImageWrapper = styled.div`
|
|
188
182
|
position: absolute;
|
|
@@ -211,10 +205,6 @@ const ImageWrapper = styled.div`
|
|
|
211
205
|
|
|
212
206
|
&.isDownloadable {
|
|
213
207
|
&:hover {
|
|
214
|
-
&::after {
|
|
215
|
-
opacity: 0.8;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
208
|
.icon {
|
|
219
209
|
display: block;
|
|
220
210
|
z-index: 10;
|
|
@@ -222,8 +212,32 @@ const ImageWrapper = styled.div`
|
|
|
222
212
|
}
|
|
223
213
|
}
|
|
224
214
|
`;
|
|
215
|
+
const Buttons = styled.div`
|
|
216
|
+
display: none;
|
|
217
|
+
position: absolute;
|
|
218
|
+
left: 0;
|
|
219
|
+
top: 0;
|
|
220
|
+
transform: none;
|
|
221
|
+
height: calc(100% - 20px);
|
|
222
|
+
width: 100%;
|
|
223
|
+
gap: 0;
|
|
224
|
+
`;
|
|
225
|
+
const ExpandButton = styled(Button)`
|
|
226
|
+
height: 100%;
|
|
227
|
+
width: 100%;
|
|
228
|
+
border: none;
|
|
229
|
+
opacity: 0.5;
|
|
230
|
+
transition: opacity 250ms;
|
|
231
|
+
|
|
232
|
+
&:hover {
|
|
233
|
+
background: none;
|
|
234
|
+
opacity: 1;
|
|
235
|
+
}
|
|
236
|
+
`;
|
|
225
237
|
export {
|
|
238
|
+
Buttons,
|
|
226
239
|
ContentWrapper,
|
|
240
|
+
ExpandButton,
|
|
227
241
|
File,
|
|
228
242
|
Footer,
|
|
229
243
|
ImageWrapper
|