rails_modal_manager 1.0.30 → 1.0.32

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: 6e13d9b84a14555c6f0542549afd2abb51c7157fb1f82422f6acb0fcb6d8d67a
4
- data.tar.gz: 78343ad0786f8c180ae1684fbfd4aa26c9b27d75183c1166ead3937d6bf37bd4
3
+ metadata.gz: 137650bba1f5ded9e215a34fba7402a47e1f888641416a478acbeaee9fcc806b
4
+ data.tar.gz: a047f2a4c6a11f65d539e3df7aefb2e02bbdb8bf2a0194a67b52a66214e22d8d
5
5
  SHA512:
6
- metadata.gz: 7e08e480474e11510b7635fb79cfe8b09cfd6d4ec1efd1019db05b73fdf1b3a430ded38593a15c0edbfb512ad3528193c9f86f81170e705175084a124202b934
7
- data.tar.gz: adec02667f82766f9f2e5133fb39cb370a0a5211f558e45b38f66db521e70d7580f830638b12b68d5baeee42f1af2f0854bec6a4d55523227b466bd2fc104fcd
6
+ metadata.gz: 5786f1ea88a886ddd26132669b480c7b2d3ed2b3a456934d0d65b818c7faf9c83e76a5822fd662b74a6dbebebbecebbe51ab3edd04375b73fb7c14b16884d635
7
+ data.tar.gz: df5a7843b45cd6e126825d10b1600fc628a76db7d4f21ed596938e3c1d2367a051fde591d499bfac88cc88459696459f4b86950f24a155129d68d46c2abb5da1
@@ -697,29 +697,32 @@
697
697
  visibility: visible;
698
698
  }
699
699
 
700
- /* When modal is maximized on mobile, show collapsed sidebar with icons only */
700
+ /* When modal is maximized on mobile - icons state uses inline (takes space) */
701
701
  .rmm-modal.rmm-size-full .rmm-sidebar {
702
702
  position: relative;
703
703
  top: auto;
704
704
  transform: none;
705
705
  }
706
706
 
707
+ /* icons 상태 (collapsed) - 본문 공간 차지 (inline) */
707
708
  .rmm-modal.rmm-size-full .rmm-sidebar.rmm-sidebar-collapsed {
708
709
  width: var(--rmm-sidebar-collapsed-width);
709
710
  min-width: var(--rmm-sidebar-collapsed-width);
710
711
  }
711
712
 
712
- .rmm-modal.rmm-size-full .rmm-sidebar:not(.rmm-sidebar-collapsed) {
713
+ /* expanded 상태 - 오버레이 방식 (본문 위에 떠있음) */
714
+ .rmm-modal.rmm-size-full .rmm-sidebar:not(.rmm-sidebar-collapsed):not(.rmm-sidebar-hidden) {
715
+ position: absolute;
716
+ top: var(--rmm-header-height);
717
+ left: 0;
718
+ bottom: 0;
719
+ z-index: 10;
713
720
  width: var(--rmm-sidebar-width);
714
721
  min-width: var(--rmm-sidebar-width);
722
+ transform: translateX(0);
715
723
  }
716
724
 
717
- /* Hide overlay for maximized modal since sidebar is inline */
718
- .rmm-modal.rmm-size-full .rmm-sidebar-overlay {
719
- display: none;
720
- }
721
-
722
- /* 모바일+최대화 상태에서 사이드바 완전 숨김 모드 */
725
+ /* hidden 상태 - 완전 숨김 */
723
726
  .rmm-modal.rmm-size-full .rmm-sidebar.rmm-sidebar-hidden {
724
727
  width: 0;
725
728
  min-width: 0;
@@ -727,6 +730,13 @@
727
730
  overflow: hidden;
728
731
  border-right: none;
729
732
  }
733
+
734
+ /* hidden/collapsed 상태에서는 오버레이 숨김 */
735
+ .rmm-modal.rmm-size-full .rmm-sidebar.rmm-sidebar-hidden ~ .rmm-sidebar-overlay,
736
+ .rmm-modal.rmm-size-full .rmm-sidebar.rmm-sidebar-collapsed ~ .rmm-sidebar-overlay {
737
+ opacity: 0;
738
+ visibility: hidden;
739
+ }
730
740
  }
731
741
 
