{"name":"carousel","helper":"rui_carousel","complexity":"complex","param_count":26,"slot_count":1,"form_builder":false,"standalone":true,"ai_score":7,"human_score":7,"token_estimate":217,"params":{"id":{"required":true},"auto_rotate":{"default":false,"type":"boolean"},"interval":{"default":5000,"type":"integer"},"show_arrows":{},"show_indicators":{"default":true,"type":"boolean"},"loop":{"default":true,"type":"boolean"},"pause_on_hover":{"default":true,"type":"boolean"},"respect_reduced_motion":{"default":true,"type":"boolean"},"items_per_view":{},"gap":{"default":"base","type":"symbol","closed":true,"values":["none","sm","base","lg","xl"]},"variant":{"default":"default","type":"symbol","closed":true,"values":["default","banner","cards","testimonials","hero","fullscreen"]},"color":{"default":"primary","type":"symbol","values_from":"colors","open":true},"size":{"default":"base","type":"symbol","closed":true,"values":["sm","base","lg"]},"shape":{"default":"rounded","type":"symbol","closed":true,"values":["none","rounded","square","pill"]},"indicator_position":{"closed":true,"default":"outside","values":["outside","overlay_bottom","overlay_bottom_left","overlay_bottom_right"]},"indicator_style":{"default":"dots","type":"symbol","closed":true,"values":["dots","pill"]},"indicator_size":{"closed":true,"default":"base","values":["sm","base","lg","xl"]},"indicator_container":{},"indicator_class":{},"arrow_position":{"closed":true,"default":"sides","values":["sides","overlay","outside"]},"arrow_class":{},"arrow_icon_size":{"closed":true,"default":"sm","values":["sm","base","lg","xl","xs","xl2","xl3","xl4","xl5","xl6"]},"bleed":{"default":false,"type":"boolean"},"track_class":{},"aria_label":{}},"slots":{"slides":{"type":"renders_many","component":"lambda","example":"component.with_slide"}},"gotchas":[{"id":"carousel_arrows_need_two_plus_slides","severity":"medium","component":"rui_carousel","summary":"show_arrows: true is silently overridden — arrows/indicators never render with fewer than 2 slides, no matter what show_arrows:/show_indicators: say","params":["show_arrows","show_indicators"],"behavior":"The component.html.erb template gates every arrow/indicator render on `slides.size \u003e 1` in addition to @show_arrows/@show_indicators — this check is unconditional and cannot be overridden by passing show_arrows: true or show_indicators: true explicitly. A single-slide carousel (or one that starts with only one with_slide call, e.g. while content is loading) renders with zero arrows/indicators regardless of what you passed.","wrong":"\u003c%= rui_carousel(id: \"promo\", show_arrows: true) do |c| %\u003e\u003c% c.with_slide { image_tag(\"banner.jpg\") } %\u003e\u003c% end %\u003e","right":"\u003c%# Arrows only appear once a 2nd with_slide call is added — this is not a bug to work around with show_arrows:, it is the intended UX (no point showing prev/next with nothing to navigate to) %\u003e","notes":"This is correct/intentional UX, not a bug — but it surprises anyone who explicitly set show_arrows: true expecting it to force arrows on. Don't add show_arrows: true to a single-slide carousel expecting visible controls.","detection":"Scan for rui_carousel(..., show_arrows: true) or (show_indicators: true) where the block contains only one with_slide call.","recovery":"No param fixes this — either add more slides, or accept that arrows/indicators are gated on slide count and remove the now-misleading show_arrows: true."}],"families":[],"compositions":[],"relationships":{}}