playbook_ui 14.16.0.pre.alpha.PBNTR881advancedtablefullscreen6884 → 14.16.0.pre.alpha.PLAY1929bracketlayout6927

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +0 -70
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +1 -87
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -14
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +1 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
  7. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +34 -34
  8. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +2 -2
  9. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +16 -0
  10. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -11
  11. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -7
  12. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +28 -24
  13. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +3 -4
  14. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +2 -3
  15. data/app/pb_kits/playbook/pb_form/pb_form_validation.js +1 -1
  16. data/app/pb_kits/playbook/pb_layout/_layout.scss +57 -0
  17. data/app/pb_kits/playbook/pb_layout/_layout.tsx +16 -7
  18. data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.jsx +190 -0
  19. data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.md +5 -0
  20. data/app/pb_kits/playbook/pb_layout/docs/example.yml +1 -0
  21. data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_layout/layout.test.js +4 -0
  23. data/app/pb_kits/playbook/pb_layout/subcomponents/_game.tsx +89 -0
  24. data/app/pb_kits/playbook/pb_layout/subcomponents/_round.tsx +57 -0
  25. data/app/pb_kits/playbook/pb_lightbox/hooks/useVisibility.js +1 -1
  26. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -1
  27. data/app/pb_kits/playbook/pb_tooltip/index.js +183 -56
  28. data/app/pb_kits/playbook/pb_typeahead/index.ts +2 -2
  29. data/app/pb_kits/playbook/utilities/globalProps.ts +1 -1
  30. data/app/pb_kits/playbook/utilities/object.test.js +149 -1
  31. data/app/pb_kits/playbook/utilities/object.ts +124 -42
  32. data/dist/chunks/{_typeahead-N-EFroAX.js → _typeahead-Djo6qCne.js} +3 -3
  33. data/dist/chunks/_weekday_stacked-BGGESD-t.js +45 -0
  34. data/dist/chunks/lib-BGzBzFZX.js +29 -0
  35. data/dist/chunks/{pb_form_validation-DMajaRt3.js → pb_form_validation-BvNy9Bd6.js} +1 -1
  36. data/dist/chunks/vendor.js +1 -1
  37. data/dist/playbook-doc.js +1 -1
  38. data/dist/playbook-rails-react-bindings.js +1 -1
  39. data/dist/playbook-rails.js +1 -1
  40. data/dist/playbook.css +1 -1
  41. data/lib/playbook/version.rb +1 -1
  42. metadata +10 -9
  43. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +0 -90
  44. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md +0 -3
  45. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +0 -282
  46. data/dist/chunks/_weekday_stacked-jxFuYoYX.js +0 -45
  47. data/dist/chunks/lib-Co5y3V4K.js +0 -29
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "14.16.0"
5
- VERSION = "14.16.0.pre.alpha.PBNTR881advancedtablefullscreen6884"
5
+ VERSION = "14.16.0.pre.alpha.PLAY1929bracketlayout6927"
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.pre.alpha.PBNTR881advancedtablefullscreen6884
4
+ version: 14.16.0.pre.alpha.PLAY1929bracketlayout6927
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-26 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
@@ -309,8 +309,6 @@ files:
309
309
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.md
310
310
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.jsx
311
311
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.md
312
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx
313
- - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md
314
312
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx
315
313
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_editing.jsx
316
314
  - app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_editing.md
@@ -1797,6 +1795,8 @@ files:
1797
1795
  - app/pb_kits/playbook/pb_layout/body.html.erb
1798
1796
  - app/pb_kits/playbook/pb_layout/body.rb
1799
1797
  - app/pb_kits/playbook/pb_layout/docs/_description.md
1798
+ - app/pb_kits/playbook/pb_layout/docs/_layout_bracket.jsx
1799
+ - app/pb_kits/playbook/pb_layout/docs/_layout_bracket.md
1800
1800
  - app/pb_kits/playbook/pb_layout/docs/_layout_collection.html.erb
1801
1801
  - app/pb_kits/playbook/pb_layout/docs/_layout_collection.jsx
1802
1802
  - app/pb_kits/playbook/pb_layout/docs/_layout_collection.md
@@ -1830,6 +1830,8 @@ files:
1830
1830
  - app/pb_kits/playbook/pb_layout/layout.test.js
1831
1831
  - app/pb_kits/playbook/pb_layout/sidebar.html.erb
1832
1832
  - app/pb_kits/playbook/pb_layout/sidebar.rb
1833
+ - app/pb_kits/playbook/pb_layout/subcomponents/_game.tsx
1834
+ - app/pb_kits/playbook/pb_layout/subcomponents/_round.tsx
1833
1835
  - app/pb_kits/playbook/pb_legend/_legend.scss
1834
1836
  - app/pb_kits/playbook/pb_legend/_legend.tsx
1835
1837
  - app/pb_kits/playbook/pb_legend/docs/_description.md
@@ -3197,7 +3199,6 @@ files:
3197
3199
  - app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb
3198
3200
  - app/pb_kits/playbook/pb_tooltip/docs/example.yml
3199
3201
  - app/pb_kits/playbook/pb_tooltip/docs/index.js
