playbook_ui 14.20.0.pre.alpha.revert4637revert4621PLAY2033atactionbarrails7855 → 14.20.0.pre.rc.0

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 (115) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +35 -61
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +22 -36
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +19 -6
  5. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +8 -16
  6. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -9
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +2 -6
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.jsx +0 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +1 -3
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.md +1 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -2
  12. data/app/pb_kits/playbook/pb_advanced_table/index.js +12 -155
  13. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -4
  14. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  15. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +19 -77
  16. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default.html.erb +10 -0
  17. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +0 -11
  18. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.md +1 -1
  19. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +2 -33
  20. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.md +1 -3
  21. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -11
  22. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +0 -5
  23. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -3
  24. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -16
  25. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +13 -34
  26. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +1 -3
  27. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +6 -0
  28. data/app/pb_kits/playbook/pb_dropdown/index.js +30 -336
  29. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +12 -39
  30. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +12 -16
  31. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +13 -79
  32. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +0 -1
  33. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +0 -1
  34. data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +2 -2
  35. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +12 -19
  36. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +7 -13
  37. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +2 -2
  38. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb +11 -11
  39. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx +11 -11
  40. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb +11 -11
  41. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +11 -11
  42. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +11 -11
  43. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +11 -11
  44. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +11 -11
  45. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +11 -11
  46. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +11 -11
  47. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +11 -11
  48. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +11 -11
  49. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +11 -11
  50. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +11 -11
  51. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +11 -11
  52. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +11 -11
  53. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +11 -11
  54. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +11 -11
  55. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +11 -11
  56. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +11 -11
  57. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +11 -11
  58. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb +11 -11
  59. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx +11 -11
  60. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +11 -11
  61. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +0 -2
  62. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.jsx +11 -11
  63. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids_react.md +1 -3
  64. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.html.erb +22 -22
  65. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single.jsx +22 -22
  66. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb +22 -22
  67. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx +22 -22
  68. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +11 -11
  69. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +11 -11
  70. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb +11 -11
  71. data/app/pb_kits/playbook/pb_person/_person.tsx +2 -12
  72. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -73
  73. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -1
  74. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +0 -1
  75. data/dist/chunks/_typeahead-BPSIWtFT.js +22 -0
  76. data/dist/chunks/_weekday_stacked-PfWrqC3z.js +45 -0
  77. data/dist/chunks/lib-B20MXZcW.js +29 -0
  78. data/dist/chunks/{pb_form_validation-BZ2AVAi_.js → pb_form_validation-WWvUXPKD.js} +1 -1
  79. data/dist/chunks/vendor.js +1 -1
  80. data/dist/playbook-doc.js +2 -2
  81. data/dist/playbook-rails-react-bindings.js +1 -1
  82. data/dist/playbook-rails.js +1 -1
  83. data/dist/playbook.css +1 -1
  84. data/lib/playbook/kit_base.rb +3 -3
  85. data/lib/playbook/version.rb +2 -2
  86. metadata +7 -32
  87. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +0 -137
  88. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.md +0 -3
  89. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +0 -40
  90. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.md +0 -1
  91. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +0 -23
  92. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.rb +0 -19
  93. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +0 -31
  94. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.md +0 -5
  95. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.jsx +0 -56
  96. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.md +0 -3
  97. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.jsx +0 -58
  98. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.md +0 -3
  99. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.html.erb +0 -20
  100. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.md +0 -1
  101. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.html.erb +0 -19
  102. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.md +0 -3
  103. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.html.erb +0 -20
  104. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.jsx +0 -57
  105. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.md +0 -1
  106. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.html.erb +0 -50
  107. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.jsx +0 -105
  108. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.html.erb +0 -22
  109. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.jsx +0 -67
  110. data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +0 -58
  111. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.jsx +0 -23
  112. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.md +0 -1
  113. data/dist/chunks/_typeahead-BmOWdDtp.js +0 -22
  114. data/dist/chunks/_weekday_stacked-CvcuQyr9.js +0 -45
  115. data/dist/chunks/lib-D5R1BjUn.js +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb057816a6e246cd6fdb0328481780c4c643745f743a30a7d8e8d7e3945edb52
