@redneckz/wildless-cms-uni-blocks 0.4.4 → 0.4.5

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 (123) hide show
  1. package/bundle/blocks.schema.json +1 -1
  2. package/bundle/bundle.umd.js +38 -11
  3. package/bundle/bundle.umd.min.js +1 -1
  4. package/dist/components/BenefitsBlock/BenefitsBlock.js +32 -9
  5. package/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  6. package/dist/components/BenefitsBlock/BenefitsBlockContent.d.ts +9 -2
  7. package/dist/content-page-repository/transformContentPage.js +9 -3
  8. package/dist/content-page-repository/transformContentPage.js.map +1 -1
  9. package/dist/content-page-repository/transformImg.d.ts +11 -0
  10. package/dist/content-page-repository/transformImg.js +100 -0
  11. package/dist/content-page-repository/transformImg.js.map +1 -0
  12. package/dist/content-page-repository/transformPicture.js +15 -40
  13. package/dist/content-page-repository/transformPicture.js.map +1 -1
  14. package/dist/content-page-repository/transformSrc.d.ts +3 -0
  15. package/dist/content-page-repository/transformSrc.js +20 -0
  16. package/dist/content-page-repository/transformSrc.js.map +1 -0
  17. package/dist/model/ImageSize.d.ts +6 -0
  18. package/dist/model/ImageSize.js +2 -0
  19. package/dist/model/ImageSize.js.map +1 -0
  20. package/dist/model/Picture.d.ts +19 -6
  21. package/dist/ui-kit/Img/ImgAsPicture.js +6 -2
  22. package/dist/ui-kit/Img/ImgAsPicture.js.map +1 -1
  23. package/dist/utils/isPictureSizeEmpty.d.ts +2 -0
  24. package/dist/utils/isPictureSizeEmpty.js +7 -0
  25. package/dist/utils/isPictureSizeEmpty.js.map +1 -0
  26. package/lib/common.css +1 -1
  27. package/lib/components/BenefitsBlock/BenefitsBlock.fixture.d.ts +2 -0
  28. package/lib/components/BenefitsBlock/BenefitsBlock.js +32 -9
  29. package/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  30. package/lib/components/BenefitsBlock/BenefitsBlockContent.d.ts +9 -2
  31. package/lib/content-page-repository/transformContentPage.js +9 -3
  32. package/lib/content-page-repository/transformContentPage.js.map +1 -1
  33. package/lib/content-page-repository/transformImg.d.ts +11 -0
  34. package/lib/content-page-repository/transformImg.js +94 -0
  35. package/lib/content-page-repository/transformImg.js.map +1 -0
  36. package/lib/content-page-repository/transformPicture.js +15 -40
  37. package/lib/content-page-repository/transformPicture.js.map +1 -1
  38. package/lib/content-page-repository/transformSrc.d.ts +3 -0
  39. package/lib/content-page-repository/transformSrc.js +14 -0
  40. package/lib/content-page-repository/transformSrc.js.map +1 -0
  41. package/lib/model/ImageSize.d.ts +6 -0
  42. package/lib/model/ImageSize.js +2 -0
  43. package/lib/model/ImageSize.js.map +1 -0
  44. package/lib/model/Picture.d.ts +19 -6
  45. package/lib/ui-kit/Img/ImgAsPicture.js +6 -2
  46. package/lib/ui-kit/Img/ImgAsPicture.js.map +1 -1
  47. package/lib/utils/isPictureSizeEmpty.d.ts +2 -0
  48. package/lib/utils/isPictureSizeEmpty.js +4 -0
  49. package/lib/utils/isPictureSizeEmpty.js.map +1 -0
  50. package/mobile/bundle/bundle.umd.js +6 -2
  51. package/mobile/bundle/bundle.umd.min.js +1 -1
  52. package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js +32 -9
  53. package/mobile/dist/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  54. package/mobile/dist/components/BenefitsBlock/BenefitsBlockContent.d.ts +9 -2
  55. package/mobile/dist/content-page-repository/transformContentPage.js +9 -3
  56. package/mobile/dist/content-page-repository/transformContentPage.js.map +1 -1
  57. package/mobile/dist/content-page-repository/transformImg.d.ts +11 -0
  58. package/mobile/dist/content-page-repository/transformImg.js +100 -0
  59. package/mobile/dist/content-page-repository/transformImg.js.map +1 -0
  60. package/mobile/dist/content-page-repository/transformPicture.js +15 -40
  61. package/mobile/dist/content-page-repository/transformPicture.js.map +1 -1
  62. package/mobile/dist/content-page-repository/transformSrc.d.ts +3 -0
  63. package/mobile/dist/content-page-repository/transformSrc.js +20 -0
  64. package/mobile/dist/content-page-repository/transformSrc.js.map +1 -0
  65. package/mobile/dist/model/ImageSize.d.ts +6 -0
  66. package/mobile/dist/model/ImageSize.js +2 -0
  67. package/mobile/dist/model/ImageSize.js.map +1 -0
  68. package/mobile/dist/model/Picture.d.ts +19 -6
  69. package/mobile/dist/ui-kit/Img/ImgAsPicture.js +6 -2
  70. package/mobile/dist/ui-kit/Img/ImgAsPicture.js.map +1 -1
  71. package/mobile/dist/utils/isPictureSizeEmpty.d.ts +2 -0
  72. package/mobile/dist/utils/isPictureSizeEmpty.js +7 -0
  73. package/mobile/dist/utils/isPictureSizeEmpty.js.map +1 -0
  74. package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js +32 -9
  75. package/mobile/lib/components/BenefitsBlock/BenefitsBlock.js.map +1 -1
  76. package/mobile/lib/components/BenefitsBlock/BenefitsBlockContent.d.ts +9 -2
  77. package/mobile/lib/content-page-repository/transformContentPage.js +9 -3
  78. package/mobile/lib/content-page-repository/transformContentPage.js.map +1 -1
  79. package/mobile/lib/content-page-repository/transformImg.d.ts +11 -0
  80. package/mobile/lib/content-page-repository/transformImg.js +94 -0
  81. package/mobile/lib/content-page-repository/transformImg.js.map +1 -0
  82. package/mobile/lib/content-page-repository/transformPicture.js +15 -40
  83. package/mobile/lib/content-page-repository/transformPicture.js.map +1 -1
  84. package/mobile/lib/content-page-repository/transformSrc.d.ts +3 -0
  85. package/mobile/lib/content-page-repository/transformSrc.js +14 -0
  86. package/mobile/lib/content-page-repository/transformSrc.js.map +1 -0
  87. package/mobile/lib/model/ImageSize.d.ts +6 -0
  88. package/mobile/lib/model/ImageSize.js +2 -0
  89. package/mobile/lib/model/ImageSize.js.map +1 -0
  90. package/mobile/lib/model/Picture.d.ts +19 -6
  91. package/mobile/lib/ui-kit/Img/ImgAsPicture.js +6 -2
  92. package/mobile/lib/ui-kit/Img/ImgAsPicture.js.map +1 -1
  93. package/mobile/lib/utils/isPictureSizeEmpty.d.ts +2 -0
  94. package/mobile/lib/utils/isPictureSizeEmpty.js +4 -0
  95. package/mobile/lib/utils/isPictureSizeEmpty.js.map +1 -0
  96. package/mobile/src/components/BenefitsBlock/BenefitsBlock.example.json +1 -0
  97. package/mobile/src/components/BenefitsBlock/BenefitsBlock.tsx +78 -28
  98. package/mobile/src/components/BenefitsBlock/BenefitsBlockContent.ts +10 -2
  99. package/mobile/src/components/ContentPage/ContentPage.page.json +1 -2
  100. package/mobile/src/components/__snapshots__/Blocks.spec.tsx.snap +1 -1
  101. package/mobile/src/content-page-repository/transformContentPage.ts +10 -3
  102. package/mobile/src/content-page-repository/transformImg.ts +157 -0
  103. package/mobile/src/content-page-repository/transformPicture.ts +24 -58
  104. package/mobile/src/content-page-repository/transformSrc.ts +21 -0
  105. package/mobile/src/model/ImageSize.ts +6 -0
  106. package/mobile/src/model/Picture.ts +29 -6
  107. package/mobile/src/ui-kit/Img/ImgAsPicture.tsx +8 -2
  108. package/mobile/src/utils/isPictureSizeEmpty.ts +5 -0
  109. package/package.json +2 -1
  110. package/src/components/BenefitsBlock/BenefitsBlock.example.json +1 -0
  111. package/src/components/BenefitsBlock/BenefitsBlock.fixture.tsx +94 -1
  112. package/src/components/BenefitsBlock/BenefitsBlock.tsx +78 -28
  113. package/src/components/BenefitsBlock/BenefitsBlockContent.ts +10 -2
  114. package/src/components/ContentPage/ContentPage.page.json +1 -2
  115. package/src/components/__snapshots__/Blocks.spec.tsx.snap +1 -1
  116. package/src/content-page-repository/transformContentPage.ts +10 -3
  117. package/src/content-page-repository/transformImg.ts +157 -0
  118. package/src/content-page-repository/transformPicture.ts +24 -58
  119. package/src/content-page-repository/transformSrc.ts +21 -0
  120. package/src/model/ImageSize.ts +6 -0
  121. package/src/model/Picture.ts +29 -6
  122. package/src/ui-kit/Img/ImgAsPicture.tsx +8 -2
  123. package/src/utils/isPictureSizeEmpty.ts +5 -0
