playbook_ui 14.19.0.pre.alpha.PLAY21377811 → 14.19.0.pre.alpha.borderfixadvancedtable7816

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +1 -3
  3. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +16 -8
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +9 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.html.erb +137 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions_rails.md +3 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +40 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.md +1 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/index.js +355 -52
  11. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.html.erb +23 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/table_action_bar.rb +19 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +4 -0
  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/example.yml +1 -11
  18. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +0 -5
  19. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -3
  20. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -16
  21. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +13 -34
  22. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +1 -3
  23. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +6 -0
  24. data/app/pb_kits/playbook/pb_dropdown/index.js +41 -334
  25. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +12 -39
  26. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +12 -16
  27. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +12 -78
  28. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +0 -1
  29. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +0 -1
  30. data/dist/chunks/_typeahead-B9-s4j4U.js +22 -0
  31. data/dist/chunks/_weekday_stacked-CvzpmXD5.js +45 -0
  32. data/dist/chunks/{lib-BB_ZEriO.js → lib-B20MXZcW.js} +2 -2
  33. data/dist/chunks/{pb_form_validation-C0la9CZR.js → pb_form_validation-WWvUXPKD.js} +1 -1
  34. data/dist/chunks/vendor.js +1 -1
  35. data/dist/playbook-doc.js +1 -1
  36. data/dist/playbook-rails-react-bindings.js +1 -1
  37. data/dist/playbook-rails.js +1 -1
  38. data/dist/playbook.css +1 -1
  39. data/lib/playbook/version.rb +1 -1
  40. metadata +12 -23
  41. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +0 -31
  42. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.md +0 -5
  43. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.jsx +0 -56
  44. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select.md +0 -3
  45. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.jsx +0 -58
  46. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display.md +0 -3
  47. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.html.erb +0 -20
  48. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_display_rails.md +0 -1
  49. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.html.erb +0 -19
  50. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_rails.md +0 -3
  51. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.html.erb +0 -20
  52. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.jsx +0 -57
  53. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_autocomplete.md +0 -1
  54. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.html.erb +0 -50
  55. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_custom_options.jsx +0 -105
  56. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.html.erb +0 -22
  57. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_multi_select_with_default.jsx +0 -67
  58. data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +0 -58
  59. data/dist/chunks/_typeahead-CLGxsWj4.js +0 -22
  60. data/dist/chunks/_weekday_stacked-BrJMDrKs.js +0 -45
@@ -15,7 +15,7 @@
15
15
  @include pb_body;
16
16
  border: 1px solid $border_light;
17
17
  background-color: $white;
18
- min-height: 45px;
18
+ height: 45px;
19
19
  @media (hover: hover) {
20
20
  &:hover,
21
21
  &:active,
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle, useMemo } from "react";
1
+ import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from "react";
2
2
  import classnames from "classnames";
3
3
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
4
4
  import { globalProps } from "../utilities/globalProps";
