next-cloudinary 0.0.3 → 0.0.4

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.
@@ -34,7 +34,78 @@ function _objectWithoutPropertiesLoose(source, excluded) {
34
34
  return target;
35
35
  }
36
36
 
37
+ const cld$1 = new Cloudinary({
38
+ cloud: {
39
+ cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
40
+ },
41
+ url: {
42
+ // Used to avoid issues with SSR particularly for the blurred placeholder
43
+ analytics: false
44
+ }
45
+ });
46
+ /**
47
+ * createPlaceholderUrl
48
+ */
49
+
50
+ function createPlaceholderUrl({
51
+ src,
52
+ placeholder
53
+ }) {
54
+ const cldImage = cld$1.image(src).resize('c_limit,w_100').delivery('q_1').format('auto');
55
+
56
+ if (placeholder === 'grayscale') {
57
+ cldImage.effect('e_grayscale');
58
+ }
59
+
60
+ if (placeholder.includes('color:')) {
61
+ const color = placeholder.split(':').splice(1).join(':');
62
+ cldImage.effect('e_grayscale');
63
+ cldImage.effect(`e_colorize:60,co_${color}`);
64
+ }
65
+
66
+ return cldImage.toURL();
67
+ }
68
+
69
+ const cropsGravityAuto = ['crop', 'fill', 'lfill', 'fill_pad', 'thumb'];
70
+ function croppingPlugin({
71
+ cldImage,
72
+ options,
73
+ cldOptions
74
+ } = {}) {
75
+ const {
76
+ width,
77
+ height
78
+ } = options;
79
+ const {
80
+ crop = 'limit',
81
+ gravity
82
+ } = cldOptions;
83
+ let transformationString = `c_${crop},w_${width}`;
84
+
85
+ if (!gravity && cropsGravityAuto.includes(crop)) {
86
+ gravity = 'auto';
87
+ }
88
+
89
+ if (!['limit'].includes(crop)) {
90
+ transformationString = `${transformationString},h_${height}`;
91
+ }
92
+
93
+ if (gravity) {
94
+ if (gravity === 'auto' && !cropsGravityAuto.includes(crop)) {
95
+ console.warn('Auto gravity can only be used with crop, fill, lfill, fill_pad or thumb. Not applying gravity.');
96
+ } else {
97
+ transformationString = `${transformationString},g_${gravity}`;
98
+ }
99
+ }
100
+
101
+ cldImage.resize(transformationString);
102
+ }
103
+
104
+ // aspectRatio
37
105
  const primary = {
106
+ aspectRatio: {
107
+ qualifier: 'ar'
108
+ },
38
109
  crop: {
39
110
  qualifier: 'c'
40
111
  },
@@ -84,67 +155,33 @@ const text = {
84
155
  }
85
156
  };
86
157
 
