playbook_ui 14.16.0.pre.alpha.PLAY1938completetooltipfloatinguitransition6830 → 14.16.0.pre.alpha.play1957inlinedatepickericonbugfix6872
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +34 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +10 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.html.erb +39 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +6 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/index.js +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +4 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +19 -9
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +38 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +49 -37
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +39 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +34 -34
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +2 -2
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +16 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -11
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -7
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +28 -24
- data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +57 -184
- data/dist/chunks/{_typeahead-BEyzuDQy.js → _typeahead-BniHPQq8.js} +3 -3
- data/dist/chunks/_weekday_stacked-CuaFaMk8.js +45 -0
- data/dist/chunks/lib-UIelzz2O.js +29 -0
- data/dist/chunks/{pb_form_validation-CJD-PyIw.js → pb_form_validation-EUv1tqtI.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +13 -8
- data/dist/chunks/_weekday_stacked-BWYgED9z.js +0 -45
- data/dist/chunks/lib-BgzBJfYr.js +0 -29
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.md → _advanced_table_selectable_rows_no_subrows_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.md → _advanced_table_selectable_rows_react.md} +0 -0
@@ -1,26 +1,22 @@
|
|
1
1
|
import PbEnhancedElement from '../pb_enhanced_element'
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
2
|
+
import {
|
3
|
+
createPopperLite as createPopper,
|
4
|
+
flip,
|
5
|
+
offset,
|
6
|
+
preventOverflow,
|
7
|
+
} from '@popperjs/core'
|
8
|
+
|
9
|
+
const TOOLTIP_OFFSET = [0, 20]
|
5
10
|
const TOOLTIP_TIMEOUT = 250
|
6
|
-
const SAFE_ZONE_MARGIN = 1
|
7
11
|
|
8
|
-
export default class
|
12
|
+
export default class PbTooltip extends PbEnhancedElement {
|
9
13
|
static get selector() {
|
10
|
-
return '[data-pb-tooltip-kit]'
|
14
|
+
return '[data-pb-tooltip-kit="true"][data-pb-tooltip-interaction="false"]:not([data-pb-tooltip-delay-open]):not([data-pb-tooltip-delay-close])'
|
11
15
|
}
|
12
16
|
|
13
17
|
connect() {
|
14
|
-
if (this.tooltipInteraction) {
|
15
|
-
document.addEventListener('mousemove', (e) => {
|
16
|
-
this.lastMouseX = e.clientX
|
17
|
-
this.lastMouseY = e.clientY
|
18
|
-
})
|
19
|
-
}
|
20
|
-
|
21
18
|
this.triggerElements.forEach((trigger) => {
|
22
19
|
const method = this.triggerMethod
|
23
|
-
const interactionEnabled = this.tooltipInteraction
|
24
20
|
|
25
21
|
if (method === 'click') {
|
26
22
|
trigger.addEventListener('click', () => {
|
@@ -28,66 +24,29 @@ export default class PbTooltipFloatingUi extends PbEnhancedElement {
|
|
28
24
|
})
|
29
25
|
} else {
|
30
26
|
trigger.addEventListener('mouseenter', () => {
|
31
|
-
clearSafeZoneListener(this)
|
32
|
-
clearTimeout(this.mouseleaveTimeout)
|
33
|
-
this.currentTrigger = trigger
|
34
|
-
const delayOpen = this.delayOpen ? parseInt(this.delayOpen) : TOOLTIP_TIMEOUT
|
35
27
|
this.mouseenterTimeout = setTimeout(() => {
|
36
28
|
this.showTooltip(trigger)
|
37
|
-
|
38
|
-
|
39
|
-
}
|
40
|
-
}, delayOpen)
|
41
|
-
})
|
29
|
+
this.checkCloseTooltip(trigger)
|
30
|
+
}, TOOLTIP_TIMEOUT)
|
42
31
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
const delayClose = parseInt(this.delayClose)
|
47
|
-
this.mouseleaveTimeout = setTimeout(() => {
|
48
|
-
if (interactionEnabled) {
|
49
|
-
this.attachSafeZoneListener()
|
50
|
-
} else {
|
51
|
-
this.hideTooltip()
|
52
|
-
}
|
53
|
-
}, delayClose)
|
54
|
-
} else {
|
55
|
-
if (interactionEnabled) {
|
56
|
-
this.attachSafeZoneListener()
|
57
|
-
} else {
|
32
|
+
trigger.addEventListener('mouseleave', () => {
|
33
|
+
clearTimeout(this.mouseenterTimeout)
|
34
|
+
setTimeout(() => {
|
58
35
|
this.hideTooltip()
|
59
|
-
}
|
60
|
-
}
|
36
|
+
}, 0)
|
37
|
+
}, { once: true })
|
61
38
|
})
|
62
39
|
|
63
|
-
|
64
|
-
this.
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
this.attachSafeZoneListener()
|
70
|
-
})
|
71
|
-
}
|
40
|
+
this.tooltip.addEventListener('mouseenter', () => {
|
41
|
+
clearTimeout(this.mouseenterTimeout)
|
42
|
+
})
|
43
|
+
this.tooltip.addEventListener('mouseleave', () => {
|
44
|
+
this.hideTooltip()
|
45
|
+
})
|
72
46
|
}
|
73
47
|
})
|
74
48
|
}
|
75
49
|
|
76
|
-
attachSafeZoneListener() {
|
77
|
-
clearSafeZoneListener(this)
|
78
|
-
this.safeZoneHandler = (e) => {
|
79
|
-
if (!this.currentTrigger) return
|
80
|
-
const triggerRect = this.currentTrigger.getBoundingClientRect()
|
81
|
-
const tooltipRect = this.tooltip.getBoundingClientRect()
|
82
|
-
const safeRect = getSafeZone(triggerRect, tooltipRect, this.position, SAFE_ZONE_MARGIN)
|
83
|
-
if (!isPointInsideRect(e.clientX, e.clientY, safeRect)) {
|
84
|
-
this.hideTooltip()
|
85
|
-
clearSafeZoneListener(this)
|
86
|
-
}
|
87
|
-
}
|
88
|
-
document.addEventListener('mousemove', this.safeZoneHandler)
|
89
|
-
}
|
90
|
-
|
91
50
|
checkCloseTooltip(trigger) {
|
92
51
|
document.querySelector('body').addEventListener('click', ({ target }) => {
|
93
52
|
const isTooltip = target.closest(`#${this.tooltipId}`) === this.tooltip
|
@@ -103,46 +62,27 @@ export default class PbTooltipFloatingUi extends PbEnhancedElement {
|
|
103
62
|
showTooltip(trigger) {
|
104
63
|
if (this.shouldShowTooltip === 'false') return
|
105
64
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
arrow({ element: arrowElement })
|
127
|
-
],
|
128
|
-
}).then(({ x, y, placement, middlewareData }) => {
|
129
|
-
Object.assign(this.tooltip.style, {
|
130
|
-
left: `${x}px`,
|
131
|
-
top: `${y}px`,
|
132
|
-
position: 'fixed'
|
133
|
-
})
|
134
|
-
this.tooltip.setAttribute('data-popper-placement', placement)
|
135
|
-
if (arrowElement && middlewareData.arrow) {
|
136
|
-
const { x: arrowX, y: arrowY } = middlewareData.arrow
|
137
|
-
Object.assign(arrowElement.style, {
|
138
|
-
left: arrowX != null ? `${arrowX}px` : '',
|
139
|
-
top: arrowY != null ? `${arrowY}px` : '',
|
140
|
-
position: 'absolute'
|
141
|
-
})
|
142
|
-
}
|
143
|
-
})
|
65
|
+
this.popper = createPopper(trigger, this.tooltip, {
|
66
|
+
placement: this.position,
|
67
|
+
strategy: 'fixed',
|
68
|
+
modifiers: [
|
69
|
+
{
|
70
|
+
name: 'offset',
|
71
|
+
options: {
|
72
|
+
offset: TOOLTIP_OFFSET,
|
73
|
+
},
|
74
|
+
},
|
75
|
+
{
|
76
|
+
name: 'arrow',
|
77
|
+
options: {
|
78
|
+
element: document.querySelector(`#${this.tooltipId}-arrow`),
|
79
|
+
},
|
80
|
+
},
|
81
|
+
offset,
|
82
|
+
preventOverflow,
|
83
|
+
flip,
|
84
|
+
],
|
144
85
|
})
|
145
|
-
|
146
86
|
this.tooltip.classList.add('show')
|
147
87
|
|
148
88
|
if (this.triggerMethod === 'click') {
|
@@ -154,50 +94,39 @@ export default class PbTooltipFloatingUi extends PbEnhancedElement {
|
|
154
94
|
}
|
155
95
|
|
156
96
|
hideTooltip() {
|
157
|
-
if (!this.tooltip) return
|
158
|
-
|
159
97
|
this.tooltip.classList.add('fade_out')
|
160
98
|
setTimeout(() => {
|
161
|
-
if (this.
|
162
|
-
|
163
|
-
this.cleanup = null
|
164
|
-
}
|
99
|
+
if (!this.popper) return
|
100
|
+
this.popper.destroy()
|
165
101
|
this.tooltip.classList.remove('show')
|
166
102
|
this.tooltip.classList.remove('fade_out')
|
167
|
-
this.tooltip.style.opacity = '0'
|
168
|
-
this.tooltip.style.visibility = 'hidden'
|
169
|
-
this.tooltip.style.pointerEvents = 'none'
|
170
|
-
this.tooltip.style.position = ''
|
171
|
-
this.tooltip.style.top = ''
|
172
|
-
this.tooltip.style.left = ''
|
173
|
-
this.tooltip.style.transform = ''
|
174
103
|
}, TOOLTIP_TIMEOUT)
|
175
104
|
}
|
176
105
|
|
177
106
|
get triggerElements() {
|
178
107
|
let triggerEl
|
108
|
+
|
179
109
|
if (this.triggerElementId) {
|
180
110
|
triggerEl = document.querySelector(`#${this.triggerElementId}`)
|
181
|
-
} else
|
111
|
+
} else {
|
182
112
|
const selectorIsId = this.triggerElementSelector.indexOf('#') > -1
|
183
113
|
triggerEl = selectorIsId
|
184
|
-
? document.querySelector(this.triggerElementSelector)
|
185
|
-
: document.querySelectorAll(this.triggerElementSelector)
|
186
|
-
} else {
|
187
|
-
triggerEl = this.element
|
114
|
+
? document.querySelector(`${this.triggerElementSelector}`)
|
115
|
+
: document.querySelectorAll(`${this.triggerElementSelector}`)
|
188
116
|
}
|
117
|
+
|
189
118
|
if (!triggerEl) {
|
190
|
-
console.error('Tooltip Kit:
|
119
|
+
console.error('Tooltip Kit: an invalid or unavailable DOM reference was provided!')
|
191
120
|
return []
|
192
121
|
}
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
return triggerEl
|
122
|
+
|
123
|
+
if (!triggerEl.length) triggerEl = [triggerEl]
|
124
|
+
return (this._triggerElements = this._triggerElements || triggerEl)
|
197
125
|
}
|
198
126
|
|
199
127
|
get tooltip() {
|
200
|
-
return (this._tooltip =
|
128
|
+
return (this._tooltip =
|
129
|
+
this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
|
201
130
|
}
|
202
131
|
|
203
132
|
get position() {
|
@@ -223,60 +152,4 @@ export default class PbTooltipFloatingUi extends PbEnhancedElement {
|
|
223
152
|
get triggerMethod() {
|
224
153
|
return this.element.dataset.pbTooltipTriggerMethod || 'hover'
|
225
154
|
}
|
226
|
-
|
227
|
-
get tooltipInteraction() {
|
228
|
-
return this.element.dataset.pbTooltipInteraction === 'true'
|
229
|
-
}
|
230
|
-
|
231
|
-
get delayOpen() {
|
232
|
-
return this.element.dataset.pbTooltipDelayOpen
|
233
|
-
}
|
234
|
-
|
235
|
-
get delayClose() {
|
236
|
-
return this.element.dataset.pbTooltipDelayClose
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
function clearSafeZoneListener(context) {
|
241
|
-
if (context.safeZoneHandler) {
|
242
|
-
document.removeEventListener('mousemove', context.safeZoneHandler)
|
243
|
-
context.safeZoneHandler = null
|
244
|
-
}
|
245
|
-
}
|
246
|
-
|
247
|
-
function getSafeZone(triggerRect, tooltipRect, placement, margin) {
|
248
|
-
let safeRect = {}
|
249
|
-
if (placement.startsWith('top')) {
|
250
|
-
safeRect.left = triggerRect.left - margin
|
251
|
-
safeRect.right = triggerRect.right + margin
|
252
|
-
safeRect.top = tooltipRect.bottom - margin
|
253
|
-
safeRect.bottom = triggerRect.top + margin
|
254
|
-
} else if (placement.startsWith('bottom')) {
|
255
|
-
safeRect.left = triggerRect.left - margin
|
256
|
-
safeRect.right = triggerRect.right + margin
|
257
|
-
safeRect.top = triggerRect.bottom - margin
|
258
|
-
safeRect.bottom = tooltipRect.top + margin
|
259
|
-
} else if (placement.startsWith('left')) {
|
260
|
-
safeRect.top = triggerRect.top - margin
|
261
|
-
safeRect.bottom = triggerRect.bottom + margin
|
262
|
-
safeRect.left = tooltipRect.right - margin
|
263
|
-
safeRect.right = triggerRect.left + margin
|
264
|
-
} else if (placement.startsWith('right')) {
|
265
|
-
safeRect.top = triggerRect.top - margin
|
266
|
-
safeRect.bottom = triggerRect.bottom + margin
|
267
|
-
safeRect.left = triggerRect.right - margin
|
268
|
-
safeRect.right = tooltipRect.left + margin
|
269
|
-
} else {
|
270
|
-
safeRect = {
|
271
|
-
left: triggerRect.left - margin,
|
272
|
-
right: triggerRect.right + margin,
|
273
|
-
top: triggerRect.top - margin,
|
274
|
-
bottom: triggerRect.bottom + margin,
|
275
|
-
}
|
276
|
-
}
|
277
|
-
return safeRect
|
278
|
-
}
|
279
|
-
|
280
|
-
function isPointInsideRect(x, y, rect) {
|
281
|
-
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
|
282
|
-
}
|
155
|
+
}
|