diff --git a/app/assets/stylesheets/card-columns.css b/app/assets/stylesheets/card-columns.css index d67ac6e73..ed14b6339 100644 --- a/app/assets/stylesheets/card-columns.css +++ b/app/assets/stylesheets/card-columns.css @@ -62,15 +62,15 @@ .cards { align-items: stretch; display: flex; + flex: 1 0 var(--expanded-min); flex-direction: column; gap: var(--cards-gap); justify-content: start; + max-inline-size: var(--expanded-min); + min-inline-size: var(--expanded-min); position: relative; scroll-snap-align: start; - flex: 1 0 var(--expanded-min); - min-width: var(--expanded-min); - max-width: var(--expanded-min); - transition: all 300ms ease; + transition: inline-size 300ms ease; /* Make sure filter dialogs don't end up behind sticky headers */ &:has([open]) { diff --git a/app/javascript/controllers/collapsible_columns_controller.js b/app/javascript/controllers/collapsible_columns_controller.js new file mode 100644 index 000000000..fbb8b97bb --- /dev/null +++ b/app/javascript/controllers/collapsible_columns_controller.js @@ -0,0 +1,22 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static classes = [ "collapsed" ] + static targets = [ "column" ] + + toggle(event) { + const clickedColumn = event.target.closest('[data-collapsible-columns-target="column"]') + + if (!clickedColumn) return + + const isCurrentlyCollapsed = clickedColumn.classList.contains(this.collapsedClass) + + this.columnTargets.forEach(column => { + column.classList.add(this.collapsedClass) + }) + + if (isCurrentlyCollapsed) { + clickedColumn.classList.remove(this.collapsedClass) + } + } +} diff --git a/app/views/cards/index/_columns.html.erb b/app/views/cards/index/_columns.html.erb index dbf60de29..c382a2383 100644 --- a/app/views/cards/index/_columns.html.erb +++ b/app/views/cards/index/_columns.html.erb @@ -1,6 +1,6 @@ <% cache @cache_key do %> <%= turbo_frame_tag :card_columns do %> -