@@ -25,7 +25,6 @@ type DropdownProps = {
25
25
  blankSelection?: string;
26
26
  children?: React.ReactChild[] | React.ReactChild | React.ReactElement[];
27
27
  className?: string;
28
- formPillProps?: GenericObject;
29
28
  dark?: boolean;
30
29
  data?: { [key: string]: string };
31
30
  defaultValue?: GenericObject;
@@ -34,7 +33,6 @@ type DropdownProps = {
34
33
  id?: string;
35
34
  isClosed?: boolean;
36
35
  label?: string;
37
- multiSelect?: boolean;
38
36
  onSelect?: (arg: GenericObject) => null;
39
37
  options: GenericObject;
40
38
  separators?: boolean;
@@ -63,8 +61,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
63
61
  id,
64
62
  isClosed = true,
65
63
  label,
66
- multiSelect = false,
67
- formPillProps,
68
64
  onSelect,
69
65
  options,
70
66
  separators = true,
@@ -84,20 +80,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
84
80
  const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(isClosed);
85
81
 
86
82
  const [filterItem, setFilterItem] = useState("");
87
- const initialSelected = useMemo(() => {
88
- if (multiSelect) {
89
- if (Array.isArray(defaultValue)) return defaultValue;
90
- return defaultValue && Object.keys(defaultValue).length
91
- ? [defaultValue]
92
- : [];
93
- }
94
- return defaultValue || {};
95
- }, [multiSelect, defaultValue]);
96
-
97
- const [selected, setSelected] = useState<GenericObject | GenericObject[]>(
98
- initialSelected
99
- );
100
-
83
+ const [selected, setSelected] = useState<GenericObject>(defaultValue);
101
84
  const [isInputFocused, setIsInputFocused] = useState(false);
102
85
  const [hasTriggerSubcomponent, setHasTriggerSubcomponent] = useState(true);
103
86
  const [hasContainerSubcomponent, setHasContainerSubcomponent] =
@@ -110,12 +93,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
110
93
  const inputWrapperRef = useRef(null);
111
94
  const dropdownContainerRef = useRef(null);
112
95
 
113
- const selectedArray = Array.isArray(selected)
114
- ? selected
115
- : selected && Object.keys(selected).length
116
- ? [selected]
117
- : [];
118
-
119
96
  const { trigger, container, otherChildren } =
120
97
  separateChildComponents(children);
121
98
 
@@ -147,23 +124,16 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
147
124
 
148
125
  const blankSelectionOption: GenericObject = blankSelection ? [{ label: blankSelection, value: "" }] : [];
149
126
  const optionsWithBlankSelection = blankSelectionOption.concat(options);
150
-
151
- const availableOptions = useMemo(()=> {
152
- if (!multiSelect) return optionsWithBlankSelection;
153
- return optionsWithBlankSelection.filter((option: GenericObject) => !selectedArray.some((sel) => sel.label === option.label));
154
- }, [optionsWithBlankSelection, selectedArray, multiSelect]);
155
-
156
- const filteredOptions = useMemo(() => {
157
- return availableOptions.filter((opt: GenericObject) =>
158
- String(opt.label).toLowerCase().includes(filterItem.toLowerCase())
159
- );
160
- }, [availableOptions, filterItem]);
127
+ const filteredOptions = optionsWithBlankSelection?.filter((option: GenericObject) => {
128
+ const label = typeof option.label === 'string' ? option.label.toLowerCase() : option.label;
129
+ return String(label).toLowerCase().includes(filterItem.toLowerCase());
130
+ });
161
131
 
162
132
  // For keyboard accessibility: Set focus within dropdown to selected item if it exists
163
133
  useEffect(() => {
164
134
  if (!isDropDownClosed) {
165
135
  let newIndex = 0;
166
- if (selected && !Array.isArray(selected) && selected.label) {
136
+ if (selected && selected?.label) {
167
137
  const selectedIndex = filteredOptions.findIndex((option: GenericObject) => option.label === selected.label);
168
138
  if (selectedIndex >= 0) {
169
139
  newIndex = selectedIndex;
@@ -179,27 +149,12 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
179
149
  setIsDropDownClosed(false);
180
150
  };
181
151
 
182
-
183
- const handleOptionClick = (clickedItem: GenericObject) => {
184
- if (multiSelect) {
185
- setSelected((prev) => {
186
- const list = prev as GenericObject[];
187
- const exists = list.find((option) => option.value === clickedItem.value);
188
- const next = exists
189
- ? list.filter((option) => option.value !== clickedItem.value)
190
- : [...list, clickedItem];
191
- onSelect && onSelect(next);
192
- return next;
193
- });
194
- setFilterItem("");
195
- setIsDropDownClosed(true);
196
- } else {
197
- setSelected(clickedItem);
198
- setFilterItem("");
199
- setIsDropDownClosed(true);
200
- onSelect && onSelect(clickedItem);
201
- }
202
- };
152
+ const handleOptionClick = (selectedItem: GenericObject) => {
153
+ setSelected(selectedItem);
154
+ setFilterItem("");
155
+ setIsDropDownClosed(true);
156
+ onSelect && onSelect(selectedItem);
157
+ };
203
158
 
204
159
  const handleWrapperClick = () => {
205
160
  autocomplete && inputRef?.current?.focus();
@@ -207,14 +162,9 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
207
162
  };
208
163
 
209
164
  const handleBackspace = () => {
210
- if (multiSelect) {
211
- setSelected([]);
212
- onSelect && onSelect([]);
213
- } else {
214
165
  setSelected({});
215
166
  onSelect && onSelect(null);
216
167
  setFocusedOptionIndex(-1);
217
- }
218
168
  };
219
169
 
220
170
  const componentsToRender = prepareSubcomponents({
@@ -228,17 +178,12 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
228
178
  });
229
179
 
230
180
  useImperativeHandle(ref, () => ({
231
- clearSelected: () => {
232
- if (multiSelect) {
233
- setSelected([]);
234
- onSelect && onSelect([]);
235
- } else {
236
- setSelected({});
237
- onSelect && onSelect(null);
238
- }
239
- setFilterItem("");
240
- setIsDropDownClosed(true);
241
- },
181
+ clearSelected: () => {
182
+ setSelected({});
183
+ setFilterItem("");
184
+ setIsDropDownClosed(true);
185
+ onSelect && onSelect(null);
186
+ },
242
187
  }));
243
188
 
244
189
  return (
@@ -256,7 +201,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
256
201
  filteredOptions,
257
202
  filterItem,
258
203
  focusedOptionIndex,
259
- formPillProps,
260
204
  handleBackspace,
261
205
  handleChange,
262
206
  handleOptionClick,
@@ -265,8 +209,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
265
209
  inputWrapperRef,
266
210
  isDropDownClosed,
267
211
  isInputFocused,
268
- multiSelect,
269
- onSelect,
270
212
  optionsWithBlankSelection,
271
213
  selected,
272
214
  setFocusedOptionIndex,
@@ -0,0 +1,10 @@
1
+ <%
2
+ options = [
3
+ { label: 'United States', value: 'United States', id: 'us' },
4
+ { label: 'Canada', value: 'Canada', id: 'ca' },
5
+ { label: 'Pakistan', value: 'Pakistan', id: 'pk' },
6
+ ]
7
+
8
+ %>
9
+
10
+ <%= pb_rails("dropdown", props: {options: options}) %>
@@ -1,45 +1,35 @@
1
1
  examples:
2
2
  rails:
3
- - dropdown_default_rails: Default
3
+ - dropdown_default: Default
4
4
  - dropdown_with_autocomplete: Autocomplete
5
- - dropdown_multi_select_rails: Multi Select
6
- - dropdown_multi_select_with_autocomplete: Multi Select with Autocomplete
7
- - dropdown_multi_select_display_rails: Multi Select with Form Pill Props
8
5
  - dropdown_subtle_variant: Subtle Variant
9
6
  - dropdown_subcomponent_structure_rails: Subcomponent Structure
10
7
  - dropdown_with_autocomplete_with_subcomponents: Autocomplete with Subcomponent Structure
11
8
  - dropdown_with_label: With Label
12
9
  - dropdown_with_custom_options_rails: Custom Options
13
- - dropdown_multi_select_with_custom_options: Multi Select with Custom Options
14
10
  - dropdown_with_custom_display_rails: Custom Display
15
11
  - dropdown_with_custom_trigger_rails: Custom Trigger
16
12
  - dropdown_with_search_rails: Custom Trigger Dropdown with Search
17
13
  - dropdown_with_custom_padding: Custom Option Padding
18
14
  - dropdown_error: Dropdown with Error
19
15
  - dropdown_default_value: Default Value
20
- - dropdown_multi_select_with_default: Multi Select Default Value
21
16
  - dropdown_blank_selection: Blank Selection
22
17
  - dropdown_separators_hidden: Separators Hidden
23
18
 
24
19
  react:
25
20
  - dropdown_default: Default
26
21
  - dropdown_with_autocomplete: Autocomplete
27
- - dropdown_multi_select: Multi Select
28
- - dropdown_multi_select_with_autocomplete: Multi Select with Autocomplete
29
- - dropdown_multi_select_display: Multi Select with Form Pill Props
30
22
  - dropdown_subtle_variant: Subtle Variant
31
23
  - dropdown_subcomponent_structure: Subcomponent Structure
32
24
  - dropdown_with_autocomplete_with_subcomponents: Autocomplete with Subcomponent Structure
33
25
  - dropdown_with_label: With Label
34
26
  - dropdown_with_custom_options: Custom Options
35
- - dropdown_multi_select_with_custom_options: Multi Select with Custom Options
36
27
  - dropdown_with_custom_display: Custom Display
37
28
  - dropdown_with_custom_trigger: Custom Trigger
38
29
  - dropdown_with_search: Custom Trigger Dropdown with Search
39
30
  - dropdown_with_custom_padding: Custom Option Padding
40
31
  - dropdown_error: Dropdown with Error
41
32
  - dropdown_default_value: Default Value
42
- - dropdown_multi_select_with_default: Multi Select Default Value
43
33
  - dropdown_blank_selection: Blank Selection
44
34
  - dropdown_clear_selection: Clear Selection
45
35
  - dropdown_separators_hidden: Separators Hidden
@@ -15,8 +15,3 @@ export { default as DropdownClearSelection } from './_dropdown_clear_selection.j
15
15
  export { default as DropdownSubtleVariant } from './_dropdown_subtle_variant.jsx'
16
16
  export { default as DropdownSeparatorsHidden } from './_dropdown_separators_hidden.jsx'
17
17
  export {default as DropdownWithSearch} from './_dropdown_with_search.jsx'
18
- export { default as DropdownMultiSelect } from './_dropdown_multi_select.jsx'
19
- export { default as DropdownMultiSelectDisplay } from './_dropdown_multi_select_display.jsx'
20
- export { default as DropdownMultiSelectWithAutocomplete } from './_dropdown_multi_select_with_autocomplete.jsx'
21
- export { default as DropdownMultiSelectWithDefault } from './_dropdown_multi_select_with_default.jsx'
22
- export { default as DropdownMultiSelectWithCustomOptions } from './_dropdown_multi_select_with_custom_options.jsx'
@@ -6,7 +6,7 @@
6
6
  <input
7
7
  data-default-value="<%= input_default_value %>"
8
8
  id="dropdown-selected-option"
9
- name="<%= object.name %><%= '[]' if object.multi_select %>"
9
+ name="<%= object.name %>"
10
10
  style="display: none"
11
11
  <%= object.required ? "required" : ""%>
12
12
  />
@@ -14,8 +14,8 @@
14
14
  <%= content.presence %>
15
15
  <%= pb_rails("body", props: { status: "negative", text: object.error }) %>
16
16
  <% else %>
17
- <%= pb_rails("dropdown/dropdown_trigger", props:{ autocomplete: object.autocomplete, multi_select:object.multi_select }) %>
18
- <%= pb_rails("dropdown/dropdown_container", props: { searchbar: object.searchbar }) do %>
17
+ <%= pb_rails("dropdown/dropdown_trigger", props:{autocomplete: object.autocomplete}) %>
18
+ <%= pb_rails("dropdown/dropdown_container", props: {searchbar: object.searchbar}) do %>
19
19
  <% if options_with_blank.present? %>
20
20
  <% options_with_blank.each do |option| %>
21
21
  <%= pb_rails("dropdown/dropdown_option", props: {option: option}) %>
@@ -22,17 +22,9 @@ module Playbook
22
22
  default: false
23
23
  prop :searchbar, type: Playbook::Props::Boolean,
24
24
  default: false
25
- prop :multi_select, type: Playbook::Props::Boolean,
26
- default: false
27
- prop :form_pill_props, type: Playbook::Props::HashProp,
28
- default: {}
29
25
 
30
26
  def data
31
- Hash(prop(:data)).merge(
32
- pb_dropdown: true,
33
- pb_dropdown_multi_select: multi_select,
34
- form_pill_props: form_pill_props.to_json
35
- )
27
+ Hash(prop(:data)).merge(pb_dropdown: true)
36
28
  end
37
29
 
38
30
  def classname
@@ -46,13 +38,7 @@ module Playbook
46
38
  end
47
39
 
48
40
  def input_default_value
49
- return "" unless default_value.present?
50
-
51
- if multi_select
52
- default_value.map { |v| v.transform_keys(&:to_s)["id"] }.join(",")
53
- else
54
- default_value.transform_keys(&:to_s)["id"]
55
- end
41
+ default_value.present? ? default_value.transform_keys(&:to_s)["id"] : ""
56
42
  end
57
43
 
58
44
  def separators_class
@@ -14,7 +14,7 @@
14
14
  padding_y:"xs",
15
15
  html_options: {tabindex:"0"}
16
16
  }) do %>
17
- <%= pb_rails("flex/flex_item", props: { fixed_size: object.multi_select ? "85%" : "" }) do %>
17
+ <%= pb_rails("flex/flex_item") do %>
18
18
  <%= pb_rails("flex", props: {align: "center"}) do %>
19
19
  <% if object.custom_display.present? %>
20
20
  <%= pb_rails("flex", props: {align: "center"}) do %>
@@ -24,44 +24,23 @@
24
24
  <%= pb_rails("body", props: {text: object.default_display_placeholder, id: "dropdown_trigger_display"}) %>
25
25
  <% end %>
26
26
  <% else %>
27
- <% if object.multi_select %>
28
- <%= pb_rails("flex", props: { align: "center", wrap: true }) do %>
29
- <%= pb_rails("flex", props: { id:"dropdown_pills_wrapper", wrap: true }) do %>
30
- <% end %>
31
- <% if object.autocomplete %>
32
- <input
33
- data-dropdown-autocomplete
34
- class="dropdown_input"
35
- type="text"
36
- placeholder="<%= object.placeholder || 'Select…' %>"
37
- autocomplete="off"
38
- />
39
- <% else %>
40
- <%= pb_rails("body", props: {text: object.default_display_placeholder, id: "dropdown_trigger_display_multi_select"}) %>
41
- <% end %>
42
- <% end %>
27
+ <% if object.autocomplete %>
28
+ <input
29
+ data-dropdown-autocomplete
30
+ class="dropdown_input"
31
+ type="text"
32
+ placeholder="<%= object.placeholder || 'Select…' %>"
33
+ autocomplete="off"
34
+ />
43
35
  <% else %>
44
- <% if object.autocomplete %>
45
- <input
46
- data-dropdown-autocomplete
47
- class="dropdown_input"
48
- type="text"
49
- placeholder="<%= object.placeholder || 'Select…' %>"
50
- autocomplete="off"
51
- />
52
- <% else %>
53
- <%= pb_rails("body", props: {text: object.default_display_placeholder, id: "dropdown_trigger_display"}) %>
54
- <% end %>
36
+ <%= pb_rails("body", props: {text: object.default_display_placeholder, id: "dropdown_trigger_display"}) %>
55
37
  <% end %>
56
38
  <% end %>
57
39
  <% end %>
58
40
  <% end %>
59
- <%= pb_rails("flex/flex_item") do %>
60
- <%= pb_rails("body", props: {display: "flex", align_items:"center" }) do %>
61
- <%= pb_rails("icon", props: {icon: "times", cursor: "pointer", size:"sm", id: "dropdown_clear_icon", padding_right:"xs" }) %>
62
- <%= pb_rails("icon", props: {icon: "chevron-down", cursor: "pointer", size:"sm", id: "dropdown_open_icon"}) %>
63
- <%= pb_rails("icon", props: {icon: "chevron-up", cursor: "pointer", size:"sm", id: "dropdown_close_icon"}) %>
64
- <% end %>
41
+ <%= pb_rails("body", props: {display: "flex"}) do %>
42
+ <%= pb_rails("icon", props: {icon: "chevron-down", cursor: "pointer", size:"sm", id: "dropdown_open_icon"}) %>
43
+ <%= pb_rails("icon", props: {icon: "chevron-up", cursor: "pointer", size:"sm", id: "dropdown_close_icon"}) %>
65
44
  <% end %>
66
45
  <% end %>
67
46
  <% end %>
@@ -11,8 +11,6 @@ module Playbook
11
11
  prop :custom_display
12
12
  prop :autocomplete, type: Playbook::Props::Boolean,
13
13
  default: false
14
- prop :multi_select, type: Playbook::Props::Boolean,
15
- default: false
16
14
 
17
15
  def data
18
16
  Hash(prop(:data)).merge(dropdown_trigger: true, dropdown_placeholder: default_display_placeholder)
@@ -27,7 +25,7 @@ module Playbook
27
25
  end
28
26
 
29
27
  def trigger_wrapper_classes
30
- generate_classname("dropdown_trigger_wrapper", ("select_only" unless autocomplete || multi_select))
28
+ generate_classname("dropdown_trigger_wrapper", ("select_only" unless autocomplete))
31
29
  end
32
30
  end
33
31
  end
@@ -22,6 +22,12 @@ const {
22
22
  }
23
23
 
24
24
  switch (e.key) {
25
+ case "Backspace":
26
+ case "Delete":
27
+ if (autocomplete) {
28
+ handleBackspace();
29
+ }
30
+ break;
25
31
  case "ArrowDown": {
26
32
  e.preventDefault();
27
33
  setIsDropDownClosed(false);