playbook_ui 14.16.0 → 14.17.0.pre.rc.1

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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +34 -2
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +86 -84
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
  5. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +10 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.jsx +0 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.html.erb +39 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.html.erb +33 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +1 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +6 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/index.js +1 -1
  13. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +4 -2
  14. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +19 -9
  15. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +38 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +49 -37
  17. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +39 -0
  18. data/app/pb_kits/playbook/pb_button/_button.scss +5 -5
  19. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +34 -34
  20. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +2 -2
  21. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +16 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -11
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -7
  24. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +28 -24
  25. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +3 -4
  26. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +2 -3
  27. data/app/pb_kits/playbook/pb_form/pb_form_validation.js +1 -1
  28. data/app/pb_kits/playbook/pb_lightbox/hooks/useVisibility.js +1 -1
  29. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -1
  30. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +29 -11
  31. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb +1 -1
  32. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.html.erb +4 -4
  33. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.rb +2 -0
  34. data/app/pb_kits/playbook/pb_table/_table.tsx +4 -0
  35. data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx +50 -0
  36. data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_react.md +1 -0
  37. data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating.jsx +59 -0
  38. data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating_react.md +1 -0
  39. data/app/pb_kits/playbook/pb_table/docs/example.yml +2 -0
  40. data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
  41. data/app/pb_kits/playbook/pb_table/styles/_headers.scss +76 -0
  42. data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +11 -1
  43. data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +11 -1
  44. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +5 -0
  45. data/app/pb_kits/playbook/pb_table/table.test.js +17 -0
  46. data/app/pb_kits/playbook/pb_tooltip/index.js +183 -56
  47. data/app/pb_kits/playbook/pb_typeahead/index.ts +2 -2
  48. data/app/pb_kits/playbook/utilities/globalProps.ts +1 -1
  49. data/app/pb_kits/playbook/utilities/object.test.js +149 -1
  50. data/app/pb_kits/playbook/utilities/object.ts +124 -42
  51. data/dist/chunks/_typeahead-Djo6qCne.js +22 -0
  52. data/dist/chunks/_weekday_stacked-DIIHW0OV.js +45 -0
  53. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  54. data/dist/chunks/lib-BGzBzFZX.js +29 -0
  55. data/dist/chunks/{pb_form_validation-DMajaRt3.js → pb_form_validation-BvNy9Bd6.js} +1 -1
  56. data/dist/chunks/vendor.js +1 -1
  57. data/dist/playbook-doc.js +1 -1
  58. data/dist/playbook-rails-react-bindings.js +1 -1
  59. data/dist/playbook-rails.js +1 -1
  60. data/dist/playbook.css +1 -1
  61. data/lib/playbook/version.rb +2 -2
  62. metadata +17 -10
  63. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +0 -282
  64. data/dist/chunks/_typeahead-BuTZG1Jn.js +0 -22
  65. data/dist/chunks/_weekday_stacked-oT22q75-.js +0 -45
  66. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  67. data/dist/chunks/lib-Co5y3V4K.js +0 -29
  68. /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
  69. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.md → _advanced_table_selectable_rows_react.md} +0 -0
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "14.15.0"
5
- VERSION = "14.16.0"
4
+ PREVIOUS_VERSION = "14.16.0"
5
+ VERSION = "14.17.0.pre.rc.1"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.16.0
4
+ version: 14.17.0.pre.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-03-21 00:00:00.000000000 Z
12
+ date: 2025-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -326,14 +326,18 @@ files:
326
326
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.html.erb
327
327
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.jsx
328
328
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.md
329
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.html.erb
329
330
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.jsx
330
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.md
331
331
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions.jsx
332
332
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions.md
333
333
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header.jsx
334
334
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header.md
335
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.html.erb
335
336
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.jsx
336
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.md
337
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md
338
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_react.md
339
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md
340
+ - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_react.md
337
341
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.jsx
338
342
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.md
339
343
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.jsx
@@ -2856,6 +2860,10 @@ files:
2856
2860
  - app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.md
