fleetcor-lwc 1.4.3 → 1.4.5

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,14 @@ $FLT_BUTTON_LINK_HOVER_COLOR: var(--flt-button-link-hover-color, #6b7280);
129
129
 
130
130
  ## Release Notes:
131
131
 
132
+ - v.1.4.5
133
+ - Tooltip text align centred
134
+
135
+ ---
136
+ - v.1.4.4
137
+ - Bug fix tooltip mobile positions
138
+
139
+ ---
132
140
  - v.1.4.3
133
141
  - Bug fix at tooltip corner attribute
134
142
 
@@ -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,41 +19,29 @@ 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
  }
@@ -64,15 +55,37 @@ export default class Tooltip extends LightningElement {
64
55
  get svgD() {
65
56
  let result
66
57
 
67
- 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) {
68
81
  result = `
69
82
  M ${this.delta} ${this.delta + this.corner + this.tip}
70
83
  Q ${this.delta} ${this.delta + this.tip},
71
84
  ${this.delta + this.corner} ${this.delta + this.tip}
72
85
 
73
- L ${this.svgW - this.tip * 4 + this.tip} ${this.delta + this.tip}
74
- ${this.svgW - this.tip * 4} ${this.delta}
75
- ${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}
76
89
 
77
90
  L ${this.svgW - this.delta - this.corner} ${this.delta + this.tip}
78
91
  Q ${this.svgW - this.delta} ${this.delta + this.tip},
@@ -86,15 +99,50 @@ export default class Tooltip extends LightningElement {
86
99
  Q ${this.delta} ${this.svgH - this.delta},
87
100
  ${this.delta} ${this.svgH - this.delta - this.corner}
88
101
  Z`
89
- } else if (this.bottomPosition && this.leftPosition) {
102
+ } else if (this.leftSide && !this.tipPositionStart && !this.bottomSide) {
90
103
  result = `
91
- M ${this.delta} ${this.delta + this.corner + this.tip}
92
- Q ${this.delta} ${this.delta + this.tip},
93
- ${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}
94
115
 
95
- L ${this.svgW / 2 + this.tip} ${this.delta + this.tip}
96
- ${this.svgW / 2} ${this.delta}
97
- ${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}
98
146
 
99
147
  L ${this.svgW - this.delta - this.corner} ${this.delta + this.tip}
100
148
  Q ${this.svgW - this.delta} ${this.delta + this.tip},
@@ -108,7 +156,7 @@ export default class Tooltip extends LightningElement {
108
156
  Q ${this.delta} ${this.svgH - this.delta},
109
157
  ${this.delta} ${this.svgH - this.delta - this.corner}
110
158
  Z`
111
- } else if (this.bottomPosition) {
159
+ } else if (this.leftSide && this.tipPositionStart && this.bottomSide) {
112
160
  result = `
113
161
  M ${this.delta} ${this.delta + this.corner + this.tip}
114
162
  Q ${this.delta} ${this.delta + this.tip},
@@ -130,29 +178,25 @@ export default class Tooltip extends LightningElement {
130
178
  Q ${this.delta} ${this.svgH - this.delta},
131
179
  ${this.delta} ${this.svgH - this.delta - this.corner}
132
180
  Z`
133
- } else if (this.rightPosition) {
181
+ } else if (this.rightSide && this.tipPositionStart && !this.bottomSide) {
134
182
  result = `
135
- M ${this.delta} ${this.delta + this.corner}
136
- Q ${this.delta} ${this.delta},
183
+ M ${this.delta} ${this.delta + this.corner}
184
+ Q ${this.delta} ${this.delta},
137
185
  ${this.delta + this.corner} ${this.delta}
138
-
139
- L ${this.svgW - this.delta - this.corner} ${this.delta}
140
- 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},
141
188
  ${this.svgW - this.delta} ${this.delta + this.corner}
142
-
143
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
144
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
145
- ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
146
-
147
- 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}
148
193
  ${this.svgW - this.tip * 4} ${this.svgH - this.tip - this.delta + this.tip}
149
194
  ${this.svgW - this.tip * 4 - this.tip} ${this.svgH - this.tip - this.delta}
150
-
151
195
  L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
152
- Q ${this.delta} ${this.svgH - this.tip - this.delta},
196
+ Q ${this.delta} ${this.svgH - this.tip - this.delta},
153
197
  ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
154
198
  Z`
155
- } else if (this.leftPosition) {
199
+ } else if (this.rightSide && !this.tipPositionStart && !this.bottomSide) {
156
200
  result = `
157
201
  M ${this.delta} ${this.delta + this.corner}
158
202
  Q ${this.delta} ${this.delta},
@@ -162,56 +206,66 @@ export default class Tooltip extends LightningElement {
162
206
  Q ${this.svgW - this.delta} ${this.delta},
163
207
  ${this.svgW - this.delta} ${this.delta + this.corner}
164
208
 
165
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
166
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
167
- ${this.svgW - this.delta - this.corner} ${this.svgH - this.tip - this.delta}
168
-
169
- L ${this.svgW / 2 + this.tip} ${this.svgH - this.tip - this.delta}
170
- ${this.svgW / 2} ${this.svgH - this.tip - this.delta + this.tip}
171
- ${this.svgW / 2 - this.tip} ${this.svgH - this.tip - this.delta}
172
-
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
+
173
212
  L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
174
213
  Q ${this.delta} ${this.svgH - this.tip - this.delta},
175
214
  ${this.delta} ${this.svgH - this.tip - this.delta - this.corner}
176
215
  Z`
177
- } else {
216
+ } else if (this.rightSide && !this.tipPositionStart && this.bottomSide) {
178
217
  result = `
179
- M ${this.delta} ${this.delta + this.corner}
180
- Q ${this.delta} ${this.delta},
181
- ${this.delta + this.corner} ${this.delta}
182
-
183
- L ${this.svgW - this.delta - this.corner} ${this.delta}
184
- Q ${this.svgW - this.delta} ${this.delta},
185
- ${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}
186
224
 
187
- L ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta - this.corner}
188
- Q ${this.svgW - this.delta} ${this.svgH - this.tip - this.delta},
189
- ${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}
190
238
 
191
- L ${this.tip * 4 + this.tip} ${this.svgH - this.tip - this.delta}
192
- ${this.tip * 4} ${this.svgH - this.tip - this.delta + this.tip}
193
- ${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}
194
250
 
195
- L ${this.delta + this.corner} ${this.svgH - this.tip - this.delta}
196
- Q ${this.delta} ${this.svgH - this.tip - this.delta},
197
- ${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}
198
254
  Z`
199
255
  }
200
-
201
256
  return result
202
257
  }