4
- data.tar.gz: 5cbbcb97be3bdb84207a0c02564c0d69526dbcc6ab4c225be46054eaa7d7e835
3
+ metadata.gz: 8fa79ee278fc38b79bf8ba0d013868027d1b9b26029ccb1cf2f173b2a7797c83
4
+ data.tar.gz: 9e914077f1ad480c8f7ffa9bb65a6828a7b9a887d7b8b3e536bacfa5ab7c5a6e
5
5
  SHA512:
6
- metadata.gz: 0a8324314d5a306344d06b8624cc9778135d054a604935fe18b48aacd834206f9af94ef059d56e8b4cc6dc10644b6d18358bc59353893e0be2fd36a43de3d6c6
7
- data.tar.gz: 1cc55b5f08ff76e1acad406002cf428b9606c8e8c3c75a137a3f89b3a2c7be299fee1c93d2ae57e921cf59994779a13f8c98074e8af00da71cc0d5aabe2f7589
6
+ metadata.gz: 4ef970a5758c8caf8a18b1d242eaf93c406318aaa676c2515200ed8e35fb8391de2acb7c2bc22f9350d6dd8555e26707fcdae48d0b779ee50372d35606364f86
7
+ data.tar.gz: 1b0da522bd01978c4087c086cc6ec8d0066296696a7c8ff82d26e74d6d126694c83f2b3fa7d39b2cafb97678a9f66a4a175864a8c534d273590a763c03b18171
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useRef, useContext, useState } from "react";
1
+ import React, { useEffect, useRef, useContext } from "react";
2
2
 
3
3
  import AdvancedTableContext from "../Context/AdvancedTableContext";
4
4
  import { buildVisibilityTree } from "../Utilities/VisibilityTree";
@@ -7,11 +7,13 @@ import Card from "../../pb_card/_card";
7
7
  import Caption from "../../pb_caption/_caption";
8
8
  import Flex from "../../pb_flex/_flex";
9
9
  import FlexItem from "../../pb_flex/_flex_item";
10
+ import Dropdown from "../../pb_dropdown/_dropdown";
11
+ import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer";
12
+ import DropdownTrigger from "../../pb_dropdown/subcomponents/DropdownTrigger";
10
13
  import Icon from "../../pb_icon/_icon";
11
14
  import Checkbox from "../../pb_checkbox/_checkbox";
12
15
  import SectionSeparator from "../../pb_section_separator/_section_separator";
13
16
  import Tooltip from "../../pb_tooltip/_tooltip";
14
- import PbReactPopover from "../../pb_popover/_popover";
15
17
 
16
18
  import {
17
19
  showActionBar,
@@ -54,24 +56,11 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
54
56
  const col = table.getColumn(id);
55
57
  const show = col.getIsVisible();
56
58
 
57
- const handleVisibilityChange = () => {
58
- col.toggleVisibility();
59
- if (columnVisibilityControl?.onColumnVisibilityChange) {
60
- const updatedVisibilityState = {
61
- ...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
62
- acc[col.id] = col.getIsVisible();
63
- return acc;
64
- }, {}),
65
- };
66
- columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
67
- }
68
- };
69
-
70
59
  return (
71
60
  <Checkbox
72
61
  checked={show}
73
62
  key={id}
74
- onChange={handleVisibilityChange}
63
+ onChange={() => col.toggleVisibility()}
75
64
  paddingBottom="xs"
76
65
  text={label}
77
66
  />
@@ -91,24 +80,16 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
91
80
  const allOn = visibleArray.every(Boolean);
92
81
  const someOn = visibleArray.some(Boolean);
93
82
 
94
- const handleGroupVisibilityChange = () => {
95
- leaves.forEach((id) => table.getColumn(id).toggleVisibility(!allOn));
96
- if (columnVisibilityControl?.onColumnVisibilityChange) {
97
- const updatedVisibilityState = {
98
- ...table.getAllColumns().reduce((acc: { [x: string]: any; }, col: { id: string | number; getIsVisible: () => any; }) => {
99
- acc[col.id] = col.getIsVisible();
100
- return acc;
101
- }, {}),
102
- };
103
- columnVisibilityControl?.onColumnVisibilityChange(updatedVisibilityState);
104
- }
105
- };
106
83
  return (
107
84
  <>
108
85
  <Checkbox
109
86
  checked={allOn}
110
87
  indeterminate={!allOn && someOn}
111
- onChange={handleGroupVisibilityChange}
88
+ onChange={() =>
89
+ leaves.forEach((id) =>
90
+ table.getColumn(id).toggleVisibility(!allOn),
91
+ )
92
+ }
112
93
  paddingBottom="xs"
113
94
  text={node.label}
114
95
  />
@@ -132,28 +113,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
132
113
  hideActionBar(cardRef.current);
133
114
  }
134
115
  }
