@webitel/ui-sdk 3.1.106 → 3.1.108

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-sdk",
3
- "version": "3.1.106",
3
+ "version": "3.1.108",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve-lib": "vue-cli-service serve",
@@ -59,8 +59,12 @@ const props = defineProps({
59
59
  },
60
60
  });
61
61
 
62
+ const emit = defineEmits([
63
+ 'click',
64
+ ]);
65
+
62
66
  function handleOptionClick({ option, index, hide }) {
63
- this.$emit('click', { option, index });
67
+ emit('click', { option, index });
64
68
  hide();
65
69
  }
66
70
 
@@ -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
- <div
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
- </div>
27
+ </wt-tooltip-floating>
25
28
  </div>
26
29
  </template>
27
30
 
28
31
  <script setup>
29
32
  import {
30
- ref, onMounted, onBeforeUnmount, watch,
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
- // https://github.com/Akryum/floating-vue/blob/main/packages/floating-vue/src/util/events.ts
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
- &__floating {
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-tooltip__floating {
139
+ .wt-tooltip-floating {
191
140
  color: var(--main-color);
192
141
  background: var(--contrast-color);
193
142
  }