2857
2861
  - app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.html.erb
2858
2862
  - app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.md
2863
+ - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx
2864
+ - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_react.md
2865
+ - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating.jsx
2866
+ - app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating_react.md
2859
2867
  - app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb
2860
2868
  - app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx
2861
2869
  - app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md
@@ -3187,7 +3195,6 @@ files:
3187
3195
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb
3188
3196
  - app/pb_kits/playbook/pb_tooltip/docs/example.yml
3189
3197
  - app/pb_kits/playbook/pb_tooltip/docs/index.js
3190
- - app/pb_kits/playbook/pb_tooltip/floating_ui.js
3191
3198
  - app/pb_kits/playbook/pb_tooltip/index.js
3192
3199
  - app/pb_kits/playbook/pb_tooltip/tooltip.html.erb
3193
3200
  - app/pb_kits/playbook/pb_tooltip/tooltip.rb
@@ -3453,11 +3460,11 @@ files:
3453
3460
  - app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
3454
3461
  - app/pb_kits/playbook/utilities/text.ts
3455
3462
  - app/pb_kits/playbook/utilities/validEmojiChecker.ts
3456
- - dist/chunks/_typeahead-BuTZG1Jn.js
3457
- - dist/chunks/_weekday_stacked-oT22q75-.js
3458
- - dist/chunks/lazysizes-DHz07jlL.js
3459
- - dist/chunks/lib-Co5y3V4K.js
3460
- - dist/chunks/pb_form_validation-DMajaRt3.js
3463
+ - dist/chunks/_typeahead-Djo6qCne.js
3464
+ - dist/chunks/_weekday_stacked-DIIHW0OV.js
3465
+ - dist/chunks/lazysizes-B7xYodB-.js
3466
+ - dist/chunks/lib-BGzBzFZX.js
3467
+ - dist/chunks/pb_form_validation-BvNy9Bd6.js
3461
3468
  - dist/chunks/vendor.js
3462
3469
  - dist/menu.yml
3463
3470
  - dist/playbook-doc.js