135
- }, [isVisible, type]);
136
-
137
- const [showPopover, setShowPopover] = useState(false)
138
-
139
- const togglePopover = () => setShowPopover((prev) => !prev)
140
- const handleShouldClose = (shouldClose: boolean) =>
141
- setShowPopover(!shouldClose)
142
-
143
- const popoverReference = (
144
- <Tooltip
145
- placement="top"
146
- text="Column Configuration"
147
- >
148
- <div onClick={togglePopover}>
149
- <Icon
150
- color="primary"
151
- cursor="pointer"
152
- icon="sliders-h"
153
- />
154
- </div>
155
- </Tooltip>
156
- )
116
+ }, [isVisible]);
157
117
 
158
118
  return (
159
119
  <Card
@@ -179,17 +139,30 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
179
139
  <FlexItem>{actions}</FlexItem>
180
140
  </>
181
141
  ) : (
182
- <PbReactPopover
183
- closeOnClick="outside"
184
- placement="bottom-end"
185
- reference={popoverReference}
186
- shouldClosePopover={handleShouldClose}
187
- show={showPopover}
188
- zIndex={3}
142
+ <Dropdown
143
+ className="column-visibility-dropdown-wrapper"
144
+ options={columnDefinitions}
189
145
  >
190
- <>
146
+ <DropdownTrigger>
147
+ <Tooltip
148
+ placement='top'
149
+ text="Column Configuration"
150
+ zIndex={10}
151
+ >
152
+ <Icon
153
+ color="primary"
154
+ cursor="pointer"
155
+ icon="sliders-h"
156
+ />
157
+ </Tooltip>
158
+ </DropdownTrigger>
159
+ <DropdownContainer
160
+ className="column-visibility-dropdown"
161
+ paddingTop="sm"
162
+ >
163
+ <>
191
164
  <Caption
192
- paddingY="sm"
165
+ paddingBottom="sm"
193
166
  text="Columns Config"
194
167
  textAlign="center"
195
168
  />
@@ -204,7 +177,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
204
177
  </Flex>
205
178
  ))}
206
179
  </>
207
- </PbReactPopover>
180
+ </DropdownContainer>
181
+ </Dropdown>
208
182
  )}
209
183
  </Flex>
210
184
  </Card>
@@ -1,4 +1,4 @@
1
- import React, { useContext, useState } from "react"
1
+ import React, { useContext } from "react"
2
2
  import classnames from "classnames"
3
3
  import { flexRender, Header, Table, RowModel } from "@tanstack/react-table"
4
4
 
@@ -8,8 +8,10 @@ import { GlobalProps } from "../../utilities/globalProps"
8
8
 
9
9
  import Flex from "../../pb_flex/_flex"
10
10
  import Checkbox from "../../pb_checkbox/_checkbox"
