@ynput/ayon-frontend-shared 0.3.28 → 0.3.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/_virtual/index.cjs14.js +1 -1
  2. package/dist/_virtual/index.cjs15.js +1 -1
  3. package/dist/_virtual/index.cjs19.js +1 -1
  4. package/dist/_virtual/index.cjs4.js +1 -1
  5. package/dist/_virtual/index.cjs5.js +1 -1
  6. package/dist/_virtual/index.cjs6.js +1 -1
  7. package/dist/_virtual/index.cjs8.js +1 -1
  8. package/dist/_virtual/index.cjs9.js +1 -1
  9. package/dist/_virtual/index.es10.js +2 -2
  10. package/dist/_virtual/index.es11.js +2 -2
  11. package/dist/_virtual/index.es13.js +2 -2
  12. package/dist/_virtual/index.es14.js +2 -5
  13. package/dist/_virtual/index.es14.js.map +1 -1
  14. package/dist/_virtual/index.es15.js +2 -2
  15. package/dist/_virtual/index.es16.js +2 -2
  16. package/dist/_virtual/index.es17.js +2 -2
  17. package/dist/_virtual/index.es18.js +2 -2
  18. package/dist/_virtual/index.es19.js +2 -2
  19. package/dist/_virtual/index.es4.js +5 -2
  20. package/dist/_virtual/index.es4.js.map +1 -1
  21. package/dist/_virtual/index.es5.js +2 -5
  22. package/dist/_virtual/index.es5.js.map +1 -1
  23. package/dist/_virtual/index.es6.js +2 -2
  24. package/dist/_virtual/index.es8.js +2 -2
  25. package/dist/_virtual/index.es9.js +5 -2
  26. package/dist/_virtual/index.es9.js.map +1 -1
  27. package/dist/components.cjs.js +1 -1
  28. package/dist/components.es.js +34 -33
  29. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  30. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  31. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  32. package/dist/node_modules/remove-accents/index.es.js +1 -1
  33. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  34. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  35. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  36. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  37. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  38. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  39. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
  40. package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
  41. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.cjs.js +1 -1
  42. package/dist/shared/node_modules/@module-federation/runtime-core/dist/plugins/snapshot/index.es.js +1 -1
  43. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.cjs.js +1 -1
  44. package/dist/shared/node_modules/@module-federation/runtime-core/dist/remote/index.es.js +1 -1
  45. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.cjs.js +1 -1
  46. package/dist/shared/node_modules/@module-federation/runtime-core/dist/shared/index.es.js +1 -1
  47. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
  48. package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
  49. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.cjs.js +1 -1
  50. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/hooks/index.es.js +1 -1
  51. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
  52. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
  53. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
  54. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
  55. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
  56. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
  57. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
  58. package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
  59. package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
  60. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
  61. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
  62. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  63. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  64. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  65. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
  66. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  67. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  68. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
  69. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  70. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  71. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
  72. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  73. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  74. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  75. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +155 -133
  76. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  77. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js +1 -1
  78. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js.map +1 -1
  79. package/dist/shared/src/components/Powerpack/PricingLink.es.js +5 -5
  80. package/dist/shared/src/components/Powerpack/PricingLink.es.js.map +1 -1
  81. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js +1 -1
  82. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.cjs.js.map +1 -1
  83. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js +29 -29
  84. package/dist/shared/src/components/ReviewablesSelector/ReviewablesSelector.es.js.map +1 -1
  85. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  86. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  87. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +100 -99
  88. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  89. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  90. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  91. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +23 -23
  92. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  93. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  94. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  95. package/dist/shared/src/containers/Feed/Feed.es.js +1 -1
  96. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  97. package/dist/types/components/Powerpack/PricingLink.d.ts +1 -1
  98. package/dist/types/components/VersionUploader/context/VersionUploadContext.d.ts +1 -0
  99. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
- import { j as i } from "../../../../_virtual/jsx-runtime.es.js";
2
- import { useState as d, useRef as I } from "react";
3
- import nr from "clsx";
1
+ import { j as p } from "../../../../_virtual/jsx-runtime.es.js";
2
+ import { useState as u, useRef as T } from "react";
3
+ import ar from "clsx";
4
4
  import "../../containers/ContextMenu/ContextMenuContext.es.js";
5
5
  import "@ynput/ayon-react-components";
6
6
  /* empty css */
@@ -64,7 +64,7 @@ import "../../api/queries/config/getConfig.es.js";
64
64
  import "../../api/queries/config/updateConfig.es.js";
65
65
  import "../../api/queries/entities/getEntity.es.js";
66
66
  import "../../api/queries/entities/getEntityPanel.es.js";
67
- import { useUpdateEntitiesMutation as ar } from "../../api/queries/entities/updateEntity.es.js";
67
+ import { useUpdateEntitiesMutation as sr } from "../../api/queries/entities/updateEntity.es.js";
68
68
  import "../../api/queries/entityLists/getLists.es.js";
69
69
  import "../../api/queries/entityLists/updateLists.es.js";
70
70
  import "../../api/queries/entityLists/getListsAttributes.es.js";
@@ -80,7 +80,7 @@ import "../../api/queries/overview/getOverview.es.js";
80
80
  import "../../api/queries/overview/updateOverview.es.js";
81
81
  import "../../api/queries/versions/getVersionsProducts.es.js";
82
82
  import "../../api/queries/permissions/getPermissions.es.js";
83
- import { useCreateProductMutation as sr } from "../../api/queries/products/createProduct.es.js";
83
+ import { useCreateProductMutation as lr } from "../../api/queries/products/createProduct.es.js";
84
84
  import "../../api/queries/products/getFolderProducts.es.js";
85
85
  import "../../api/queries/project/getProject.es.js";
86
86
  import "../../api/queries/project/updateProject.es.js";
@@ -96,7 +96,7 @@ import "../../api/queries/userDashboard/getUserDashboard.es.js";
96
96
  import "../../api/queries/users/getUsers.es.js";
97
97
  import "../../api/queries/users/updateUsers.es.js";
98
98
  import "../../api/queries/users/guests.es.js";
99
- import { useCreateVersionMutation as lr } from "../../api/queries/versions/updateVersions.es.js";
99
+ import { useCreateVersionMutation as dr } from "../../api/queries/versions/updateVersions.es.js";
100
100
  import "../../api/queries/views/getViews.es.js";