@@ -0,0 +1,100 @@
1
+ var __importDefault = (this && this.__importDefault) || function (mod) {
2
+ return (mod && mod.__esModule) ? mod : { "default": mod };
3
+ };
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.transformImg = void 0;
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const util_1 = __importDefault(require("util"));
9
+ const sharp_1 = __importDefault(require("sharp"));
10
+ const transformSrc_1 = require("./transformSrc");
11
+ const isPictureSizeEmpty_1 = require("../utils/isPictureSizeEmpty");
12
+ const mkdir = util_1.default.promisify(fs_1.default.mkdir);
13
+ async function transformImg({ pagePath, src, containerSize, transformationOptions, }) {
14
+ if (!src) {
15
+ return '';
16
+ }
17
+ const { contentDir, publicDir, format, options, size, alignment } = transformationOptions;
18
+ const pageDir = path_1.default.dirname(pagePath);
19
+ const imgPath = `${pageDir}/${src}`;
20
+ let chain = (0, sharp_1.default)(imgPath);
21
+ const targetSize = getPictureSize(size, containerSize);
22
+ if (targetSize) {
23
+ chain = resizeImg(chain, targetSize, getResizeFit(targetSize));
24
+ }
25
+ if (containerSize) {
26
+ chain = resizeImg(chain, containerSize);
27
+ // Save intermediate transform result to modify further
28
+ const { data } = await chain.toBuffer({ resolveWithObject: true });
29
+ chain = resizeImg((0, sharp_1.default)(data), getCompositionResizeSize(containerSize, targetSize), getResizeFit(targetSize));
30
+ chain = await compositeImg({ chain, containerSize, alignment });
31
+ }
32
+ if (format) {
33
+ chain = chain.toFormat(format, options);
34
+ }
35
+ const transformedSrc = (0, transformSrc_1.transformSrc)(src, transformationOptions);
36
+ const transformedImgPath = `${publicDir}/${path_1.default.relative(contentDir, `${path_1.default.dirname(pagePath)}/${transformedSrc}`)}`;
37
+ await mkdir(path_1.default.dirname(transformedImgPath), { recursive: true });
38
+ try {
39
+ await chain.toFile(transformedImgPath);
40
+ }
41
+ catch (e) {
42
+ console.error(e);
43
+ }
44
+ return transformedSrc;
45
+ }
46
+ exports.transformImg = transformImg;
47
+ function createBackgroundImageChain({ width, height }) {
48
+ const channels = 4;
49
+ const rgbaColor = 0x00000000;
50
+ const canvas = Buffer.alloc(width * height * channels, rgbaColor);
51
+ return (0, sharp_1.default)(canvas, { raw: { width, height, channels } });
52
+ }
53
+ function resizeImg(chain, size, options) {
54
+ return chain.resize(size?.width, size?.height, {
55
+ fit: sharp_1.default.fit.fill,
56
+ background: { r: 0, g: 0, b: 0, alpha: 0 },
57
+ ...options,
58
+ });
59
+ }
60
+ async function compositeImg({ chain, containerSize, alignment, }) {
61
+ const { data } = await chain.toBuffer({ resolveWithObject: true });
62
+ return createBackgroundImageChain(containerSize).composite([
63
+ {
64
+ input: data,
65
+ gravity: alignment,
66
+ },
67
+ ]);
68
+ }
69
+ function getPictureSize(size, containerSize) {
70
+ // If containerSize is undefined intrinsic dimensions of image will be used then.
71
+ return (0, isPictureSizeEmpty_1.isPictureSizeEmpty)(size) ? containerSize : size;
72
+ }
73
+ function getCompositionResizeSize(containerSize, size = {}) {
74
+ const { width, height } = size;
75
+ const { width: containerWidth, height: containerHeight } = containerSize;
76
+ let widthRatio = 0;
77
+ let heightRatio = 0;
78
+ if (!(width || height)) {
79
+ return undefined;
80
+ }
81
+ if (width) {
82
+ widthRatio = containerWidth / width;
83
+ }
84
+ if (height) {
85
+ heightRatio = containerHeight / height;
86
+ }
87
+ return widthRatio > heightRatio
88
+ ? { width: Math.min(Number(width), containerWidth) }
89
+ : { height: Math.min(Number(height), containerHeight) };
90
+ }
91
+ function getResizeFit(size) {
92
+ /*
93
+ Editor behaviour with one dimension present: resize by given dimension maintaining aspect ratio. (fit: contain)
94
+ With two dimensions present: resize trying to fill given dimensions (fit: fill)
95
+ */
96
+ return {
97
+ fit: size?.width && size?.height ? sharp_1.default.fit.fill : sharp_1.default.fit.contain,
98
+ };
99
+ }
100
+ //# sourceMappingURL=transformImg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformImg.js","sourceRoot":"","sources":["../../src/content-page-repository/transformImg.ts"],"names":[],"mappings":"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"}
@@ -3,59 +3,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  };
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.transformPicture = void 0;
6
- const fs_1 = __importDefault(require("fs"));
7
6
  const path_1 = __importDefault(require("path"));