11
- import SectionSeparator from "../../pb_section_separator/_section_separator"
12
- import PbReactPopover from "../../pb_popover/_popover";
11
+ import Dropdown from "../../pb_dropdown/_dropdown"
12
+ import DropdownTrigger from "../../pb_dropdown/subcomponents/DropdownTrigger"
13
+ import DropdownOption from "../../pb_dropdown/subcomponents/DropdownOption"
14
+ import DropdownContainer from "../../pb_dropdown/subcomponents/DropdownContainer"
13
15
  import Icon from "../../pb_icon/_icon"
14
16
 
15
17
  import { SortIconButton } from "./SortIconButton"
@@ -134,20 +136,6 @@ const isToggleExpansionEnabled =
134
136
  justifyHeader = isLeafColumn ? "end" : "center";
135
137
  }
136
138
 
137
- const [showPopover, setShowPopover] = useState(false)
138
-
139
- const togglePopover = () => setShowPopover((prev) => !prev)
140
- const handleShouldClose = (shouldClose: boolean) =>
141
- setShowPopover(!shouldClose)
142
-
143
- const popoverReference = (
144
- <div className="gray-icon toggle-all-icon"
145
- onClick={togglePopover}
146
- >
147
- <Icon icon={displayIcon(toggleExpansionIcon)[0]} />
148
- </div>
149
- )
150
-
151
139
  const handleExpandDepth = (depth: number) => {
152
140
  if (onExpandByDepthClick) {
153
141
  const flatRows = table?.getRowModel().flatRows
@@ -203,33 +191,31 @@ const isToggleExpansionEnabled =
203
191
  <ToggleIconButton onClick={handleExpandOrCollapse} />
204
192
  )}
205
193
  {isToggleExpansionEnabled && hasAnySubRows && expandByDepth && (
206
-
207
- <PbReactPopover
208
- closeOnClick="any"
209
- placement="bottom-start"
210
- reference={popoverReference}
211
- shouldClosePopover={handleShouldClose}
212
- show={showPopover}
213
- zIndex={3}
194
+ <Dropdown className="expand-by-depth-dropdown-wrapper"
195
+ options={expandByDepth}
196
+ >
197
+ <DropdownTrigger className="gray-icon toggle-all-icon">
198
+ <Icon icon={displayIcon(toggleExpansionIcon)[0]} />
199
+ </DropdownTrigger>
200
+ <DropdownContainer className="expand-by-depth-dropdown">
201
+ {expandByDepth.map((option:{ [key: string]: any }, index: number) => (
202
+ <DropdownOption
203
+ key={index}
204
+ option={option}
205
+ padding="none"
214
206
  >
215
- {expandByDepth.map((option:{ [key: string]: any }, index: number) => (
216
- <>
217
207
  <Flex
218
208
  alignItems="center"
219
- className="pb-advanced-table-popover-option"
220
- cursor="pointer"
221
209
  htmlOptions={{onClick: () => {handleExpandDepth(option.depth)} }}
222
210
  paddingX="sm"
223
211
  paddingY="xs"
224
212
  >
225
213
  {option.label}
226
- </Flex>
227
- {index !== expandByDepth.length - 1 && <SectionSeparator/>}
228
- </>
229
- ))}
230
- </PbReactPopover>
231
-
232
-
214
+ </Flex>
215
+ </DropdownOption>
216
+ ))}
217
+ </DropdownContainer>
218
+ </Dropdown>
233
219
  )}
234
220
 
235
221
  {isToggleExpansionEnabledLoading &&(
@@ -53,6 +53,15 @@
53
53
  width: 100%;
54
54
  }
55
55
 
56
+ .column-visibility-dropdown-wrapper {
57
+ position: unset !important;
58
+ }
59
+ .column-visibility-dropdown {
60
+ width: unset !important;
61
+ right: $space_xxs;
62
+ text-align: left;
63
+ }
64
+
56
65
  // Virtualized table styles
57
66
  .virtualized-table-row {
58
67
  display: table !important;
@@ -150,6 +159,13 @@
150
159
  box-sizing: border-box !important;
151
160
  }
152
161
  }
