@webiny/app-file-manager 6.6.0-alpha.8 → 6.6.0-alpha.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-file-manager",
3
- "version": "6.6.0-alpha.8",
3
+ "version": "6.6.0-alpha.9",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -14,22 +14,22 @@
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
16
  "@types/react": "18.3.31",
17
- "@webiny/admin-ui": "6.6.0-alpha.8",
18
- "@webiny/app": "6.6.0-alpha.8",
19
- "@webiny/app-aco": "6.6.0-alpha.8",
20
- "@webiny/app-admin": "6.6.0-alpha.8",
21
- "@webiny/app-headless-cms": "6.6.0-alpha.8",
22
- "@webiny/app-headless-cms-common": "6.6.0-alpha.8",
23
- "@webiny/app-websockets": "6.6.0-alpha.8",
17
+ "@webiny/admin-ui": "6.6.0-alpha.9",
18
+ "@webiny/app": "6.6.0-alpha.9",
19
+ "@webiny/app-aco": "6.6.0-alpha.9",
20
+ "@webiny/app-admin": "6.6.0-alpha.9",
21
+ "@webiny/app-headless-cms": "6.6.0-alpha.9",
22
+ "@webiny/app-headless-cms-common": "6.6.0-alpha.9",
23
+ "@webiny/app-websockets": "6.6.0-alpha.9",
24
24
  "@webiny/di": "1.1.0",
25
- "@webiny/feature": "6.6.0-alpha.8",
26
- "@webiny/form": "6.6.0-alpha.8",
27
- "@webiny/icons": "6.6.0-alpha.8",
28
- "@webiny/plugins": "6.6.0-alpha.8",
29
- "@webiny/react-composition": "6.6.0-alpha.8",
30
- "@webiny/react-properties": "6.6.0-alpha.8",
31
- "@webiny/sdk": "6.6.0-alpha.8",
32
- "@webiny/validation": "6.6.0-alpha.8",
25
+ "@webiny/feature": "6.6.0-alpha.9",
26
+ "@webiny/form": "6.6.0-alpha.9",
27
+ "@webiny/icons": "6.6.0-alpha.9",
28
+ "@webiny/plugins": "6.6.0-alpha.9",
29
+ "@webiny/react-composition": "6.6.0-alpha.9",
30
+ "@webiny/react-properties": "6.6.0-alpha.9",
31
+ "@webiny/sdk": "6.6.0-alpha.9",
32
+ "@webiny/validation": "6.6.0-alpha.9",
33
33
  "bytes": "3.1.2",
34
34
  "dayjs": "1.11.23",
35
35
  "lodash": "4.18.1",
@@ -43,7 +43,7 @@
43
43
  "zod": "4.4.3"
44
44
  },