87
- const _excluded$1 = ["publicId", "type", "position", "text", "effects"];
88
- const cld$1 = new Cloudinary({
89
- cloud: {
90
- cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
91
- }
92
- });
93
- function cloudinaryLoader(options, cldOptions) {
94
- const {
95
- src,
96
- width,
97
- format = 'auto',
98
- quality = 'auto'
99
- } = options;
158
+ const _excluded$2 = ["publicId", "position", "text", "effects"];
159
+ function overlaysPlugin({
160
+ cldImage,
161
+ options,
162
+ cldOptions
163
+ } = {}) {
100
164
  const {
101
- overlays = [],
102
- effects = [],
103
- removeBackground = false,
104
- underlays = []
165
+ overlays = []
105
166
  } = cldOptions;
106
- const cldImage = cld$1.image(src);
107
-
108
- if (removeBackground) {
109
- cldImage.effect('e_background_removal');
110
- } // Adding overlays and underlays allows you to compose your image
111
- // by using layering with overlays appearing on top of and udnerlays
112
- // appearing below your base image layer
113
- //
114
- // Learn more: https://cloudinary.com/documentation/layers
115
-
116
-
117
- const layers = [...overlays.map(overlay => _extends({}, overlay, {
118
- type: 'overlay'
119
- })), ...underlays.map(underlay => _extends({}, underlay, {
120
- type: 'underlay'
121
- }))];
122
- layers.forEach(_ref => {
167
+ const type = 'overlay';
168
+ const typeQualifier = 'l';
169
+ overlays.forEach(_ref => {
123
170
  let {
124
171
  publicId,
125
- type,
126
172
  position: position$1,
127
173
  text: text$1,
128
174
  effects: layerEffects = []
129
175
  } = _ref,
130
- options = _objectWithoutPropertiesLoose(_ref, _excluded$1);
176
+ options = _objectWithoutPropertiesLoose(_ref, _excluded$2);
131
177
 
132
178
  const hasPublicId = typeof publicId === 'string';
133
179
  const hasText = typeof text$1 === 'object';
134
180
  const hasPosition = typeof position$1 === 'object';
135
181
 
136
182
  if (!hasPublicId && !hasText) {
137
- console.warn(`${type} is missing Public ID or Text`);
183
+ console.warn(`An ${type} is missing Public ID or Text`);
138
184
  return;
139
- } // Determine the qualifier for the type of layer
140
-
141
-
142
- let typeQualifier;
143
-
144
- if (type === 'overlay') {
145
- typeQualifier = 'l';
146
- } else if (type === 'underlay') {
147
- typeQualifier = 'u';
148
185
  } // Start to construct the transformation string using text or the public ID
149
186
  // if it's image-based
150
187
 
@@ -221,22 +258,130 @@ function cloudinaryLoader(options, cldOptions) {
221
258
 
222
259
  cldImage.addTransformation(layerTransformation);
223
260
  });
224
- return cldImage.resize(`c_limit,w_${width}`).format(format).delivery(`q_${quality}`).toURL();
225
261
  }
226
262
 
227
- const _excluded = ["overlays", "removeBackground", "underlays"];
263
+ function removeBackgroundPlugin({
264
+ cldImage,
265
+ options,
266
+ cldOptions
267
+ } = {}) {
268
+ const {
269
+ removeBackground = false
270
+ } = cldOptions;
271
+
272
+ if (removeBackground) {
273
+ cldImage.effect('e_background_removal');
274
+ }
275
+ }
276
+
277
+ const _excluded$1 = ["publicId", "type", "position", "text", "effects"];
278
+ function underlaysPlugin({
279
+ cldImage,
280
+ options,
281
+ cldOptions
282
+ } = {}) {
283
+ const {
284
+ underlays = []
285
+ } = cldOptions;
286
+ const typeQualifier = 'u';
287
+ underlays.forEach(_ref => {
288
+ let {
289
+ publicId,
290
+ type,
291
+ position: position$1,
292
+ effects: layerEffects = []
293
+ } = _ref,
294
+ options = _objectWithoutPropertiesLoose(_ref, _excluded$1);
295
+
296
+ const hasPublicId = typeof publicId === 'string';
297
+ const hasPosition = typeof position$1 === 'object';
298
+
299
+ if (!hasPublicId) {
300
+ console.warn(`An ${type} is missing a Public ID`);
301
+ return;
302
+ } // Start to construct the transformation string using text or the public ID
303
+ // if it's image-based
304
+
305
+
306
+ let layerTransformation = `${typeQualifier}_${publicId.replace(/\//g, ':')}`; // Begin organizing transformations based on what it is and the location
307
+ // it needs to be placed in the URL
308
+
309
+ const primary$1 = [];
310
+ const applied = []; // Gemeral options
311
+
312
+ Object.keys(options).forEach(key => {
313
+ if (!primary[key]) return;
314
+ const {
315
+ qualifier
316
+ } = primary[key];
317
+ primary$1.push(`${qualifier}_${options[key]}`);
318
+ }); // Layer effects
319
+
320
+ layerEffects.forEach(effect => {
321
+ Object.keys(effect).forEach(key => {
322
+ if (!primary[key]) return;
323
+ const {
324
+ qualifier
325
+ } = primary[key];
326
+ primary$1.push(`${qualifier}_${effect[key]}`);
327
+ });
328
+ }); // Positioning
329
+
330
+ if (hasPosition) {
331
+ Object.keys(position$1).forEach(key => {
332
+ if (!position[key]) return;
333
+ const {
334
+ qualifier
335
+ } = position[key];
336
+ applied.push(`${qualifier}_${position$1[key]}`);
337
+ });
338
+ } // Add all primary transformations
339
+
340
+
341
+ layerTransformation = `${layerTransformation},${primary$1.join(',')}`; // Add all applied transformations
342
+
343
+ layerTransformation = `${layerTransformation}/fl_layer_apply`;
344
+
345
+ if (applied.length > 0) {
346
+ layerTransformation = `${layerTransformation},${applied.join(',')}`;
347
+ } // Finally add it to the image
348
+
349
+
350
+ cldImage.addTransformation(layerTransformation);
351
+ });
352
+ }
353
+
228
354
  const cld = new Cloudinary({
229
355
  cloud: {
230
356
  cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
231
- },
232
- url: {
233
- // Used to avoid issues with SSR particularly for the blurred placeholder
234
- analytics: false
235
357
  }
236
358
  });
359
+ const transformationPlugins = [// Background Removal must always come first
360
+ removeBackgroundPlugin, croppingPlugin, overlaysPlugin, underlaysPlugin];
361
+ function cloudinaryLoader(options, cldOptions) {
362
+ const {
363
+ src,
364
+ width,
365
+ format = 'auto',
366
+ quality = 'auto'
367
+ } = options;
368
+ const cldImage = cld.image(src);
369
+ transformationPlugins.forEach(plugin => {
370
+ plugin({
371
+ cldImage,
372
+ options,
373
+ cldOptions
374
+ });
375
+ });
376
+ return cldImage.format(format).delivery(`q_${quality}`).toURL();
377
+ }
378
+
379
+ const _excluded = ["crop", "gravity", "overlays", "removeBackground", "underlays"];
237
380
 
238
381
  const CldImage = _ref => {
239
382
  let {
383
+ crop,
384
+ gravity,
240
385
  overlays,
241
386
  removeBackground,
242
387
  underlays
@@ -244,6 +389,8 @@ const CldImage = _ref => {
244
389
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
245
390
 
246
391
  const cldOptions = {
392
+ crop,
393
+ gravity,
247
394
  overlays,
248
395
  removeBackground,
249
396
  underlays
@@ -254,19 +401,10 @@ const CldImage = _ref => {
254
401
  // https://nextjs.org/docs/api-reference/next/image#blurdataurl
255
402
 
256
403
  if (props.placeholder) {
257
- const cldBlurredImage = cld.image(props.src).resize('c_limit,w_100').delivery('q_1').format('auto');
258
-
259
- if (props.placeholder === 'grayscale') {
260
- cldBlurredImage.effect('e_grayscale');
261
- }
262
-
263
- if (props.placeholder.includes('color:')) {
264
- const color = props.placeholder.split(':').splice(1).join(':');
265
- cldBlurredImage.effect('e_grayscale');
266
- cldBlurredImage.effect(`e_colorize:60,co_${color}`);
267
- }
268
-
269
- imageProps.blurDataURL = cldBlurredImage.toURL();
404
+ imageProps.blurDataURL = createPlaceholderUrl({
405
+ src: props.src,
406
+ placeholder: props.placeholder
407
+ });
270
408
 
271
409
  if (props.placeholder !== 'blur') {
272
410
  props.placeholder = 'blur';
@@ -274,7 +412,9 @@ const CldImage = _ref => {
274
412
  }
275
413
 
276
414
  return /*#__PURE__*/jsx(Image, _extends({}, imageProps, props, {
277
- loader: options => cloudinaryLoader(options, cldOptions)
415
+ loader: options => cloudinaryLoader(_extends({}, props, {
416
+ options
417
+ }), cldOptions)
278
418
  }));
279
419
  };
280
420
 
@@ -1 +1 @@
1
- {"version":3,"file":"next-cloudinary.modern.mjs","sources":["../src/constants/qualifiers.js","../src/loaders/cloudinary-loader.js","../src/components/CldImage/CldImage.js"],"sourcesContent":["export const primary = {\n crop: {\n qualifier: 'c'\n },\n gravity: {\n qualifier: 'g'\n },\n height: {\n qualifier: 'h'\n },\n width: {\n qualifier: 'w'\n },\n};\n\nexport const position = {\n angle: {\n qualifier: 'a'\n },\n gravity: {\n qualifier: 'g'\n },\n x: {\n qualifier: 'x'\n },\n y: {\n qualifier: 'y'\n },\n}\n\nexport const text = {\n color: {\n qualifier: 'co',\n location: 'primary'\n },\n textDecoration: {\n qualifier: false\n },\n fontFamily: {\n qualifier: false\n },\n fontSize: {\n qualifier: false\n },\n fontWeight: {\n qualifier: false\n },\n letterSpacing: {\n qualifier: 'letter_spacing'\n }\n}","import { Cloudinary } from '@cloudinary/url-gen';\n\nimport {\n primary as qualifiersPrimary,\n text as qualifiersText,\n position as qualifiersPosition\n} from '../constants/qualifiers';\n\nconst cld = new Cloudinary({\n cloud: {\n cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME\n }\n});\n\nexport function cloudinaryLoader(options, cldOptions) {\n const {\n src,\n width,\n format = 'auto',\n quality = 'auto',\n } = options;\n\n const {\n overlays = [],\n effects = [],\n removeBackground = false,\n underlays = []\n } = cldOptions;\n\n const cldImage = cld.image(src);\n\n if ( removeBackground ) {\n cldImage.effect('e_background_removal');\n }\n\n // Adding overlays and underlays allows you to compose your image\n // by using layering with overlays appearing on top of and udnerlays\n // appearing below your base image layer\n //\n // Learn more: https://cloudinary.com/documentation/layers\n\n const layers = [\n ...overlays.map(overlay => ({ ...overlay, type: 'overlay' })),\n ...underlays.map(underlay => ({ ...underlay, type: 'underlay' })),\n ];\n\n layers.forEach(({ publicId, type, position, text, effects: layerEffects = [], ...options }) => {\n const hasPublicId = typeof publicId === 'string';\n const hasText = typeof text === 'object';\n const hasPosition = typeof position === 'object';\n\n if ( !hasPublicId && !hasText ) {\n console.warn(`${type} is missing Public ID or Text`);\n return;\n }\n\n // Determine the qualifier for the type of layer\n\n let typeQualifier;\n\n if ( type === 'overlay' ) {\n typeQualifier = 'l';\n } else if ( type === 'underlay' ) {\n typeQualifier = 'u';\n }\n\n // Start to construct the transformation string using text or the public ID\n // if it's image-based\n\n let layerTransformation;\n\n if ( hasText ) {\n layerTransformation = `${typeQualifier}_text`;\n } else {\n layerTransformation = `${typeQualifier}_${publicId.replace(/\\//g, ':')}`;\n }\n\n // Begin organizing transformations based on what it is and the location\n // it needs to be placed in the URL\n\n const primary = [];\n const applied = [];\n\n // Gemeral options\n\n Object.keys(options).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${options[key]}`);\n });\n\n // Layer effects\n\n layerEffects.forEach(effect => {\n Object.keys(effect).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${effect[key]}`);\n });\n });\n\n // Text styling\n\n if ( hasText ) {\n const textTransformations = [];\n\n Object.keys(text).forEach(key => {\n if ( !qualifiersText[key] ) return;\n\n const { qualifier, location } = qualifiersText[key];\n\n if ( location === 'primary' ) {\n primary.push(`${qualifier}_${text[key]}`);\n } else {\n textTransformations.push(text[key]);\n }\n });\n\n layerTransformation = `${layerTransformation}:${textTransformations.join('_')}:${text.text}`\n }\n\n // Positioning\n\n if ( hasPosition ) {\n Object.keys(position).forEach(key => {\n if ( !qualifiersPosition[key] ) return;\n\n const { qualifier } = qualifiersPosition[key];\n\n applied.push(`${qualifier}_${position[key]}`);\n });\n }\n\n // Add all primary transformations\n\n layerTransformation = `${layerTransformation},${primary.join(',')}`;\n\n // Add all applied transformations\n\n layerTransformation = `${layerTransformation}/fl_layer_apply`;\n\n if ( applied.length > 0 ) {\n layerTransformation = `${layerTransformation},${applied.join(',')}`;\n }\n\n // Finally add it to the image\n\n cldImage.addTransformation(layerTransformation);\n });\n\n return cldImage.resize(`c_limit,w_${width}`).format(format).delivery(`q_${quality}`).toURL();\n}","import Image from 'next/image';\nimport { Cloudinary } from '@cloudinary/url-gen';\n\nimport { cloudinaryLoader } from '../../loaders/cloudinary-loader';\n\nconst cld = new Cloudinary({\n cloud: {\n cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME\n },\n url: {\n // Used to avoid issues with SSR particularly for the blurred placeholder\n analytics: false\n }\n});\n\nconst CldImage = ({ overlays, removeBackground, underlays, ...props }) => {\n const cldOptions = {\n overlays,\n removeBackground,\n underlays,\n };\n\n const imageProps = {};\n\n // If we see a placeholder option, configure a Cloudinary-based URL.\n // The resulting image will always be blurred per Next.js, so we're\n // limited on options for placeholders.\n // https://nextjs.org/docs/api-reference/next/image#blurdataurl\n\n if ( props.placeholder ) {\n const cldBlurredImage = cld.image(props.src)\n .resize('c_limit,w_100')\n .delivery('q_1')\n .format('auto');\n\n if ( props.placeholder === 'grayscale' ) {\n cldBlurredImage.effect('e_grayscale');\n }\n\n if ( props.placeholder.includes('color:') ) {\n const color = props.placeholder.split(':').splice(1).join(':')\n cldBlurredImage.effect('e_grayscale');\n cldBlurredImage.effect(`e_colorize:60,co_${color}`);\n }\n\n imageProps.blurDataURL = cldBlurredImage.toURL();\n\n if ( props.placeholder !== 'blur' ) {\n props.placeholder = 'blur';\n }\n }\n\n return (\n <Image\n {...imageProps}\n {...props}\n loader={(options) => cloudinaryLoader(options, cldOptions)}\n />\n );\n}\n\nexport default CldImage;"],"names":["primary","crop","qualifier","gravity","height","width","position","angle","x","y","text","color","location","textDecoration","fontFamily","fontSize","fontWeight","letterSpacing","cld","Cloudinary","cloud","cloudName","process","env","NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME","cloudinaryLoader","options","cldOptions","src","format","quality","overlays","effects","removeBackground","underlays","cldImage","image","effect","layers","map","overlay","type","underlay","forEach","publicId","layerEffects","_excluded","hasPublicId","hasText","hasPosition","console","warn","typeQualifier","layerTransformation","replace","applied","Object","keys","key","qualifiersPrimary","push","textTransformations","qualifiersText","join","qualifiersPosition","length","addTransformation","resize","delivery","toURL","url","analytics","CldImage","props","imageProps","placeholder","cldBlurredImage","includes","split","splice","blurDataURL","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"next-cloudinary.modern.mjs","sources":["../src/lib/cloudinary.js","../src/plugins/cropping.js","../src/constants/qualifiers.js","../src/plugins/overlays.js","../src/plugins/remove-background.js","../src/plugins/underlays.js","../src/loaders/cloudinary-loader.js","../src/components/CldImage/CldImage.js"],"sourcesContent":["import { Cloudinary } from '@cloudinary/url-gen';\n\nconst cld = new Cloudinary({\n cloud: {\n cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME\n },\n url: {\n // Used to avoid issues with SSR particularly for the blurred placeholder\n analytics: false\n }\n});\n\n/**\n * createPlaceholderUrl\n */\n\nexport function createPlaceholderUrl({ src, placeholder }) {\n const cldImage = cld.image(src)\n .resize('c_limit,w_100')\n .delivery('q_1')\n .format('auto');\n\n if ( placeholder === 'grayscale' ) {\n cldImage.effect('e_grayscale');\n }\n\n if ( placeholder.includes('color:') ) {\n const color = placeholder.split(':').splice(1).join(':')\n cldImage.effect('e_grayscale');\n cldImage.effect(`e_colorize:60,co_${color}`);\n }\n\n return cldImage.toURL();\n}","const cropsGravityAuto = [ 'crop', 'fill', 'lfill', 'fill_pad', 'thumb' ];\n\nexport function croppingPlugin({ cldImage, options, cldOptions } = {}) {\n const { width, height } = options;\n const { crop = 'limit', gravity } = cldOptions;\n\n let transformationString = `c_${crop},w_${width}`;\n\n if ( !gravity && cropsGravityAuto.includes(crop) ) {\n gravity = 'auto';\n }\n\n if ( !['limit'].includes(crop) ) {\n transformationString = `${transformationString},h_${height}`;\n }\n\n if ( gravity ) {\n if ( gravity === 'auto' && !cropsGravityAuto.includes(crop) ) {\n console.warn('Auto gravity can only be used with crop, fill, lfill, fill_pad or thumb. Not applying gravity.');\n } else {\n transformationString = `${transformationString},g_${gravity}`;\n }\n }\n\n cldImage.resize(transformationString);\n}","// aspectRatio\n\nexport const primary = {\n aspectRatio: {\n qualifier: 'ar'\n },\n crop: {\n qualifier: 'c'\n },\n gravity: {\n qualifier: 'g'\n },\n height: {\n qualifier: 'h'\n },\n width: {\n qualifier: 'w'\n },\n};\n\nexport const position = {\n angle: {\n qualifier: 'a'\n },\n gravity: {\n qualifier: 'g'\n },\n x: {\n qualifier: 'x'\n },\n y: {\n qualifier: 'y'\n },\n}\n\nexport const text = {\n color: {\n qualifier: 'co',\n location: 'primary'\n },\n textDecoration: {\n qualifier: false\n },\n fontFamily: {\n qualifier: false\n },\n fontSize: {\n qualifier: false\n },\n fontWeight: {\n qualifier: false\n },\n letterSpacing: {\n qualifier: 'letter_spacing'\n }\n}","import {\n primary as qualifiersPrimary,\n text as qualifiersText,\n position as qualifiersPosition\n} from '../constants/qualifiers';\n\nexport function overlaysPlugin({ cldImage, options, cldOptions } = {}) {\n const { overlays = [] } = cldOptions;\n\n const type = 'overlay';\n const typeQualifier = 'l';\n\n overlays.forEach(({ publicId, position, text, effects: layerEffects = [], ...options }) => {\n const hasPublicId = typeof publicId === 'string';\n const hasText = typeof text === 'object';\n const hasPosition = typeof position === 'object';\n\n if ( !hasPublicId && !hasText ) {\n console.warn(`An ${type} is missing Public ID or Text`);\n return;\n }\n\n // Start to construct the transformation string using text or the public ID\n // if it's image-based\n\n let layerTransformation;\n\n if ( hasText ) {\n layerTransformation = `${typeQualifier}_text`;\n } else {\n layerTransformation = `${typeQualifier}_${publicId.replace(/\\//g, ':')}`;\n }\n\n // Begin organizing transformations based on what it is and the location\n // it needs to be placed in the URL\n\n const primary = [];\n const applied = [];\n\n // Gemeral options\n\n Object.keys(options).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${options[key]}`);\n });\n\n // Layer effects\n\n layerEffects.forEach(effect => {\n Object.keys(effect).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${effect[key]}`);\n });\n });\n\n // Text styling\n\n if ( hasText ) {\n const textTransformations = [];\n\n Object.keys(text).forEach(key => {\n if ( !qualifiersText[key] ) return;\n\n const { qualifier, location } = qualifiersText[key];\n\n if ( location === 'primary' ) {\n primary.push(`${qualifier}_${text[key]}`);\n } else {\n textTransformations.push(text[key]);\n }\n });\n\n layerTransformation = `${layerTransformation}:${textTransformations.join('_')}:${text.text}`\n }\n\n // Positioning\n\n if ( hasPosition ) {\n Object.keys(position).forEach(key => {\n if ( !qualifiersPosition[key] ) return;\n\n const { qualifier } = qualifiersPosition[key];\n\n applied.push(`${qualifier}_${position[key]}`);\n });\n }\n\n // Add all primary transformations\n\n layerTransformation = `${layerTransformation},${primary.join(',')}`;\n\n // Add all applied transformations\n\n layerTransformation = `${layerTransformation}/fl_layer_apply`;\n\n if ( applied.length > 0 ) {\n layerTransformation = `${layerTransformation},${applied.join(',')}`;\n }\n\n // Finally add it to the image\n\n cldImage.addTransformation(layerTransformation);\n });\n}","export function removeBackgroundPlugin({ cldImage, options, cldOptions } = {}) {\n const { removeBackground = false } = cldOptions;\n if ( removeBackground ) {\n cldImage.effect('e_background_removal');\n }\n}","import {\n primary as qualifiersPrimary,\n text as qualifiersText,\n position as qualifiersPosition\n} from '../constants/qualifiers';\n\nexport function underlaysPlugin({ cldImage, options, cldOptions } = {}) {\n const { underlays = [] } = cldOptions;\n\n const type = 'underlay';\n const typeQualifier = 'u';\n\n underlays.forEach(({ publicId, type, position, text, effects: layerEffects = [], ...options }) => {\n const hasPublicId = typeof publicId === 'string';\n const hasPosition = typeof position === 'object';\n\n if ( !hasPublicId ) {\n console.warn(`An ${type} is missing a Public ID`);\n return;\n }\n\n // Start to construct the transformation string using text or the public ID\n // if it's image-based\n\n let layerTransformation = `${typeQualifier}_${publicId.replace(/\\//g, ':')}`;\n\n // Begin organizing transformations based on what it is and the location\n // it needs to be placed in the URL\n\n const primary = [];\n const applied = [];\n\n // Gemeral options\n\n Object.keys(options).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${options[key]}`);\n });\n\n // Layer effects\n\n layerEffects.forEach(effect => {\n Object.keys(effect).forEach(key => {\n if ( !qualifiersPrimary[key] ) return;\n const { qualifier } = qualifiersPrimary[key];\n primary.push(`${qualifier}_${effect[key]}`);\n });\n });\n\n // Positioning\n\n if ( hasPosition ) {\n Object.keys(position).forEach(key => {\n if ( !qualifiersPosition[key] ) return;\n\n const { qualifier } = qualifiersPosition[key];\n\n applied.push(`${qualifier}_${position[key]}`);\n });\n }\n\n // Add all primary transformations\n\n layerTransformation = `${layerTransformation},${primary.join(',')}`;\n\n // Add all applied transformations\n\n layerTransformation = `${layerTransformation}/fl_layer_apply`;\n\n if ( applied.length > 0 ) {\n layerTransformation = `${layerTransformation},${applied.join(',')}`;\n }\n\n // Finally add it to the image\n\n cldImage.addTransformation(layerTransformation);\n });\n}","import { Cloudinary } from '@cloudinary/url-gen';\n\nimport { croppingPlugin } from '../plugins/cropping';\nimport { overlaysPlugin } from '../plugins/overlays';\nimport { removeBackgroundPlugin } from '../plugins/remove-background';\nimport { underlaysPlugin } from '../plugins/underlays';\n\nimport {\n primary as qualifiersPrimary,\n text as qualifiersText,\n position as qualifiersPosition\n} from '../constants/qualifiers';\n\nconst cld = new Cloudinary({\n cloud: {\n cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME\n },\n});\n\nconst transformationPlugins = [\n // Background Removal must always come first\n removeBackgroundPlugin,\n\n croppingPlugin,\n overlaysPlugin,\n underlaysPlugin\n];\n\nexport function cloudinaryLoader(options, cldOptions) {\n const {\n src,\n width,\n format = 'auto',\n quality = 'auto',\n } = options;\n\n const cldImage = cld.image(src);\n\n transformationPlugins.forEach(plugin => {\n plugin({\n cldImage,\n options,\n cldOptions\n });\n });\n\n return cldImage.format(format).delivery(`q_${quality}`).toURL();\n}","import Image from 'next/image';\n\nimport { createPlaceholderUrl } from '../../lib/cloudinary';\nimport { cloudinaryLoader } from '../../loaders/cloudinary-loader';\n\nconst CldImage = ({ crop, gravity, overlays, removeBackground, underlays, ...props }) => {\n const cldOptions = {\n crop,\n gravity,\n overlays,\n removeBackground,\n underlays,\n };\n\n const imageProps = {};\n\n // If we see a placeholder option, configure a Cloudinary-based URL.\n // The resulting image will always be blurred per Next.js, so we're\n // limited on options for placeholders.\n // https://nextjs.org/docs/api-reference/next/image#blurdataurl\n\n if ( props.placeholder ) {\n imageProps.blurDataURL = createPlaceholderUrl({\n src: props.src,\n placeholder: props.placeholder\n });\n\n if ( props.placeholder !== 'blur' ) {\n props.placeholder = 'blur';\n }\n }\n\n return (\n <Image\n {...imageProps}\n {...props}\n loader={(options) => cloudinaryLoader({ ...props, options }, cldOptions)}\n />\n );\n}\n\nexport default CldImage;"],"names":["cld","Cloudinary","cloud","cloudName","process","env","NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME","url","analytics","createPlaceholderUrl","src","placeholder","cldImage","image","resize","delivery","format","effect","includes","color","split","splice","join","toURL","cropsGravityAuto","croppingPlugin","options","cldOptions","width","height","crop","gravity","transformationString","console","warn","primary","aspectRatio","qualifier","position","angle","x","y","text","location","textDecoration","fontFamily","fontSize","fontWeight","letterSpacing","overlaysPlugin","overlays","type","typeQualifier","forEach","publicId","effects","layerEffects","_excluded","hasPublicId","hasText","hasPosition","layerTransformation","replace","applied","Object","keys","key","qualifiersPrimary","push","textTransformations","qualifiersText","qualifiersPosition","length","addTransformation","removeBackgroundPlugin","removeBackground","underlaysPlugin","underlays","transformationPlugins","cloudinaryLoader","quality","plugin","CldImage","props","imageProps","blurDataURL","_jsx"],"mappings":"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"}