@webitel/ui-sdk 3.1.107 → 3.1.109
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/ui-sdk.common.js +148 -75
- package/dist/ui-sdk.common.js.map +1 -1
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.umd.js +148 -75
- package/dist/ui-sdk.umd.js.map +1 -1
- package/dist/ui-sdk.umd.min.js +5 -5
- package/dist/ui-sdk.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/atoms/wt-tooltip/_internals/useTooltipTriggerSubscriptions.js +68 -0
- package/src/components/atoms/wt-tooltip/_internals/wt-tooltip-floating.vue +48 -0
- package/src/components/atoms/wt-tooltip/wt-tooltip.vue +17 -68
- package/src/components/molecules/wt-dummy/wt-dummy.vue +4 -4
package/package.json
CHANGED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// https://github.com/Akryum/floating-vue/blob/main/packages/floating-vue/src/util/events.ts
|
|
2
|
+
import { onBeforeUnmount, onMounted } from 'vue';
|
|
3
|
+
|
|
4
|
+
const SHOW_EVENT_MAP = {
|
|
5
|
+
hover: 'mouseenter',
|
|
6
|
+
focus: 'focus',
|
|
7
|
+
click: 'click',
|
|
8
|
+
touch: 'touchstart',
|
|
9
|
+
pointer: 'pointerdown',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// https://github.com/Akryum/floating-vue/blob/main/packages/floating-vue/src/util/events.ts
|
|
13
|
+
const HIDE_EVENT_MAP = {
|
|
14
|
+
hover: 'mouseleave',
|
|
15
|
+
focus: 'blur',
|
|
16
|
+
click: 'click',
|
|
17
|
+
touch: 'touchend',
|
|
18
|
+
pointer: 'pointerup',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
22
|
+
export const useTooltipTriggerSubscriptions = ({
|
|
23
|
+
target, triggers, show, hide,
|
|
24
|
+
}) => {
|
|
25
|
+
const subscribeTriggers = () => {
|
|
26
|
+
const setEventListeners = (target, triggers) => {
|
|
27
|
+
triggers.forEach((trigger) => {
|
|
28
|
+
const showEvent = SHOW_EVENT_MAP[trigger];
|
|
29
|
+
if (showEvent) {
|
|
30
|
+
target.addEventListener(showEvent, show);
|
|
31
|
+
} else {
|
|
32
|
+
console.log(`No Tooltip Show event for ${trigger} trigger`);
|
|
33
|
+
}
|
|
34
|
+
const hideEvent = HIDE_EVENT_MAP[trigger];
|
|
35
|
+
if (hideEvent) {
|
|
36
|
+
target.addEventListener(hideEvent, hide);
|
|
37
|
+
} else {
|
|
38
|
+
console.log(`No Tooltip Hide event for ${trigger} trigger`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
setEventListeners(target.value, triggers);
|
|
44
|
+
};
|
|
45
|
+
const unsubscribeTriggers = () => {
|
|
46
|
+
const unsetEventListeners = (target, triggers) => {
|
|
47
|
+
triggers.forEach((trigger) => {
|
|
48
|
+
const showEvent = SHOW_EVENT_MAP[trigger];
|
|
49
|
+
if (showEvent) {
|
|
50
|
+
target.removeEventListener(showEvent, show);
|
|
51
|
+
} else {
|
|
52
|
+
console.log(`No Tooltip Show event for ${trigger} trigger`);
|
|
53
|
+
}
|
|
54
|
+
const hideEvent = HIDE_EVENT_MAP[trigger];
|
|
55
|
+
if (hideEvent) {
|
|
56
|
+
target.removeEventListener(hideEvent, hide);
|
|
57
|
+
} else {
|
|
58
|
+
console.log(`No Tooltip Hide event for ${trigger} trigger`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
unsetEventListeners(target.value, triggers);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
onMounted(() => subscribeTriggers());
|
|
67
|
+
onBeforeUnmount(() => unsubscribeTriggers());
|
|
68
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<aside
|
|
3
|
+
class="wt-tooltip-floating"
|
|
4
|
+
ref="floating"
|
|
5
|
+
>
|
|
6
|
+
<slot></slot>
|
|
7
|
+
</aside>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script setup>
|
|
11
|
+
/*
|
|
12
|
+
* We need to create separate floating component so that we could set
|
|
13
|
+
* eventListeners on it at mount
|
|
14
|
+
*
|
|
15
|
+
* wt-tooltip itself can't do it, because floating is rendered conditionally
|
|
16
|
+
* through v-if so that there's no way to attach eventListeners to floating
|
|
17
|
+
* on tooltip mount
|
|
18
|
+
* */
|
|
19
|
+
|
|
20
|
+
import { ref } from 'vue';
|
|
21
|
+
import { useTooltipTriggerSubscriptions } from './useTooltipTriggerSubscriptions';
|
|
22
|
+
|
|
23
|
+
const props = defineProps({
|
|
24
|
+
triggers: {
|
|
25
|
+
type: Array,
|
|
26
|
+
default: () => [],
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const emit = defineEmits([
|
|
31
|
+
'show',
|
|
32
|
+
'hide',
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
const floating = ref(null);
|
|
36
|
+
|
|
37
|
+
useTooltipTriggerSubscriptions({
|
|
38
|
+
target: floating,
|
|
39
|
+
triggers: props.triggers,
|
|
40
|
+
show: () => emit('show'),
|
|
41
|
+
hide: () => emit('hide'),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
<style lang="scss" scoped>
|
|
47
|
+
|
|
48
|
+
</style>
|
|
@@ -12,44 +12,31 @@
|
|
|
12
12
|
>
|
|
13
13
|
<slot name="activator"></slot>
|
|
14
14
|
</div>
|
|
15
|
-
<
|
|
15
|
+
<wt-tooltip-floating
|
|
16
16
|
v-if="isVisible"
|
|
17
17
|
ref="floating"
|
|
18
18
|
class="wt-tooltip__floating"
|
|
19
19
|
v-clickaway="hideTooltip"
|
|
20
20
|
:class="[popperClass]"
|
|
21
21
|
:style="floatingStyles"
|
|
22
|
+
:triggers="popperTriggers"
|
|
23
|
+
@show="showTooltip"
|
|
24
|
+
@hide="hideTooltip"
|
|
22
25
|
>
|
|
23
26
|
<slot v-bind="{ hide: hideTooltip }"></slot>
|
|
24
|
-
</
|
|
27
|
+
</wt-tooltip-floating>
|
|
25
28
|
</div>
|
|
26
29
|
</template>
|
|
27
30
|
|
|
28
31
|
<script setup>
|
|
29
32
|
import {
|
|
30
|
-
ref, onMounted,
|
|
33
|
+
ref, onMounted, watch,
|
|
31
34
|
} from 'vue';
|
|
32
35
|
import {
|
|
33
36
|
useFloating, autoPlacement, shift, flip, offset, autoUpdate,
|
|
34
37
|
} from '@floating-ui/vue';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const SHOW_EVENT_MAP = {
|
|
38
|
-
hover: 'mouseenter',
|
|
39
|
-
focus: 'focus',
|
|
40
|
-
click: 'click',
|
|
41
|
-
touch: 'touchstart',
|
|
42
|
-
pointer: 'pointerdown',
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
// https://github.com/Akryum/floating-vue/blob/main/packages/floating-vue/src/util/events.ts
|
|
46
|
-
const HIDE_EVENT_MAP = {
|
|
47
|
-
hover: 'mouseleave',
|
|
48
|
-
focus: 'blur',
|
|
49
|
-
click: 'click',
|
|
50
|
-
touch: 'touchend',
|
|
51
|
-
pointer: 'pointerup',
|
|
52
|
-
};
|
|
38
|
+
import { useTooltipTriggerSubscriptions } from './_internals/useTooltipTriggerSubscriptions';
|
|
39
|
+
import WtTooltipFloating from './_internals/wt-tooltip-floating.vue';
|
|
53
40
|
|
|
54
41
|
const props = defineProps({
|
|
55
42
|
visible: {
|
|
@@ -96,49 +83,6 @@ const hideTooltip = (event = {}) => {
|
|
|
96
83
|
isVisible.value = false;
|
|
97
84
|
};
|
|
98
85
|
|
|
99
|
-
const subscribeTriggers = () => {
|
|
100
|
-
const setEventListeners = (target, triggers) => {
|
|
101
|
-
triggers.forEach((trigger) => {
|
|
102
|
-
const showEvent = SHOW_EVENT_MAP[trigger];
|
|
103
|
-
if (showEvent) {
|
|
104
|
-
target.addEventListener(showEvent, showTooltip);
|
|
105
|
-
} else {
|
|
106
|
-
console.log(`No Tooltip Show event for ${trigger} trigger`);
|
|
107
|
-
}
|
|
108
|
-
const hideEvent = HIDE_EVENT_MAP[trigger];
|
|
109
|
-
if (hideEvent) {
|
|
110
|
-
target.addEventListener(hideEvent, hideTooltip);
|
|
111
|
-
} else {
|
|
112
|
-
console.log(`No Tooltip Hide event for ${trigger} trigger`);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
setEventListeners(activator.value, props.triggers);
|
|
118
|
-
setEventListeners(floating.value, props.popperTriggers);
|
|
119
|
-
};
|
|
120
|
-
const unsubscribeTriggers = () => {
|
|
121
|
-
const unsetEventListeners = (target, triggers) => {
|
|
122
|
-
triggers.forEach((trigger) => {
|
|
123
|
-
const showEvent = SHOW_EVENT_MAP[trigger];
|
|
124
|
-
if (showEvent) {
|
|
125
|
-
target.removeEventListener(showEvent, showTooltip);
|
|
126
|
-
} else {
|
|
127
|
-
console.log(`No Tooltip Show event for ${trigger} trigger`);
|
|
128
|
-
}
|
|
129
|
-
const hideEvent = HIDE_EVENT_MAP[trigger];
|
|
130
|
-
if (hideEvent) {
|
|
131
|
-
target.removeEventListener(hideEvent, hideTooltip);
|
|
132
|
-
} else {
|
|
133
|
-
console.log(`No Tooltip Hide event for ${trigger} trigger`);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
unsetEventListeners(activator.value, props.triggers);
|
|
139
|
-
unsetEventListeners(floating.value, props.popperTriggers);
|
|
140
|
-
};
|
|
141
|
-
|
|
142
86
|
// https://floating-ui.com/docs/misc#clipping
|
|
143
87
|
const { floatingStyles } = useFloating(activator, floating, {
|
|
144
88
|
placement: props.placement === 'auto' ? null : props.placement,
|
|
@@ -155,16 +99,21 @@ const { floatingStyles } = useFloating(activator, floating, {
|
|
|
155
99
|
],
|
|
156
100
|
});
|
|
157
101
|
|
|
102
|
+
useTooltipTriggerSubscriptions({
|
|
103
|
+
target: activator,
|
|
104
|
+
triggers: props.triggers,
|
|
105
|
+
show: showTooltip,
|
|
106
|
+
hide: hideTooltip,
|
|
107
|
+
});
|
|
108
|
+
|
|
158
109
|
watch(props.visible, (value) => {
|
|
159
110
|
if (value) showTooltip();
|
|
160
111
|
else hideTooltip();
|
|
161
112
|
});
|
|
162
113
|
|
|
163
114
|
onMounted(() => {
|
|
164
|
-
subscribeTriggers();
|
|
165
115
|
if (props.visible) showTooltip();
|
|
166
116
|
});
|
|
167
|
-
onBeforeUnmount(() => unsubscribeTriggers());
|
|
168
117
|
</script>
|
|
169
118
|
|
|
170
119
|
<style lang="scss" scoped>
|
|
@@ -176,7 +125,7 @@ onBeforeUnmount(() => unsubscribeTriggers());
|
|
|
176
125
|
line-height: 0;
|
|
177
126
|
}
|
|
178
127
|
|
|
179
|
-
|
|
128
|
+
.wt-tooltip-floating {
|
|
180
129
|
@extend %typo-body-2;
|
|
181
130
|
padding: var(--spacing-2xs) var(--spacing-xs);
|
|
182
131
|
color: var(--contrast-color);
|
|
@@ -187,7 +136,7 @@ onBeforeUnmount(() => unsubscribeTriggers());
|
|
|
187
136
|
}
|
|
188
137
|
|
|
189
138
|
&--contrast {
|
|
190
|
-
.wt-
|
|
139
|
+
.wt-tooltip-floating {
|
|
191
140
|
color: var(--main-color);
|
|
192
141
|
background: var(--contrast-color);
|
|
193
142
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
>
|
|
10
10
|
</div>
|
|
11
11
|
<h1
|
|
12
|
-
v-if="props.
|
|
13
|
-
class="wt-
|
|
12
|
+
v-if="props.text"
|
|
13
|
+
class="wt-dummy__text">{{ props.text }}</h1>
|
|
14
14
|
<wt-button
|
|
15
15
|
v-if="props.showAction"
|
|
16
16
|
@click="emits('create')"
|
|
@@ -25,7 +25,7 @@ const props = defineProps({
|
|
|
25
25
|
src: {
|
|
26
26
|
type: String,
|
|
27
27
|
},
|
|
28
|
-
|
|
28
|
+
text: {
|
|
29
29
|
type: String,
|
|
30
30
|
},
|
|
31
31
|
showAction: {
|
|
@@ -52,7 +52,7 @@ const emits = defineEmits([
|
|
|
52
52
|
align-items: center;
|
|
53
53
|
justify-content: center;
|
|
54
54
|
|
|
55
|
-
&
|
|
55
|
+
&__text {
|
|
56
56
|
@extend %typo-body-1;
|
|
57
57
|
margin-bottom: var(--spacing-sm);
|
|
58
58
|
}
|