162
+ .expand-by-depth-dropdown-wrapper {
163
+ position: unset !important;
164
+ }
165
+ .expand-by-depth-dropdown {
166
+ width: unset !important;
167
+ text-align: left;
168
+ }
153
169
  }
154
170
 
155
171
  .pb_advanced_table_body {
@@ -538,12 +554,14 @@
538
554
  background-color: $white;
539
555
  box-shadow: $shadow_deep;
540
556
  }
541
-
542
557
  @include advanced-table-sticky-mixin(
543
558
  $border_light,
544
559
  $white,
545
560
  lighten($silver, $opacity_7)
546
561
  );
562
+
563
+ // Apply border colors for sticky columns
564
+ @include apply-sticky-colors("light");
547
565
  }
548
566
 
549
567
  // Responsive Styles
@@ -809,8 +827,3 @@
809
827
  }
810
828
  }
811
829
  }
812
-
813
- // Outside of the pb_advanced_table class for popover
814
- .pb-advanced-table-popover-option:hover {
815
- background-color: $bg_light;
816
- }
@@ -1,18 +1,10 @@
1
1
  <%= pb_content_tag do %>
2
- <% if object.id && object.selectable_rows && object.show_actions_bar %>
3
- <%= pb_rails("advanced_table/table_action_bar", props: {
4
- actions: object.actions,
5
- is_visible: false,
6
- selected_count: 0
7
- }) %>
8
- <% end %>
9
-
10
- <%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark, classname: object.loading ? "content-loading" : "" }.merge(object.table_props)) do %>
11
- <% if content.present? %>
12
- <% content.presence %>
13
- <% else %>
14
- <%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, show_actions_bar: object.show_actions_bar }) %>
15
- <%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion }) %>
16
- <% end %>
17
- <% end %>
2
+ <%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark, classname: object.loading ? "content-loading" : "" }.merge(object.table_props)) do %>
3
+ <% if content.present? %>
4
+ <% content.presence %>
5
+ <% else %>
6
+ <%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows }) %>
7
+ <%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion }) %>
8
+ <% end %>
9
+ <% end %>
18
10
  <% end %>
@@ -25,10 +25,6 @@ module Playbook
25
25
  default: "auto"
26
26
  prop :selectable_rows, type: Playbook::Props::Boolean,
27
27
  default: false
28
- prop :show_actions_bar, type: Playbook::Props::Boolean,
29
- default: true
30
- prop :actions, type: Playbook::Props::Array,
31
- default: []
32
28
 
33
29
  def classname
34
30
  additional_classes = [responsive_classname, max_height_classname]
@@ -51,11 +47,6 @@ module Playbook
51
47
  def selected_rows_length
52
48
  selected_rows.length
53
49
  end
54
-
55
- def is_action_bar_visible
56
- # Action bar visibility is controlled by JS based on selection
57
- false
58
- end
59
50
  end
60
51
  end
61
52
  end
@@ -1,8 +1,4 @@
1
- The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has three required props__:
2
-
3
- ### id
4
-
5
- A unique `id` is required to allow the table functionality to work properly. Without it, certain functions like the action bar will not be able to properly reference the correct table.
1
+ The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
6
2
 
7
3
  ### table_data
8
4
 
@@ -17,6 +13,6 @@ Column definitions are the single most important part of building a table as the
17
13
  - `accessor`: this is the key from your data for the value you want rendered in that column
18
14
  - `label`: this is what will be rendered as the column header label
19
15
 
20
- There is also one optional item that is only required if the table has nested data:
16
+ There is also one optional item that is only required if the table has nested data:
21
17
 
22
18
  - `cellAccessors`: This is an array of strings that represent keys from your data object. This is only required for the first column in case of nested data. If you have nested data, the AdvancedTable needs to know what to render in that first column for nested items. This array represents the nested data in the order you want it rendered.