8
7
  const sharp_1 = __importDefault(require("sharp"));
9
- const util_1 = __importDefault(require("util"));
10
- const mkdir = util_1.default.promisify(fs_1.default.mkdir);
8
+ const transformImg_1 = require("./transformImg");
11
9
  async function transformPicture(pagePath, picture, options) {
12
10
  const sources = picture.sources || [];
13
11
  const src = picture?.src || '';
14
- const [transformedPicture, ...transformedSources] = await Promise.all([picture].concat(sources).map((_) => transformImg(pagePath, src, { ...options, ..._ })));
12
+ const transformedPicture = await (0, transformImg_1.transformImg)({
13
+ pagePath,
14
+ src,
15
+ transformationOptions: { ...options, ...picture },
16
+ });
17
+ const { width, height } = await (0, sharp_1.default)(path_1.default.resolve(options.publicDir, transformedPicture)).metadata();
18
+ const containerSize = width && height ? { width, height } : undefined;
19
+ const transformedSources = await Promise.all(sources.map((_) => (0, transformImg_1.transformImg)({
20
+ pagePath,
21
+ src,
22
+ containerSize,
23
+ transformationOptions: { ...options, ..._ },
24
+ })));
15
25
  return {
16
26
  ...picture,
17
27
  src: transformedPicture,
18
28
  sources: transformedSources.map((_, i) => ({
19
29
  ...sources[i],
20
30
  src: _,
31
+ size: { width, height },
21
32
  })),
22
33
  };
23
34
  }
