Skip to content

Commit ee27b15

Browse files
committed
types: props and events
1 parent 6439fce commit ee27b15

File tree

6 files changed

+263
-23
lines changed

6 files changed

+263
-23
lines changed

docs/.vitepress/components/DropdownSimpleExample.vue

+6-10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
<script setup lang="ts">
2+
function log (...args) {
3+
console.log(...args)
4+
}
5+
</script>
6+
17
<template>
28
<div class="example flex justify-center">
39
<VDropdown
@@ -19,13 +25,3 @@
1925
</VDropdown>
2026
</div>
2127
</template>
22-
23-
<script>
24-
export default {
25-
methods: {
26-
log (...args) {
27-
console.log(...args)
28-
},
29-
},
30-
}
31-
</script>

docs/.vitepress/theme/global.d.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Dropdown, Tooltip, Menu } from 'floating-vue'
2+
3+
declare module 'vue' {
4+
export interface GlobalComponents {
5+
VDropdown: typeof Dropdown
6+
VTooltip: typeof Tooltip
7+
VMenu: typeof Menu
8+
}
9+
}

docs/tsconfig.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"include": [
3+
".vitepress/**/*.ts",
4+
".vitepress/**/*.vue"
5+
],
6+
"exclude": [
7+
"node_modules",
8+
"dist",
9+
"**/*.js"
10+
]
11+
}

packages/floating-vue/src/components/Popper.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -273,18 +273,18 @@ export default () => defineComponent({
273273
},
274274
},
275275

276-
emits: [
277-
'show',
278-
'hide',
279-
'update:shown',
280-
'apply-show',
281-
'apply-hide',
282-
'close-group',
283-
'close-directive',
284-
'auto-hide',
285-
'resize',
286-
'dispose',
287-
],
276+
emits: {
277+
show: () => true,
278+
hide: () => true,
279+
'update:shown': (shown: boolean) => true,
280+
'apply-show': () => true,
281+
'apply-hide': () => true,
282+
'close-group': () => true,
283+
'close-directive': () => true,
284+
'auto-hide': () => true,
285+
'resize': () => true,
286+
'dispose': () => true,
287+
},
288288

289289
data () {
290290
return {

packages/floating-vue/src/components/PopperWrapper.vue

+223-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,23 @@
1414
classes,
1515
result,
1616
}"
17+
v-bind="$props"
1718
:theme="finalTheme"
1819
:target-nodes="getTargetNodes"
1920
:popper-node="() => ($refs as any).popperContent.$el"
2021
:class="[
2122
themeClass,
2223
]"
24+
@show="() => $emit('show')"
25+
@hide="() => $emit('hide')"
26+
@update:shown="(shown) => $emit('update:shown', shown)"
27+
@apply-show="() => $emit('apply-show')"
28+
@apply-hide="() => $emit('apply-hide')"
29+
@close-group="() => $emit('close-group')"
30+
@close-directive="() => $emit('close-directive')"
31+
@auto-hide="() => $emit('auto-hide')"
32+
@resize="() => $emit('resize')"
33+
@dispose="() => $emit('dispose')"
2334
>
2435
<slot
2536
:shown="isShown"
@@ -51,12 +62,14 @@
5162
</template>
5263