45
45
  "devDependencies": {
46
- "@webiny/build-tools": "6.6.0-alpha.8",
46
+ "@webiny/build-tools": "6.6.0-alpha.9",
47
47
  "rimraf": "6.1.3",
48
48
  "typescript": "7.0.2",
49
49
  "vitest": "4.1.11"
@@ -1,4 +1,4 @@
1
- const isImageAsset = (asset)=>"string" == typeof asset?.type && asset.type.startsWith("image/");
1
+ const isImageAsset = (asset)=>"string" == typeof asset?.mimeType && asset.mimeType.startsWith("image/");
2
2
  const hasAsset = (asset)=>"string" == typeof asset?.src && asset.src.length > 0;
3
3
  const isFullCrop = (crop)=>!crop || 0 === crop.top && 0 === crop.left && 0 === crop.bottom && 0 === crop.right;
4
4
  const isCenteredFocal = (focalPoint)=>!focalPoint || 0.5 === focalPoint.x && 0.5 === focalPoint.y;
@@ -13,7 +13,7 @@ const fileItemToAsset = (file)=>{
13
13
  src,
14
14
  url: src,
15
15
  name: file.name,
16
- type: file.type,
16
+ mimeType: file.type,
17
17
  size: file.size
18
18
  };
19
19
  if ("string" == typeof file.type && file.type.startsWith("image/")) {
@@ -30,6 +30,8 @@ const fileItemToAsset = (file)=>{
30
30
  if (meta?.alt) image.alt = meta.alt;
31
31
  if (meta?.caption) image.caption = meta.caption;
32
32
  asset.image = image;
33
+ asset.width = image.width;
34
+ asset.height = image.height;
33
35
  asset.url = buildAssetUrl(src, image.crop);
34
36
  }
35
37
  return asset;
@@ -50,12 +52,16 @@ const assetImageToEditorValue = (image)=>{
50
52
  };
51
53
  const applyImageEditToAsset = (asset, edit)=>{
52
54
  const crop = edit.crop ?? void 0;
55
+ const width = asset.image?.width ?? asset.width;
56
+ const height = asset.image?.height ?? asset.height;
53
57
  return {
54
58
  ...asset,
55
59
  url: buildAssetUrl(asset.src, crop),
60
+ width,
61
+ height,
56
62
  image: {
57
- width: asset.image?.width,
58
- height: asset.image?.height,
63
+ width,
64
+ height,
59
65
  crop,
60
66
  focalPoint: edit.hotspot ? {
61
67
  x: edit.hotspot.x,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/fieldRenderers/assetValue.js","sources":["../../../src/presentation/fieldRenderers/assetValue.ts"],"sourcesContent":["import type { ImageEditorValue } from \"@webiny/admin-ui\";\nimport type { FileManagerFileItem } from \"@webiny/app-admin/base/ui/FileManager.js\";\nimport type { Asset, AssetImage } from \"@webiny/sdk\";\n\nexport type { Asset, AssetImage };\n\nexport const isImageAsset = (asset: Asset | null | undefined): boolean => {\n return typeof asset?.type === \"string\" && asset.type.startsWith(\"image/\");\n};\n\nexport const hasAsset = (asset: Asset | null | undefined): boolean => {\n return typeof asset?.src === \"string\" && asset.src.length > 0;\n};\n\nconst isFullCrop = (crop: AssetImage[\"crop\"]): boolean => {\n return !crop || (crop.top === 0 && crop.left === 0 && crop.bottom === 0 && crop.right === 0);\n};\n\nconst isCenteredFocal = (focalPoint: AssetImage[\"focalPoint\"]): boolean => {\n return !focalPoint || (focalPoint.x === 0.5 && focalPoint.y === 0.5);\n};\n\nexport const hasImageEdit = (image: AssetImage | null | undefined): boolean => {\n if (!image) {\n return false;\n }\n return !isFullCrop(image.crop) || !isCenteredFocal(image.focalPoint);\n};\n\ninterface FileImageMetadata {\n width?: number;\n height?: number;\n crop?: { top: number; left: number; bottom: number; right: number };\n focalPoint?: { x: number; y: number };\n alt?: string;\n caption?: string;\n}\n\nexport const fileItemToAsset = (file: FileManagerFileItem): Asset => {\n const src = file.src;\n const asset: Asset = {\n id: file.id,\n src,\n url: src,\n name: file.name,\n type: file.type,\n size: file.size\n };\n if (typeof file.type === \"string\" && file.type.startsWith(\"image/\")) {\n const meta = file.metadata?.image as FileImageMetadata | undefined;\n const image: AssetImage = {\n width: meta?.width ?? file.width,\n height: meta?.height ?? file.height\n };\n if (meta?.crop) {\n image.crop = meta.crop;\n }\n if (meta?.focalPoint) {\n image.focalPoint = { x: meta.focalPoint.x, y: meta.focalPoint.y };\n }\n if (meta?.alt) {\n image.alt = meta.alt;\n }\n if (meta?.caption) {\n image.caption = meta.caption;\n }\n asset.image = image;\n asset.url = buildAssetUrl(src, image.crop);\n }\n return asset;\n};\n\nexport const assetImageToEditorValue = (\n image: AssetImage | null | undefined\n): ImageEditorValue | undefined => {\n if (!image) {\n return undefined;\n }\n return {\n crop: image.crop ?? undefined,\n hotspot: image.focalPoint\n ? { x: image.focalPoint.x, y: image.focalPoint.y, width: 1, height: 1 }\n : undefined,\n alt: image.alt ?? undefined,\n caption: image.caption ?? undefined\n };\n};\n\nexport const applyImageEditToAsset = (asset: Asset, edit: ImageEditorValue): Asset => {\n const crop = edit.crop ?? undefined;\n return {\n ...asset,\n url: buildAssetUrl(asset.src, crop),\n image: {\n width: asset.image?.width,\n height: asset.image?.height,\n crop,\n focalPoint: edit.hotspot ? { x: edit.hotspot.x, y: edit.hotspot.y } : undefined,\n alt: edit.alt ?? undefined,\n caption: edit.caption ?? undefined\n }\n };\n};\n\nconst round = (n: number): number => Math.round(n * 10000) / 10000;\n\nfunction buildAssetUrl(src: string, crop: AssetImage[\"crop\"] | null | undefined): string {\n if (!crop) {\n return src;\n }\n const top = crop.top ?? 0;\n const left = crop.left ?? 0;\n const bottom = crop.bottom ?? 0;\n const right = crop.right ?? 0;\n if (top === 0 && left === 0 && bottom === 0 && right === 0) {\n return src;\n }\n const param = [top, left, bottom, right].map(round).join(\",\");\n const separator = src.includes(\"?\") ? \"&\" : \"?\";\n return `${src}${separator}crop=${param}`;\n}\n"],"names":["isImageAsset","asset","hasAsset","isFullCrop","crop","isCenteredFocal","focalPoint","hasImageEdit","image","fileItemToAsset","file","src","meta","buildAssetUrl","assetImageToEditorValue","undefined","applyImageEditToAsset","edit","round","n","Math","top","left","bottom","right","param","separator"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/fieldRenderers/assetValue.js","sources":["../../../src/presentation/fieldRenderers/assetValue.ts"],"sourcesContent":["import type { ImageEditorValue } from \"@webiny/admin-ui\";\nimport type { FileManagerFileItem } from \"@webiny/app-admin/base/ui/FileManager.js\";\nimport type { Asset, AssetImage } from \"@webiny/sdk\";\n\nexport type { Asset, AssetImage };\n\nexport const isImageAsset = (asset: Asset | null | undefined): boolean => {\n return typeof asset?.mimeType === \"string\" && asset.mimeType.startsWith(\"image/\");\n};\n\nexport const hasAsset = (asset: Asset | null | undefined): boolean => {\n return typeof asset?.src === \"string\" && asset.src.length > 0;\n};\n\nconst isFullCrop = (crop: AssetImage[\"crop\"]): boolean => {\n return !crop || (crop.top === 0 && crop.left === 0 && crop.bottom === 0 && crop.right === 0);\n};\n\nconst isCenteredFocal = (focalPoint: AssetImage[\"focalPoint\"]): boolean => {\n return !focalPoint || (focalPoint.x === 0.5 && focalPoint.y === 0.5);\n};\n\nexport const hasImageEdit = (image: AssetImage | null | undefined): boolean => {\n if (!image) {\n return false;\n }\n return !isFullCrop(image.crop) || !isCenteredFocal(image.focalPoint);\n};\n\ninterface FileImageMetadata {\n width?: number;\n height?: number;\n crop?: { top: number; left: number; bottom: number; right: number };\n focalPoint?: { x: number; y: number };\n alt?: string;\n caption?: string;\n}\n\nexport const fileItemToAsset = (file: FileManagerFileItem): Asset => {\n const src = file.src;\n const asset: Asset = {\n id: file.id,\n src,\n url: src,\n name: file.name,\n mimeType: file.type,\n size: file.size\n };\n if (typeof file.type === \"string\" && file.type.startsWith(\"image/\")) {\n const meta = file.metadata?.image as FileImageMetadata | undefined;\n const image: AssetImage = {\n width: meta?.width ?? file.width,\n height: meta?.height ?? file.height\n };\n if (meta?.crop) {\n image.crop = meta.crop;\n }\n if (meta?.focalPoint) {\n image.focalPoint = { x: meta.focalPoint.x, y: meta.focalPoint.y };\n }\n if (meta?.alt) {\n image.alt = meta.alt;\n }\n if (meta?.caption) {\n image.caption = meta.caption;\n }\n asset.image = image;\n // Root dimensions mirror `image.*` for consumers that read them at the root.\n asset.width = image.width;\n asset.height = image.height;\n asset.url = buildAssetUrl(src, image.crop);\n }\n return asset;\n};\n\nexport const assetImageToEditorValue = (\n image: AssetImage | null | undefined\n): ImageEditorValue | undefined => {\n if (!image) {\n return undefined;\n }\n return {\n crop: image.crop ?? undefined,\n hotspot: image.focalPoint\n ? { x: image.focalPoint.x, y: image.focalPoint.y, width: 1, height: 1 }\n : undefined,\n alt: image.alt ?? undefined,\n caption: image.caption ?? undefined\n };\n};\n\nexport const applyImageEditToAsset = (asset: Asset, edit: ImageEditorValue): Asset => {\n const crop = edit.crop ?? undefined;\n const width = asset.image?.width ?? asset.width;\n const height = asset.image?.height ?? asset.height;\n return {\n ...asset,\n url: buildAssetUrl(asset.src, crop),\n width,\n height,\n image: {\n width,\n height,\n crop,\n focalPoint: edit.hotspot ? { x: edit.hotspot.x, y: edit.hotspot.y } : undefined,\n alt: edit.alt ?? undefined,\n caption: edit.caption ?? undefined\n }\n };\n};\n\nconst round = (n: number): number => Math.round(n * 10000) / 10000;\n\nfunction buildAssetUrl(src: string, crop: AssetImage[\"crop\"] | null | undefined): string {\n if (!crop) {\n return src;\n }\n const top = crop.top ?? 0;\n const left = crop.left ?? 0;\n const bottom = crop.bottom ?? 0;\n const right = crop.right ?? 0;\n if (top === 0 && left === 0 && bottom === 0 && right === 0) {\n return src;\n }\n const param = [top, left, bottom, right].map(round).join(\",\");\n const separator = src.includes(\"?\") ? \"&\" : \"?\";\n return `${src}${separator}crop=${param}`;\n}\n"],"names":["isImageAsset","asset","hasAsset","isFullCrop","crop","isCenteredFocal","focalPoint","hasImageEdit","image","fileItemToAsset","file","src","meta","buildAssetUrl","assetImageToEditorValue","undefined","applyImageEditToAsset","edit","width","height","round","n","Math","top","left","bottom","right","param","separator"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,54 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { applyImageEditToAsset, fileItemToAsset, isImageAsset } from "./assetValue.js";
3
+ describe("assetValue", ()=>{
4
+ it("fileItemToAsset writes mimeType and image dimensions at the root and in image", ()=>{
5
+ const asset = fileItemToAsset({
6
+ id: "file-1",
7
+ src: "https://cdn.test/files/file-1/cat.jpg",
8
+ name: "cat.jpg",
9
+ type: "image/jpeg",
10
+ size: 1234,
11
+ width: 1200,
12
+ height: 800
13
+ });
14
+ expect(asset.mimeType).toBe("image/jpeg");
15
+ expect(asset.width).toBe(1200);
16
+ expect(asset.height).toBe(800);
17
+ expect(asset.image).toEqual({
18
+ width: 1200,
19
+ height: 800
20
+ });
21
+ expect(isImageAsset(asset)).toBe(true);
22
+ });
23
+ it("applyImageEditToAsset keeps the root dimensions in sync and sets the cropped url", ()=>{
24
+ const asset = fileItemToAsset({
25
+ id: "file-1",
26
+ src: "https://cdn.test/files/file-1/cat.jpg",
27
+ name: "cat.jpg",
28
+ type: "image/jpeg",
29
+ size: 1234,
30
+ width: 1200,
31
+ height: 800
32
+ });
33
+ const edited = applyImageEditToAsset(asset, {
34
+ crop: {
35
+ top: 0.1,
36
+ left: 0,
37
+ bottom: 0.1,
38
+ right: 0
39
+ },
40
+ alt: "A cat"
41
+ });
42
+ expect(edited.width).toBe(1200);
43
+ expect(edited.height).toBe(800);
44
+ expect(edited.image).toMatchObject({
45
+ width: 1200,
46
+ height: 800,
47
+ alt: "A cat"
48
+ });
49
+ expect(edited.url).toBe("https://cdn.test/files/file-1/cat.jpg?crop=0.1,0,0.1,0");
50
+ expect(edited.src).toBe("https://cdn.test/files/file-1/cat.jpg");
51
+ });
52
+ });
53
+
54
+ //# sourceMappingURL=assetValue.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/fieldRenderers/assetValue.test.js","sources":["../../../src/presentation/fieldRenderers/assetValue.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { applyImageEditToAsset, fileItemToAsset, isImageAsset } from \"./assetValue.js\";\n\ndescribe(\"assetValue\", () => {\n it(\"fileItemToAsset writes mimeType and image dimensions at the root and in image\", () => {\n const asset = fileItemToAsset({\n id: \"file-1\",\n src: \"https://cdn.test/files/file-1/cat.jpg\",\n name: \"cat.jpg\",\n type: \"image/jpeg\",\n size: 1234,\n width: 1200,\n height: 800\n });\n\n expect(asset.mimeType).toBe(\"image/jpeg\");\n expect(asset.width).toBe(1200);\n expect(asset.height).toBe(800);\n expect(asset.image).toEqual({ width: 1200, height: 800 });\n expect(isImageAsset(asset)).toBe(true);\n });\n\n it(\"applyImageEditToAsset keeps the root dimensions in sync and sets the cropped url\", () => {\n const asset = fileItemToAsset({\n id: \"file-1\",\n src: \"https://cdn.test/files/file-1/cat.jpg\",\n name: \"cat.jpg\",\n type: \"image/jpeg\",\n size: 1234,\n width: 1200,\n height: 800\n });\n\n const edited = applyImageEditToAsset(asset, {\n crop: { top: 0.1, left: 0, bottom: 0.1, right: 0 },\n alt: \"A cat\"\n });\n\n expect(edited.width).toBe(1200);\n expect(edited.height).toBe(800);\n expect(edited.image).toMatchObject({ width: 1200, height: 800, alt: \"A cat\" });\n expect(edited.url).toBe(\"https://cdn.test/files/file-1/cat.jpg?crop=0.1,0,0.1,0\");\n expect(edited.src).toBe(\"https://cdn.test/files/file-1/cat.jpg\");\n });\n});\n"],"names":["describe","it","asset","fileItemToAsset","expect","isImageAsset","edited","applyImageEditToAsset"],"mappings":";;AAGAA,SAAS,cAAc;IACnBC,GAAG,iFAAiF;QAChF,MAAMC,QAAQC,gBAAgB;YAC1B,IAAI;YACJ,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;QACZ;QAEAC,OAAOF,MAAM,QAAQ,EAAE,IAAI,CAAC;QAC5BE,OAAOF,MAAM,KAAK,EAAE,IAAI,CAAC;QACzBE,OAAOF,MAAM,MAAM,EAAE,IAAI,CAAC;QAC1BE,OAAOF,MAAM,KAAK,EAAE,OAAO,CAAC;YAAE,OAAO;YAAM,QAAQ;QAAI;QACvDE,OAAOC,aAAaH,QAAQ,IAAI,CAAC;IACrC;IAEAD,GAAG,oFAAoF;QACnF,MAAMC,QAAQC,gBAAgB;YAC1B,IAAI;YACJ,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;QACZ;QAEA,MAAMG,SAASC,sBAAsBL,OAAO;YACxC,MAAM;gBAAE,KAAK;gBAAK,MAAM;gBAAG,QAAQ;gBAAK,OAAO;YAAE;YACjD,KAAK;QACT;QAEAE,OAAOE,OAAO,KAAK,EAAE,IAAI,CAAC;QAC1BF,OAAOE,OAAO,MAAM,EAAE,IAAI,CAAC;QAC3BF,OAAOE,OAAO,KAAK,EAAE,aAAa,CAAC;YAAE,OAAO;YAAM,QAAQ;YAAK,KAAK;QAAQ;QAC5EF,OAAOE,OAAO,GAAG,EAAE,IAAI,CAAC;QACxBF,OAAOE,OAAO,GAAG,EAAE,IAAI,CAAC;IAC5B;AACJ"}