{"name":"kanban","helper":"rui_kanban","complexity":"simple","param_count":9,"slot_count":4,"form_builder":false,"standalone":true,"ai_score":8,"human_score":8,"token_estimate":118,"params":{"id":{},"color":{"default":"zinc","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":["rounded","square"]},"column_width":{"default":"320px","type":"string"},"max_height":{},"draggable":{"default":true,"type":"boolean"},"move_url":{}},"slots":{"columns":{"type":"manual","component":"builder method","example":"board.with_column(id:, title:) { |col| ... }"},"cards":{"type":"manual","component":"builder method","example":"col.with_card(id:, title:) { ... }"},"header":{"type":"manual","component":"builder method","example":"col.with_header { ... }"},"footer":{"type":"manual","component":"builder method","example":"col.with_footer { ... }"}},"gotchas":[{"id":"kanban_max_cards_silent_drop_rejection","severity":"medium","component":"rui_kanban","summary":"max_cards: on a full column rejects the drop with zero user feedback — no error event, no shake animation, no message","params":["max_cards"],"behavior":"kanban_controller.js checks the target column's data-max-cards against its current card count on both dragover and drop; when the column is full it does a bare `return` and the drop is silently rejected — no kanban:move-failed event fires (that event is reserved for SERVER-side rejections after a move_url PATCH), no visual feedback, nothing in the console. A user dragging a card to a full column just sees it snap back with no explanation.","wrong":"\u003c%= rui_kanban do |board| %\u003e\u003c% board.with_column(title: \"WIP\", id: \"wip\", max_cards: 3) do |col| %\u003e...\u003c% end %\u003e\u003c% end %\u003e","right":"\u003c%# Pair max_cards: with a visible affordance — e.g. badge_count: showing \"3/3\" so the limit is visible before a user attempts the drag %\u003e\u003c% board.with_column(title: \"WIP\", id: \"wip\", max_cards: 3, badge_count: current_wip_count) do |col| %\u003e","notes":"If you need user-visible feedback on a rejected drop (toast, shake animation), you must add it yourself by listening for dragover/drop on the column element — the gem does not expose a client-side kanban:drop-rejected event as of this writing.","detection":"Scan for rui_kanban columns with max_cards: set but no accompanying badge_count: or other visible WIP-limit indicator in the same with_column call.","recovery":"Add badge_count: to the column so the limit is visible before the drag starts, and/or add custom dragover/drop listeners on the column element for rejection feedback."}],"families":[],"compositions":[],"relationships":{}}