5364
<script lang="ts">
54-
import { defineComponent } from 'vue'
65+
import { defineComponent, type PropType } from 'vue'
5566
import Popper from './Popper.vue'
5667
import PopperContent from './PopperContent.vue'
5768
import PopperMethods from './PopperMethods'
5869
import ThemeClass from './ThemeClass'
5970
71+
export type TriggerEvent = 'hover' | 'click' | 'focus' | 'touch'
72+
6073
export default defineComponent({
6174
name: 'VPopperWrapper',
6275
@@ -75,6 +88,215 @@ export default defineComponent({
7588
type: String,
7689
default: null,
7790
},
91+
92+
referenceNode: {
93+
type: Function as PropType<() => Element>,
94+
default: null,
95+
},
96+
97+
shown: {
98+
type: Boolean,
99+
default: false,
100+
},
101+
102+
showGroup: {
103+
type: String,
104+
default: null,
105+
},
106+
107+
// eslint-disable-next-line vue/require-prop-types
108+
ariaId: {
109+
default: null,
110+
},
111+
112+
disabled: {
113+
type: Boolean,
114+
default: undefined,
115+
},
116+
117+
positioningDisabled: {
118+
type: Boolean,
119+
default: undefined,
120+
},
121+
122+
placement: {
123+
type: String,
124+
default: undefined,
125+
},
126+
127+
delay: {
128+
type: [String, Number, Object] as PropType<string | number | { show: number, hide: number }>,
129+
default: undefined,
130+
},
131+
132+
distance: {
133+
type: [Number, String],
134+
default: undefined,
135+
},
136+
137+
skidding: {
138+
type: [Number, String],
139+
default: undefined,
140+
},
141+
142+
triggers: {
143+
type: Array as PropType<Array<TriggerEvent>>,
144+
default: undefined,
145+
},
146+
147+
showTriggers: {
148+
type: [Array, Function] as PropType<Array<TriggerEvent> | ((triggers: Array<TriggerEvent>) => Array<TriggerEvent>)>,
149+
default: undefined,
150+
},
151+
152+
hideTriggers: {
153+
type: [Array, Function] as PropType<Array<TriggerEvent> | ((triggers: Array<TriggerEvent>) => Array<TriggerEvent>)>,
154+
default: undefined,
155+
},
156+
157+
popperTriggers: {
158+
type: Array as PropType<Array<TriggerEvent>>,
159+
default: undefined,
160+
},
161+
162+
popperShowTriggers: {
163+
type: [Array, Function] as PropType<Array<TriggerEvent> | ((triggers: Array<TriggerEvent>) => Array<TriggerEvent>)>,
164+
default: undefined,
165+
},
166+
167+
popperHideTriggers: {
168+
type: [Array, Function] as PropType<Array<TriggerEvent> | ((triggers: Array<TriggerEvent>) => Array<TriggerEvent>)>,
169+
default: undefined,
170+
},
171+
172+
container: {
173+
type: [String, Object, Element, Boolean],
174+
default: undefined,
175+
},
176+
177+
boundary: {
178+
type: [String, Element],
179+
default: undefined,
180+
},
181+
182+
strategy: {
183+
type: String,
184+
default: undefined,
185+
},
186+
187+
autoHide: {
188+
type: [Boolean, Function] as PropType<boolean | ((event: Event) => boolean)>,
189+
default: undefined,
190+
},
191+
192+
handleResize: {
193+
type: Boolean,
194+
default: undefined,
195+
},
196+
197+
instantMove: {
198+
type: Boolean,
199+
default: undefined,
200+
},
201+
202+
eagerMount: {
203+
type: Boolean,
204+
default: undefined,
205+
},
206+
207+
popperClass: {
208+
type: [String, Array, Object],
209+
default: undefined,
210+
},
211+
212+
computeTransformOrigin: {
213+
type: Boolean,
214+
default: undefined,
215+
},
216+
217+
/**
218+
* @deprecated
219+
*/
220+
autoMinSize: {
221+
type: Boolean,
222+
default: undefined,
223+
},
224+
225+
autoSize: {
226+
type: [Boolean, String],
227+
default: undefined,
228+
},
229+
230+
/**
231+
* @deprecated
232+
*/
233+
autoMaxSize: {
234+
type: Boolean,
235+
default: undefined,
236+
},
237+
238+
autoBoundaryMaxSize: {
239+
type: Boolean,
240+
default: undefined,
241+
},
242+
243+
preventOverflow: {
244+
type: Boolean,
245+
default: undefined,
246+
},
247+
248+
overflowPadding: {
249+
type: [Number, String],
250+
default: undefined,
251+
},
252+
253+
arrowPadding: {
254+
type: [Number, String],
255+
default: undefined,
256+
},
257+
258+
arrowOverflow: {
259+
type: Boolean,
260+
default: undefined,
261+
},
262+
263+
flip: {
264+
type: Boolean,
265+
default: undefined,
266+
},
267+
268+
shift: {
269+
type: Boolean,
270+
default: undefined,
271+
},
272+
273+
shiftCrossAxis: {
274+
type: Boolean,
275+
default: undefined,
276+
},
277+
278+
noAutoFocus: {
279+
type: Boolean,
280+
default: undefined,
281+
},
282+
283+
disposeTimeout: {
284+
type: Number,
285+
default: undefined,
286+
},
287+
},
288+
289+
emits: {
290+
show: () => true,
291+
hide: () => true,
292+
'update:shown': (shown: boolean) => true,
293+
'apply-show': () => true,
294+
'apply-hide': () => true,
295+
'close-group': () => true,
296+
'close-directive': () => true,
297+
'auto-hide': () => true,
298+
'resize': () => true,
299+
'dispose': () => true,
78300
},
79301
80302
computed: {

packages/floating-vue/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export { hideAllPoppers } from './components/Popper'
4040
export * from './util/events'
4141
export { placements } from './util/popper'
4242
export type { Placement } from './util/popper'
43+
// Types
44+
export type { TriggerEvent } from './components/PopperWrapper.vue'
4345

4446
/* Vue plugin */
4547

0 commit comments

Comments
 (0)