101
101
  import "../../api/queries/views/updateViews.es.js";
102
102
  import "../../api/queries/watchers/getWatchers.es.js";
@@ -104,9 +104,9 @@ import "../../api/queries/uris/getUris.es.js";
104
104
  import "../../containers/Feed/components/Tooltips/TeamTooltip/TeamTooltip.styled.es.js";
105
105
  import "../../containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.es.js";
106
106
  import "../../context/RemoteModulesContext.es.js";
107
- import { useDetailsPanelContext as dr } from "../../context/DetailsPanelContext.es.js";
107
+ import { useDetailsPanelContext as cr } from "../../context/DetailsPanelContext.es.js";
108
108
  import "../../context/SubtasksModulesContext.es.js";
109
- import { ThumbnailUploadProvider as cr } from "../../context/ThumbnailUploaderContext.es.js";
109
+ import { ThumbnailUploadProvider as ur } from "../../context/ThumbnailUploaderContext.es.js";
110
110
  import "../../context/SettingsPanelContext.es.js";
111
111
  import "../../context/pip/PiPProvider.es.js";
112
112
  import "../../context/pip/PiPWrapper.es.js";
@@ -149,13 +149,13 @@ import "../Chips/Chips.es.js";
149
149
  import "date-fns";
150
150
  import "../DateRangePicker/DateRangePicker.styled.es.js";
151
151
  import "../LinksManager/CellEditingDialog.es.js";
152
- import { toast as T } from "react-toastify";
152
+ import { toast as V } from "react-toastify";
153
153
  import "../../../../_virtual/index.es.js";
154
154
  import "../../../../node_modules/refractor/lib/common.es.js";
155
155
  import "../../../../node_modules/refractor/lib/all.es.js";
156
156
  /* empty css */
157
157
  import "uuid";
158
- import { sanitizeProductName as ur, createProductHelper as fr, handleUploadError as k, getNextVersionNumber as hr, createVersionHelper as gr } from "../../util/versionUploadHelpers.es.js";
158
+ import { sanitizeProductName as fr, createProductHelper as hr, handleUploadError as M, getNextVersionNumber as gr, createVersionHelper as vr } from "../../util/versionUploadHelpers.es.js";
159
159
  import "../../util/pubsub.es.js";
160
160
  import "../DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
161
161
  import "../DetailsPanelDetails/DetailsPanelDetails.es.js";
@@ -165,8 +165,8 @@ import "../DoneCheckbox/DoneCheckbox.es.js";
165
165
  import "../EarlyPreview/EarlyPreview.es.js";
166
166
  import "../EmptyPlaceholder/EmptyPlaceholder.es.js";
167
167
  import "../EmptyPlaceholder/EmptyPlaceholderFlex.styled.es.js";
168
- import { DragAndDropWrapper as vr, DropZones as B, UploadingProgress as br, Progress as yr, CancelButton as Dr } from "./EntityPanelUploader.styled.es.js";
169
- import xr from "./Dropzone.es.js";
168
+ import { DragAndDropWrapper as yr, DropZones as W, UploadingProgress as br, Progress as Dr, CancelButton as xr } from "./EntityPanelUploader.styled.es.js";
169
+ import Ur from "./Dropzone.es.js";
170
170
  import wr from "axios";
171
171
  import "../ReviewablesList/ReviewablesList.styled.es.js";
172
172
  import "../ReviewablesList/ReviewablesUpload.styled.es.js";
@@ -206,7 +206,7 @@ import "../Thumbnail/Thumbnail.styled.es.js";
206
206
  import "../Thumbnail/StackedThumbnails.es.js";
207
207
  import "../ThumbnailSimple/ThumbnailSimple.es.js";
208
208
  import "../VersionUploader/components/UploadVersionDialog.es.js";
209
- import "../VersionUploader/context/VersionUploadContext.es.js";
209
+ import { useOptionalVersionUploadContext as Ir } from "../VersionUploader/context/VersionUploadContext.es.js";
210
210
  import "../Watchers/Watchers.es.js";
211
211
  import "../Menu/Menu.styled.es.js";
212
212
  import "../Menu/MenuItem.es.js";
@@ -262,7 +262,7 @@ import "../../containers/ProjectTreeTable/components/HeaderActionButton.es.js";
262
262
  import "../../containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js";
263
263
  import "../../containers/DetailsPanel/DetailsPanel.styled.es.js";
264
264
  import "../../containers/DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.es.js";
265
- import { ThumbnailWrapper as Ur } from "../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
265
+ import { ThumbnailWrapper as Tr } from "../../containers/DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
266
266
  import "../PlayableIcon/PlayableIcon.es.js";
267
267
  import "../../containers/DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.es.js";
268
268
  import "../../containers/DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.es.js";
@@ -274,228 +274,250 @@ import "../../containers/Views/context/ViewsContext.es.js";
274
274
  import "../../containers/Views/Views.styled.es.js";
275
275
  import "../../containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js";
276
276
  import "../../containers/Views/ViewsMenu/ViewsMenu.es.js";
