fleetcor-lwc 1.4.2 → 1.4.4

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/README.md CHANGED
@@ -129,6 +129,15 @@ $FLT_BUTTON_LINK_HOVER_COLOR: var(--flt-button-link-hover-color, #6b7280);
129
129
 
130
130
  ## Release Notes:
131
131
 
132
+ - v.1.4.4
133
+ - Bug fix tooltip mobile positions
134
+
135
+ ---
136
+ - v.1.4.3
137
+ - Bug fix at tooltip corner attribute
138
+
139
+ ---
140
+
132
141
  - v.1.4.2
133
142
  - Bug fix selectors conflicts
134
143
 
@@ -1,11 +1,11 @@
1
1
  <template lwc:render-mode="light">
2
- <div class="flt-tooltip" onmouseover={over} ontouchstart={over} onmouseout={out} ontouchend={out}>
2
+ <div class="flt-tooltip" onmouseover={over} onmouseout={out}>
3
3
  <slot></slot>
4
4
  <div if:true={content} class={tooltipVisibility} style={conentStyle}>
5
- <svg class="flt-tooltip__svg" height={svgH} width={svgW} style={svgStyle}>
5
+ <svg class="flt-tooltip__svg" height={svgH} width={svgW}>
6
6
  <path class="flt-tooltip__path" d={svgD}></path>
7
7
  </svg>
8
- <p class="flt-tooltip__text" style={textStyle}></p>
8
+ <p class="flt-tooltip__text"></p>
9
9
  </div>
10
10
  </div>
11
11
  </template>
@@ -7,6 +7,9 @@ export default class Tooltip extends LightningElement {
7
7
  @api content
8
8
  @api corner = 0
9
9
 
10
+ firstSetup = true
11
+ leftSide = false
12
+ tipPositionStart = false
10
13
  maxWidth = 240
11
14
  svgW = 0
12
15
  svgH = 0
@@ -16,61 +19,73 @@ export default class Tooltip extends LightningElement {
16
19
  tip = 8
17
20
  active = false
18
21
  childElementRect = {}
19
- leftPosition
20
- rightPosition = false
21
- bottomPosition = false
22
-
23
- get textStyle() {
24
- let result = `padding:${this.paddingY + this.delta}px ${this.paddingX + this.delta}px ${
25
- this.paddingY + this.delta + this.tip
26
- }px; width:${this.minimalWidth}px`
27
- if (this.bottomPosition) {
28
- result = `padding:${this.paddingY + this.delta + this.tip}px ${
29
- this.paddingX + this.delta
30
- }px ${this.paddingY + this.delta}px`
31
- }
32
- return result
33
- }
22
+ leftPosition = 0
23
+ rightPosition = 0
24
+ rightSide = false
25
+ bottomSide = false
26
+ centerSide
27
+
28
+ get conentStyle() {
29
+ let result = `width:${this.minimalWidth}px;`
34
30
 
35
- get svgStyle() {
36
- let result = `top:0px;`
37
- if (this.rightPosition) {
38
- result += `right:0px`
31
+ if (this.bottomSide) {
32
+ result += `padding:${this.paddingY + this.delta + this.tip}px ${
33
+ this.paddingX + this.delta
34
+ }px ${this.paddingY + this.delta}px;bottom:-${this.svgH}px;`
39
35
  } else {
40
- result += `left:0px`
36
+ result += `padding:${this.paddingY + this.delta}px ${this.paddingX + this.delta}px ${
37
+ this.paddingY + this.delta + this.tip
38
+ }px;top:-${this.svgH}px;`
41
39
  }
42
- return result
43
- }
44
40
 
45
- get conentStyle() {
46
- let result = `top:-${this.svgH}px; width:${this.minimalWidth}px;`
47
- if (this.bottomPosition) {
48
- result = `bottom:-${this.svgH}px; width:${this.minimalWidth}px;`
49
- }
50
- if (this.rightPosition) {
51
- result += `right:0px`
41
+ if (this.rightSide) {
42
+ result += `right:${this.rightPosition}px;`
52
43
  } else {
53
- result += `left:${this.leftPosition}px`
44
+ result += `left:${this.leftPosition}px;`
54
45
  }
55
46
  return result
56
47
  }
57
48
 
58
49
  get tooltipVisibility() {
59
- return this.active ? 'flt-tooltip__content flt-tooltip__content_visible' : 'flt-tooltip__content'
50
+ return this.active
51
+ ? 'flt-tooltip__content flt-tooltip__content_visible'
52
+ : 'flt-tooltip__content'
60
53
  }
61
54
 
62
55
  get svgD() {
63
56
  let result
64
57
 
65
- if (this.bottomPosition && this.rightPosition) {
58
+ if (this.centerSide && !this.bottomSide) {
59
+ result = `
60
+ M ${this.delta} ${this.delta + this.corner}
61
+ Q ${this.delta} ${this.delta},
62
+ ${this.delta + this.corner} ${this.delta}
63
+
64
+ L ${this.svgW - this.delta - this.corner} ${this.delta}
65
+ Q ${this.svgW - this.delta} ${this.delta},
66
+ ${this.svgW - this.delta} ${this.delta + this.corner}
67
+
68
+ L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
69
+ Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
70
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
71
+
72
+ L ${this.svgW / 2 + this.tip} ${this.svgH - this.tip - this.delta}
73
+ ${this.svgW / 2} ${this.svgH - this.tip - this.delta + this.tip}
74
+ ${this.svgW / 2 - this.tip} ${this.svgH - this.tip - this.delta}
75
+
76
+ L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
77
+ Q ${this.delta} ${this.svgH - this.tip - this.delta},
78
+ ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
79
+ Z`
80
+ } else if (this.centerSide && this.bottomSide) {
66
81
  result = `
67
82
  M ${this.delta} ${this.delta + this.corner + this.tip}
68
83
  Q ${this.delta} ${this.delta + this.tip},
69
84
  ${this.delta + this.corner} ${this.delta + this.tip}
70
85
 
71
- L ${this.svgW - this.tip * 4 + this.tip} ${this.delta + this.tip}
72
- ${this.svgW - this.tip * 4} ${this.delta}
73
- ${this.svgW - this.tip * 4 - this.tip} ${this.delta + this.tip}
86
+ L ${this.svgW / 2 + this.tip} ${this.delta + this.tip}
87
+ ${this.svgW / 2} ${this.delta}
88
+ ${this.svgW / 2 - this.tip} ${this.delta + this.tip}
74
89
 
75
90
  L ${this.svgW - this.delta - this.corner} ${this.delta + this.tip}
76
91
  Q ${this.svgW - this.delta} ${this.delta + this.tip},
@@ -84,15 +99,50 @@ export default class Tooltip extends LightningElement {
84
99
  Q ${this.delta} ${this.svgH - this.delta},
85
100
  ${this.delta} ${this.svgH - this.delta - this.corner}
86
101
  Z`
87
- } else if (this.bottomPosition && this.leftPosition) {
102
+ } else if (this.leftSide && !this.tipPositionStart && !this.bottomSide) {
88
103
  result = `
89
- M ${this.delta} ${this.delta + this.corner + this.tip}
90
- Q ${this.delta} ${this.delta + this.tip},
91
- ${this.delta + this.corner} ${this.delta + this.tip}
104
+ M ${this.delta} ${this.delta + this.corner}
105
+ Q ${this.delta} ${this.delta},
106
+ ${this.delta + this.corner} ${this.delta}
107
+
108
+ L ${this.svgW - this.delta - this.corner} ${this.delta}
109
+ Q ${this.svgW - this.delta} ${this.delta},
110
+ ${this.svgW - this.delta} ${this.delta + this.corner}
111
+
112
+ L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
113
+ Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
114
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
92
115
 
93
- L ${this.svgW / 2 + this.tip} ${this.delta + this.tip}
94
- ${this.svgW / 2} ${this.delta}
95
- ${this.svgW / 2 - this.tip} ${this.delta + this.tip}
116
+ L ${2 * this.delta + this.tip} ${this.svgH - this.tip - this.delta}
117
+ L ${this.delta} ${this.svgH - this.tip - this.delta + this.tip}
118
+
119
+ Z`
120
+ } else if (this.leftSide && this.tipPositionStart && !this.bottomSide) {
121
+ result = `
122
+ M ${this.delta} ${this.delta + this.corner}
123
+ Q ${this.delta} ${this.delta},
124
+ ${this.delta + this.corner} ${this.delta}
125
+
126
+ L ${this.svgW - this.delta - this.corner} ${this.delta}
127
+ Q ${this.svgW - this.delta} ${this.delta},
128
+ ${this.svgW - this.delta} ${this.delta + this.corner}
129
+
130
+ L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
131
+ Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
132
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
133
+
134
+ L ${this.tip * 4 + this.tip} ${this.svgH - this.tip - this.delta}
135
+ ${this.tip * 4} ${this.svgH - this.tip - this.delta + this.tip}
136
+ ${this.tip * 4 - this.tip} ${this.svgH - this.tip - this.delta}
137
+
138
+ L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
139
+ Q ${this.delta} ${this.svgH - this.tip - this.delta},
140
+ ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
141
+ Z`
142
+ } else if (this.leftSide && !this.tipPositionStart && this.bottomSide) {
143
+ result = `
144
+ M ${this.delta} ${this.delta}
145
+ L ${2 * this.delta + this.tip} ${this.delta + this.tip}
96
146
 
97
147
  L ${this.svgW - this.delta - this.corner} ${this.delta + this.tip}
98
148
  Q ${this.svgW - this.delta} ${this.delta + this.tip},
@@ -106,7 +156,7 @@ export default class Tooltip extends LightningElement {
106
156
  Q ${this.delta} ${this.svgH - this.delta},
107
157
  ${this.delta} ${this.svgH - this.delta - this.corner}
108
158
  Z`
109
- } else if (this.bottomPosition) {
159
+ } else if (this.leftSide && this.tipPositionStart && this.bottomSide) {
110
160
  result = `
111
161
  M ${this.delta} ${this.delta + this.corner + this.tip}
112
162
  Q ${this.delta} ${this.delta + this.tip},
@@ -128,29 +178,25 @@ export default class Tooltip extends LightningElement {
128
178
  Q ${this.delta} ${this.svgH - this.delta},
129
179
  ${this.delta} ${this.svgH - this.delta - this.corner}
130
180
  Z`
131
- } else if (this.rightPosition) {
181
+ } else if (this.rightSide && this.tipPositionStart && !this.bottomSide) {
132
182
  result = `
133
- M ${this.delta} ${this.delta + this.corner}
134
- Q ${this.delta} ${this.delta},
183
+ M ${this.delta} ${this.delta + this.corner}
184
+ Q ${this.delta} ${this.delta},
135
185
  ${this.delta + this.corner} ${this.delta}
136
-
137
- L ${this.svgW - this.delta - this.corner} ${this.delta}
138
- Q ${this.svgW - this.delta} ${this.delta},
186
+ L ${this.svgW - this.delta - this.corner} ${this.delta}
187
+ Q ${this.svgW - this.delta} ${this.delta},
139
188
  ${this.svgW - this.delta} ${this.delta + this.corner}
140
-
141
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
142
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
143
- ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
144
-
145
- L ${this.svgW - this.tip * 4 + this.tip} ${this.svgH - this.tip - this.delta}
189
+ L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
190
+ Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
191
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
192
+ L ${this.svgW - this.tip * 4 + this.tip} ${this.svgH - this.tip - this.delta}
146
193
  ${this.svgW - this.tip * 4} ${this.svgH - this.tip - this.delta + this.tip}
147
194
  ${this.svgW - this.tip * 4 - this.tip} ${this.svgH - this.tip - this.delta}
148
-
149
195
  L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
150
- Q ${this.delta} ${this.svgH - this.tip - this.delta},
196
+ Q ${this.delta} ${this.svgH - this.tip - this.delta},
151
197
  ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
152
198
  Z`
153
- } else if (this.leftPosition) {
199
+ } else if (this.rightSide && !this.tipPositionStart && !this.bottomSide) {
154
200
  result = `
155
201
  M ${this.delta} ${this.delta + this.corner}
156
202
  Q ${this.delta} ${this.delta},
@@ -160,55 +206,66 @@ export default class Tooltip extends LightningElement {
160
206
  Q ${this.svgW - this.delta} ${this.delta},
161
207
  ${this.svgW - this.delta} ${this.delta + this.corner}
162
208
 
163
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
164
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
165
- ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
166
-
167
- L ${this.svgW / 2 + this.tip} ${this.svgH - this.tip - this.delta}
168
- ${this.svgW / 2} ${this.svgH - this.tip - this.delta + this.tip}
169
- ${this.svgW / 2 - this.tip} ${this.svgH - this.tip - this.delta}
170
-
209
+ L ${this.svgW - this.delta} ${this.svgH - this.delta}
210
+ ${this.svgW - 2 * this.delta - this.tip} ${this.svgH - this.delta - this.tip}
211
+
171
212
  L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
172
213
  Q ${this.delta} ${this.svgH - this.tip - this.delta},
173
214
  ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
174
215
  Z`
175
- } else {
216
+ } else if (this.rightSide && !this.tipPositionStart && this.bottomSide) {
176
217
  result = `
177
- M ${this.delta} ${this.delta + this.corner}
178
- Q ${this.delta} ${this.delta},
179
- ${this.delta + this.corner} ${this.delta}
180
-
181
- L ${this.svgW - this.delta - this.corner} ${this.delta}
182
- Q ${this.svgW - this.delta} ${this.delta},
183
- ${this.svgW - this.delta} ${this.delta + this.corner}
218
+ M ${this.delta} ${this.delta + this.corner + this.tip}
219
+ Q ${this.delta} ${this.delta + this.tip},
220
+ ${this.delta + this.corner} ${this.delta + this.tip}
221
+
222
+ L ${this.svgW - 2 * this.delta - this.tip} ${this.delta + this.tip}
223
+ ${this.svgW - this.delta} ${this.delta}
184
224
 
185
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
186
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
187
- ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
225
+ L ${this.svgW - this.delta} ${this.svgH - this.delta - this.corner}
226
+ Q ${this.svgW - this.delta} ${this.svgH - this.delta},
227
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.delta}
228
+
229
+ L ${this.delta + this.corner} ${this.svgH - this.delta}
230
+ Q ${this.delta} ${this.svgH - this.delta},
231
+ ${this.delta} ${this.svgH - this.delta - this.corner}
232
+ Z`
233
+ } else if (this.rightSide && this.tipPositionStart && this.bottomSide) {
234
+ result = `
235
+ M ${this.delta} ${this.delta + this.corner + this.tip}
236
+ Q ${this.delta} ${this.delta + this.tip},
237
+ ${this.delta + this.corner} ${this.delta + this.tip}
188
238
 
189
- L ${this.tip * 4 + this.tip} ${this.svgH - this.tip - this.delta}
190
- ${this.tip * 4} ${this.svgH - this.tip - this.delta + this.tip}
191
- ${this.tip * 4 - this.tip} ${this.svgH - this.tip - this.delta}
239
+ L ${this.svgW - this.tip * 4 + this.tip} ${this.delta + this.tip}
240
+ ${this.svgW - this.tip * 4} ${this.delta}
241
+ ${this.svgW - this.tip * 4 - this.tip} ${this.delta + this.tip}
242
+
243
+ L ${this.svgW - this.delta - this.corner} ${this.delta + this.tip}
244
+ Q ${this.svgW - this.delta} ${this.delta + this.tip},
245
+ ${this.svgW - this.delta} ${this.delta + this.corner + this.tip}
246
+
247
+ L ${this.svgW - this.delta} ${this.svgH - this.delta - this.corner}
248
+ Q ${this.svgW - this.delta} ${this.svgH - this.delta},
249
+ ${this.svgW - this.delta - this.corner} ${this.svgH - this.delta}
192
250
 
193
- L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
194
- Q ${this.delta} ${this.svgH - this.tip - this.delta},
195
- ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
251
+ L ${this.delta + this.corner} ${this.svgH - this.delta}
252
+ Q ${this.delta} ${this.svgH - this.delta},
253
+ ${this.delta} ${this.svgH - this.delta - this.corner}
196
254
  Z`
197
255
  }
198
-
199
256
  return result
200
257
  }
201
258
 
202
259
  connectedCallback() {
203
260
  if (this.content) {
204
- this.resizeObserver = new ResizeObserver(this.update.bind(this))
261
+ this.corner = parseInt(this.corner)
262
+ window.addEventListener('scroll', this.update.bind(this))
263
+ window.addEventListener('resize', this.update.bind(this))
205
264
  }
206
265
  }
207
266
 
208
267
  update() {
209
268
  if (this.content) {
210
- const text = this.firstChild.querySelector('.flt-tooltip__text')
211
- text.innerHTML = this.content
212
269
  this.createTooltip()
213
270
  }
214
271
  }
@@ -216,58 +273,79 @@ export default class Tooltip extends LightningElement {
216
273
  over() {
217
274
  if (!this.active && this.content) {
218
275
  this.active = true
219
- this.createTooltip()
220
276
  }
221
277
  }
222
278
 
223
279
  out() {
224
280
  if (this.active && this.content) {
225
281
  this.active = false
226
- this.childElementRect = this.firstChild.firstChild.getBoundingClientRect()
227
- this.leftPosition = (this.childElementRect.width - this.svgW) / 2
228
- this.rightPosition = false
229
- this.bottomPosition = false
230
282
  }
231
283
  }
232
284
 
233
285
  createTooltip() {
234
286
  // 1. find width of tooltip
235
287
  const text = this.firstChild.querySelector('.flt-tooltip__text')
288
+ text.innerHTML = this.content
289
+ const content = this.firstChild.querySelector('.flt-tooltip__content')
290
+ let contentPosition = content.getBoundingClientRect()
291
+ const bodyPosition = document.body.getBoundingClientRect()
292
+
236
293
  this.minimalWidth = getLineWidth(text)
237
294
  if (this.minimalWidth < this.maxWidth) {
238
- this.minimalWidth = this.minimalWidth + this.paddingX * 2 + 2 * this.delta
295
+ this.minimalWidth = this.minimalWidth + this.paddingX * 2 + 2 * this.delta + 1
239
296
  this.svgW = this.minimalWidth
240
297
  } else {
241
298
  this.minimalWidth = this.maxWidth
242
299
  this.svgW = this.minimalWidth
243
300
  }
244
- this.svgH = text.offsetHeight
301
+ content.style.width = `${this.minimalWidth}px`
302
+ contentPosition = content.getBoundingClientRect()
245
303
 
246
- // 2. find position left or right
304
+ this.svgH = contentPosition.height
247
305
 
248
- const textPosition = text.getBoundingClientRect()
249
- const bodyPosition = document.body.getBoundingClientRect()
306
+ // 2. find position by vertical
307
+ this.childElementRect = this.firstChild.firstChild.getBoundingClientRect()
308
+ this.bottomSide = this.childElementRect.top - contentPosition.height < 12
250
309
 
251
- if (textPosition.right > bodyPosition.width - 12) {
252
- this.leftPosition = 0
253
- this.rightPosition = true
254
- } else if (textPosition.x < 12) {
255
- this.leftPosition = 0
256
- this.rightPosition = false
257
- } else {
258
- this.childElementRect = this.firstChild.firstChild.getBoundingClientRect()
259
- this.leftPosition = (this.childElementRect.width - this.svgW) / 2
260
- }
310
+ // 3. find position by horizontal
311
+ this.leftPosition = (this.childElementRect.width - this.svgW) / 2
312
+ this.rightSide = false
313
+ this.centerSide = true
314
+ this.leftSide = false
315
+ this.rightPosition = 0
316
+ this.tipPositionStart = false
317
+ if (
318
+ this.minimalWidth > this.childElementRect.width &&
319
+ this.childElementRect.right + (this.minimalWidth - this.childElementRect.width) / 2 >
320
+ bodyPosition.width - 12
321
+ ) {
322
+ this.leftPosition = false
323
+ this.rightSide = true
324
+ this.centerSide = false
261
325
 
262
- // 3. find position top or bottom
263
- if (textPosition.top < 12) {
264
- this.bottomPosition = true
326
+ if (this.childElementRect.width < 4 * this.tip) {
327
+ this.rightPosition = this.childElementRect.width / 2 - this.delta
328
+ } else {
329
+ this.rightPosition = 0
330
+ this.tipPositionStart = true
331
+ }
332
+ } else if (this.leftPosition + this.childElementRect.x < 0) {
333
+ this.centerSide = false
334
+ this.leftSide = true
335
+
336
+ if (this.childElementRect.width < 4 * this.tip) {
337
+ this.leftPosition = this.childElementRect.width / 2 - this.delta
338
+ } else {
339
+ this.leftPosition = 0
340
+ this.tipPositionStart = true
341
+ }
265
342
  }
266
343
  }
267
344
 
268
345
  renderedCallback() {
269
- if (this.content) {
270
- this.resizeObserver.observe(this.firstChild)
346
+ if (this.firstSetup) {
347
+ this.firstSetup = !this.firstSetup
348
+ this.update()
271
349
  }
272
350
  }
273
351
  }
@@ -15,7 +15,8 @@
15
15
  opacity: 0;
16
16
  font-size: 16px;
17
17
  line-height: 1.3;
18
- max-width: initial;
18
+ max-width: 240px;
19
+ box-sizing: border-box;
19
20
  transition: opacity 0.3s ease-out;
20
21
 
21
22
  &_visible {
@@ -27,13 +28,14 @@
27
28
  &__text {
28
29
  position: relative;
29
30
  color: $FLT_TOOLTIP_COLOR;
30
- float: left;
31
+ cursor: text;
31
32
  margin: 0;
32
- max-width: 240px;
33
- box-sizing: border-box;
33
+ padding: 0;
34
34
  }
35
35
 
36
36
  &__svg {
37
+ top: 0;
38
+ left: 0;
37
39
  position: absolute;
38
40
  max-width: initial;
39
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetcor-lwc",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "LWC framework by Fleetcor",
5
5
  "repository": {
6
6
  "type": "git",