@@ -49,7 +49,6 @@ const AdvancedTableColumnVisibilityWithState = (props) => {
49
49
  const columnVisibilityControl = {
50
50
  value: columnVisibility,
51
51
  onChange: setColumnVisibility,
52
- onColumnVisibilityChange: (currentState) => console.log(currentState),
53
52
  }
54
53
  return (
55
54
  <div>
@@ -1,3 +1 @@
1
- The `columnVisibilityControl` prop also allows for greater control over the columnVisibility state. Devs can manage state themselves by passing in `value` and `onChange` as shown.
2
-
3
- The additional `onColumnVisibilityChange` provides a callback with the current state as the argument if needed.
1
+ The `columnVisibilityControl` prop also allows for greater control over the columnVisibility state. Devs can manage state themselves by passing in `value` and `onChange` as shown.
@@ -3,7 +3,7 @@
3
3
  <br />
4
4
  <br />
5
5
 
6
- The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
6
+ The AdvancedTable kit accepts tree data and automatically renders expansion controls for nested subrows, to any depth, based on the data it is given. In it's simplest form, __the kit has two required props__:
7
7
 
8
8
  ### tableData
9
9
 
@@ -15,8 +15,6 @@ examples:
15
15
  - advanced_table_column_border_color_rails: Column Group Border Color
16
16
  - advanced_table_selectable_rows_rails: Selectable Rows
17
17
  - advanced_table_selectable_rows_no_subrows_rails: Selectable Rows (No Subrows)
18
- - advanced_table_selectable_rows_actions_rails: Selectable Rows (With Actions)
19
- - advanced_table_selectable_rows_header_rails: Selectable Rows (No Actions Bar)
20
18
 
21
19
  react:
22
20
  - advanced_table_default: Default (Required Props)
@@ -79,7 +79,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
79
79
  }
80
80
  if (!allChildrenChecked) {
81
81
  parentRow.classList.remove("bg-row-selection");
82
-
82
+
83
83
  if (this.isRowExpanded(parentRow)) {
84
84
  parentRow.classList.remove("bg-silver");
85
85
  parentRow.classList.add("bg-white");
@@ -201,15 +201,15 @@ export default class PbAdvancedTable extends PbEnhancedElement {
201
201
  this.toggleElement(this.target);
202
202
  }
203
203
  });
204
-
204
+
205
205
  this.hideCloseIcon();
206
-
206
+
207
207
  const table = this.element.closest("table");
208
-
208
+
209
209
  // Prevent duplicate initialization
210
210
  if (table.dataset.pbAdvancedTableInitialized) return;
211
211
  table.dataset.pbAdvancedTableInitialized = "true";
212
-
212
+
213
213
  // Bind checkbox change handlers for all row checkboxes
214
214
  const checkboxLabels = table.querySelectorAll("label[data-row-id]");
215
215
  checkboxLabels.forEach((label) => {
@@ -219,7 +219,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
219
219
  this.handleCheckboxClick(event);
220
220
  });
221
221
  });
222
-
222
+
223
223
  // Bind nested row expansion logic
224
224
  const nestedButtons = table.querySelectorAll("[data-advanced-table]");
225
225
  nestedButtons.forEach((button) => {
@@ -233,18 +233,18 @@ export default class PbAdvancedTable extends PbEnhancedElement {
233
233
  }
234
234
  });
235
235
  });
236
-
236
+
237
237
  // Bind select-all logic for this table
238
238
  const selectAllCheckbox = table.querySelector("#select-all-rows");