3200
- - app/pb_kits/playbook/pb_tooltip/floating_ui.js
3201
3202
  - app/pb_kits/playbook/pb_tooltip/index.js
3202
3203
  - app/pb_kits/playbook/pb_tooltip/tooltip.html.erb
3203
3204
  - app/pb_kits/playbook/pb_tooltip/tooltip.rb
@@ -3463,11 +3464,11 @@ files:
3463
3464
  - app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
3464
3465
  - app/pb_kits/playbook/utilities/text.ts
3465
3466
  - app/pb_kits/playbook/utilities/validEmojiChecker.ts
3466
- - dist/chunks/_typeahead-N-EFroAX.js
3467
- - dist/chunks/_weekday_stacked-jxFuYoYX.js
3467
+ - dist/chunks/_typeahead-Djo6qCne.js
3468
+ - dist/chunks/_weekday_stacked-BGGESD-t.js
3468
3469
  - dist/chunks/lazysizes-B7xYodB-.js
3469
- - dist/chunks/lib-Co5y3V4K.js
3470
- - dist/chunks/pb_form_validation-DMajaRt3.js
3470
+ - dist/chunks/lib-BGzBzFZX.js
3471
+ - dist/chunks/pb_form_validation-BvNy9Bd6.js
3471
3472
  - dist/chunks/vendor.js
3472
3473
  - dist/menu.yml
3473
3474
  - dist/playbook-doc.js
@@ -1,90 +0,0 @@
1
- import React, { useState } from "react"
2
- import { AdvancedTable, Button, Flex } from "playbook-ui"
3
- import MOCK_DATA from "./advanced_table_mock_data.json"
4
- import PAGINATION_MOCK_DATA from "./advanced_table_pagination_mock_data.json"
5
-
6
- const AdvancedTableFullscreen = (props) => {
7
- const [fullscreenToggleSmall, setFullscreenToggleSmall] = useState(null)
8
- const [fullscreenToggleLarge, setFullscreenToggleLarge] = useState(null)
9
-
10
- const columnDefinitions = [
11
- {
12
- accessor: "year",
13
- label: "Year",
14
- cellAccessors: ["quarter", "month", "day"],
15
- },
16
- {
17
- accessor: "newEnrollments",
18
- label: "New Enrollments",
19
- },
20
- {
21
- accessor: "scheduledMeetings",
22
- label: "Scheduled Meetings",
23
- },
24
- {
25
- accessor: "attendanceRate",
26
- label: "Attendance Rate",
27
- },
28
- {
29
- accessor: "completedClasses",
30
- label: "Completed Classes",
31
- },
32
- {
33
- accessor: "classCompletionRate",
34
- label: "Class Completion Rate",
35
- },
36
- {
37
- accessor: "graduatedStudents",
38
- label: "Graduated Students",
39
- },
40
- ]
41
-
42
- const tableProps = {
43
- sticky: true
44
- }
45
-
46
- return (
47
- <div>
48
- <Flex justify="end">
49
- <Button
50
- marginBottom="sm"
51
- onClick={() => fullscreenToggleSmall?.()}
52
- text="Fullscreen Small Table"
53
- variant="secondary"
54
- />
55
- </Flex>
56
- <AdvancedTable
57
- columnDefinitions={columnDefinitions}
58
- fullscreenable
59
- getFullscreenControls={({ toggleFullscreen }) => setFullscreenToggleSmall(() => toggleFullscreen)}
60
- tableData={MOCK_DATA}
61
- {...props}
62
- >
63
- <AdvancedTable.Header enableSorting />
64
- <AdvancedTable.Body />
65
- </AdvancedTable>
66
- <Flex justify="end">
67
- <Button
68
- marginY="sm"
69
- onClick={() => fullscreenToggleLarge?.()}
70
- text="Fullscreen Large Table"
71
- variant="secondary"
72
- />
73
- </Flex>
74
- <AdvancedTable
75
- columnDefinitions={columnDefinitions}
76
- fullscreenable
77
- getFullscreenControls={({ toggleFullscreen }) => setFullscreenToggleLarge(() => toggleFullscreen)}
78
- responsive="none"
79
- tableData={PAGINATION_MOCK_DATA}
80
- tableProps={tableProps}
81
- {...props}
82
- >
83
- <AdvancedTable.Header enableSorting />
84
- <AdvancedTable.Body />
85
- </AdvancedTable>
86
- </div>
87
- )
88
- }
89
-
90
- export default AdvancedTableFullscreen
@@ -1,3 +0,0 @@
1
- Trigger Fullscreen mode with the `fullscreenable`and `getFullscreenControls` props. `fullscreenable` is a boolean that enables Fullscreen functionality for an Advanced Table. `getFullscreenControls` is a callback function that receives an object containing the table's internal `toggleFullscreen` function, allowing you to store and trigger Fullscreen from the parent component. An external trigger (like a button) must be used to activate Fullscreen mode.
2
-
3
- Exit Fullscreen mode by clicking the minimize top-right-corner icon or by pressing the "Escape" keyboard key.
@@ -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
- }