maquina-components 0.4.3 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b709941be68c552761043a38b7359796b7bc644af13827fbd47b2f40eab90fb9
4
- data.tar.gz: 931d38949a68e47881e9dc417786a412e5fb16ed02a23539d44259f452249913
3
+ metadata.gz: 5347ee9b9b49584bdb8549ecc263f2137ce2331b805c5539cab9db84babf9f14
4
+ data.tar.gz: 18b6b97ab09e7f5506c0d539db940808e48c481893ce6ad933f5226fbbd1dae9
5
5
  SHA512:
6
- metadata.gz: 3b063e95e3ea3c7d4fd649b75cd00696ac33ac88025c3ebab14bea256f7456005a81b8e0c7f3b70f8904f73cc987c4d5cc22a707cbef48f3d10dafa21a7d9ec1
7
- data.tar.gz: 80b31cd01a92351baedec4a87509b494c6dbfe09cb42bb71c7a59444cca0cc48e4b020684d9c450c1b02568a352f0b2781654c5333a84a0c5af7ea38940f91a6
6
+ metadata.gz: bcbde28da68d8b05b3d97d47f2f373cb7313f37265d26b78ed309827011c1cf7e1d1871d68ec6b9670240b73b1464979a0af37faa4d495e15c5b7f40ecc1a3ca
7
+ data.tar.gz: 47eb6037d5e98fc4b913750239d2e420c28c69b128ea4c5b9b17a450a5a2b5163f36e16cf7892b514e0c02622773c67e6620e90eea3e25d1f6350525b1a234d3
@@ -44,8 +44,8 @@ module MaquinaComponents
44
44
  # "Button"
45
45
  # )
46
46
  #
47
- def responsive_breadcrumbs(links = {}, current_page = nil, css_classes: "")
48
- render "components/breadcrumbs", css_classes: css_classes, responsive: true do
47
+ def responsive_breadcrumbs(links = {}, current_page = nil, css_classes: "", collapse_after: 0)
48
+ render "components/breadcrumbs", css_classes: css_classes, responsive: true, collapse_after: collapse_after do
49
49
  render "components/breadcrumbs/list" do
50
50
  build_breadcrumb_items(links, current_page, responsive: true)
51
51
  end
@@ -2,6 +2,7 @@ import { Controller } from "@hotwired/stimulus"
2
2
 
3
3
  export default class extends Controller {
4
4
  static targets = ["item", "ellipsis", "ellipsisSeparator"]
5
+ static values = { collapseAfter: { type: Number, default: 0 } }
5
6
 
6
7
  connect() {
7
8
  this._dropdown = null
@@ -59,15 +60,35 @@ export default class extends Controller {
59
60
  if (sep) sep.classList.remove('hidden')
60
61
  })
61
62
 
63
+ // Count-based collapsing: force-collapse when total items exceed threshold
64
+ // items are middle targets only; total visible = middle targets + first + last (2)
65
+ const totalItems = items.length + 2
66
+ if (this.collapseAfterValue > 0 && totalItems > this.collapseAfterValue) {
67
+ ellipsis.classList.remove('hidden')
68
+ if (ellipsisSeparator) ellipsisSeparator.classList.remove('hidden')
69
+
70
+ // collapseAfterValue includes first + last, so middle budget = collapseAfterValue - 2
71
+ const maxMiddleVisible = Math.max(this.collapseAfterValue - 2, 0)
72
+ let visibleMiddle = items.length
73
+
74
+ for (let i = items.length - 1; i >= 0 && visibleMiddle > maxMiddleVisible; i--) {
75
+ items[i].classList.add('hidden')
76
+ const sep = this._adjacentSeparator(items[i])
77
+ if (sep) sep.classList.add('hidden')
78
+ visibleMiddle--
79
+ }
80
+ }
81
+
62
82
  // Check overflow using scrollWidth vs clientWidth
63
83
  if (list.scrollWidth > list.clientWidth) {
64
84
  ellipsis.classList.remove('hidden')
65
85
  if (ellipsisSeparator) ellipsisSeparator.classList.remove('hidden')
66
86
 
67
87
  // Hide middle items one at a time until it fits
68
- for (let i = items.length - 1; i >= 0; i--) {
69
- items[i].classList.add('hidden')
70
- const sep = this._adjacentSeparator(items[i])
88
+ const visibleItems = items.filter(item => !item.classList.contains('hidden'))
89
+ for (let i = visibleItems.length - 1; i >= 0; i--) {
90
+ visibleItems[i].classList.add('hidden')
91
+ const sep = this._adjacentSeparator(visibleItems[i])
71
92
  if (sep) sep.classList.add('hidden')
72
93
  if (list.scrollWidth <= list.clientWidth) break
73
94
  }
@@ -1,10 +1,13 @@
1
- <%# locals: (css_classes: "", responsive: false, **html_options) %>
1
+ <%# locals: (css_classes: "", responsive: false, collapse_after: 0, **html_options) %>
2
2
  <% merged_data = (html_options.delete(:data) || {}).merge(
3
3
  component: :breadcrumbs
4
4
  )
5
-
5
+
6
6
  if responsive
7
7
  merged_data[:controller] = "breadcrumb"
8
+ if collapse_after > 0
9
+ merged_data[:breadcrumb_collapse_after_value] = collapse_after
10
+ end
8
11
  end %>
9
12
 
10
13
  <nav
@@ -1,3 +1,3 @@
1
1
  module MaquinaComponents
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maquina-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Alberto Chávez