@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/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 +42 -15
package/package.json
CHANGED
|
@@ -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)
|
|
121
|
-
|
|
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)
|
|
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 (
|
|
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 [...
|
|
156
|
+
return [...computedTriggers, 'click'] as TriggerEvent[]
|
|
133
157
|
}
|
|
134
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 } //
|
|
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')"
|