@bagelink/vue 1.4.169 → 1.4.174

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.4.169",
4
+ "version": "1.4.174",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -109,35 +109,60 @@ function hide() {
109
109
  ddownRef?.hide()
110
110
  }
111
111
 
112
- const { isMobile } = useDevice()
112
+ const { isMobile, innerWidth } = useDevice()
113
113
 
114
114
  const shouldDisablePositioning = $computed(() => {
115
115
  return disablePlacement && isMobile
116
116
  })
117
117
 
118
+ // Convert hover triggers to click on small screens (tablets and mobile)
119
+ const isSmallScreen = $computed(() => innerWidth.value < 910)
120
+
121
+ const computedTriggers = $computed((): TriggerEvent[] => {
122
+ if (isSmallScreen && triggers.includes('hover')) {
123
+ // Replace hover with click on small screens
124
+ return triggers.map(trigger => trigger === 'hover' ? 'click' : trigger) as TriggerEvent[]
125
+ }
126
+ return triggers
127
+ })
128
+
118
129
  // Intelligent trigger configuration
119
130
  const computedShowTriggers = $computed((): TriggerEvent[] => {
120
- if (showTriggers !== undefined) return showTriggers
121
- return triggers
131
+ if (showTriggers !== undefined) {
132
+ // Also convert hover to click in showTriggers on small screens
133
+ if (isSmallScreen && showTriggers.includes('hover')) {
134
+ return showTriggers.map(trigger => trigger === 'hover' ? 'click' : trigger) as TriggerEvent[]
135
+ }
136
+ return showTriggers
137
+ }
138
+ return computedTriggers
122
139
  })
123
140
 
124
141
  const computedHideTriggers = $computed((): TriggerEvent[] => {
125
- if (hideTriggers !== undefined) return hideTriggers
142
+ if (hideTriggers !== undefined) {
143
+ // Also convert hover to click in hideTriggers on small screens
144
+ if (isSmallScreen && hideTriggers.includes('hover')) {
145
+ return hideTriggers.map(trigger => trigger === 'hover' ? 'click' : trigger) as TriggerEvent[]
146
+ }
147
+ return hideTriggers
148
+ }
126
149
  // For click-only dropdowns, only hide on click
127
- if (triggers.length === 1 && triggers[0] === 'click') {
150
+ if (computedTriggers.length === 1 && computedTriggers[0] === 'click') {
128
151
  return ['click'] as TriggerEvent[]
129
152
  }
130
153
  // For hover dropdowns, add click to hide triggers for better UX
154
+ // But on small screens, hover becomes click, so we handle it differently
131
155
  if (triggers.includes('hover')) {
132
- return [...triggers, 'click'] as TriggerEvent[]
156
+ return [...computedTriggers, 'click'] as TriggerEvent[]
133
157
  }
134
- return triggers
158
+ return computedTriggers
135
159
  })
136
160
 
137
161
  const computedPopperTriggers = $computed((): TriggerEvent[] => {
138
162
  if (popperTriggers.length > 0) return popperTriggers
139
163
  // For hover dropdowns, enable hover on popper to keep it open
140
- if (triggers.includes('hover')) {
164
+ // But on small screens, don't add hover triggers since we convert to click
165
+ if (triggers.includes('hover') && !isSmallScreen) {
141
166
  return ['hover'] as TriggerEvent[]
142
167
  }
143
168
  return []
@@ -147,7 +172,8 @@ const computedPopperTriggers = $computed((): TriggerEvent[] => {
147
172
  const computedPopperShowTriggers = $computed((): TriggerEvent[] | undefined => {
148
173
  const hasExplicitShowTriggers = Array.isArray(popperShowTriggers) && popperShowTriggers.length > 0
149
174
  if (hasExplicitShowTriggers) return popperShowTriggers
150
- if (triggers.includes('hover')) return ['hover'] as TriggerEvent[]
175
+ // Only add hover for popper on large screens
176
+ if (triggers.includes('hover') && !isSmallScreen) return ['hover'] as TriggerEvent[]
151
177
  return undefined
152
178
  })
153
179
 
@@ -155,7 +181,8 @@ const computedPopperHideTriggers = $computed((): TriggerEvent[] => {
155
181
  const hasExplicitHideTriggers = Array.isArray(popperHideTriggers) && popperHideTriggers.length > 0
156
182
  if (hasExplicitHideTriggers) return popperHideTriggers
157
183
  // For hover dropdowns, make sure popper hides on mouseout
158
- if (triggers.includes('hover')) {
184
+ // But only on large screens where hover is meaningful
185
+ if (triggers.includes('hover') && !isSmallScreen) {
159
186
  return ['hover'] as TriggerEvent[]
160
187
  }
161
188
  return []
@@ -165,11 +192,11 @@ const computedAutoHide = $computed(() => autoHide)
165
192
 
166
193
  const computedDelay = $computed((): number | { show: number, hide: number } | undefined => {
167
194
  if (delay !== undefined) return delay
168
- // For hover dropdowns, add a hide delay
169
- if (triggers.includes('hover')) {
170
- return { show: 0, hide: 10 } // 50ms delay before hiding
195
+ // For hover dropdowns, add a hide delay (but only on large screens)
196
+ if (triggers.includes('hover') && !isSmallScreen) {
197
+ return { show: 0, hide: 10 } // 10ms delay before hiding
171
198
  }
172
- // For click dropdowns, no delay
199
+ // For click dropdowns (including small screens), no delay
173
200
  return 0
174
201
  })
175
202
 
@@ -179,7 +206,7 @@ defineExpose({ show, hide, shown })
179
206
  <template>
180
207
  <DDown
181
208
  ref="ddownRef" v-model:shown="shown" :disabled :noAutoFocus :positioning-disabled="shouldDisablePositioning"
182
- :placement :autoHide="computedAutoHide" :delay="computedDelay" :triggers :showTriggers="computedShowTriggers"
209
+ :placement :autoHide="computedAutoHide" :delay="computedDelay" :triggers="computedTriggers" :showTriggers="computedShowTriggers"
183
210
  :hideTriggers="computedHideTriggers" :popperTriggers="computedPopperTriggers"
184
211
  :popperShowTriggers="computedPopperShowTriggers" :popperHideTriggers="computedPopperHideTriggers"
185
212
  :showGroup="showGroup" @hide="emit('hide')" @show="emit('show')"