@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/dist/components/Dropdown.vue.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/components/Dropdown.vue +40 -15
package/package.json
CHANGED
|
@@ -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)
|
|
121
|
-
|
|
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)
|
|
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 (
|
|
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
|
-
|
|
132
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
170
|
-
return { show: 0, hide: 10 } //
|
|
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')"
|