playbook_ui 14.21.0.pre.rc.1 → 14.21.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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +116 -49
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +58 -2
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +16 -4
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +7 -3
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +32 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +13 -3
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +7 -1
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +61 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_no_subrows.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_no_subrows.jsx +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +57 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_react.md +5 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_scrollbar_none.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_scrollbar_none.jsx +53 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/index.js +2 -0
- data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +1 -4
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +7 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_date_display.html.erb +13 -0
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +17 -58
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +12 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_close_on_select.jsx +42 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_close_on_select.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +14 -10
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +26 -15
- data/app/pb_kits/playbook/pb_popover/index.ts +9 -4
- data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +3 -51
- data/app/pb_kits/playbook/pb_table/styles/_mobile_collapse.scss +1 -1
- data/dist/chunks/{_typeahead-CRW6dJbW.js → _typeahead-BlPRej0F.js} +2 -2
- data/dist/chunks/_weekday_stacked-DqVFJsbt.js +45 -0
- data/dist/chunks/lazysizes-DHz07jlL.js +1 -0
- data/dist/chunks/lib-D4vXIZF5.js +29 -0
- data/dist/chunks/{pb_form_validation-BZ2AVAi_.js → pb_form_validation-DyvJ8iPe.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 +15 -7
- data/dist/chunks/_weekday_stacked-C4d17aYW.js +0 -45
- data/dist/chunks/lazysizes-B7xYodB-.js +0 -1
- data/dist/chunks/lib-D5R1BjUn.js +0 -29
@@ -44,6 +44,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
44
44
|
|
45
45
|
const {
|
46
46
|
autocomplete,
|
47
|
+
closeOnSelection,
|
47
48
|
filterItem,
|
48
49
|
handleBackspace,
|
49
50
|
handleChange,
|
@@ -54,6 +55,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
54
55
|
isInputFocused,
|
55
56
|
multiSelect,
|
56
57
|
selected,
|
58
|
+
setIsDropDownClosed,
|
57
59
|
setIsInputFocused,
|
58
60
|
toggleDropdown,
|
59
61
|
} = useContext(DropdownContext);
|
@@ -103,11 +105,26 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
103
105
|
? placeholder
|
104
106
|
: "Select...";
|
105
107
|
|
108
|
+
// Click handler that respects closeOnSelection
|
109
|
+
const handleInputClick = (e: React.MouseEvent) => {
|
110
|
+
e.stopPropagation(); // keep the wrapper's handler from firing
|
111
|
+
if (isDropDownClosed) {
|
112
|
+
// Always open if closed
|
113
|
+
setIsDropDownClosed(false);
|
114
|
+
} else if (!closeOnSelection) {
|
115
|
+
// Keep open if closeOnSelection is false
|
116
|
+
return;
|
117
|
+
} else {
|
118
|
+
// Default behavior - toggle
|
119
|
+
toggleDropdown();
|
120
|
+
}
|
121
|
+
};
|
122
|
+
|
106
123
|
return (
|
107
|
-
<div {...ariaProps}
|
108
|
-
{...dataProps}
|
124
|
+
<div {...ariaProps}
|
125
|
+
{...dataProps}
|
109
126
|
{...htmlProps}
|
110
|
-
className={classes}
|
127
|
+
className={classes}
|
111
128
|
id={id}
|
112
129
|
>
|
113
130
|
{
|
@@ -145,7 +162,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
145
162
|
{customDisplay ? (
|
146
163
|
<Flex align="center">
|
147
164
|
{customDisplay}
|
148
|
-
<Body dark={dark}
|
165
|
+
<Body dark={dark}
|
149
166
|
paddingLeft={`${joinedLabels ? "xs" : "none"}`}
|
150
167
|
>
|
151
168
|
{customDisplayPlaceholder}
|
@@ -164,10 +181,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
164
181
|
<input
|
165
182
|
className="dropdown_input"
|
166
183
|
onChange={handleChange}
|
167
|
-
onClick={
|
168
|
-
e.stopPropagation();// keep the wrapper’s handler from firing
|
169
|
-
toggleDropdown();
|
170
|
-
}}
|
184
|
+
onClick={handleInputClick}
|
171
185
|
onFocus={() => setIsInputFocused(true)}
|
172
186
|
onKeyDown={(e) => {
|
173
187
|
handleKeyDown(e);
|
@@ -186,8 +200,8 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
186
200
|
)}
|
187
201
|
</>
|
188
202
|
) : (
|
189
|
-
<Body dark={dark}
|
190
|
-
text={defaultDisplayPlaceholder}
|
203
|
+
<Body dark={dark}
|
204
|
+
text={defaultDisplayPlaceholder}
|
191
205
|
/>
|
192
206
|
)
|
193
207
|
)}
|
@@ -195,10 +209,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
195
209
|
<input
|
196
210
|
className="dropdown_input"
|
197
211
|
onChange={handleChange}
|
198
|
-
onClick={
|
199
|
-
e.stopPropagation();// keep the wrapper’s handler from firing
|
200
|
-
toggleDropdown();
|
201
|
-
}}
|
212
|
+
onClick={handleInputClick}
|
202
213
|
onFocus={() => setIsInputFocused(true)}
|
203
214
|
onKeyDown={handleKeyDown}
|
204
215
|
placeholder={
|
@@ -223,7 +234,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
|
|
223
234
|
onClick: (e: Event) => {e.stopPropagation();handleWrapperClick()}
|
224
235
|
}}
|
225
236
|
key={`${isDropDownClosed ? "chevron-down" : "chevron-up"}`}
|
226
|
-
>
|
237
|
+
>
|
227
238
|
{
|
228
239
|
selectedArray.length > 0 && (
|
229
240
|
<div onClick={(e)=>{e.stopPropagation();handleBackspace()}}>
|
@@ -13,19 +13,24 @@ export default class PbPopover extends PbEnhancedElement {
|
|
13
13
|
}
|
14
14
|
|
15
15
|
moveTooltip() {
|
16
|
-
let container: HTMLElement | null;
|
16
|
+
let container: HTMLElement | null = document.querySelector('body');
|
17
17
|
|
18
18
|
if (this.appendTo === "parent") {
|
19
|
-
container = this.element.parentElement
|
19
|
+
container = this.element.parentElement && this.element.parentElement
|
20
20
|
} else if (this.appendTo) {
|
21
|
-
container = document.querySelector(this.appendTo)
|
21
|
+
container = document.querySelector(this.appendTo)
|
22
22
|
}
|
23
23
|
|
24
|
-
|
24
|
+
container.appendChild(this.tooltip);
|
25
25
|
}
|
26
26
|
|
27
27
|
connect() {
|
28
|
+
if (!this.triggerElement || !this.tooltip) {
|
29
|
+
console.warn('Popover requires both trigger and tooltip elements to be defined.')
|
30
|
+
return
|
31
|
+
}
|
28
32
|
this.moveTooltip()
|
33
|
+
|
29
34
|
this.popper = createPopper (this.triggerElement, this.tooltip, {
|
30
35
|
placement: this.position as Placement,
|
31
36
|
strategy: 'fixed',
|
@@ -18,7 +18,7 @@
|
|
18
18
|
checked: true,
|
19
19
|
value: "checkbox-value",
|
20
20
|
name: "main-checkbox-selectable",
|
21
|
-
|
21
|
+
indeterminate_main: true,
|
22
22
|
id: "checkbox-selectable"
|
23
23
|
}) %>
|
24
24
|
<% end %>
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<% checkboxes.each_with_index do |checkbox, index| %>
|
34
34
|
<%= pb_rails("table/table_row") do %>
|
35
35
|
<%= pb_rails("table/table_cell") do %>
|
36
|
-
<%= pb_rails("checkbox", props: { checked: checkbox[:checked], id: "#{checkbox[:id]}-selectable-checkbox", name: "#{checkbox[:id]}-selectable-checkbox", on_change: "updateCheckboxes(#{index})", value: "check-box value" }) %>
|
36
|
+
<%= pb_rails("checkbox", props: { checked: checkbox[:checked], id: "#{checkbox[:id]}-selectable-checkbox", name: "#{checkbox[:id]}-selectable-checkbox", on_change: "updateCheckboxes(#{index})", value: "check-box value", indeterminate_parent: "checkbox-selectable" }) %>
|
37
37
|
<% end %>
|
38
38
|
<%= pb_rails("table/table_cell") do %>
|
39
39
|
<%= pb_rails("image", props: { alt: "picture of a misty forest", size: "xs", url: "https://unsplash.it/500/400/?image=634" }) %>
|
@@ -45,52 +45,4 @@
|
|
45
45
|
<% end %>
|
46
46
|
<% end %>
|
47
47
|
<% end %>
|
48
|
-
<% end %>
|
49
|
-
|
50
|
-
<script>
|
51
|
-
document.addEventListener('DOMContentLoaded', function() {
|
52
|
-
const mainCheckboxWrapper = document.getElementById('checkbox-selectable');
|
53
|
-
const mainCheckbox = document.getElementsByName("main-checkbox-selectable")[0];
|
54
|
-
const childCheckboxes = document.querySelectorAll('input[type="checkbox"][id$="selectable-checkbox"]');
|
55
|
-
const deleteButton = document.getElementById('delete-button');
|
56
|
-
|
57
|
-
const updateDeleteButton = () => {
|
58
|
-
const anyChecked = Array.from(childCheckboxes).some(checkbox => checkbox.checked);
|
59
|
-
deleteButton.style.display = anyChecked ? 'block' : 'none';
|
60
|
-
};
|
61
|
-
|
62
|
-
const updateMainCheckbox = () => {
|
63
|
-
// Count the number of checked child checkboxes
|
64
|
-
const checkedCount = Array.from(childCheckboxes).filter(cb => cb.checked).length;
|
65
|
-
// Determine if the main checkbox should be in an indeterminate state
|
66
|
-
const indeterminate = checkedCount > 0 && checkedCount < childCheckboxes.length;
|
67
|
-
|
68
|
-
// Set the main checkbox states
|
69
|
-
mainCheckbox.indeterminate = indeterminate;
|
70
|
-
mainCheckbox.checked = checkedCount > 0;
|
71
|
-
|
72
|
-
// Determine the icon class to add and remove based on the number of checked checkboxes
|
73
|
-
const iconClassToAdd = checkedCount === 0 ? 'pb_checkbox_checkmark' : 'pb_checkbox_indeterminate';
|
74
|
-
const iconClassToRemove = checkedCount === 0 ? 'pb_checkbox_indeterminate' : 'pb_checkbox_checkmark';
|
75
|
-
|
76
|
-
// Add and remove the icon class to the main checkbox wrapper
|
77
|
-
mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.add(iconClassToAdd);
|
78
|
-
mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.remove(iconClassToRemove);
|
79
|
-
|
80
|
-
// Toggle the visibility of the checkbox icon based on the indeterminate state
|
81
|
-
mainCheckboxWrapper.getElementsByClassName("indeterminate_icon")[0].classList.toggle('hidden', !indeterminate);
|
82
|
-
mainCheckboxWrapper.getElementsByClassName("check_icon")[0].classList.toggle('hidden', indeterminate);
|
83
|
-
|
84
|
-
updateDeleteButton();
|
85
|
-
};
|
86
|
-
|
87
|
-
mainCheckbox.addEventListener('change', function() {
|
88
|
-
childCheckboxes.forEach(cb => cb.checked = this.checked);
|
89
|
-
updateMainCheckbox();
|
90
|
-
});
|
91
|
-
|
92
|
-
childCheckboxes.forEach(cb => {
|
93
|
-
cb.addEventListener('change', updateMainCheckbox);
|
94
|
-
});
|
95
|
-
});
|
96
|
-
</script>
|
48
|
+
<% end %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
@import "../../pb_caption/caption_mixin";
|
4
4
|
|
5
5
|
@media only screen and (max-width: $screen-xs-max) {
|
6
|
-
[class^=pb_table] {
|
6
|
+
[class^=pb_table]:not(.table-responsive-scroll) {
|
7
7
|
&.table-sm.table-collapse-sm,
|
8
8
|
&.table-md.table-collapse-sm,
|
9
9
|
&.table-lg.table-collapse-sm {
|