next-cloudinary 0.0.1 → 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.
@@ -1,5 +1,5 @@
1
- var urlGen = require('@cloudinary/url-gen');
2
1
  var Image = require('next/image');
2
+ var urlGen = require('@cloudinary/url-gen');
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
 
5
5
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -38,51 +38,375 @@ function _objectWithoutPropertiesLoose(source, excluded) {
38
38
  return target;
39
39
  }
40
40
 
41
- var _excluded = ["effects", "removeBackground"];
42
- var cld = new urlGen.Cloudinary({
41
+ function _readOnlyError(name) {
42
+ throw new TypeError("\"" + name + "\" is read-only");
43
+ }
44
+
45
+ var cld$1 = new urlGen.Cloudinary({
43
46
  cloud: {
44
47
  cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
48
+ },
49
+ url: {
50
+ // Used to avoid issues with SSR particularly for the blurred placeholder
51
+ analytics: false
45
52
  }
46
53
  });
54
+ /**
55
+ * createPlaceholderUrl
56
+ */
57
+
58
+ function createPlaceholderUrl(_ref) {
59
+ var src = _ref.src,
60
+ placeholder = _ref.placeholder;
61
+ var cldImage = cld$1.image(src).resize('c_limit,w_100').delivery('q_1').format('auto');
62
+
63
+ if (placeholder === 'grayscale') {
64
+ cldImage.effect('e_grayscale');
65
+ }
66
+
67
+ if (placeholder.includes('color:')) {
68
+ var color = placeholder.split(':').splice(1).join(':');
69
+ cldImage.effect('e_grayscale');
70
+ cldImage.effect("e_colorize:60,co_" + color);
71
+ }
72
+
73
+ return cldImage.toURL();
74
+ }
75
+
76
+ var cropsGravityAuto = ['crop', 'fill', 'lfill', 'fill_pad', 'thumb'];
77
+ function croppingPlugin(_temp) {
78
+ var _ref = _temp === void 0 ? {} : _temp,
79
+ cldImage = _ref.cldImage,
80
+ options = _ref.options,
81
+ cldOptions = _ref.cldOptions;
82
+
83
+ var width = options.width,
84
+ height = options.height;
85
+ var _cldOptions$crop = cldOptions.crop,
86
+ crop = _cldOptions$crop === void 0 ? 'limit' : _cldOptions$crop,
87
+ gravity = cldOptions.gravity;
88
+ var transformationString = "c_" + crop + ",w_" + width;
89
+
90
+ if (!gravity && cropsGravityAuto.includes(crop)) {
91
+ _readOnlyError("gravity");
92
+ }
93
+
94
+ if (!['limit'].includes(crop)) {
95
+ transformationString = transformationString + ",h_" + height;
96
+ }
97
+
98
+ if (gravity) {
99
+ if (gravity === 'auto' && !cropsGravityAuto.includes(crop)) {
100
+ console.warn('Auto gravity can only be used with crop, fill, lfill, fill_pad or thumb. Not applying gravity.');
101
+ } else {
102
+ transformationString = transformationString + ",g_" + gravity;
103
+ }
104
+ }
105
+
106
+ cldImage.resize(transformationString);
107
+ }
108
+
109
+ // aspectRatio
110
+ var primary = {
111
+ aspectRatio: {
112
+ qualifier: 'ar'
113
+ },
114
+ crop: {
115
+ qualifier: 'c'
116
+ },
117
+ gravity: {
118
+ qualifier: 'g'
119
+ },
120
+ height: {
121
+ qualifier: 'h'
122
+ },
123
+ width: {
124
+ qualifier: 'w'
125
+ }
126
+ };
127
+ var position = {
128
+ angle: {
129
+ qualifier: 'a'
130
+ },
131
+ gravity: {
132
+ qualifier: 'g'
133
+ },
134
+ x: {
135
+ qualifier: 'x'
136
+ },
137
+ y: {
138
+ qualifier: 'y'
139
+ }
140
+ };
141
+ var text = {
142
+ color: {
143
+ qualifier: 'co',
144
+ location: 'primary'
145
+ },
146
+ textDecoration: {
147
+ qualifier: false
148
+ },
149
+ fontFamily: {
150
+ qualifier: false
151
+ },
152
+ fontSize: {
153
+ qualifier: false
154
+ },
155
+ fontWeight: {
156
+ qualifier: false
157
+ },
158
+ letterSpacing: {
159
+ qualifier: 'letter_spacing'
160
+ }
161
+ };
162
+
163
+ var _excluded$2 = ["publicId", "position", "text", "effects"];
164
+ function overlaysPlugin(_temp) {
165
+ var _ref = _temp === void 0 ? {} : _temp,
166
+ cldImage = _ref.cldImage,
167
+ cldOptions = _ref.cldOptions;
168
+
169
+ var _cldOptions$overlays = cldOptions.overlays,
170
+ overlays = _cldOptions$overlays === void 0 ? [] : _cldOptions$overlays;
171
+ var type = 'overlay';
172
+ var typeQualifier = 'l';
173
+ overlays.forEach(function (_ref2) {
174
+ var publicId = _ref2.publicId,
175
+ position$1 = _ref2.position,
176
+ text$1 = _ref2.text,
177
+ _ref2$effects = _ref2.effects,
178
+ layerEffects = _ref2$effects === void 0 ? [] : _ref2$effects,
179
+ options = _objectWithoutPropertiesLoose(_ref2, _excluded$2);
180
+
181
+ var hasPublicId = typeof publicId === 'string';
182
+ var hasText = typeof text$1 === 'object';
183
+ var hasPosition = typeof position$1 === 'object';
184
+
185
+ if (!hasPublicId && !hasText) {
186
+ console.warn("An " + type + " is missing Public ID or Text");
187
+ return;
188
+ } // Start to construct the transformation string using text or the public ID
189
+ // if it's image-based
190
+
191
+
192
+ var layerTransformation;
193
+
194
+ if (hasText) {
195
+ layerTransformation = typeQualifier + "_text";
196
+ } else {
197
+ layerTransformation = typeQualifier + "_" + publicId.replace(/\//g, ':');
198
+ } // Begin organizing transformations based on what it is and the location
199
+ // it needs to be placed in the URL
200
+
201
+
202
+ var primary$1 = [];
203
+ var applied = []; // Gemeral options
204
+
205
+ Object.keys(options).forEach(function (key) {
206
+ if (!primary[key]) return;
207
+ var qualifier = primary[key].qualifier;
208
+ primary$1.push(qualifier + "_" + options[key]);
209
+ }); // Layer effects
210
+
211
+ layerEffects.forEach(function (effect) {
212
+ Object.keys(effect).forEach(function (key) {
213
+ if (!primary[key]) return;
214
+ var qualifier = primary[key].qualifier;
215
+ primary$1.push(qualifier + "_" + effect[key]);
216
+ });
217
+ }); // Text styling
218
+
219
+ if (hasText) {
220
+ var textTransformations = [];
221
+ Object.keys(text$1).forEach(function (key) {
222
+ if (!text[key]) return;
223
+ var _qualifiersText$key = text[key],
224
+ qualifier = _qualifiersText$key.qualifier,
225
+ location = _qualifiersText$key.location;
226
+
227
+ if (location === 'primary') {
228
+ primary$1.push(qualifier + "_" + text$1[key]);
229
+ } else {
230
+ textTransformations.push(text$1[key]);
231
+ }
232
+ });
233
+ layerTransformation = layerTransformation + ":" + textTransformations.join('_') + ":" + text$1.text;
234
+ } // Positioning
235
+
236
+
237
+ if (hasPosition) {
238
+ Object.keys(position$1).forEach(function (key) {
239
+ if (!position[key]) return;
240
+ var qualifier = position[key].qualifier;
241
+ applied.push(qualifier + "_" + position$1[key]);
242
+ });
243
+ } // Add all primary transformations
244
+
245
+
246
+ layerTransformation = layerTransformation + "," + primary$1.join(','); // Add all applied transformations
247
+
248
+ layerTransformation = layerTransformation + "/fl_layer_apply";
47
249
 
250
+ if (applied.length > 0) {
251
+ layerTransformation = layerTransformation + "," + applied.join(',');
252
+ } // Finally add it to the image
253
+
254
+
255
+ cldImage.addTransformation(layerTransformation);
256
+ });
257
+ }
258
+
259
+ function removeBackgroundPlugin(_temp) {
260
+ var _ref = _temp === void 0 ? {} : _temp,
261
+ cldImage = _ref.cldImage,
262
+ cldOptions = _ref.cldOptions;
263
+
264
+ var _cldOptions$removeBac = cldOptions.removeBackground,
265
+ removeBackground = _cldOptions$removeBac === void 0 ? false : _cldOptions$removeBac;
266
+
267
+ if (removeBackground) {
268
+ cldImage.effect('e_background_removal');
269
+ }
270
+ }
271
+
272
+ var _excluded$1 = ["publicId", "type", "position", "text", "effects"];
273
+ function underlaysPlugin(_temp) {
274
+ var _ref = _temp === void 0 ? {} : _temp,
275
+ cldImage = _ref.cldImage,
276
+ cldOptions = _ref.cldOptions;
277
+
278
+ var _cldOptions$underlays = cldOptions.underlays,
279
+ underlays = _cldOptions$underlays === void 0 ? [] : _cldOptions$underlays;
280
+ var typeQualifier = 'u';
281
+ underlays.forEach(function (_ref2) {
282
+ var publicId = _ref2.publicId,
283
+ type = _ref2.type,
284
+ position$1 = _ref2.position,
285
+ _ref2$effects = _ref2.effects,
286
+ layerEffects = _ref2$effects === void 0 ? [] : _ref2$effects,
287
+ options = _objectWithoutPropertiesLoose(_ref2, _excluded$1);
288
+
289
+ var hasPublicId = typeof publicId === 'string';
290
+ var hasPosition = typeof position$1 === 'object';
291
+
292
+ if (!hasPublicId) {
293
+ console.warn("An " + type + " is missing a Public ID");
294
+ return;
295
+ } // Start to construct the transformation string using text or the public ID
296
+ // if it's image-based
297
+
298
+
299
+ var layerTransformation = typeQualifier + "_" + publicId.replace(/\//g, ':'); // Begin organizing transformations based on what it is and the location
300
+ // it needs to be placed in the URL
301
+
302
+ var primary$1 = [];
303
+ var applied = []; // Gemeral options
304
+
305
+ Object.keys(options).forEach(function (key) {
306
+ if (!primary[key]) return;
307
+ var qualifier = primary[key].qualifier;
308
+ primary$1.push(qualifier + "_" + options[key]);
309
+ }); // Layer effects
310
+
311
+ layerEffects.forEach(function (effect) {
312
+ Object.keys(effect).forEach(function (key) {
313
+ if (!primary[key]) return;
314
+ var qualifier = primary[key].qualifier;
315
+ primary$1.push(qualifier + "_" + effect[key]);
316
+ });
317
+ }); // Positioning
318
+
319
+ if (hasPosition) {
320
+ Object.keys(position$1).forEach(function (key) {
321
+ if (!position[key]) return;
322
+ var qualifier = position[key].qualifier;
323
+ applied.push(qualifier + "_" + position$1[key]);
324
+ });
325
+ } // Add all primary transformations
326
+
327
+
328
+ layerTransformation = layerTransformation + "," + primary$1.join(','); // Add all applied transformations
329
+
330
+ layerTransformation = layerTransformation + "/fl_layer_apply";
331
+
332
+ if (applied.length > 0) {
333
+ layerTransformation = layerTransformation + "," + applied.join(',');
334
+ } // Finally add it to the image
335
+
336
+
337
+ cldImage.addTransformation(layerTransformation);
338
+ });
339
+ }
340
+
341
+ var cld = new urlGen.Cloudinary({
342
+ cloud: {
343
+ cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
344
+ }
345
+ });
346
+ var transformationPlugins = [// Background Removal must always come first
347
+ removeBackgroundPlugin, croppingPlugin, overlaysPlugin, underlaysPlugin];
48
348
  function cloudinaryLoader(options, cldOptions) {
49
349
  var src = options.src,
50
- width = options.width,
51
350
  _options$format = options.format,
52
351
  format = _options$format === void 0 ? 'auto' : _options$format,
53
352
  _options$quality = options.quality,
54
353
  quality = _options$quality === void 0 ? 'auto' : _options$quality;
55
- var _cldOptions$effects = cldOptions.effects,
56
- effects = _cldOptions$effects === void 0 ? [] : _cldOptions$effects,
57
- _cldOptions$removeBac = cldOptions.removeBackground,
58
- removeBackground = _cldOptions$removeBac === void 0 ? false : _cldOptions$removeBac;
59
354
  var cldImage = cld.image(src);
60
-
61
- if (removeBackground) {
62
- cldImage.effect('e_background_removal');
63
- }
64
-
65
- effects.forEach(function (effect) {
66
- return cldImage.effect(effect);
355
+ transformationPlugins.forEach(function (plugin) {
356
+ plugin({
357
+ cldImage: cldImage,
358
+ options: options,
359
+ cldOptions: cldOptions
360
+ });
67
361
  });
68
- return cldImage.resize("c_limit,w_" + width).format(format).delivery("q_" + quality).toURL();
362
+ return cldImage.format(format).delivery("q_" + quality).toURL();
69
363
  }
70
364
 
365
+ var _excluded = ["crop", "gravity", "overlays", "removeBackground", "underlays"];
366
+
71
367
  var CldImage = function CldImage(_ref) {
72
- var effects = _ref.effects,
368
+ var crop = _ref.crop,
369
+ gravity = _ref.gravity,
370
+ overlays = _ref.overlays,
73
371
  removeBackground = _ref.removeBackground,
372
+ underlays = _ref.underlays,
74
373
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
75
374
 
76
375
  var cldOptions = {
77
- effects: effects,
78
- removeBackground: removeBackground
376
+ crop: crop,
377
+ gravity: gravity,
378
+ overlays: overlays,
379
+ removeBackground: removeBackground,
380
+ underlays: underlays
79
381
  };
80
- return /*#__PURE__*/jsxRuntime.jsx(Image__default["default"], _extends({}, props, {
382
+ var imageProps = {}; // If we see a placeholder option, configure a Cloudinary-based URL.
383
+ // The resulting image will always be blurred per Next.js, so we're
384
+ // limited on options for placeholders.
385
+ // https://nextjs.org/docs/api-reference/next/image#blurdataurl
386
+
387
+ if (props.placeholder) {
388
+ imageProps.blurDataURL = createPlaceholderUrl({
389
+ src: props.src,
390
+ placeholder: props.placeholder
391
+ });
392
+
393
+ if (props.placeholder !== 'blur') {
394
+ props.placeholder = 'blur';
395
+ }
396
+ }
397
+
398
+ return /*#__PURE__*/jsxRuntime.jsx(Image__default["default"], _extends({}, imageProps, props, {
81
399
  loader: function loader(options) {
82
- return cloudinaryLoader(options, cldOptions);
400
+ return cloudinaryLoader(_extends({}, props, {
401
+ options: options
402
+ }), cldOptions);
83
403
  }
84
404
  }));
85
405
  };
86
406
 
87
407
  exports.CldImage = CldImage;
408
+ exports.cloudinaryLoader = cloudinaryLoader;
409
+ exports.position = position;
410
+ exports.primary = primary;
411
+ exports.text = text;
88
412
  //# sourceMappingURL=next-cloudinary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"next-cloudinary.js","sources":["../src/components/CldImage/CldImage.js"],"sourcesContent":["import { Cloudinary } from '@cloudinary/url-gen';\nimport Image from 'next/image';\n\nconst cld = new Cloudinary({\n cloud: {\n cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME\n }\n});\n\nfunction cloudinaryLoader(options, cldOptions) {\n const {\n src,\n width,\n format = 'auto',\n quality = 'auto'\n } = options;\n\n const {\n effects = [],\n removeBackground = false\n } = cldOptions;\n\n const cldImage = cld.image(src);\n\n if ( removeBackground ) {\n cldImage.effect('e_background_removal');\n }\n\n effects.forEach(effect => cldImage.effect(effect));\n\n return cldImage.resize(`c_limit,w_${width}`).format(format).delivery(`q_${quality}`).toURL();\n}\n\nconst CldImage = ({ effects, removeBackground, ...props }) => {\n const cldOptions = {\n effects,\n removeBackground\n };\n return <Image {...props} loader={(options) => cloudinaryLoader(options, cldOptions)} />\n}\n\nexport default CldImage;"],"names":["cld","Cloudinary","cloud","cloudName","process","env","NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME","cloudinaryLoader","options","cldOptions","src","width","format","quality","effects","removeBackground","cldImage","image","effect","forEach","resize","delivery","toURL","CldImage","props","_jsx","Image"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAMA,GAAG,GAAG,IAAIC,iBAAJ,CAAe;AACzBC,EAAAA,KAAK,EAAE;AACLC,IAAAA,SAAS,EAAEC,OAAO,CAACC,GAAR,CAAYC,iCAAAA;AADlB,GAAA;AADkB,CAAf,CAAZ,CAAA;;AAMA,SAASC,gBAAT,CAA0BC,OAA1B,EAAmCC,UAAnC,EAA+C;AAC7C,EAAA,IACEC,GADF,GAKIF,OALJ,CACEE,GADF;AAAA,MAEEC,KAFF,GAKIH,OALJ,CAEEG,KAFF;MAKIH,eAAAA,GAAAA,OALJ,CAGEI,MAHF;MAGEA,MAHF,gCAGW,MAHX,GAAA,eAAA;MAKIJ,gBAAAA,GAAAA,OALJ,CAIEK,OAJF;MAIEA,OAJF,iCAIY,MAJZ,GAAA,gBAAA,CAAA;EAOA,IAGIJ,mBAAAA,GAAAA,UAHJ,CACEK,OADF;MACEA,OADF,oCACY,EADZ,GAAA,mBAAA;MAGIL,qBAAAA,GAAAA,UAHJ,CAEEM,gBAFF;MAEEA,gBAFF,sCAEqB,KAFrB,GAAA,qBAAA,CAAA;AAKA,EAAA,IAAMC,QAAQ,GAAGhB,GAAG,CAACiB,KAAJ,CAAUP,GAAV,CAAjB,CAAA;;AAEA,EAAA,IAAKK,gBAAL,EAAwB;IACtBC,QAAQ,CAACE,MAAT,CAAgB,sBAAhB,CAAA,CAAA;AACD,GAAA;;AAEDJ,EAAAA,OAAO,CAACK,OAAR,CAAgB,UAAAD,MAAM,EAAA;AAAA,IAAA,OAAIF,QAAQ,CAACE,MAAT,CAAgBA,MAAhB,CAAJ,CAAA;GAAtB,CAAA,CAAA;AAEA,EAAA,OAAOF,QAAQ,CAACI,MAAT,CAAA,YAAA,GAA6BT,KAA7B,CAAsCC,CAAAA,MAAtC,CAA6CA,MAA7C,EAAqDS,QAArD,CAAA,IAAA,GAAmER,OAAnE,CAAA,CAA8ES,KAA9E,EAAP,CAAA;AACD,CAAA;;AAED,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAA6C,IAAA,EAAA;EAAA,IAA1CT,OAA0C,QAA1CA,OAA0C;MAAjCC,gBAAiC,QAAjCA,gBAAiC;AAAA,MAAZS,KAAY,GAAA,6BAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;;AAC5D,EAAA,IAAMf,UAAU,GAAG;AACjBK,IAAAA,OAAO,EAAPA,OADiB;AAEjBC,IAAAA,gBAAgB,EAAhBA,gBAAAA;GAFF,CAAA;EAIA,oBAAOU,cAAA,CAACC,yBAAD,EAAA,QAAA,CAAA,EAAA,EAAWF,KAAX,EAAA;IAAkB,MAAM,EAAE,gBAAChB,OAAD,EAAA;AAAA,MAAA,OAAaD,gBAAgB,CAACC,OAAD,EAAUC,UAAV,CAA7B,CAAA;AAAA,KAAA;GAAjC,CAAA,CAAA,CAAA;AACD;;;;"}
1
+ {"version":3,"file":"next-cloudinary.js","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","Image"],"mappings":"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"}