@@ -131,6 +131,31 @@ const PLUGINS = [
131131 repo : 'https://github.com/scaleflex/cloudimage-before-after' ,
132132 } ,
133133 } ,
134+ {
135+ id : 'cloudimage-carousel' ,
136+ name : 'Carousel' ,
137+ npmPackage : '@cloudimage/carousel' ,
138+ version : '2.0.0' ,
139+ tagline : 'Responsive image carousel & gallery' ,
140+ description :
141+ 'A lightweight carousel with touch swipe, zoom, autoplay, thumbnails, fullscreen, and React support.' ,
142+ icon : 'icon-carousel' ,
143+ accentColor : '#f59e0b' ,
144+ features : [
145+ 'Touch & Swipe' ,
146+ 'Zoom' ,
147+ 'Autoplay' ,
148+ 'Thumbnails' ,
149+ 'Fullscreen' ,
150+ 'Responsive' ,
151+ 'React Support' ,
152+ 'Accessibility' ,
153+ ] ,
154+ links : {
155+ demo : 'https://scaleflex.github.io/cloudimage-carousel/' ,
156+ repo : 'https://github.com/scaleflex/cloudimage-carousel' ,
157+ } ,
158+ } ,
134159] ;
135160
136161/* --------------------------------------------------------------------------
@@ -294,6 +319,35 @@ function getPluginIllustration(pluginId) {
294319 </circle>
295320 <defs><linearGradient id="grad-ba" x1="0" y1="0" x2="200" y2="160"><stop stop-color="#2c99ff"/><stop offset="1" stop-color="#00d4aa"/></linearGradient></defs>
296321 </svg>` ,
322+
323+ 'cloudimage-carousel' : `
324+ <svg viewBox="0 0 200 160" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Image carousel illustration">
325+ <!-- Center slide -->
326+ <rect x="50" y="20" width="100" height="120" rx="8" stroke="url(#grad-carousel)" stroke-width="2" opacity="0.5" fill="url(#grad-carousel)" fill-opacity="0.06"/>
327+ <!-- Left slide (behind) -->
328+ <rect x="15" y="30" width="50" height="100" rx="6" stroke="url(#grad-carousel)" stroke-width="1.5" opacity="0.2" fill="url(#grad-carousel)" fill-opacity="0.03"/>
329+ <!-- Right slide (behind) -->
330+ <rect x="135" y="30" width="50" height="100" rx="6" stroke="url(#grad-carousel)" stroke-width="1.5" opacity="0.2" fill="url(#grad-carousel)" fill-opacity="0.03"/>
331+ <!-- Image placeholder on center slide -->
332+ <path d="M60 110 L80 85 L95 100 L115 75 L140 110 Z" fill="url(#grad-carousel)" opacity="0.12"/>
333+ <circle cx="80" cy="50" r="8" fill="url(#grad-carousel)" opacity="0.1"/>
334+ <!-- Left arrow -->
335+ <path d="M30 80 L22 80" stroke="url(#grad-carousel)" stroke-width="2" stroke-linecap="round" opacity="0.5"/>
336+ <path d="M26 76 L22 80 L26 84" stroke="url(#grad-carousel)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" opacity="0.5"/>
337+ <!-- Right arrow -->
338+ <path d="M170 80 L178 80" stroke="url(#grad-carousel)" stroke-width="2" stroke-linecap="round" opacity="0.5"/>
339+ <path d="M174 76 L178 80 L174 84" stroke="url(#grad-carousel)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" opacity="0.5"/>
340+ <!-- Dot indicators -->
341+ <circle cx="88" cy="148" r="3" fill="url(#grad-carousel)" opacity="0.2"/>
342+ <circle cx="100" cy="148" r="3.5" fill="url(#grad-carousel)" opacity="0.6"/>
343+ <circle cx="112" cy="148" r="3" fill="url(#grad-carousel)" opacity="0.2"/>
344+ <!-- Subtle pulse on active dot -->
345+ <circle cx="100" cy="148" r="3.5" stroke="url(#grad-carousel)" stroke-width="1" opacity="0.15">
346+ <animate attributeName="r" values="3.5;7;3.5" dur="3s" repeatCount="indefinite"/>
347+ <animate attributeName="opacity" values="0.15;0.03;0.15" dur="3s" repeatCount="indefinite"/>
348+ </circle>
349+ <defs><linearGradient id="grad-carousel" x1="0" y1="0" x2="200" y2="160"><stop stop-color="#f59e0b"/><stop offset="1" stop-color="#e05cff"/></linearGradient></defs>
350+ </svg>` ,
297351 } ;
298352
299353 return illustrations [ pluginId ] || '' ;
0 commit comments