239
239
  if (selectAllCheckbox) {
240
240
  selectAllCheckbox.addEventListener("change", () => {
241
241
  const checkboxInput = selectAllCheckbox.querySelector('input[type="checkbox"]');
242
242
  const checkAll = checkboxInput.checked;
243
-
243
+
244
244
  const checkboxes = Array.from(
245
245
  table.querySelectorAll("label[data-row-id] input[type='checkbox']")
246
246
  );
247
-
247
+
248
248
  checkboxes.forEach((cb) => {
249
249
  cb.checked = checkAll;
250
250
  const rowId = cb.id;
@@ -260,14 +260,14 @@ export default class PbAdvancedTable extends PbEnhancedElement {
260
260
  rowEl?.classList.add("bg-white");
261
261
  }
262
262
  });
263
-
263
+
264
264
  checkboxes.forEach((cb) => this.updateParentCheckboxes(cb));
265
-
265
+
266
266
  this.updateTableSelectedRowsAttribute();
267
267
  });
268
268
  }
269
269
  }
270
-
270
+
271
271
 
272
272
  hideCloseIcon() {
273
273
  const closeIcon = this.element.querySelector(UP_ARROW_SELECTOR);
@@ -449,149 +449,6 @@ export default class PbAdvancedTable extends PbEnhancedElement {
449
449
  }
450
450
  }
451
451
 
