edvoyui-component-library-test-flight 0.0.221 → 0.0.223
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/popover/EUIPopover.d.ts +9 -0
- package/dist/components/popover/EUIPopover.vue +35 -18
- package/dist/components/select/EUISelect.vue +18 -2
- package/dist/edvoy-ui.cjs.js +5 -5
- package/dist/edvoy-ui.css +1 -1
- package/dist/edvoy-ui.es.js +844 -824
- package/dist/edvoy-ui.umd.js +6 -6
- package/package.json +1 -1
|
@@ -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
|
|
|
@@ -620,7 +620,7 @@ const offsetValue = computed(() => props.customOffset);
|
|
|
620
620
|
|
|
621
621
|
const withPopper = (
|
|
622
622
|
dropdownList: HTMLElement,
|
|
623
|
-
component: { $refs: { toggle: Element | VirtualElement } },
|
|
623
|
+
component: { $refs: { toggle: Element | VirtualElement }; open: boolean },
|
|
624
624
|
{ width, maxHeight }: any,
|
|
625
625
|
) => {
|
|
626
626
|
const newwidth = selectWidth.value || width; //setcustom width '400px'
|
|
@@ -645,7 +645,23 @@ const withPopper = (
|
|
|
645
645
|
],
|
|
646
646
|
});
|
|
647
647
|
dropdownList.classList.add("toggle-dropdown");
|
|
648
|
-
|
|
648
|
+
|
|
649
|
+
// The dropdown is appended to <body>, so it only tracks its trigger via
|
|
650
|
+
// Popper's rAF-scheduled scroll listener, which visibly lags the trigger
|
|
651
|
+
// during a fast/continuous scroll of an ancestor container until scrolling
|
|
652
|
+
// stops. Closing immediately on any outside scroll (capture phase catches
|
|
653
|
+
// non-bubbling scroll events from nested containers) avoids that detached,
|
|
654
|
+
// floating state entirely.
|
|
655
|
+
const closeOnScroll = (event: Event) => {
|
|
656
|
+
if (dropdownList.contains(event.target as Node)) return;
|
|
657
|
+
component.open = false;
|
|
658
|
+
};
|
|
659
|
+
document.addEventListener("scroll", closeOnScroll, true);
|
|
660
|
+
|
|
661
|
+
return () => {
|
|
662
|
+
document.removeEventListener("scroll", closeOnScroll, true);
|
|
663
|
+
popper.destroy();
|
|
664
|
+
};
|
|
649
665
|
};
|
|
650
666
|
|
|
651
667
|
const fuseSearch = (
|