@@ -1,282 +0,0 @@
1
- import PbEnhancedElement from '../pb_enhanced_element'
2
- import { computePosition, offset, flip, shift, arrow, autoUpdate } from '@floating-ui/dom'
3
-
4
- const TOOLTIP_OFFSET = 20
5
- const TOOLTIP_TIMEOUT = 250
6
- const SAFE_ZONE_MARGIN = 1
7
-
8
- export default class PbTooltipFloatingUi extends PbEnhancedElement {
9
- static get selector() {
10
- return '[data-pb-tooltip-kit="true"][data-pb-tooltip-delay-open], [data-pb-tooltip-kit="true"][data-pb-tooltip-delay-close], [data-pb-tooltip-kit="true"][data-pb-tooltip-interaction="true"]'
11
- }
12
-
13
- connect() {
14
- if (this.tooltipInteraction) {
15
- document.addEventListener('mousemove', (e) => {
16
- this.lastMouseX = e.clientX
17
- this.lastMouseY = e.clientY
18
- })
19
- }
20
-
21
- this.triggerElements.forEach((trigger) => {
22
- const method = this.triggerMethod
23
- const interactionEnabled = this.tooltipInteraction
24
-
25
- if (method === 'click') {
26
- trigger.addEventListener('click', () => {
27
- this.showTooltip(trigger)
28
- })
29
- } else {
30
- 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
- this.mouseenterTimeout = setTimeout(() => {
36
- this.showTooltip(trigger)
37
- if (interactionEnabled) {
38
- this.checkCloseTooltip(trigger)
39
- }
40
- }, delayOpen)
41
- })
42
-
43
- trigger.addEventListener('mouseleave', () => {
44
- clearTimeout(this.mouseenterTimeout)
45
- if (this.delayClose) {
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 {
58
- this.hideTooltip()
59
- }
60
- }
61
- })
62
-
63
- if (interactionEnabled) {
64
- this.tooltip.addEventListener('mouseenter', () => {
65
- clearSafeZoneListener(this)
66
- })
67
-
68
- this.tooltip.addEventListener('mouseleave', () => {
69
- this.attachSafeZoneListener()
70
- })
71
- }
72
- }
73
- })
74
- }
75
-
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
- checkCloseTooltip(trigger) {
92
- document.querySelector('body').addEventListener('click', ({ target }) => {
93
- const isTooltip = target.closest(`#${this.tooltipId}`) === this.tooltip
94
- const isTrigger = target.closest(this.triggerElementSelector) === trigger
95
- if (isTrigger || isTooltip) {
96
- this.checkCloseTooltip(trigger)
97
- } else {
98
- this.hideTooltip()
99
- }
100
- }, { once: true })
101
- }
102
-
103
- showTooltip(trigger) {
104
- if (this.shouldShowTooltip === 'false') return
105
-
106
- clearSafeZoneListener(this)
107
-
108
- this.tooltip.style.opacity = '1'
109
- this.tooltip.style.visibility = 'visible'
110
- this.tooltip.style.pointerEvents = 'auto'
111
-
112
- if (this.cleanup) {
113
- this.cleanup()
114
- }
115
-
116
- const arrowElement = document.querySelector(`#${this.tooltipId}-arrow`)
117
-
118
- this.cleanup = autoUpdate(trigger, this.tooltip, () => {
119
- computePosition(trigger, this.tooltip, {
120
- placement: this.position,
121
- strategy: 'fixed',
122
- middleware: [
123
- offset({ mainAxis: TOOLTIP_OFFSET, crossAxis: 0 }),
124
- flip(),
125
- shift(),
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
- })
144
- })
145
-
146
- this.tooltip.classList.add('show')
147
-
148
- if (this.triggerMethod === 'click') {
149
- clearTimeout(this.autoHideTimeout)
150
- this.autoHideTimeout = setTimeout(() => {
151
- this.hideTooltip()
152
- }, 1000)
153
- }
154
- }
155
-
156
- hideTooltip() {
157
- if (!this.tooltip) return
158
-
159
- this.tooltip.classList.add('fade_out')
160
- setTimeout(() => {
161
- if (this.cleanup) {
162
- this.cleanup()
163
- this.cleanup = null
164
- }
165
- this.tooltip.classList.remove('show')
166
- 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
- }, TOOLTIP_TIMEOUT)
175
- }
176
-
177
- get triggerElements() {
178
- let triggerEl
179
- if (this.triggerElementId) {
180
- triggerEl = document.querySelector(`#${this.triggerElementId}`)
181
- } else if (this.triggerElementSelector) {
182
- const selectorIsId = this.triggerElementSelector.indexOf('#') > -1
183
- triggerEl = selectorIsId
184
- ? document.querySelector(this.triggerElementSelector)
185
- : document.querySelectorAll(this.triggerElementSelector)
186
- } else {
187
- triggerEl = this.element
188
- }
189
- if (!triggerEl) {
190
- console.error('Tooltip Kit: No valid trigger element found!')
191
- return []
192
- }
193
- if (triggerEl.length === undefined) {
194
- triggerEl = [triggerEl]
195
- }
196
- return triggerEl
197
- }
198
-
199
- get tooltip() {
200
- return (this._tooltip = this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
201
- }
202
-
203
- get position() {
204
- return this.element.dataset.pbTooltipPosition
205
- }
206
-
207
- get triggerElementId() {
208
- return this.element.dataset.pbTooltipTriggerElementId
209
- }
210
-
211
- get tooltipId() {
212
- return this.element.dataset.pbTooltipTooltipId
213
- }
214
-
215
- get triggerElementSelector() {
216
- return this.element.dataset.pbTooltipTriggerElementSelector
217
- }
218
-
219
- get shouldShowTooltip() {
220
- return this.element.dataset.pbTooltipShowTooltip
221
- }
222
-
223
- get triggerMethod() {
224
- return this.element.dataset.pbTooltipTriggerMethod || 'hover'
225
- }
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
- }