452
- // Isolate action bar functionality so it doesn't mix with existing functionality
453
- class PbAdvancedTableActionBar {
454
- constructor() {
455
- this.init();
456
- }
457
-
458
- init() {
459
- // Initialize action bars for all advanced tables with action bars
460
- document.addEventListener('DOMContentLoaded', () => {
461
- this.setupActionBars();
462
- });
463
-
464
- // Also run immediately in case DOM is already loaded
465
- if (document.readyState === 'loading') {
466
- // DOM is still loading
467
- } else {
468
- // DOM is already loaded
469
- this.setupActionBars();
470
- }
471
- }
472
-
473
- setupActionBars() {
474
- const advancedTables = document.querySelectorAll('.pb_advanced_table');
475
-
476
- advancedTables.forEach(table => {
477
- // Only proceed if this table has both selectable rows AND an action bar
478
- if (!this.shouldEnableActionBar(table)) return;
479
-
480
- const actionBar = table.querySelector('.row-selection-actions-card');
481
- if (!actionBar) return; // Skip tables without action bars
482
-
483
- // Initialize action bar styles
484
- this.initializeActionBar(actionBar);
485
-
486
- // Set up checkbox listeners for this table
487
- this.setupCheckboxListeners(table, actionBar);
488
- });
489
- }
490
-
491
- shouldEnableActionBar(table) {
492
- // Check if the table has selectable rows
493
- const hasSelectableRows = table.querySelector('input[type="checkbox"]') !== null;
494
-
495
- // Check if the table has a row selection action bar (not other types of action bars)
496
- const hasRowSelectionActionBar = table.querySelector('.row-selection-actions-card') !== null;
497
-
498
- // Additional check: look for the presence of row checkboxes with data-row-id
499
- const hasRowCheckboxes = table.querySelector('label[data-row-id] input[type="checkbox"]') !== null;
500
-
501
- // Only enable if ALL conditions are met:
502
- // 1. Has selectable checkboxes
503
- // 2. Has the specific row selection action bar
504
- // 3. Has row checkboxes (not just other types of checkboxes)
505
- return hasSelectableRows && hasRowSelectionActionBar && hasRowCheckboxes;
506
- }
507
-
508
- initializeActionBar(actionBar) {
509
- // Set initial hidden state
510
- Object.assign(actionBar.style, {
511
- height: '0px',
512
- overflow: 'hidden',
513
- display: 'block',
514
- opacity: '0'
515
- });
516
-
517
- // Remove any visibility classes
518
- actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
519
- actionBar.classList.add("p_none");
520
- }
521
-
522
- setupCheckboxListeners(table, actionBar) {
523
- // Only listen to row checkboxes (those with data-row-id), not all checkboxes
524
- const rowCheckboxes = table.querySelectorAll('label[data-row-id] input[type="checkbox"]');
525
-
526
- rowCheckboxes.forEach(checkbox => {
527
- checkbox.addEventListener('change', () => {
528
- // Use setTimeout to ensure this runs after the main checkbox logic
529
- setTimeout(() => {
530
- this.updateActionBarVisibility(table, actionBar);
531
- }, 0);
532
- });
533
- });
534
-
535
- // Special handling for select-all checkbox (only if it exists)
536
- const selectAllCheckbox = table.querySelector("#select-all-rows");
537
- if (selectAllCheckbox) {
538
- const selectAllInput = selectAllCheckbox.querySelector('input[type="checkbox"]');
539
- if (selectAllInput) {
540
- selectAllInput.addEventListener('change', () => {
541
- // Use setTimeout to ensure this runs after the main select-all logic
542
- setTimeout(() => {
543
- this.updateActionBarVisibility(table, actionBar);
544
- }, 10); // Slightly longer delay for select-all to ensure all row checkboxes are updated
545
- });
546
- }
547
- }
548
- }
549
-
550
- updateActionBarVisibility(table, actionBar) {
551
- // Only count row checkboxes (those with data-row-id), not all checkboxes
552
- const rowCheckboxes = table.querySelectorAll('label[data-row-id] input[type="checkbox"]');
553
-
554
- // Get all checked row checkboxes
555
- const selectedRowCheckboxes = Array.from(rowCheckboxes).filter(cb => cb.checked);
556
-
557
- // Get the selected count
558
- const selectedCount = selectedRowCheckboxes.length;
559
-
560
- if (selectedCount > 0) {
561
- this.showActionBar(actionBar, selectedCount);
562
- } else {
563
- this.hideActionBar(actionBar);
564
- }
565
- }
566
-
567
- showActionBar(actionBar, selectedCount) {
568
- // Show action bar directly
569
- actionBar.style.height = 'auto';
570
- actionBar.style.overflow = 'visible';
571
- actionBar.style.opacity = '1';
572
- actionBar.classList.remove("p_none");
573
- actionBar.classList.add("p_xs", "is-visible", "show-action-card");
574
-
575
- // Update the count
576
- const countElement = actionBar.querySelector(".selected-count");
577
- if (countElement) {
578
- countElement.textContent = `${selectedCount} Selected`;
579
- }
580
- }
581
-
582
- hideActionBar(actionBar) {
583
- // Hide action bar directly
584
- actionBar.style.height = '0px';
585
- actionBar.style.overflow = 'hidden';
586
- actionBar.style.opacity = '0';
587
- actionBar.classList.add("p_none");
588
- actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
589
- }
590
- }
591
-
592
- // Initialize the isolated action bar functionality
593
- new PbAdvancedTableActionBar();
594
-
595
452
  window.expandAllRows = (element) => {
596
453
  PbAdvancedTable.handleToggleAllHeaders(element);
597
454
  };
@@ -15,8 +15,6 @@ module Playbook
15
15
  default: "scroll"
16
16
  prop :selectable_rows, type: Playbook::Props::Boolean,
17
17
  default: false
18
- prop :show_actions_bar, type: Playbook::Props::Boolean,
19
- default: true
20
18
 
21
19
  def classname
22
20
  additional_classes = []
@@ -29,7 +27,6 @@ module Playbook
29
27
  def th_classname(is_first_column: false)
30
28
  additional_classes = []
31
29
  additional_classes << "pinned-left" if is_first_column && responsive == "scroll" && !selectable_rows
32
- additional_classes << "header-cells-with-actions" if selectable_rows && show_actions_bar
33
30
 
34
31
  generate_classname("table-header-cells", *additional_classes, separator: " ")
35
32
  end
@@ -49,7 +46,6 @@ module Playbook
49
46
  if selectable_rows
50
47
  additional_classes = []
51
48
  additional_classes << "table-header-cells-custom"
52
- additional_classes << "header-cells-with-actions" if show_actions_bar
53
49
  additional_classes << "checkbox-cell-header"
54
50
  additional_classes << "pinned-left" if responsive == "scroll"
55
51
  pb_rails("table/table_header", props: {