277
- const Ir = [
277
+ const Vr = [
278
278
  { id: "thumbnail", label: "Upload thumbnail", icon: "add_photo_alternate" },
279
279
  { id: "version", label: "Upload version", icon: "layers" }
280
- ], Sm = ({
281
- children: L = [],
282
- entityType: E,
283
- entities: a = [],
280
+ ], Oe = ({
281
+ children: B = [],
282
+ entityType: k,
283
+ entities: s = [],
284
284
  projectName: b,
285
- onUploaded: C,
286
- onVersionCreated: W
285
+ onUploaded: E,
286
+ onVersionCreated: q
287
287
  }) => {
288
- const { dispatch: q } = dr(), [R, c] = d(!1), [y, u] = d(null), l = I(0), [D, s] = d(null), [H, v] = d(0), [_, f] = d(!1), [x, h] = d(null), m = a.length === 1 ? a[0] : null, F = m?.task?.id, w = m?.folder?.id, G = m?.product?.id, J = m?.id, P = !!(m && E !== "representation"), { handleFileUpload: K } = Pr({
288
+ const { dispatch: H } = cr(), D = Ir(), [C, f] = u(!1), [x, h] = u(null), c = T(0), [U, l] = u(null), [_, y] = u(0), [G, g] = u(!1), [w, v] = u(null), i = s.length === 1 ? s[0] : null, R = i?.task?.id, P = i?.folder?.id, J = i?.product?.id, K = i?.id, j = !!(i && k !== "representation"), { handleFileUpload: Q } = Pr({
289
289
  projectName: b,
290
- versionId: J,
291
- taskId: F,
292
- folderId: w,
293
- productId: G,
294
- dispatch: q,
290
+ versionId: K,
291
+ taskId: R,
292
+ folderId: P,
293
+ productId: J,
294
+ dispatch: H,
295
295
  onUpload: () => {
296
- s(null), v(0);
296
+ l(null), y(0);
297
297
  },
298
298
  onProgress: (r) => {
299
- v(r);
299
+ y(r);
300
300
  }
301
- }), Q = Ir.filter((r) => r.id === "version" ? P : !0), e = () => {
302
- s(null), c(!1), u(null), l.current = 0, v(0), f(!1), h(null);
303
- }, X = async (r) => {
304
- if (!x || !m) {
305
- f(!1), h(null);
301
+ }), X = Vr.filter((r) => r.id === "version" ? j : !0), n = () => {
302
+ l(null), f(!1), h(null), c.current = 0, y(0), g(!1), v(null);
303
+ }, Y = async (r) => {
304
+ if (!w || !i) {
305
+ g(!1), v(null);
306
306
  return;
307
307
  }
308
- const t = ur(r);
308
+ const t = fr(r);
309
309
  if (!t.trim()) {
310
- T.error(
310
+ V.error(
311
311
  "Product name must contain valid characters (letters, numbers, underscore, or hyphen)"
312
312
  );
313
313
  return;
314
314
  }
315
315
  try {
316
- if (!w)
316
+ if (!P)
317
317
  throw new Error("Folder ID is required to create a product");
318
- s("version");
319
- const o = await fr(rr, b, {
320
- folderId: w,
318
+ l("version");
319
+ const o = await hr(tr, b, {
320
+ folderId: P,
321
321
  name: t,
322
322
  productType: "review",
323
323
  // default product type for uploaded files
324
324
  productBaseType: "review"
325
325
  });
326
- f(!1), await N(x, o.id), h(null);
326
+ g(!1), await N(w, o.id), v(null);
327
327
  } catch (o) {
328
- k(o, "creating product"), e();
328
+ M(o, "creating product"), n();
329
329
  }
330
- }, Y = () => {
331
- f(!1), h(null), e();
332
- }, [z] = lr(), [rr] = sr(), V = async (r) => {
333
- if (!P || !m)
334
- return T.error("Please select exactly one version to upload reviewables"), e();
335
- const t = m.product?.id;
330
+ }, z = () => {
331
+ g(!1), v(null), n();
332
+ }, [rr] = dr(), [tr] = lr(), F = async (r) => {
333
+ if (!j || !i)
334
+ return V.error("Please select exactly one version to upload reviewables"), n();
335
+ if (D) {
336
+ const e = Array.from(r).map((a) => ({
337
+ file: a,
338
+ preview: a.type.startsWith("image/") ? URL.createObjectURL(a) : void 0
339
+ }));
340
+ D.setPendingFiles((a) => [...a, ...e]);
341
+ const m = i.product, d = i.task ? {
342
+ id: i.task.id,
343
+ name: i.task.name,
344
+ label: i.task.label,
345
+ taskType: i.task.taskType
346
+ } : void 0;
347
+ D.onOpenVersionUpload({
348
+ productId: m?.id,
349
+ folderId: i.folder?.id,
350
+ taskId: i.task?.id,
351
+ linkedTask: d,
352
+ latestVersionNumber: m?.latestVersion?.version,
353
+ latestVersionId: m?.latestVersion?.id
354
+ }), n();
355
+ return;
356
+ }
357
+ const t = i.product?.id;
336
358
  if (!t) {
337
- h(r), f(!0);
359
+ v(r), g(!0);
338
360
  return;
339
361
  }
340
362
  await N(r, t);
341
363
  }, N = async (r, t) => {
342
364
  try {
343
- const o = hr(m.product?.latestVersion), p = await gr(z, b, {
365
+ const o = gr(i.product?.latestVersion), e = await vr(rr, b, {
344
366
  productId: t,
345
- taskId: F,
367
+ taskId: R,
346
368
  // previous version could have a taskId or we are uploading on a task
347
369
  version: o
348
370
  });
349
- await K(r, p.id), e(), W?.(p.id);
371
+ await Q(r, e.id), n(), q?.(e.id);
350
372
  } catch (o) {
351
- k(o, "uploading version"), e();
373
+ M(o, "uploading version"), n();
352
374
  }
353
- }, S = async (r = []) => {
354
- if (c(!1), !a.length)
375
+ }, A = async (r = []) => {
376
+ if (f(!1), !s.length)
355
377
  return;
356
378
  const t = (/* @__PURE__ */ new Date()).toISOString();
357
379
  let o = [];
358
- for (const p of r) {
359
- const n = a.find((j) => j.id === p.id);
360
- if (!n) continue;
361
- p.thumbnailId;
362
- const g = p.users || [];
380
+ for (const e of r) {
381
+ const m = s.find((a) => a.id === e.id);
382
+ if (!m) continue;
383
+ e.thumbnailId;
384
+ const d = e.users || [];
363
385
  o.push({
364
- id: n.id,
365
- projectName: n.projectName,
386
+ id: m.id,
387
+ projectName: m.projectName,
366
388
  data: { updatedAt: t },
367
- currentAssignees: g
368
- }), n.productId;
389
+ currentAssignees: d
390
+ }), m.productId;
369
391
  }
370
392
  try {
371
- await tr({ operations: o, entityType: E }), C && C(o);
372
- } catch (p) {
373
- console.error("Error uploading thumbnail:", p);
393
+ await or({ operations: o, entityType: k }), E && E(o);
394
+ } catch (e) {
395
+ console.error("Error uploading thumbnail:", e);
374
396
  }
375
- }, A = async (r) => {
376
- if (!r) return e();
397
+ }, O = async (r) => {
398
+ if (!r) return n();
377
399
  try {
378
400
  if (!r.type.includes("image"))
379
401
  throw new Error("File is not an image");
380
402
  let t = [];
381
- for (const n of a) {
382
- const { id: g, entityType: j, projectName: U } = n;
383
- if (!U) throw new Error("Project name is required");
384
- const er = wr.post(
385
- U && `/api/projects/${U}/${j}s/${g}/thumbnail`,
403
+ for (const m of s) {
404
+ const { id: d, entityType: a, projectName: I } = m;
405
+ if (!I) throw new Error("Project name is required");
406
+ const nr = wr.post(
407
+ I && `/api/projects/${I}/${a}s/${d}/thumbnail`,
386
408
  r,
387
409
  {
388
- onUploadProgress: (M) => {
389
- v(Math.round(100 * M.loaded / (M.total || r.size)));
410
+ onUploadProgress: ($) => {
411
+ y(Math.round(100 * $.loaded / ($.total || r.size)));
390
412
  },
391
413
  headers: {
392
414
  "Content-Type": r.type
393
415
  }
394
416
  }
395
417
  );
396
- t.push(er);
418
+ t.push(nr);
397
419
  }
398
- const p = (await Promise.all(t)).map((n, g) => ({
399
- thumbnailId: n.data.id,
400
- id: a[g].id
420
+ const e = (await Promise.all(t)).map((m, d) => ({
421
+ thumbnailId: m.data.id,
422
+ id: s[d].id
401
423
  }));
402
- S(p), e();
424
+ A(e), n();
403
425
  } catch (t) {
404
- console.error(t), T.error(t.message), e();
426
+ console.error(t), V.error(t.message), n();
405
427
  }
406
- }, [tr] = ar(), or = (r) => {
407
- r.preventDefault(), l.current++, l.current === 1 && c(!0);
408
- }, ir = (r) => {
409
- r.preventDefault(), l.current--, l.current === 0 && (c(!1), u(null));
428
+ }, [or] = sr(), ir = (r) => {
429
+ r.preventDefault(), c.current++, c.current === 1 && f(!0);
410
430
  }, pr = (r) => {
431
+ r.preventDefault(), c.current--, c.current === 0 && (f(!1), h(null));
432
+ }, er = (r) => {
411
433
  r.preventDefault();
412
434
  }, mr = (r) => {
413
- if (r.preventDefault(), l.current = 0, c(!1), u(null), !(!r.dataTransfer.files || r.dataTransfer.files.length === 0)) {
414
- if (y === "thumbnail") {
415
- s("thumbnail");
435
+ if (r.preventDefault(), c.current = 0, f(!1), h(null), !(!r.dataTransfer.files || r.dataTransfer.files.length === 0)) {
436
+ if (x === "thumbnail") {
437
+ l("thumbnail");
416
438
  const t = r.dataTransfer.files[0];
417
- A(t);
439
+ O(t);
418
440
  }
419
- if (y === "version") {
420
- s("version");
441
+ if (x === "version") {
442
+ l("version");
421
443
  const t = r.dataTransfer.files;
422
- V(t);
444
+ F(t);
423
445
  }
424
446
  }
425
- }, O = async (r, t) => {
447
+ }, S = async (r, t) => {
426
448
  const o = r.target.files;
427
- !o || o.length === 0 || (t === "version" && (s("version"), V(o)), t === "thumbnail" && (s("thumbnail"), A(o[0])));
428
- }, Z = I(null), $ = I(null);
429
- return /* @__PURE__ */ i.jsxs(
430
- cr,
449
+ !o || o.length === 0 || (t === "version" && (l("version"), F(o)), t === "thumbnail" && (l("thumbnail"), O(o[0])));
450
+ }, L = T(null), Z = T(null);
451
+ return /* @__PURE__ */ p.jsxs(
452
+ ur,
431
453
  {
432
- entities: a,
433
- handleThumbnailUpload: S,
434
- thumbnailInputRef: Z,
435
- versionsInputRef: P ? $ : void 0,
454
+ entities: s,
455
+ handleThumbnailUpload: A,
456
+ thumbnailInputRef: L,
457
+ versionsInputRef: j ? Z : void 0,
436
458
  children: [
437
- /* @__PURE__ */ i.jsxs(
438
- vr,
459
+ /* @__PURE__ */ p.jsxs(
460
+ yr,
439
461
  {
440
- className: nr({ dragging: R }),
441
- onDragEnter: or,
442
- onDragLeave: ir,
443
- onDragOver: pr,
462
+ className: ar({ dragging: C }),
463
+ onDragEnter: ir,
464
+ onDragLeave: pr,
465
+ onDragOver: er,
444
466
  onDrop: mr,
445
467
  children: [
446
- /* @__PURE__ */ i.jsx(Ur, { children: /* @__PURE__ */ i.jsx("div", { children: L }) }),
447
- R && /* @__PURE__ */ i.jsx(B, { children: Q.map((r) => /* @__PURE__ */ i.jsx(
448
- xr,
468
+ /* @__PURE__ */ p.jsx(Tr, { children: /* @__PURE__ */ p.jsx("div", { children: B }) }),
469
+ C && /* @__PURE__ */ p.jsx(W, { children: X.map((r) => /* @__PURE__ */ p.jsx(
470
+ Ur,
449
471
  {
450
472
  id: r.id,
451
473
  label: r.label,
452
474
  icon: r.icon,
453
- isActive: y === r.id,
454
- onDragOver: () => u(r.id),
455
- onDragLeave: () => u(null)
475
+ isActive: x === r.id,
476
+ onDragOver: () => h(r.id),
477
+ onDragLeave: () => h(null)
456
478
  },
457
479
  r.id
458
480
  )) }),
459
- (D === "thumbnail" || D === "version") && /* @__PURE__ */ i.jsxs(B, { children: [
460
- /* @__PURE__ */ i.jsxs(br, { children: [
461
- /* @__PURE__ */ i.jsx(
462
- yr,
481
+ (U === "thumbnail" || U === "version") && /* @__PURE__ */ p.jsxs(W, { children: [
482
+ /* @__PURE__ */ p.jsxs(br, { children: [
483
+ /* @__PURE__ */ p.jsx(
484
+ Dr,
463
485
  {
464
486
  style: {
465
- right: `${100 - H}%`
487
+ right: `${100 - _}%`
466
488
  }
467
489
  }
468
490
  ),
469
- /* @__PURE__ */ i.jsx("span", { className: "label", children: `Uploading ${D}...` })
491
+ /* @__PURE__ */ p.jsx("span", { className: "label", children: `Uploading ${U}...` })
470
492
  ] }),
471
- /* @__PURE__ */ i.jsx(Dr, { icon: "close", variant: "text", onClick: e })
493
+ /* @__PURE__ */ p.jsx(xr, { icon: "close", variant: "text", onClick: n })
472
494
  ] }),
473
- /* @__PURE__ */ i.jsx(
495
+ /* @__PURE__ */ p.jsx(
474
496
  "input",
475
497
  {
476
498
  type: "file",
477
- onChange: (r) => O(r, "thumbnail"),
478
- ref: Z
499
+ onChange: (r) => S(r, "thumbnail"),
500
+ ref: L
479
501
  }
480
502
  ),
481
- /* @__PURE__ */ i.jsx(
503
+ /* @__PURE__ */ p.jsx(
482
504
  "input",
483
505
  {
484
506
  type: "file",
485
- onChange: (r) => O(r, "version"),
486
- ref: $
507
+ onChange: (r) => S(r, "version"),
508
+ ref: Z
487
509
  }
488
510
  )
489
511
  ]
490
512
  }
491
513
  ),
492
- /* @__PURE__ */ i.jsx(
514
+ /* @__PURE__ */ p.jsx(
493
515
  jr,
494
516
  {
495
- isOpen: _,
496
- files: x,
497
- onSubmit: X,
498
- onCancel: Y
517
+ isOpen: G,
518
+ files: w,
519
+ onSubmit: Y,
520
+ onCancel: z
499
521
  }
500
522
  )
501
523
  ]
@@ -503,6 +525,6 @@ const Ir = [
503
525
  );
504
526
  };
505
527
  export {
506
- Sm as EntityPanelUploader
528
+ Oe as EntityPanelUploader
507
529
  };
508
530
  //# sourceMappingURL=EntityPanelUploader.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPanelUploader.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n productBaseType: 'review',\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","folderId","productId","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPanelUploader.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport { useOptionalVersionUploadContext } from '@shared/components'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n const versionUploadCtx = useOptionalVersionUploadContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n productBaseType: 'review',\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n if (versionUploadCtx) {\n const fileArray = Array.from(files)\n const pending = fileArray.map((file) => ({\n file,\n preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n }))\n versionUploadCtx.setPendingFiles((prev) => [...prev, ...pending])\n\n const product = singleEntity.product\n const linkedTask = singleEntity.task\n ? {\n id: singleEntity.task.id,\n name: singleEntity.task.name,\n label: singleEntity.task.label,\n taskType: singleEntity.task.taskType,\n }\n : undefined\n\n versionUploadCtx.onOpenVersionUpload({\n productId: product?.id,\n folderId: singleEntity.folder?.id,\n taskId: singleEntity.task?.id,\n linkedTask,\n latestVersionNumber: product?.latestVersion?.version,\n latestVersionId: product?.latestVersion?.id,\n })\n // Reset local upload UI; the dialog now drives the flow.\n resetState()\n return\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","versionUploadCtx","useOptionalVersionUploadContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","folderId","productId","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","pending","file","prev","product","linkedTask","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAMA,KAAmD;AAAA,EACvD,EAAE,IAAI,aAAa,OAAO,oBAAoB,MAAM,sBAAA;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,kBAAkB,MAAM,SAAA;AAClD,GAEaC,KAAsB,CAAC;AAAA,EAClC,UAAAC,IAAW,CAAA;AAAA,EACX,YAAAC;AAAA,EACA,UAAAC,IAAW,CAAA;AAAA,EACX,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AACF,MAAgC;AAC9B,QAAM,EAAE,UAAAC,EAAA,IAAaC,GAAA,GACfC,IAAmBC,GAAA,GAEnB,CAACC,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GACpD,CAACC,GAAcC,CAAe,IAAIF,EAA4B,IAAI,GAClEG,IAAiBC,EAAO,CAAC,GAGzB,CAACC,GAAeC,CAAgB,IAAIN,EAA4B,IAAI,GACpE,CAACO,GAAUC,CAAW,IAAIR,EAAS,CAAC,GAGpC,CAACS,GAAmBC,CAAoB,IAAIV,EAAS,EAAK,GAC1D,CAACW,GAAcC,CAAe,IAAIZ,EAA0B,IAAI,GAGhEa,IAAevB,EAAS,WAAW,IAAIA,EAAS,CAAC,IAAI,MAErDwB,IAA6BD,GAAc,MAAM,IACjDE,IAA+BF,GAAc,QAAQ,IACrDG,IAAgCH,GAAc,SAAS,IACvDI,IAAgCJ,GAAc,IAC9CK,IAAoB,GAAQL,KAAgBxB,MAAe,mBAG3D,EAAE,kBAAkB8B,EAAA,IAA0BC,GAAqB;AAAA,IACvE,aAAA7B;AAAA,IACA,WAAA0B;AAAA,IACA,QAAAH;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAtB;AAAA,IACA,UAAU,MAAM;AACd,MAAAY,EAAiB,IAAI,GACrBE,EAAY,CAAC;AAAA,IACf;AAAA,IACA,YAAY,CAACD,MAAa;AACxB,MAAAC,EAAYD,CAAQ;AAAA,IACtB;AAAA,EAAA,CACD,GAGKc,IAAqBnC,GAAU,OAAO,CAACoC,MACvCA,EAAK,OAAO,YACPJ,IAEF,EACR,GAEKK,IAAa,MAAM;AACvB,IAAAjB,EAAiB,IAAI,GACrBP,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GACpBC,EAAe,UAAU,GACzBK,EAAY,CAAC,GACbE,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AAAA,EACtB,GAGMY,IAAqB,OAAOC,MAAwB;AACxD,QAAI,CAACd,KAAgB,CAACE,GAAc;AAClC,MAAAH,EAAqB,EAAK,GAC1BE,EAAgB,IAAI;AACpB;AAAA,IACF;AAEA,UAAMc,IAAgBC,GAAoBF,CAAW;AAErD,QAAI,CAACC,EAAc,QAAQ;AACzB,MAAAE,EAAM;AAAA,QACJ;AAAA,MAAA;AAEF;AAAA,IACF;AAEA,QAAI;AACF,UAAI,CAACb;AACH,cAAM,IAAI,MAAM,2CAA2C;AAE7D,MAAAT,EAAiB,SAAS;AAG1B,YAAMuB,IAAa,MAAMC,GAAoBC,IAAexC,GAAa;AAAA,QACvE,UAAAwB;AAAA,QACA,MAAMW;AAAA,QACN,aAAa;AAAA;AAAA,QACb,iBAAiB;AAAA,MAAA,CAClB;AAGD,MAAAhB,EAAqB,EAAK,GAC1B,MAAMsB,EAAyBrB,GAAckB,EAAW,EAAE,GAC1DjB,EAAgB,IAAI;AAAA,IACtB,SAASqB,GAAY;AACnB,MAAAC,EAAkBD,GAAO,kBAAkB,GAC3CV,EAAA;AAAA,IACF;AAAA,EACF,GAGMY,IAAqB,MAAM;AAC/B,IAAAzB,EAAqB,EAAK,GAC1BE,EAAgB,IAAI,GACpBW,EAAA;AAAA,EACF,GAEM,CAACa,EAAa,IAAIC,GAAA,GAClB,CAACN,EAAa,IAAIO,GAAA,GAElBC,IAAsB,OAAOC,MAAoB;AACrD,QAAI,CAACtB,KAAqB,CAACL;AACzB,aAAAe,EAAM,MAAM,yDAAyD,GAC9DL,EAAA;AAGT,QAAI3B,GAAkB;AAEpB,YAAM6C,IADY,MAAM,KAAKD,CAAK,EACR,IAAI,CAACE,OAAU;AAAA,QACvC,MAAAA;AAAA,QACA,SAASA,EAAK,KAAK,WAAW,QAAQ,IAAI,IAAI,gBAAgBA,CAAI,IAAI;AAAA,MAAA,EACtE;AACF,MAAA9C,EAAiB,gBAAgB,CAAC+C,MAAS,CAAC,GAAGA,GAAM,GAAGF,CAAO,CAAC;AAEhE,YAAMG,IAAU/B,EAAa,SACvBgC,IAAahC,EAAa,OAC5B;AAAA,QACE,IAAIA,EAAa,KAAK;AAAA,QACtB,MAAMA,EAAa,KAAK;AAAA,QACxB,OAAOA,EAAa,KAAK;AAAA,QACzB,UAAUA,EAAa,KAAK;AAAA,MAAA,IAE9B;AAEJ,MAAAjB,EAAiB,oBAAoB;AAAA,QACnC,WAAWgD,GAAS;AAAA,QACpB,UAAU/B,EAAa,QAAQ;AAAA,QAC/B,QAAQA,EAAa,MAAM;AAAA,QAC3B,YAAAgC;AAAA,QACA,qBAAqBD,GAAS,eAAe;AAAA,QAC7C,iBAAiBA,GAAS,eAAe;AAAA,MAAA,CAC1C,GAEDrB,EAAA;AACA;AAAA,IACF;AAEA,UAAMP,IAAYH,EAAa,SAAS;AACxC,QAAI,CAACG,GAAW;AAEd,MAAAJ,EAAgB4B,CAAK,GACrB9B,EAAqB,EAAI;AACzB;AAAA,IACF;AAGA,UAAMsB,EAAyBQ,GAAOxB,CAAS;AAAA,EACjD,GAGMgB,IAA2B,OAAOQ,GAAiBxB,MAAsB;AAC7E,QAAI;AACF,YAAM8B,IAAcC,GAAqBlC,EAAc,SAAS,aAAa,GAGvEmC,IAAa,MAAMC,GAAoBb,IAAe7C,GAAa;AAAA,QACvE,WAAAyB;AAAAA,QACA,QAAAF;AAAA;AAAA,QACA,SAASgC;AAAA,MAAA,CACV;AAED,YAAM3B,EAAsBqB,GAAOQ,EAAW,EAAE,GAEhDzB,EAAA,GAGA9B,IAAmBuD,EAAW,EAAE;AAAA,IAClC,SAASf,GAAY;AACnB,MAAAC,EAAkBD,GAAO,mBAAmB,GAC5CV,EAAA;AAAA,IACF;AAAA,EACF,GAGM2B,IAA8B,OAAOC,IAAoB,OAAO;AAKpE,QAHApD,EAAkB,EAAK,GAGnB,CAACT,EAAS;AACZ;AAIF,UAAM8D,KAAe,oBAAI,KAAA,GAAO,YAAA;AAEhC,QAAIC,IAA0B,CAAA;AAG9B,eAAWC,KAAUH,GAAY;AAC/B,YAAMI,IAAgBjE,EAAS,KAAK,CAACkE,MAAMA,EAAE,OAAOF,EAAO,EAAE;AAC7D,UAAI,CAACC,EAAe;AACA,MAAAD,EAAO;AAC3B,YAAMG,IAAmBH,EAAO,SAAS,CAAA;AAEzC,MAAAD,EAAW,KAAK;AAAA,QACd,IAAIE,EAAc;AAAA,QAClB,aAAaA,EAAc;AAAA,QAC3B,MAAM,EAAE,WAAWH,EAAA;AAAA,QACnB,kBAAAK;AAAA,MAAA,CACD,GAGYF,EAAc;AAAA,IAM7B;AAEA,QAAI;AACF,YAAMG,GAAe,EAAE,YAAAL,GAAY,YAAAhE,GAAY,GAC/CG,KAAcA,EAAW6D,CAAU;AAAA,IACrC,SAASpB,GAAO;AACd,cAAQ,MAAM,8BAA8BA,CAAK;AAAA,IACnD;AAAA,EACF,GAEM0B,IAAwB,OAAOjB,MAAe;AAClD,QAAI,CAACA,EAAM,QAAOnB,EAAA;AAElB,QAAI;AAEF,UAAI,CAACmB,EAAK,KAAK,SAAS,OAAO;AAC7B,cAAM,IAAI,MAAM,sBAAsB;AAGxC,UAAIkB,IAAW,CAAA;AACf,iBAAWN,KAAUhE,GAAU;AAC7B,cAAM,EAAE,IAAAuE,GAAI,YAAAxE,GAAY,aAAAE,MAAgB+D;AAExC,YAAI,CAAC/D,EAAa,OAAM,IAAI,MAAM,0BAA0B;AAE5D,cAAMuE,KAAUC,GAAM;AAAA,UACpBxE,KAAe,iBAAiBA,CAAW,IAAIF,CAAU,KAAKwE,CAAE;AAAA,UAChEnB;AAAA,UACA;AAAA,YACE,kBAAkB,CAACc,MAAM;AACvB,cAAAhD,EAAY,KAAK,MAAO,MAAMgD,EAAE,UAAWA,EAAE,SAASd,EAAK,KAAK,CAAC;AAAA,YACnE;AAAA,YACA,SAAS;AAAA,cACP,gBAAgBA,EAAK;AAAA,YAAA;AAAA,UACvB;AAAA,QACF;AAGF,QAAAkB,EAAS,KAAKE,EAAO;AAAA,MACvB;AAIA,YAAME,KAFM,MAAM,QAAQ,IAAIJ,CAAQ,GAEV,IAAI,CAACK,GAAKC,OAAO;AAAA,QAC3C,aAAaD,EAAI,KAAK;AAAA,QACtB,IAAI3E,EAAS4E,CAAC,EAAE;AAAA,MAAA,EAChB;AAEF,MAAAhB,EAA4Bc,CAAe,GAC3CzC,EAAA;AAAA,IACF,SAASU,GAAY;AACnB,cAAQ,MAAMA,CAAK,GACnBL,EAAM,MAAMK,EAAM,OAAO,GACzBV,EAAA;AAAA,IACF;AAAA,EACF,GAEM,CAACmC,EAAc,IAAIS,GAAA,GAEnBC,KAAkB,CAACZ,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFrD,EAAe,WACXA,EAAe,YAAY,KAC7BJ,EAAkB,EAAI;AAAA,EAE1B,GAEMsE,KAAkB,CAACb,MAAuB;AAC9C,IAAAA,EAAE,eAAA,GACFrD,EAAe,WACXA,EAAe,YAAY,MAC7BJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI;AAAA,EAExB,GAEMoE,KAAiB,CAACd,MAAuB;AAC7C,IAAAA,EAAE,eAAA;AAAA,EACJ,GAEMe,KAAa,CAACf,MAAuB;AAMzC,QALAA,EAAE,eAAA,GACFrD,EAAe,UAAU,GACzBJ,EAAkB,EAAK,GACvBG,EAAgB,IAAI,GAEhB,GAACsD,EAAE,aAAa,SAASA,EAAE,aAAa,MAAM,WAAW,IAI7D;AAAA,UAAIvD,MAAiB,aAAa;AAChC,QAAAK,EAAiB,WAAW;AAC5B,cAAMoC,IAAOc,EAAE,aAAa,MAAM,CAAC;AAEnC,QAAAG,EAAsBjB,CAAI;AAAA,MAC5B;AAEA,UAAIzC,MAAiB,WAAW;AAC9B,QAAAK,EAAiB,SAAS;AAC1B,cAAMkC,IAAQgB,EAAE,aAAa;AAE7B,QAAAjB,EAAoBC,CAAK;AAAA,MAC3B;AAAA;AAAA,EACF,GAGMgC,IAAoB,OAAOC,GAAsCC,MAAqB;AAC1F,UAAMlC,IAAQiC,EAAM,OAAO;AAC3B,IAAI,CAACjC,KAASA,EAAM,WAAW,MAI3BkC,MAAS,cACXpE,EAAiB,SAAS,GAC1BiC,EAAoBC,CAAK,IAEvBkC,MAAS,gBACXpE,EAAiB,WAAW,GAC5BqD,EAAsBnB,EAAM,CAAC,CAAC;AAAA,EAElC,GAEMmC,IAAoBvE,EAAyB,IAAI,GACjDwE,IAAmBxE,EAAyB,IAAI;AAEtD,SACEyE,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,UAAAxF;AAAA,MACA,uBAAuB4D;AAAA,MACvB,mBAAAyB;AAAA,MACA,kBAAkBzD,IAAoB0D,IAAmB;AAAA,MAEzD,UAAA;AAAA,QAAAC,gBAAAA,EAAAA;AAAAA,UAACE;AAAAA,UAAA;AAAA,YACC,WAAWC,GAAK,EAAE,UAAUlF,GAAgB;AAAA,YAC5C,aAAasE;AAAA,YACb,aAAaC;AAAA,YACb,YAAYC;AAAA,YACZ,QAAQC;AAAA,YAER,UAAA;AAAA,cAAAU,gBAAAA,MAACC,IAAA,EACC,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAK,UAAA7F,EAAA,CAAS,GACjB;AAAA,cACCU,2BACEqF,GAAA,EACE,UAAA9D,EAAmB,IAAI,CAACC,MACvB2D,gBAAAA,EAAAA;AAAAA,gBAACG;AAAA,gBAAA;AAAA,kBAEC,IAAI9D,EAAK;AAAA,kBACT,OAAOA,EAAK;AAAA,kBACZ,MAAMA,EAAK;AAAA,kBACX,UAAUrB,MAAiBqB,EAAK;AAAA,kBAChC,YAAY,MAAMpB,EAAgBoB,EAAK,EAAE;AAAA,kBACzC,aAAa,MAAMpB,EAAgB,IAAI;AAAA,gBAAA;AAAA,gBANlCoB,EAAK;AAAA,cAAA,CAQb,GACH;AAAA,eAEAjB,MAAkB,eAAeA,MAAkB,cACnDwE,gBAAAA,OAACM,GAAA,EACC,UAAA;AAAA,gBAAAN,gBAAAA,OAACQ,IAAA,EACC,UAAA;AAAA,kBAAAJ,gBAAAA,EAAAA;AAAAA,oBAACK;AAAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,OAAO,GAAG,MAAM/E,CAAQ;AAAA,sBAAA;AAAA,oBAC1B;AAAA,kBAAA;AAAA,wCAED,QAAA,EAAK,WAAU,SAAS,UAAA,aAAaF,CAAa,MAAA,CAAM;AAAA,gBAAA,GAC3D;AAAA,gBACA4E,gBAAAA,MAACM,IAAA,EAAoB,MAAM,SAAS,SAAQ,QAAO,SAAShE,EAAA,CAAY;AAAA,cAAA,GAC1E;AAAA,cAEF0D,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAACzB,MAAMgB,EAAkBhB,GAAG,WAAW;AAAA,kBACjD,KAAKmB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEPM,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,CAACzB,MAAMgB,EAAkBhB,GAAG,SAAS;AAAA,kBAC/C,KAAKoB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACP;AAAA,UAAA;AAAA,QAAA;AAAA,QAIFK,gBAAAA,EAAAA;AAAAA,UAACO;AAAA,UAAA;AAAA,YACC,QAAQ/E;AAAA,YACR,OAAOE;AAAA,YACP,UAAUa;AAAA,YACV,UAAUW;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../_virtual/jsx-runtime.cjs.js"),o=require("react"),r="https://ynput.io/ayon/pricing?utm_source=ayon",c=o.forwardRef(({children:e,...n},t)=>i.jsxRuntimeExports.jsx("a",{href:r,target:"_blank",rel:"noopener noreferrer",...n,ref:t,children:e}));exports.PricingLink=c;exports.pricingUrl=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../_virtual/jsx-runtime.cjs.js"),o=require("react"),r="https://ynput.cloud/free-trial",c=o.forwardRef(({children:e,...t},n)=>i.jsxRuntimeExports.jsx("a",{href:r,target:"_blank",rel:"noopener noreferrer",...t,ref:n,children:e}));exports.PricingLink=c;exports.pricingUrl=r;
2
2
  //# sourceMappingURL=PricingLink.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PricingLink.cjs.js","sources":["../../../../../src/components/Powerpack/PricingLink.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nexport const pricingUrl = 'https://ynput.io/ayon/pricing?utm_source=ayon'\n\nexport interface PricingLinkProps extends React.HTMLAttributes<HTMLAnchorElement> {}\n\nexport const PricingLink = forwardRef<HTMLAnchorElement, PricingLinkProps>(\n ({ children, ...props }, ref) => {\n return (\n <a href={pricingUrl} target=\"_blank\" rel=\"noopener noreferrer\" {...props} ref={ref}>\n {children}\n </a>\n )\n },\n)\n"],"names":["pricingUrl","PricingLink","forwardRef","children","props","ref","jsx"],"mappings":"8JACaA,EAAa,gDAIbC,EAAcC,EAAAA,WACzB,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAErBC,EAAAA,kBAAAA,IAAC,IAAA,CAAE,KAAMN,EAAY,OAAO,SAAS,IAAI,sBAAuB,GAAGI,EAAO,IAAAC,EACvE,SAAAF,CAAA,CACH,CAGN"}
1
+ {"version":3,"file":"PricingLink.cjs.js","sources":["../../../../../src/components/Powerpack/PricingLink.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nexport const pricingUrl = 'https://ynput.cloud/free-trial'\n\nexport interface PricingLinkProps extends React.HTMLAttributes<HTMLAnchorElement> {}\n\nexport const PricingLink = forwardRef<HTMLAnchorElement, PricingLinkProps>(\n ({ children, ...props }, ref) => {\n return (\n <a href={pricingUrl} target=\"_blank\" rel=\"noopener noreferrer\" {...props} ref={ref}>\n {children}\n </a>\n )\n },\n)\n"],"names":["pricingUrl","PricingLink","forwardRef","children","props","ref","jsx"],"mappings":"8JACaA,EAAa,iCAIbC,EAAcC,EAAAA,WACzB,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAErBC,EAAAA,kBAAAA,IAAC,IAAA,CAAE,KAAMN,EAAY,OAAO,SAAS,IAAI,sBAAuB,GAAGI,EAAO,IAAAC,EACvE,SAAAF,CAAA,CACH,CAGN"}
@@ -1,10 +1,10 @@
1
- import { j as t } from "../../../../_virtual/jsx-runtime.es.js";
2
- import { forwardRef as e } from "react";
3
- const i = "https://ynput.io/ayon/pricing?utm_source=ayon", a = e(
4
- ({ children: r, ...o }, n) => /* @__PURE__ */ t.jsx("a", { href: i, target: "_blank", rel: "noopener noreferrer", ...o, ref: n, children: r })
1
+ import { j as o } from "../../../../_virtual/jsx-runtime.es.js";
2
+ import { forwardRef as n } from "react";
3
+ const i = "https://ynput.cloud/free-trial", s = n(
4
+ ({ children: r, ...e }, t) => /* @__PURE__ */ o.jsx("a", { href: i, target: "_blank", rel: "noopener noreferrer", ...e, ref: t, children: r })
5
5
  );
6
6
  export {
7
- a as PricingLink,
7
+ s as PricingLink,
8
8
  i as pricingUrl
9
9
  };
10
10
  //# sourceMappingURL=PricingLink.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PricingLink.es.js","sources":["../../../../../src/components/Powerpack/PricingLink.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nexport const pricingUrl = 'https://ynput.io/ayon/pricing?utm_source=ayon'\n\nexport interface PricingLinkProps extends React.HTMLAttributes<HTMLAnchorElement> {}\n\nexport const PricingLink = forwardRef<HTMLAnchorElement, PricingLinkProps>(\n ({ children, ...props }, ref) => {\n return (\n <a href={pricingUrl} target=\"_blank\" rel=\"noopener noreferrer\" {...props} ref={ref}>\n {children}\n </a>\n )\n },\n)\n"],"names":["pricingUrl","PricingLink","forwardRef","children","props","ref","jsx"],"mappings":";;AACO,MAAMA,IAAa,iDAIbC,IAAcC;AAAA,EACzB,CAAC,EAAE,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAErBC,gBAAAA,EAAAA,IAAC,KAAA,EAAE,MAAMN,GAAY,QAAO,UAAS,KAAI,uBAAuB,GAAGI,GAAO,KAAAC,GACvE,UAAAF,EAAA,CACH;AAGN;"}
1
+ {"version":3,"file":"PricingLink.es.js","sources":["../../../../../src/components/Powerpack/PricingLink.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nexport const pricingUrl = 'https://ynput.cloud/free-trial'\n\nexport interface PricingLinkProps extends React.HTMLAttributes<HTMLAnchorElement> {}\n\nexport const PricingLink = forwardRef<HTMLAnchorElement, PricingLinkProps>(\n ({ children, ...props }, ref) => {\n return (\n <a href={pricingUrl} target=\"_blank\" rel=\"noopener noreferrer\" {...props} ref={ref}>\n {children}\n </a>\n )\n },\n)\n"],"names":["pricingUrl","PricingLink","forwardRef","children","props","ref","jsx"],"mappings":";;AACO,MAAMA,IAAa,kCAIbC,IAAcC;AAAA,EACzB,CAAC,EAAE,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAErBC,gBAAAA,EAAAA,IAAC,KAAA,EAAE,MAAMN,GAAY,QAAO,UAAS,KAAI,uBAAuB,GAAGI,GAAO,KAAAC,GACvE,UAAAF,EAAA,CACH;AAGN;"}