@bagelink/vue 1.4.169 → 1.4.171

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