24
35
  exports.transformPicture = transformPicture;
25
- async function transformImg(pagePath, src, transformationOptions) {
26
- const { contentDir, publicDir, format, options, size } = transformationOptions;
27
- const pageDir = path_1.default.dirname(pagePath);
28
- const imgPath = `${pageDir}/${src}`;
29
- let chain = (0, sharp_1.default)(imgPath);
30
- if (size) {
31
- chain = chain.resize(size?.width, size?.height, {
32
- fit: sharp_1.default.fit.contain,
33
- background: [0, 0, 0, 0],
34
- });
35
- }
36
- if (format) {
37
- chain = chain.toFormat(format, options);
38
- }
39
- const transformedSrc = transformSrc(src, transformationOptions);
40
- const transformedImgPath = `${publicDir}/${path_1.default.relative(contentDir, `${path_1.default.dirname(pagePath)}/${transformedSrc}`)}`;
41
- await mkdir(path_1.default.dirname(transformedImgPath), { recursive: true });
42
- try {
43
- await chain.toFile(transformedImgPath);
44
- }
45
- catch (e) {
46
- console.error(e);
47
- }
48
- return transformedSrc;
49
- }
50
- function transformSrc(src, { format, size }) {
51
- const noTransform = !format && !size;
52
- if (noTransform) {
53
- return src;
54
- }
55
- const fileName = path_1.default.basename(src, path_1.default.extname(src));
56
- const fileSizes = [size?.width, size?.height].filter(Boolean);
57
- const suffix = fileSizes.length ? `-${fileSizes.join('-')}` : '';
58
- const ext = String(format) || path_1.default.extname(src);
59
- return `${fileName}${suffix}.${ext}`;
60
- }
61
36
  //# sourceMappingURL=transformPicture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformPicture.js","sourceRoot":"","sources":["../../src/content-page-repository/transformPicture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformPicture.js","sourceRoot":"","sources":["../../src/content-page-repository/transformPicture.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAG1B,iDAA8C;AAEvC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,OAAgB,EAChB,OAA8B;IAE9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAE/B,MAAM,kBAAkB,GAAG,MAAM,IAAA,2BAAY,EAAC;QAC5C,QAAQ;QACR,GAAG;QACH,qBAAqB,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE;KAClD,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,eAAK,EACnC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CACpD,CAAC,QAAQ,EAAE,CAAC;IACb,MAAM,aAAa,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAChB,IAAA,2BAAY,EAAC;QACX,QAAQ;QACR,GAAG;QACH,aAAa;QACb,qBAAqB,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,EAAE;KAC5C,CAAC,CACH,CACF,CAAC;IAEF,OAAO;QACL,GAAG,OAAO;QACV,GAAG,EAAE,kBAAkB;QACvB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,OAAO,CAAC,CAAC,CAAC;YACb,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SACxB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAvCD,4CAuCC"}
@@ -0,0 +1,3 @@
1
+ import type { ImgSource } from '../model/Picture';
2
+ import type { TransformationOptions } from './TransformationOptions';
3
+ export declare function transformSrc(src: string, { format, size }: TransformationOptions & ImgSource): string;
@@ -0,0 +1,20 @@
1
+ var __importDefault = (this && this.__importDefault) || function (mod) {
2
+ return (mod && mod.__esModule) ? mod : { "default": mod };
3
+ };
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.transformSrc = void 0;
6
+ const path_1 = __importDefault(require("path"));
7
+ const isPictureSizeEmpty_1 = require("../utils/isPictureSizeEmpty");
8
+ function transformSrc(src, { format, size }) {
9
+ const noTransform = (0, isPictureSizeEmpty_1.isPictureSizeEmpty)(size) && !format;
10
+ if (noTransform) {
11
+ return src;
12
+ }
13
+ const fileName = path_1.default.basename(src, path_1.default.extname(src));
14
+ const fileSizes = [size?.width, size?.height].filter(Boolean);
15
+ const suffix = fileSizes.length ? `-${fileSizes.join('-')}` : '';
16
+ const ext = format ? String(format) : 'webp';
17
+ return `${fileName}${suffix}.${ext}`;
18
+ }
19
+ exports.transformSrc = transformSrc;
20
+ //# sourceMappingURL=transformSrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformSrc.js","sourceRoot":"","sources":["../../src/content-page-repository/transformSrc.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAGxB,oEAAiE;AAEjE,SAAgB,YAAY,CAC1B,GAAW,EACX,EAAE,MAAM,EAAE,IAAI,EAAqC;IAEnD,MAAM,WAAW,GAAG,IAAA,uCAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxD,IAAI,WAAW,EAAE;QACf,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7C,OAAO,GAAG,QAAQ,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;AACvC,CAAC;AAfD,oCAeC"}
@@ -0,0 +1,6 @@
1
+ export declare type ImageSize = {
2
+ /** @title Ширина */
3
+ width: number;
4
+ /** @title Высота */
5
+ height: number;
6
+ };
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ //# sourceMappingURL=ImageSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageSize.js","sourceRoot":"","sources":["../../src/model/ImageSize.ts"],"names":[],"mappings":""}
@@ -1,6 +1,23 @@
1
1
  import type { IconName } from '../icons/IconName';