732
742
  /* ============================================
@@ -109,12 +109,11 @@ export default class extends Controller {
109
109
  // Save previous focus
110
110
  this.previousFocus = document.activeElement
111
111
 
112
- // Check for saved size
112
+ // Check for saved size (use persistentId or modalId)
113
113
  let initialSize = this.sizeValue
114
- if (this.persistentIdValue) {
115
- const savedSize = modalSizeStorage.load(this.persistentIdValue, modalUtils.isMobile())
116
- if (savedSize) initialSize = savedSize
117
- }
114
+ const storageId = this.persistentIdValue || this.effectiveModalId
115
+ const savedSize = modalSizeStorage.load(storageId, modalUtils.isMobile())
116
+ if (savedSize) initialSize = savedSize
118
117
 
119
118
  // Mobile default full size
120
119
  if (modalUtils.isMobile() && this.mobileDefaultMaximizedValue) {
@@ -780,15 +779,20 @@ export default class extends Controller {
780
779
  const config = modalStore.getModalConfig(modalId)
781
780
  if (!config) return
782
781
 
782
+ const storageId = this.persistentIdValue || this.effectiveModalId
783
+
783
784
  if (config.isMaximized) {
784
785
  // Restore
786
+ const restoreSize = config.previousSize || this.sizeValue
785
787
  modalStore.updateModal(modalId, {
786
788
  isMaximized: false,
787
- size: config.previousSize || this.sizeValue,
789
+ size: restoreSize,
788
790
  customPosition: null,
789
791
  customWidth: null,
790
792
  customHeight: null,
791
793
  })
794
+ // Save restored size to localStorage
795
+ modalSizeStorage.save(storageId, restoreSize, modalUtils.isMobile())
792
796
  } else {
793
797
  // Maximize
794
798
  modalStore.updateModal(modalId, {
@@ -799,6 +803,8 @@ export default class extends Controller {
799
803
  customWidth: null,
800
804
  customHeight: null,
801
805
  })
806
+ // Save maximized size to localStorage
807
+ modalSizeStorage.save(storageId, 'full', modalUtils.isMobile())
802
808
  }
803
809
 
804
810
  this.applyStyles()
@@ -833,9 +839,9 @@ export default class extends Controller {
833
839
 
834
840
  // applyStyles() will be called via handleStoreChange() from the store notification
835
841
 
836
- if (this.persistentIdValue) {
837
- modalSizeStorage.save(this.persistentIdValue, newSize, modalUtils.isMobile())
838
- }
842
+ // Save size to localStorage (use persistentId or modalId)
843
+ const storageId = this.persistentIdValue || this.effectiveModalId
844
+ modalSizeStorage.save(storageId, newSize, modalUtils.isMobile())
839
845
 
840
846
  this.dispatch('sizeChange', { detail: { modalId: modalId, size: newSize } })
841
847
  }
@@ -58,10 +58,15 @@ export default class extends Controller {
58
58
  // Listen for toggle event from header button
59
59
  this.handleToggleEvent = () => this.toggle()
60
60
  this.element.addEventListener('rmm-sidebar:toggle', this.handleToggleEvent)
61
+
62
+ // Listen for closeOverlay event from mobile overlay
63
+ this.handleCloseOverlayEvent = () => this.closeOverlay()
64
+ this.element.addEventListener('rmm-sidebar:closeOverlay', this.handleCloseOverlayEvent)
61
65
  }
62
66
 
63
67
  disconnect() {
64
68
  this.element.removeEventListener('rmm-sidebar:toggle', this.handleToggleEvent)
69
+ this.element.removeEventListener('rmm-sidebar:closeOverlay', this.handleCloseOverlayEvent)
65
70
  }
66
71
 
67
72
  toggle() {
@@ -236,10 +241,14 @@ export default class extends Controller {
236
241
 
237
242
  // On mobile, close sidebar after selection
238
243
  if (window.innerWidth < 768) {
239
- // 모바일+최대화 상태에서는 아이콘 상태로 전환
240
244
  if (this.isMobileMaximized()) {
241
- this.sidebarModeValue = 'icons'
242
- this.applySidebarMode()
245
+ // expanded 상태에서 클릭하면 hidden으로 전환
246
+ // icons 상태에서 클릭하면 icons 상태 유지
247
+ if (this.sidebarModeValue === 'expanded') {
248
+ this.sidebarModeValue = 'hidden'
249
+ this.applySidebarMode()
250
+ }
251
+ // icons 상태면 그대로 유지
243
252
  } else {
244
253
  this.collapsedValue = true
245
254
  this.element.classList.add('rmm-sidebar-collapsed')
@@ -338,9 +347,9 @@ export default class extends Controller {
338
347
 
339
348
  // Mobile overlay click
340
349
  closeOverlay() {
341
- // 모바일+최대화 상태에서는 아이콘 상태로 전환
350
+ // 모바일+최대화 상태에서는 숨김 상태로 전환
342
351
  if (this.isMobileMaximized()) {
343
- this.sidebarModeValue = 'icons'
352
+ this.sidebarModeValue = 'hidden'
344
353
  this.applySidebarMode()
345
354
  } else {
346
355
  this.collapsedValue = true
@@ -165,9 +165,9 @@
165
165
  items: sidebar_items,
166
166
  collapsed: sidebar_collapsed
167
167
  %>
168
- <!-- Mobile overlay: closes sidebar when tapped (dispatches toggle event) -->
168
+ <!-- Mobile overlay: closes sidebar when tapped -->
169
169
  <div class="rmm-sidebar-overlay"
170
- onclick="const sidebar = this.previousElementSibling; if(sidebar && sidebar.classList.contains('rmm-sidebar') && !sidebar.classList.contains('rmm-sidebar-collapsed')) { sidebar.dispatchEvent(new CustomEvent('rmm-sidebar:toggle', { bubbles: false })); }"></div>
170
+ onclick="const sidebar = this.previousElementSibling; if(!sidebar) return; const modal = sidebar.closest('.rmm-modal'); const isMobileMaximized = window.innerWidth <= 768 && modal && modal.classList.contains('rmm-size-full'); if(isMobileMaximized) { sidebar.classList.remove('rmm-sidebar-collapsed'); sidebar.classList.add('rmm-sidebar-hidden'); } else { sidebar.classList.add('rmm-sidebar-collapsed'); }"></div>
171
171
  <% end %>
172
172
 
173
173
  <div class="rmm-content-wrapper">
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsModalManager
4
- VERSION = "1.0.30"
4
+ VERSION = "1.0.32"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_modal_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.30
4
+ version: 1.0.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - reshacs