203
258
 
204
259
  connectedCallback() {
205
260
  if (this.content) {
206
261
  this.corner = parseInt(this.corner)
207
- this.resizeObserver = new ResizeObserver(this.update.bind(this))
262
+ window.addEventListener('scroll', this.update.bind(this))
263
+ window.addEventListener('resize', this.update.bind(this))
208
264
  }
209
265
  }
210
266
 
211
267
  update() {
212
268
  if (this.content) {
213
- const text = this.firstChild.querySelector('.flt-tooltip__text')
214
- text.innerHTML = this.content
215
269
  this.createTooltip()
216
270
  }
217
271
  }
@@ -219,58 +273,79 @@ export default class Tooltip extends LightningElement {
219
273
  over() {
220
274
  if (!this.active && this.content) {
221
275
  this.active = true
222
- this.createTooltip()
223
276
  }
224
277
  }
225
278
 
226
279
  out() {
227
280
  if (this.active && this.content) {
228
281
  this.active = false
229
- this.childElementRect = this.firstChild.firstChild.getBoundingClientRect()
230
- this.leftPosition = (this.childElementRect.width - this.svgW) / 2
231
- this.rightPosition = false
232
- this.bottomPosition = false
233
282
  }
234
283
  }
235
284
 
236
285
  createTooltip() {
237
286
  // 1. find width of tooltip
238
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
+
239
293
  this.minimalWidth = getLineWidth(text)
240
294
  if (this.minimalWidth < this.maxWidth) {
241
- this.minimalWidth = this.minimalWidth + this.paddingX * 2 + 2 * this.delta
295
+ this.minimalWidth = this.minimalWidth + this.paddingX * 2 + 2 * this.delta + 1
242
296
  this.svgW = this.minimalWidth
243
297
  } else {
244
298
  this.minimalWidth = this.maxWidth
245
299
  this.svgW = this.minimalWidth
246
300
  }
247
- this.svgH = text.offsetHeight
301
+ content.style.width = `${this.minimalWidth}px`
302
+ contentPosition = content.getBoundingClientRect()
248
303
 
249
- // 2. find position left or right
304
+ this.svgH = contentPosition.height
250
305
 
251
- const textPosition = text.getBoundingClientRect()
252
- 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
253
309
 
254
- if (textPosition.right > bodyPosition.width - 12) {
255
- this.leftPosition = 0
256
- this.rightPosition = true
257
- } else if (textPosition.x < 12) {
258
- this.leftPosition = 0
259
- this.rightPosition = false
260
- } else {
261
- this.childElementRect = this.firstChild.firstChild.getBoundingClientRect()
262
- this.leftPosition = (this.childElementRect.width - this.svgW) / 2
263
- }
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
264
325
 
265
- // 3. find position top or bottom
266
- if (textPosition.top < 12) {
267
- 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
+ }
268
342
  }
269
343
  }
270
344
 
271
345
  renderedCallback() {
272
- if (this.content) {
273
- this.resizeObserver.observe(this.firstChild)
346
+ if (this.firstSetup) {
347
+ this.firstSetup = !this.firstSetup
348
+ this.update()
274
349
  }
275
350
  }
276
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,15 @@
27
28
  &__text {
28
29
  position: relative;
29
30
  color: $FLT_TOOLTIP_COLOR;
30
- float: left;
31
+ cursor: text;
32
+ text-align: center;
31
33
  margin: 0;
32
- max-width: 240px;
33
- box-sizing: border-box;
34
+ padding: 0;
34
35
  }
35
36
 
36
37
  &__svg {
38
+ top: 0;
39
+ left: 0;
37
40
  position: absolute;
38
41
  max-width: initial;
39
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetcor-lwc",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "LWC framework by Fleetcor",
5
5
  "repository": {
6
6
  "type": "git",