2
2
  import type { IconVersion } from './IconVersion';
3
+ import { ImageSize } from './ImageSize';
3
4
  export declare type ImgFormats = 'jpeg' | 'jpg' | 'png' | 'gif' | 'webp' | 'heif' | 'avif';
5
+ /**
6
+ * @title Позиционирование
7
+ * @enumNames [
8
+ * "Сверху слева",
9
+ * "Сверху по центру",
10
+ * "Сверху справа",
11
+ * "Посередине слева",
12
+ * "Посередине по центру",
13
+ * "Посередине справа",
14
+ * "Снизу слева",
15
+ * "Снизу по центру",
16
+ * "Снизу справа"
17
+ * ]
18
+ * @default "center"
19
+ */
20
+ export declare type ImgAlignment = 'northwest' | 'north' | 'northeast' | 'west' | 'center' | 'east' | 'southwest' | 'south' | 'southeast';
4
21
  export interface Img {
5
22
  /** @title Картинка */
6
23
  src?: string;
@@ -15,6 +32,7 @@ export interface Img {
15
32
  */
16
33
  export declare type MediaQuery = 1919 | 1439 | 1279;
17
34
  export interface ImgSource {
35
+ alignment?: ImgAlignment;
18
36
  /** @title Иконка */
19
37
  icon?: IconName;
20
38
  iconVersion?: IconVersion;
@@ -26,12 +44,7 @@ export interface ImgSource {
26
44
  options?: Record<string, any>;
27
45
  media?: MediaQuery;
28
46
  /** @title Размер изображения */
29
- size?: {
30
- /** @title Ширина */
31
- width?: number;
32
- /** @title Высота */
33
- height?: number;
34
- };
47
+ size?: Partial<ImageSize>;
35
48
  }
36
49
  /** @title Изображение */
37
50
  export interface Picture extends Img, ImgSource {
@@ -16,14 +16,18 @@ exports.ImgAsPicture = (0, uni_jsx_1.JSX)(({ className = '', image, imageClassNa
16
16
  return ((0, jsx_runtime_1.jsxs)("picture", { className: `${pictureStyles} ${className}`, children: [image?.sources?.length
17
17
  ? image.sources
18
18
  .sort(sourcesComparator)
19
- .map(({ src, format, media, size }, index) => ((0, jsx_runtime_1.jsx)("source", { srcSet: src, type: formatToMimeType(format), media: media ? `(max-width: ${media}px)` : '', ...size }, `${index}_${src}`)))
19
+ .map(({ src, format, media }, index) => ((0, jsx_runtime_1.jsx)("source", { srcSet: src, type: formatToMimeType(format), media: media ? `(max-width: ${media}px)` : '', ...image.size }, `${index}_${src}`)))
20
20
  : null, renderImg(image, imageClassName, isMobile)] }));
21
21
  });
22
22
  const renderImg = (image, imageClassName = '', isMobile = false) => {
23
+ const style = {
24
+ width: image.size?.width ? `${image.size?.width}px` : '100%',
25
+ height: image.size?.height ? `${image.size?.height}px` : '100%',
26
+ };
23
27
  const title = image.title || '';
24
28
  const alt = image.alt || image.title;
25
29
  const imgStyle = isMobile ? 'm-auto' : 'm-0';
26
- return ((0, jsx_runtime_1.jsx)("img", { src: image.src, className: `${imgStyle} ${imageClassName}`, alt: alt, title: title, ...image.size }));
30
+ return ((0, jsx_runtime_1.jsx)("img", { src: image.src, className: `${imgStyle} ${imageClassName}`, alt: alt, title: title, style: style, ...image.size }));
27
31
  };
28
32
  function formatToMimeType(format) {
29
33
  return format ? `image/${String(format)}` : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ImgAsPicture.js","sourceRoot":"","sources":["../../../src/ui-kit/Img/ImgAsPicture.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAIxC,MAAM,iBAAiB,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IACnD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;QACtB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KAC1B;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEW,QAAA,YAAY,GAAG,IAAA,aAAG,EAC7B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,EAAE;IACnE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtD,OAAO,CACL,qCAAS,SAAS,EAAE,GAAG,aAAa,IAAI,SAAS,EAAE,aAChD,KAAK,EAAE,OAAO,EAAE,MAAM;gBACrB,CAAC,CAAC,KAAK,CAAC,OAAO;qBACV,IAAI,CAAC,iBAAiB,CAAC;qBACvB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5C,mCAEE,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,KACzC,IAAI,IAJH,GAAG,KAAK,IAAI,GAAG,EAAE,CAKtB,CACH,CAAC;gBACN,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,IACnC,CACX,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,cAAc,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7C,OAAO,CACL,gCACE,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,SAAS,EAAE,GAAG,QAAQ,IAAI,cAAc,EAAE,EAC1C,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,KACR,KAAK,CAAC,IAAI,GACd,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,SAAgB,gBAAgB,CAAC,MAA2B;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAFD,4CAEC"}
1
+ {"version":3,"file":"ImgAsPicture.js","sourceRoot":"","sources":["../../../src/ui-kit/Img/ImgAsPicture.tsx"],"names":[],"mappings":";;;AAAA,+CAAwC;AAIxC,MAAM,iBAAiB,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IACnD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;QACtB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KAC1B;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEW,QAAA,YAAY,GAAG,IAAA,aAAG,EAC7B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,EAAE;IACnE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QAC9C,OAAO,IAAI,CAAC;KACb;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtD,OAAO,CACL,qCAAS,SAAS,EAAE,GAAG,aAAa,IAAI,SAAS,EAAE,aAChD,KAAK,EAAE,OAAO,EAAE,MAAM;gBACrB,CAAC,CAAC,KAAK,CAAC,OAAO;qBACV,IAAI,CAAC,iBAAiB,CAAC;qBACvB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,mCAEE,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,KACzC,KAAK,CAAC,IAAI,IAJT,GAAG,KAAK,IAAI,GAAG,EAAE,CAKtB,CACH,CAAC;gBACN,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,IACnC,CACX,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,cAAc,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;IAC1E,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;QAC5D,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;KAChE,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7C,OAAO,CACL,gCACE,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,SAAS,EAAE,GAAG,QAAQ,IAAI,cAAc,EAAE,EAC1C,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,KACR,KAAK,CAAC,IAAI,GACd,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,SAAgB,gBAAgB,CAAC,MAA2B;IAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAFD,4CAEC"}
@@ -0,0 +1,2 @@
1
+ import type { Picture } from '../model/Picture';
2
+ export declare function isPictureSizeEmpty(size: Picture['size']): boolean;
@@ -0,0 +1,7 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ exports.isPictureSizeEmpty = void 0;
3
+ function isPictureSizeEmpty(size) {
4
+ return !(size?.width || size?.height);
5
+ }
6
+ exports.isPictureSizeEmpty = isPictureSizeEmpty;
7
+ //# sourceMappingURL=isPictureSizeEmpty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPictureSizeEmpty.js","sourceRoot":"","sources":["../../src/utils/isPictureSizeEmpty.ts"],"names":[],"mappings":";;AAEA,SAAgB,kBAAkB,CAAC,IAAqB;IACtD,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAFD,gDAEC"}
@@ -3,22 +3,45 @@ import { JSX } from '@redneckz/uni-jsx';
3
3
  import { BlockWrapper } from '../../ui-kit/BlockWrapper.js';
4
4
  import { Heading } from '../../ui-kit/Heading/Heading.js';
5
5
  import { Img } from '../../ui-kit/Img/Img.js';
6
- export const BenefitsBlock = JSX(({ className = '', title, benefitList, ...rest }) => {
7
- return (_jsxs(BlockWrapper, { className: `font-sans text-primary-text bg-white p-12 flex flex-col items-center ${className}`, ...rest, children: [title ? (_jsx(Heading, { headingType: "h3", as: "h2", className: "max-w-[47rem] text-center", title: title })) : null, benefitList?.length ? renderBenefits(benefitList) : null] }));
6
+ const benefitsBlockStyleMap = {
7
+ primary: 'bg-white',
8
+ secondary: 'bg-primary-main',
9
+ };
10
+ const benefitsTextStyleMap = {
11
+ primary: '',
12
+ secondary: 'text-white',
13
+ };
14
+ const benefitsDescriptionStyleMap = {
15
+ primary: 'text-secondary-text',
16
+ secondary: 'text-white opacity-80',
17
+ };
18
+ const benefitsIconStyleMap = {
19
+ primary: 'bg-main-divider text-primary-main',
20
+ secondary: 'bg-white/30 text-black',
21
+ };
22
+ export const BenefitsBlock = JSX(({ className = '', title, benefitList, benefitsBlockVersion = 'primary', ...rest }) => {
23
+ return (_jsxs(BlockWrapper, { className: `font-sans text-primary-text p-12 flex flex-col items-center ${className} ${benefitsBlockStyleMap[benefitsBlockVersion]}`, ...rest, children: [title ? (_jsx(Heading, { headingType: "h3", as: "h2", className: `max-w-[47rem] text-center ${benefitsTextStyleMap[benefitsBlockVersion]}`, title: title })) : null, benefitList?.length ? renderBenefits(benefitList, benefitsBlockVersion) : null] }));
8
24
  });
9
- const renderBenefits = (benefits) => {
10
- return (_jsx("div", { className: "flex flex-wrap w-full justify-center gap-x-20 mt-8", children: benefits.map(renderStep) }));
25
+ const renderBenefits = (benefitList, benefitsBlockVersion) => {
26
+ return (_jsx("div", { className: "flex flex-wrap w-full justify-center gap-x-20 mt-8", children: benefitList.map(renderStep(benefitsBlockVersion)) }));
27
+ };
28
+ const setIconVersion = (benefitIcon, benefitsBlockVersion) => {
29
+ if (!benefitIcon.icon) {
30
+ return benefitIcon;
31
+ }
32
+ benefitIcon.iconVersion = benefitsBlockVersion === 'secondary' ? 'white' : 'normal';
33
+ return benefitIcon;
11
34
  };
12
- const renderStep = (benefit, i) => {
13
- const description = benefit?.description || undefined;
14
- return (_jsxs("div", { className: "flex items-center basis-1/2 max-w-[500px] mb-14", children: [benefit?.icon?.icon ? (_jsx(Img, { className: "w-[50px] h-[50px] min-w-[50px] p-3 rounded-full bg-main-divider", image: benefit.icon, asSVG: true })) : null, benefit?.icon?.src ? _jsx(Img, { image: benefit.icon }) : null, _jsxs("div", { className: "ml-5", children: [benefit?.label ? _jsx("h3", { className: "text-h6 m-0", children: benefit.label }) : null, renderDescription(description)] })] }, String(i)));
35
+ const renderStep = (benefitsBlockVersion) => (benefit, i) => {
36
+ const description = (benefit?.description || undefined);
37
+ return (_jsxs("div", { className: "flex items-center basis-1/2 max-w-[500px] mb-14", children: [benefit?.icon?.icon ? (_jsx(Img, { className: `w-[50px] h-[50px] min-w-[50px] p-3 rounded-full ${benefitsIconStyleMap[benefitsBlockVersion]}`, image: setIconVersion(benefit.icon, benefitsBlockVersion), asSVG: true })) : null, benefit?.icon?.src ? _jsx(Img, { image: benefit.icon }) : null, _jsxs("div", { className: "ml-5", children: [benefit?.label ? (_jsx("h3", { className: `text-h6 m-0 ${benefitsTextStyleMap[benefitsBlockVersion]}`, children: benefit.label })) : null, renderDescription(description, benefitsBlockVersion)] })] }, String(i)));
15
38
  };
16
- const renderDescription = (description) => {
39
+ const renderDescription = (description, benefitsBlockVersion) => {
17
40
  const benefitType = description ? description?.benefitType : null;
18
41
  if (!benefitType) {
19
42
  return null;
20
43
  }
21
- return description ? (_jsx("div", { className: "text-l-light text-secondary-text mt-2", children: benefitType === 'list'
44
+ return description ? (_jsx("div", { className: `text-l-light mt-2 ${benefitsDescriptionStyleMap[benefitsBlockVersion]}`, children: benefitType === 'list'
22
45
  ? renderListBenefit(description)
23
46
  : renderTextBenefit(description) })) : null;
24
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"BenefitsBlock.js","sourceRoot":"","sources":["../../../src/components/BenefitsBlock/BenefitsBlock.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BenefitsBlock.js","sourceRoot":"","sources":["../../../src/components/BenefitsBlock/BenefitsBlock.tsx"],"names":[],"mappings":"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"}
@@ -33,13 +33,18 @@ export declare type DescriptionDef = EmptyOption | TextBenefitDef | ListBenefitD
33
33
  /**
34
34
  * @title Преимущество
35
35
  */
36
- export interface BenefitItemProps {
36
+ export interface BenefitBlockItemProps {
37
37
  /** @title Название */
38
38
  label?: string;
39
39
  /** @title Описание */
40
40
  description?: DescriptionDef;
41
41
  icon?: Picture;
42
42
  }
43
+ /**
44
+ * @title Цвет блока
45
+ * @enumNames ["Основная", "Второстепенная"]
46
+ */
47
+ export declare type BenefitsBlockVersion = 'primary' | 'secondary';
43
48
  /**
44
49
  * @title Блок преимущества
45
50
  */
@@ -48,5 +53,7 @@ export declare type BenefitsBlockContent = TitleProps & {
48
53
  * @title Список преимуществ
49
54
  * @maxItems 6
50
55
  */
51
- benefitList?: BenefitItemProps[];
56
+ benefitList?: BenefitBlockItemProps[];
57
+ /** @default primary */
58
+ benefitsBlockVersion?: BenefitsBlockVersion;
52
59
  };
@@ -9,12 +9,17 @@ export async function transformContentPage(pagePath, options) {
9
9
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
10
10
  return mapJSON(JSON.parse(content), async (value, [key]) => {
11
11
  const isMarkdown = typeof value === 'string' && key?.endsWith('__md');
12
- const isPicture = value && isLocalPath(value?.src);
13
12
  if (isMarkdown) {
14
13
  return await transformMarkdown(value);
15
14
  }
16
- else if (isPicture) {
17
- return await transformPicture(pagePath, value, options);
15
+ else if (isPicture(value)) {
16
+ try {
17
+ return await transformPicture(pagePath, value, options);
18
+ }
19
+ catch (ex) {
20
+ console.warn('Error while transforming picture on page: %s', pagePath);
21
+ console.error(ex);
22
+ }
18
23
  }
19
24
  return value;
20
25
  });
@@ -22,4 +27,5 @@ export async function transformContentPage(pagePath, options) {
22
27
  const isLocalPath = (_) => isString(_) && _.length < 512 && !isURL(_);
23
28
  const isString = (_) => Boolean(_ && typeof _ === 'string');
24
29
  const isURL = (src) => ['data:', 'https:', 'http:'].some((proto) => src.startsWith(proto));
30
+ const isPicture = (_) => Boolean(_ && isLocalPath(_?.src));
25
31
  //# sourceMappingURL=transformContentPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformContentPage.js","sourceRoot":"","sources":["../../src/content-page-repository/transformContentPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,OAA8B;IAE9B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEjD,iEAAiE;IACjE,OAAO,OAAO,CAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QAC9E,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE;YACd,OAAO,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACvC;aAAM,IAAI,SAAS,EAAE;YACpB,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,KAAgB,EAAE,OAAO,CAAC,CAAC;SACpE;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAE9E,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"transformContentPage.js","sourceRoot":"","sources":["../../src/content-page-repository/transformContentPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,OAA8B;IAE9B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEjD,iEAAiE;IACjE,OAAO,OAAO,CAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QAC9E,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtE,IAAI,UAAU,EAAE;YACd,OAAO,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACvC;aAAM,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAI;gBACF,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;aACzD;YAAC,OAAO,EAAE,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,QAAQ,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACnB;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAE9E,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnG,MAAM,SAAS,GAAG,CAAC,CAAM,EAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ImageSize } from '../model/ImageSize';
2
+ import type { TransformationOptions } from './TransformationOptions';
3
+ import type { ImgSource } from '../model/Picture';
4
+ declare type TransformImgParams = {
5
+ pagePath: string;
6
+ src: string;
7
+ containerSize?: ImageSize;
8
+ transformationOptions: TransformationOptions & ImgSource;
9
+ };
10
+ export declare function transformImg({ pagePath, src, containerSize, transformationOptions, }: TransformImgParams): Promise<string>;
11
+ export {};
@@ -0,0 +1,94 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import util from 'util';
4
+ import sharp from 'sharp';
5
+ import { transformSrc } from './transformSrc.js';
6
+ import { isPictureSizeEmpty } from '../utils/isPictureSizeEmpty.js';
7
+ const mkdir = util.promisify(fs.mkdir);
8
+ export async function transformImg({ pagePath, src, containerSize, transformationOptions, }) {
9
+ if (!src) {
10
+ return '';
11
+ }
12
+ const { contentDir, publicDir, format, options, size, alignment } = transformationOptions;
13
+ const pageDir = path.dirname(pagePath);
14
+ const imgPath = `${pageDir}/${src}`;
15
+ let chain = sharp(imgPath);
16
+ const targetSize = getPictureSize(size, containerSize);
17
+ if (targetSize) {
18
+ chain = resizeImg(chain, targetSize, getResizeFit(targetSize));
19
+ }
20
+ if (containerSize) {
21
+ chain = resizeImg(chain, containerSize);
22
+ // Save intermediate transform result to modify further
23
+ const { data } = await chain.toBuffer({ resolveWithObject: true });
24
+ chain = resizeImg(sharp(data), getCompositionResizeSize(containerSize, targetSize), getResizeFit(targetSize));
25
+ chain = await compositeImg({ chain, containerSize, alignment });
26
+ }
27
+ if (format) {
28
+ chain = chain.toFormat(format, options);
29
+ }
30
+ const transformedSrc = transformSrc(src, transformationOptions);
31
+ const transformedImgPath = `${publicDir}/${path.relative(contentDir, `${path.dirname(pagePath)}/${transformedSrc}`)}`;
32
+ await mkdir(path.dirname(transformedImgPath), { recursive: true });
33
+ try {
34
+ await chain.toFile(transformedImgPath);
35
+ }
36
+ catch (e) {
37
+ console.error(e);
38
+ }
39
+ return transformedSrc;
40
+ }
41
+ function createBackgroundImageChain({ width, height }) {
42
+ const channels = 4;
43
+ const rgbaColor = 0x00000000;
44
+ const canvas = Buffer.alloc(width * height * channels, rgbaColor);
45
+ return sharp(canvas, { raw: { width, height, channels } });
46
+ }
47
+ function resizeImg(chain, size, options) {
48
+ return chain.resize(size?.width, size?.height, {
49
+ fit: sharp.fit.fill,
50
+ background: { r: 0, g: 0, b: 0, alpha: 0 },
51
+ ...options,
52
+ });
53
+ }
54
+ async function compositeImg({ chain, containerSize, alignment, }) {
55
+ const { data } = await chain.toBuffer({ resolveWithObject: true });
56
+ return createBackgroundImageChain(containerSize).composite([
57
+ {
58
+ input: data,
59
+ gravity: alignment,
60
+ },
61
+ ]);
62
+ }
63
+ function getPictureSize(size, containerSize) {
64
+ // If containerSize is undefined intrinsic dimensions of image will be used then.
65
+ return isPictureSizeEmpty(size) ? containerSize : size;
66
+ }
67
+ function getCompositionResizeSize(containerSize, size = {}) {
68
+ const { width, height } = size;
69
+ const { width: containerWidth, height: containerHeight } = containerSize;
70
+ let widthRatio = 0;
71
+ let heightRatio = 0;
72
+ if (!(width || height)) {
73
+ return undefined;
74
+ }
75
+ if (width) {
76
+ widthRatio = containerWidth / width;
77
+ }
78
+ if (height) {
79
+ heightRatio = containerHeight / height;
80
+ }
81
+ return widthRatio > heightRatio
82
+ ? { width: Math.min(Number(width), containerWidth) }
83
+ : { height: Math.min(Number(height), containerHeight) };
84
+ }
85
+ function getResizeFit(size) {
86
+ /*
87
+ Editor behaviour with one dimension present: resize by given dimension maintaining aspect ratio. (fit: contain)
88
+ With two dimensions present: resize trying to fill given dimensions (fit: fill)
89
+ */
90
+ return {
91
+ fit: size?.width && size?.height ? sharp.fit.fill : sharp.fit.contain,
92
+ };
93
+ }
94
+ //# sourceMappingURL=transformImg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformImg.js","sourceRoot":"","sources":["../../src/content-page-repository/transformImg.ts"],"names":[],"mappings":"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"}