edvoyui-component-library-test-flight 0.0.221 → 0.0.222
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.
|
@@ -52,6 +52,10 @@ declare const __VLS_component: import('../../../node_modules/vue').DefineCompone
|
|
|
52
52
|
type: NumberConstructor;
|
|
53
53
|
default: number;
|
|
54
54
|
};
|
|
55
|
+
teleported: {
|
|
56
|
+
type: BooleanConstructor;
|
|
57
|
+
default: boolean;
|
|
58
|
+
};
|
|
55
59
|
}>, {}, {}, {}, {}, import('../../../node_modules/vue').ComponentOptionsMixin, import('../../../node_modules/vue').ComponentOptionsMixin, {} & {
|
|
56
60
|
"update:visible": (value: boolean) => any;
|
|
57
61
|
show: () => any;
|
|
@@ -92,6 +96,10 @@ declare const __VLS_component: import('../../../node_modules/vue').DefineCompone
|
|
|
92
96
|
type: NumberConstructor;
|
|
93
97
|
default: number;
|
|
94
98
|
};
|
|
99
|
+
teleported: {
|
|
100
|
+
type: BooleanConstructor;
|
|
101
|
+
default: boolean;
|
|
102
|
+
};
|
|
95
103
|
}>> & Readonly<{
|
|
96
104
|
"onUpdate:visible"?: ((value: boolean) => any) | undefined;
|
|
97
105
|
onShow?: (() => any) | undefined;
|
|
@@ -105,6 +113,7 @@ declare const __VLS_component: import('../../../node_modules/vue').DefineCompone
|
|
|
105
113
|
customButton: string;
|
|
106
114
|
visible: boolean;
|
|
107
115
|
hoverHideDelay: number;
|
|
116
|
+
teleported: boolean;
|
|
108
117
|
}, {}, {}, {}, string, import('../../../node_modules/vue').ComponentProvideOptions, true, {
|
|
109
118
|
popperWrapper: HTMLDivElement;
|
|
110
119
|
popperButton: HTMLDivElement;
|
|
@@ -15,24 +15,30 @@
|
|
|
15
15
|
>
|
|
16
16
|
<slot name="referenceButton" :open="isOpen"/>
|
|
17
17
|
</div>
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
:data-show="isOpen ? '' : null"
|
|
24
|
-
@click.stop
|
|
25
|
-
@mouseenter="handleTooltipMouseEnter"
|
|
26
|
-
@mouseleave="handleTooltipMouseLeave"
|
|
27
|
-
>
|
|
28
|
-
<div ref="arrowElement" class="arrow" data-popper-arrow />
|
|
18
|
+
<!-- When `teleported`, the tooltip is rendered at <body> (Popper uses a
|
|
19
|
+
`fixed` strategy) so it escapes any ancestor `overflow`/stacking
|
|
20
|
+
context — e.g. a scrollable table or a sticky column. Disabled by
|
|
21
|
+
default, so existing usages keep rendering the tooltip in place. -->
|
|
22
|
+
<Teleport to="body" :disabled="!teleported">
|
|
29
23
|
<div
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
ref="tooltip"
|
|
25
|
+
:id="tooltipId"
|
|
26
|
+
role="tooltip"
|
|
27
|
+
:class="['poppertooltip h-auto text-sm font-normal select-none z-50', className]"
|
|
28
|
+
:data-show="isOpen ? '' : null"
|
|
29
|
+
@click.stop
|
|
30
|
+
@mouseenter="handleTooltipMouseEnter"
|
|
31
|
+
@mouseleave="handleTooltipMouseLeave"
|
|
32
|
+
>
|
|
33
|
+
<div ref="arrowElement" class="arrow" data-popper-arrow />
|
|
34
|
+
<div
|
|
35
|
+
v-if="title"
|
|
36
|
+
class="text-base font-semibold text-current leading-[normal] px-4 py-2"
|
|
37
|
+
v-text="title"
|
|
38
|
+
/>
|
|
39
|
+
<slot />
|
|
40
|
+
</div>
|
|
41
|
+
</Teleport>
|
|
36
42
|
</div>
|
|
37
43
|
</template>
|
|
38
44
|
|
|
@@ -77,6 +83,12 @@ const props = defineProps({
|
|
|
77
83
|
type: Number,
|
|
78
84
|
default: 100,
|
|
79
85
|
},
|
|
86
|
+
// Render the tooltip at <body> using a fixed Popper strategy so it can break
|
|
87
|
+
// out of ancestor overflow/stacking contexts. Off by default for back-compat.
|
|
88
|
+
teleported: {
|
|
89
|
+
type: Boolean,
|
|
90
|
+
default: false,
|
|
91
|
+
},
|
|
80
92
|
});
|
|
81
93
|
|
|
82
94
|
const popperWrapper = ref<HTMLElement | null>(null);
|
|
@@ -122,6 +134,9 @@ const initializePopper = () => {
|
|
|
122
134
|
if (popperButton.value && tooltip.value && arrowElement.value) {
|
|
123
135
|
popperInstance.value = createPopper(popperButton.value, tooltip.value, {
|
|
124
136
|
placement: props.placement,
|
|
137
|
+
// `fixed` keeps the teleported tooltip glued to the trigger without an
|
|
138
|
+
// offset parent; `absolute` (Popper's default) is unchanged otherwise.
|
|
139
|
+
strategy: props.teleported ? 'fixed' : 'absolute',
|
|
125
140
|
modifiers: [
|
|
126
141
|
{ name: 'offset', options: { offset: [0, 10] } },
|
|
127
142
|
{ name: 'arrow', options: { element: arrowElement.value } },
|
|
@@ -229,11 +244,13 @@ onMounted(() => {
|
|
|
229
244
|
}
|
|
230
245
|
|
|
231
246
|
if (props.trigger === 'click') {
|
|
247
|
+
// `tooltip` is ignored too: once teleported it lives outside popperWrapper,
|
|
248
|
+
// so clicks inside it would otherwise register as "outside" and close it.
|
|
232
249
|
onClickOutside(popperWrapper.value, () => {
|
|
233
250
|
if (isOpen.value) {
|
|
234
251
|
hide(true);
|
|
235
252
|
}
|
|
236
|
-
}, { ignore: [popperButton] });
|
|
253
|
+
}, { ignore: [popperButton, tooltip] });
|
|
237
254
|
}
|
|
238
255
|
});
|
|
239
256
|
|