playbook_ui 13.32.0.pre.alpha.PBNTR405dropdownformfixesrails3301 → 13.32.0.pre.alpha.PLAY1138iconkitaddcolorprop3268

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +0 -4
  3. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  4. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +7 -12
  5. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +0 -4
  6. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +1 -3
  7. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +4 -3
  8. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +0 -11
  9. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +1 -1
  10. data/app/pb_kits/playbook/pb_dropdown/index.js +17 -75
  11. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +5 -108
  12. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +2 -11
  13. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_example.html.erb +1 -5
  14. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_example.jsx +0 -1
  15. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_size.html.erb +0 -2
  16. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_size.jsx +0 -2
  17. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.html.erb +1 -4
  18. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.jsx +2 -3
  19. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.html.erb +0 -2
  20. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.jsx +0 -2
  21. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
  22. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +1 -5
  23. data/app/pb_kits/playbook/pb_icon/_icon.scss +27 -210
  24. data/app/pb_kits/playbook/pb_icon/_icon.tsx +44 -100
  25. data/app/pb_kits/playbook/pb_icon/docs/_icon_color.html.erb +7 -0
  26. data/app/pb_kits/playbook/pb_icon/docs/_icon_color.jsx +46 -0
  27. data/app/pb_kits/playbook/pb_icon/docs/_icon_color.md +1 -0
  28. data/app/pb_kits/playbook/pb_icon/docs/example.yml +2 -0
  29. data/app/pb_kits/playbook/pb_icon/docs/index.js +1 -0
  30. data/app/pb_kits/playbook/pb_icon/icon.rb +28 -34
  31. data/app/pb_kits/playbook/pb_icon/icon_aliases.json +39 -0
  32. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +2 -2
  33. data/app/pb_kits/playbook/pb_nav/docs/example.yml +0 -1
  34. data/app/pb_kits/playbook/pb_nav/nav.rb +0 -9
  35. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/MoreExtensionsDropdown.tsx +1 -1
  36. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +1 -1
  37. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +2 -11
  38. data/app/pb_kits/playbook/pb_star_rating/docs/example.yml +1 -1
  39. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +5 -25
  40. data/app/pb_kits/playbook/pb_star_rating/star_rating.rb +0 -6
  41. data/app/pb_kits/playbook/pb_table/_table.tsx +1 -1
  42. data/app/pb_kits/playbook/pb_table/index.ts +4 -4
  43. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +1 -1
  44. data/app/pb_kits/playbook/pb_table/subcomponents/_table_cell.tsx +1 -1
  45. data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +1 -1
  46. data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +1 -1
  47. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +1 -1
  48. data/app/pb_kits/playbook/pb_table/table.test.js +0 -2
  49. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +1 -1
  50. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +1 -1
  51. data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +27 -45
  52. data/app/pb_kits/playbook/pb_textarea/index.tsx +3 -3
  53. data/app/pb_kits/playbook/pb_time/_time.tsx +3 -3
  54. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +1 -1
  55. data/app/pb_kits/playbook/pb_timeline/_item.tsx +1 -1
  56. data/app/pb_kits/playbook/pb_timeline/_timeline.tsx +1 -1
  57. data/app/pb_kits/playbook/pb_title_detail/_title_detail.tsx +10 -10
  58. data/app/pb_kits/playbook/pb_toggle/_toggle.tsx +1 -1
  59. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +2 -2
  60. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +2 -1
  61. data/app/pb_kits/playbook/pb_treemap_chart/treemapChart.test.js +0 -2
  62. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -3
  63. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +4 -4
  64. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +7 -11
  65. data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.tsx +3 -8
  66. data/app/pb_kits/playbook/pb_typeahead/components/MenuList.tsx +1 -6
  67. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +19 -18
  68. data/app/pb_kits/playbook/pb_typeahead/components/Option.tsx +6 -6
  69. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.tsx +6 -6
  70. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +3 -3
  71. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_menu_list.jsx +0 -2
  72. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.html.erb +57 -22
  73. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +2 -2
  74. data/app/pb_kits/playbook/pb_typeahead/index.ts +31 -31
  75. data/app/pb_kits/playbook/pb_user/_user.tsx +1 -1
  76. data/app/pb_kits/playbook/pb_user_badge/_user_badge.tsx +6 -6
  77. data/app/pb_kits/playbook/pb_user_badge/badges/million-dollar.tsx +235 -236
  78. data/app/pb_kits/playbook/pb_user_badge/badges/veteran.tsx +1 -1
  79. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.tsx +63 -68
  80. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +2 -2
  81. data/app/pb_kits/playbook/playbook-rails.js +0 -6
  82. data/dist/playbook-rails.js +7 -7
  83. data/lib/playbook/forms/builder.rb +0 -1
  84. data/lib/playbook/version.rb +1 -1
  85. metadata +6 -13
  86. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_blank_selection.html.erb +0 -10
  87. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_blank_selection.jsx +0 -31
  88. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_value.html.erb +0 -10
  89. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_value.jsx +0 -31
  90. data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +0 -53
  91. data/app/pb_kits/playbook/pb_nav/docs/_tab_nav.html.erb +0 -48
  92. data/app/pb_kits/playbook/pb_nav/docs/_tab_nav.md +0 -3
  93. data/app/pb_kits/playbook/pb_nav/index.js +0 -43
  94. data/app/pb_kits/playbook/pb_star_rating/docs/_star_rating_interactive.html.erb +0 -1
  95. data/app/pb_kits/playbook/pb_star_rating/index.js +0 -50
  96. data/lib/playbook/forms/builder/star_rating_field.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46be62680a9b7f69c65dbc7401bac4bfa0fdcc6eb8e77b636053147335db6aeb
4
- data.tar.gz: a6b937a47504236820e0452a347643dd726ab61d2b95ecf78ecaf9c88eae14cf
3
+ metadata.gz: 2b8727cde66e2db0ab8c6e03d0e4f1f120946349c33ccde13db3a57654e723f6
4
+ data.tar.gz: 62cd6fd054f6114e65ebf42836c112b6defd2fb641cc5286f7a0515e9275b7e5
5
5
  SHA512:
6
- metadata.gz: 30558fa14a011d3a22c55218a8e66e23a6beb66f11e065135189e5f171799669c7f213aa751554df57dc599416b99759971f66d319e9c44a4cdd30dfb23c25d7
7
- data.tar.gz: 5690e376f3790d415dc66f95a53c73327fd5c5f769ed7dd3199aa097ca1f36c3584505bffa08ae142d546f5249c199160f531772e904878f06c89d9d7fabcdc6
6
+ metadata.gz: 64db2dd4d63371d32e7f7430ca1f683946a830bc2782ee19779a4082a57943b0f5f275c15e81be777c42dfcb76ea640a846be4d3118252149cb458861362ec52
7
+ data.tar.gz: dd527085844a67f55d0420db0f2458f815f9cbc12e4d40c0387249d2bda0c16a9a8b35800c88202e5e06fcc7b0f6043c4bb181ff91f2aa3da12ca0e18e9b2289
@@ -1,6 +1,2 @@
1
1
  The `customOptions` prop provides comprehensive access to additional [Highcharts options](https://api.highcharts.com/highcharts/) that are not explicitly defined as props.
2
2
  It's important to note that certain options may require specific script imports to function properly.
3
-
4
- Note: If you are having trouble getting any Highcharts options to work, please match the formatting of our [staticOptions](https://github.com/powerhome/playbook/blob/master/playbook/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx#L85-L141). For example, `yAxis` will need to be wrapped with square brackets.
5
-
6
- You may also need to override any of the [defaults](https://github.com/powerhome/playbook/blob/master/playbook/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx#L45-L73) in order to get that options to work.
@@ -28,7 +28,7 @@ exports[`html structure is correct 1`] = `
28
28
  style="vertical-align: middle; color: rgb(193, 205, 214);"
29
29
  >
30
30
  <i
31
- class="pb_icon_kit far fa-lg fa-fw fa-lg fa-chevron-down"
31
+ class="pb_icon_kit far fa-fw fa-lg fa-chevron-down"
32
32
  />
33
33
  <span
34
34
  aria-label="chevron-down icon"
@@ -22,12 +22,10 @@ import {
22
22
  type DropdownProps = {
23
23
  aria?: { [key: string]: string };
24
24
  autocomplete?: boolean;
25
- blankSelection?: string;
26
25
  children?: React.ReactChild[] | React.ReactChild | React.ReactElement[];
27
26
  className?: string;
28
27
  dark?: boolean;
29
28
  data?: { [key: string]: string };
30
- defaultValue?: GenericObject;
31
29
  error?: string;
32
30
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
33
31
  id?: string;
@@ -42,12 +40,10 @@ const Dropdown = (props: DropdownProps) => {
42
40
  const {
43
41
  aria = {},
44
42
  autocomplete = false,
45
- blankSelection = '',
46
43
  children,
47
44
  className,
48
45
  dark = false,
49
46
  data = {},
50
- defaultValue = {},
51
47
  error,
52
48
  htmlOptions = {},
53
49
  id,
@@ -70,7 +66,7 @@ const Dropdown = (props: DropdownProps) => {
70
66
  const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(isClosed);
71
67
 
72
68
  const [filterItem, setFilterItem] = useState("");
73
- const [selected, setSelected] = useState<GenericObject>(defaultValue);
69
+ const [selected, setSelected] = useState<GenericObject>({});
74
70
  const [isInputFocused, setIsInputFocused] = useState(false);
75
71
  const [hasTriggerSubcomponent, setHasTriggerSubcomponent] = useState(true);
76
72
  const [hasContainerSubcomponent, setHasContainerSubcomponent] =
@@ -120,12 +116,11 @@ const Dropdown = (props: DropdownProps) => {
120
116
  setIsDropDownClosed(isClosed)
121
117
  }, [isClosed])
122
118
 
123
- const blankSelectionOption: GenericObject = blankSelection ? [{ label: blankSelection, value: "" }] : [];
124
- const optionsWithBlankSelection = blankSelectionOption.concat(options);
125
- const filteredOptions = optionsWithBlankSelection?.filter((option: GenericObject) => {
119
+ const filteredOptions = options?.filter((option: GenericObject) => {
126
120
  const label = typeof option.label === 'string' ? option.label.toLowerCase() : option.label;
127
121
  return String(label).toLowerCase().includes(filterItem.toLowerCase());
128
- });
122
+ }
123
+ );
129
124
 
130
125
  // For keyboard accessibility: Set focus within dropdown to selected item if it exists
131
126
  useEffect(() => {
@@ -199,7 +194,7 @@ const Dropdown = (props: DropdownProps) => {
199
194
  inputWrapperRef,
200
195
  isDropDownClosed,
201
196
  isInputFocused,
202
- optionsWithBlankSelection,
197
+ options,
203
198
  selected,
204
199
  setFocusedOptionIndex,
205
200
  setIsDropDownClosed,
@@ -238,8 +233,8 @@ const Dropdown = (props: DropdownProps) => {
238
233
  <>
239
234
  <DropdownTrigger />
240
235
  <DropdownContainer>
241
- {optionsWithBlankSelection &&
242
- optionsWithBlankSelection?.map((option: GenericObject) => (
236
+ {options &&
237
+ options?.map((option: GenericObject) => (
243
238
  <Dropdown.Option key={option.id}
244
239
  option={option}
245
240
  />
@@ -8,8 +8,6 @@ examples:
8
8
  - dropdown_with_custom_trigger_rails: Custom Trigger
9
9
  - dropdown_with_custom_padding: Custom Option Padding
10
10
  - dropdown_error: Dropdown with Error
11
- - dropdown_default_value: Default Value
12
- - dropdown_blank_selection: Blank Selection
13
11
 
14
12
  react:
15
13
  - dropdown_default: Default
@@ -20,8 +18,6 @@ examples:
20
18
  - dropdown_with_custom_trigger: Custom Trigger
21
19
  - dropdown_with_custom_padding: Custom Option Padding
22
20
  - dropdown_error: Dropdown with Error
23
- - dropdown_default_value: Default Value
24
- - dropdown_blank_selection: Blank Selection
25
21
  # - dropdown_with_autocomplete: Autocomplete
26
22
  # - dropdown_with_autocomplete_and_custom_display: Autocomplete with Custom Display
27
23
  # - dropdown_with_external_control: useDropdown Hook
@@ -9,6 +9,4 @@ export { default as DropdownWithLabel } from './_dropdown_with_label.jsx'
9
9
  export { default as DropdownWithExternalControl } from './_dropdown_with_external_control.jsx'
10
10
  export { default as DropdownWithHook } from './_dropdown_with_hook.jsx'
11
11
  export { default as DropdownSubcomponentStructure } from './_dropdown_subcomponent_structure.jsx'
12
- export { default as DropdownError } from './_dropdown_error.jsx'
13
- export { default as DropdownDefaultValue } from './_dropdown_default_value.jsx'
14
- export { default as DropdownBlankSelection } from './_dropdown_blank_selection.jsx'
12
+ export { default as DropdownError } from './_dropdown_error.jsx'
@@ -8,7 +8,8 @@
8
8
  <%= pb_rails("caption", props: {text: object.label, margin_bottom:"xs"}) %>
9
9
  <% end %>
10
10
  <div class="dropdown_wrapper<%= error_class %>" style="position: relative">
11
- <input id="dropdown-selected-option" name="<%= object.name %>" value="<%= input_default_value %>" style="display: none" <%= object.required ? "required" : ""%> />
11
+ <input type="hidden" name="<%= object.name %>" id="dropdown-selected-option" value="" />
12
+ <input id="dropdown-form-validation" name="<%= object.name %>_form_validation" value="" style="display: none" <%= object.required ? "required" : ""%> />
12
13
 
13
14
  <% if content.present? %>
14
15
  <%= content.presence %>
@@ -16,8 +17,8 @@
16
17
  <% else %>
17
18
  <%= pb_rails("dropdown/dropdown_trigger") %>
18
19
  <%= pb_rails("dropdown/dropdown_container") do %>
19
- <% if options_with_blank.present? %>
20
- <% options_with_blank.each do |option| %>
20
+ <% if object.options.present? %>
21
+ <% object.options.each do |option| %>
21
22
  <%= pb_rails("dropdown/dropdown_option", props: {option: option}) %>
22
23
  <% end %>
23
24
  <% end %>
@@ -10,9 +10,6 @@ module Playbook
10
10
  prop :error, type: Playbook::Props::String
11
11
  prop :required, type: Playbook::Props::Boolean,
12
12
  default: false
13
- prop :default_value
14
- prop :blank_selection, type: Playbook::Props::String,
15
- default: ""
16
13
 
17
14
  def data
18
15
  Hash(prop(:data)).merge(pb_dropdown: true)
@@ -27,14 +24,6 @@ module Playbook
27
24
  def error_class
28
25
  error.present? ? " error" : ""
29
26
  end
30
-
31
- def input_default_value
32
- default_value.present? ? default_value.transform_keys(&:to_s) : ""
33
- end
34
-
35
- def options_with_blank
36
- blank_selection.present? ? [{ id: "", value: "", label: blank_selection }] + options : options
37
- end
38
27
  end
39
28
  end
40
29
  end
@@ -11,7 +11,7 @@ module Playbook
11
11
  prop :custom_display
12
12
 
13
13
  def data
14
- Hash(prop(:data)).merge(dropdown_trigger: true, dropdown_placeholder: default_display_placeholder)
14
+ Hash(prop(:data)).merge(dropdown_trigger: true)
15
15
  end
16
16
 
17
17
  def classname
@@ -8,9 +8,7 @@ const DOWN_ARROW_SELECTOR = "#dropdown_open_icon";
8
8
  const UP_ARROW_SELECTOR = "#dropdown_close_icon";
9
9
  const OPTION_SELECTOR = "[data-dropdown-option-label]";
10
10
  const CUSTOM_DISPLAY_SELECTOR = "[data-dropdown-custom-trigger]";
11
- const DROPDOWN_TRIGGER_DISPLAY = "#dropdown_trigger_display";
12
- const DROPDOWN_PLACEHOLDER = "[data-dropdown-placeholder]";
13
- const DROPDOWN_INPUT = "#dropdown-selected-option";
11
+ const INPUT_FORM_VALIDATION = "#dropdown-form-validation";
14
12
 
15
13
  export default class PbDropdown extends PbEnhancedElement {
16
14
  static get selector() {
@@ -23,11 +21,9 @@ export default class PbDropdown extends PbEnhancedElement {
23
21
 
24
22
  connect() {
25
23
  this.keyboardHandler = new PbDropdownKeyboard(this);
26
- this.setDefaultValue();
27
24
  this.bindEventListeners();
28
25
  this.updateArrowDisplay(false);
29
26
  this.handleFormValidation();
30
- this.handleFormReset();
31
27
  }
32
28
 
33
29
  bindEventListeners() {
@@ -47,13 +43,14 @@ export default class PbDropdown extends PbEnhancedElement {
47
43
 
48
44
  handleOptionClick(event) {
49
45
  const option = event.target.closest(OPTION_SELECTOR);
50
- const hiddenInput = this.element.querySelector(DROPDOWN_INPUT);
46
+ const hiddenInput = this.element.querySelector("#dropdown-selected-option");
47
+ const inputFormValidation = this.element.querySelector(INPUT_FORM_VALIDATION);
51
48
 
52
49
  if (option) {
53
50
  const value = option.dataset.dropdownOptionLabel;
54
51
  hiddenInput.value = JSON.parse(value).id;
55
- this.clearFormValidation(hiddenInput);
56
-
52
+ inputFormValidation.value = JSON.parse(value).id;
53
+ this.clearFormValidation(inputFormValidation);
57
54
  this.onOptionSelected(value, option);
58
55
  }
59
56
  }
@@ -86,7 +83,9 @@ export default class PbDropdown extends PbEnhancedElement {
86
83
  }
87
84
 
88
85
  onOptionSelected(value, selectedOption) {
89
- const triggerElement = this.element.querySelector(DROPDOWN_TRIGGER_DISPLAY);
86
+ const triggerElement = this.element.querySelector(
87
+ "#dropdown_trigger_display"
88
+ );
90
89
  const customDisplayElement = this.element.querySelector(
91
90
  "#dropdown_trigger_custom_display"
92
91
  );
@@ -159,18 +158,14 @@ export default class PbDropdown extends PbEnhancedElement {
159
158
  }
160
159
 
161
160
  handleFormValidation() {
162
- const hiddenInput = this.element.querySelector(DROPDOWN_INPUT);
163
-
164
- hiddenInput.addEventListener(
165
- "invalid",
166
- function (event) {
167
- if (hiddenInput.hasAttribute("required") && hiddenInput.value === "") {
168
- event.preventDefault();
169
- hiddenInput.closest(".dropdown_wrapper").classList.add("error");
170
- }
171
- },
172
- true
173
- );
161
+ const inputFormValidation = this.element.querySelector(INPUT_FORM_VALIDATION);
162
+
163
+ inputFormValidation.addEventListener("invalid", function (event) {
164
+ if (inputFormValidation.hasAttribute("required") && inputFormValidation.value === "") {
165
+ event.preventDefault();
166
+ inputFormValidation.closest(".dropdown_wrapper").classList.add("error");
167
+ }
168
+ }, true);
174
169
  }
175
170
 
176
171
  clearFormValidation(input) {
@@ -178,63 +173,10 @@ export default class PbDropdown extends PbEnhancedElement {
178
173
  const dropdownWrapperElement = input.closest(".dropdown_wrapper");
179
174
  dropdownWrapperElement.classList.remove("error");
180
175
 
181
- const errorLabelElement = dropdownWrapperElement.querySelector(
182
- ".pb_body_kit_negative"
183
- );
176
+ const errorLabelElement = dropdownWrapperElement.querySelector(".pb_body_kit_negative");
184
177
  if (errorLabelElement) {
185
178
  errorLabelElement.remove();
186
179
  }
187
180
  }
188
181
  }
189
-
190
- setDefaultValue() {
191
- const hiddenInput = this.element.querySelector(DROPDOWN_INPUT);
192
-
193
- if (hiddenInput.value) {
194
- const defaultValue = JSON.parse(hiddenInput.value.replaceAll("=>", ":"));
195
- const options = this.element.querySelectorAll(OPTION_SELECTOR);
196
-
197
- options.forEach((option) => {
198
- if (
199
- defaultValue.id === JSON.parse(option.dataset.dropdownOptionLabel).id
200
- ) {
201
- option.classList.add("pb_dropdown_option_selected");
202
- }
203
- });
204
-
205
- this.setTriggerElementText(defaultValue.label);
206
-
207
- hiddenInput.value = defaultValue.id;
208
- }
209
- }
210
-
211
- handleFormReset() {
212
- const form = this.element.closest("form");
213
-
214
- if (form) {
215
- form.addEventListener("reset", () => {
216
- this.resetDropdownValue();
217
- });
218
- }
219
- }
220
-
221
- resetDropdownValue() {
222
- const hiddenInput = this.element.querySelector(DROPDOWN_INPUT);
223
- const options = this.element.querySelectorAll(OPTION_SELECTOR);
224
- options.forEach((option) => {
225
- option.classList.remove("pb_dropdown_option_selected");
226
- });
227
-
228
- hiddenInput.value = "";
229
-
230
- const defaultPlaceholder = this.element.querySelector(DROPDOWN_PLACEHOLDER);
231
- this.setTriggerElementText(defaultPlaceholder.dataset.dropdownPlaceholder);
232
- }
233
-
234
- setTriggerElementText(text) {
235
- const triggerElement = this.element.querySelector(DROPDOWN_TRIGGER_DISPLAY);
236
- if (triggerElement) {
237
- triggerElement.textContent = text;
238
- }
239
- }
240
182
  }
@@ -8,7 +8,6 @@ $selector: ".pb_form_pill";
8
8
  $pb_form_pill_height: 37px;
9
9
  $form_pill_colors: (
10
10
  primary: map-get($status_color_text, "primary"),
11
- neutral: map-get($status_color_text, "neutral"),
12
11
  );
13
12
 
14
13
 
@@ -24,71 +23,34 @@ $form_pill_colors: (
24
23
  cursor: pointer;
25
24
  @each $color_name, $color_value in $form_pill_colors {
26
25
  &[class*=_#{$color_name}] {
27
- background-color: mix($color_value, $card_light, 10%);
28
- @if ($color_name == "neutral") {
29
- background-color: $white;
30
- border: 1px solid $border_light;
31
- }
26
+ background-color: rgba($color_value, $opacity-1);
32
27
  transition: background-color 0.2s ease;
33
28
  box-shadow: none;
34
29
  @media (hover:hover) {
35
30
  &:hover {
36
- background-color: mix($color_value, $card_light, 20%);
37
- @if ($color_name == "neutral") {
38
- background-color: mix($neutral, $card_light, 20%);
39
- border: 1px solid $border_light;
40
- }
41
- }
42
- &:active {
43
- background-color: mix($color_value, $card_light, 30%);
44
- @if ($color_name == "neutral") {
45
- background-color: mix($neutral, $card_light, 30%);
46
- }
31
+ background-color: rgba($color_value, $opacity-2);
47
32
  }
48
33
  }
49
34
  #{$selector}_text {
50
35
  color: $color_value;
51
- @if ($color_name == "neutral") {
52
- color: $text_lt_default;
53
- }
54
36
  padding-left: $space-sm;
55
- padding-right: $space-sm/2;
37
+ padding-right: $space-sm/4;
56
38
  }
57
39
  #{$selector}_close {
58
40
  color: $color_value;
59
- padding-left: $space-sm/4;
41
+ padding-left: $space-sm/2;
60
42
  padding-right: $space-sm/4;
61
43
  display: flex;
62
44
  align-items: center;
63
- // I had to temporarily change height to 27px so new hover state darker background forms a circle not an oval
64
- // before size change (ticket 2 of 4) - change back to 100% when $pb_form_pill_height changed to 27px from 37px
65
- height: 27px;
66
- border-radius: 70px;
45
+ height: 100%;
67
46
  cursor: pointer;
68
- &:hover {
69
- background-color: mix($color_value, $card_light, 40%);
70
- @if ($color_name == "neutral") {
71
- background-color: mix($neutral, $card_light, 60%);
72
- }
73
- }
74
47
  }
75
48
  #{$selector}_tag {
76
49
  color: $color_value;
77
50
  padding-left: $space-sm;
78
- @if ($color_name == "neutral") {
79
- color: $text_lt_default;
80
- }
81
51
  }
82
52
  }
83
53
  }
84
- &:focus {
85
- outline: $primary solid 2px;
86
- outline-offset: -1px;
87
- }
88
- &:focus-visible {
89
- outline: $primary solid 2px;
90
- outline-offset: -1px;
91
- }
92
54
  &.small {
93
55
  height: fit-content;
94
56
  height: -moz-fit-content;
@@ -108,71 +70,6 @@ $form_pill_colors: (
108
70
  &::before { line-height: 21px; }
109
71
  }
110
72
  }
111
- &.dark {
112
- @each $color_name, $color_value in $form_pill_colors {
113
- // In dark mode, the base patterns below are needed for the next tickets for success, warning, error, info.
114
- // Primary and Neutral are exceptions to the general rule in the handoff
115
- &[class*=_#{$color_name}] {
116
- // background-color: mix($color_value, $card_dark, 10%);
117
- // .pb_form_pill_tag {
118
- // color: $color_name;
119
- // }
120
- // .pb_form_pill_close {
121
- // color: $color_name;
122
- // &:hover {
123
- // background-color: mix($color_value, $card_dark, 40%);
124
- // }
125
- // }
126
- // &:hover {
127
- // background-color: mix($color_value, $card_dark, 20%);
128
- // }
129
- // &:active {
130
- // background-color: mix($color_value, $card_dark, 30%);
131
- // }
132
- @if ($color_name == "neutral") {
133
- background-color: transparent;
134
- border: 1px solid $border_dark;
135
- .pb_form_pill_text, .pb_form_pill_tag {
136
- color: $text_dk_default;
137
- }
138
- .pb_form_pill_close {
139
- color: $text_dk_default;
140
- &:hover {
141
- background-color: mix($neutral, $card_dark, 40%);
142
- }
143
- }
144
- &:hover {
145
- background-color: mix($white, $card_dark, 10%);
146
- }
147
- &:active {
148
- background-color: mix($white, $card_dark, 20%);
149
- }
150
- &:focus {
151
- border: 1px solid $primary;
152
- }
153
- }
154
- @if ($color_name == "primary") {
155
- background-color: mix($active_dark, $card_dark, 10%);
156
- .pb_form_pill_text, .pb_form_pill_tag {
157
- color: $active_dark;
158
- }
159
- .pb_form_pill_close {
160
- color: $active_dark;
161
- &:hover {
162
- background-color: mix($active_dark, $card_dark, 40%);
163
- }
164
- }
165
- &:hover {
166
- background-color: mix($active_dark, $card_dark, 20px);
167
- }
168
- &:active {
169
- background-color: mix($active_dark, $card_dark, 30%);
170
- }
171
- }
172
- }
173
- }
174
- }
175
-
176
73
  &[class*=lowercase] {
177
74
  text-transform: lowercase;
178
75
  }
@@ -5,7 +5,7 @@ import Title from '../pb_title/_title'
5
5
  import Icon from '../pb_icon/_icon'
6
6
  import Avatar from '../pb_avatar/_avatar'
7
7
  import { globalProps, GlobalProps } from '../utilities/globalProps'
8
- import { buildDataProps, buildHtmlProps } from '../utilities/props'
8
+ import { buildHtmlProps } from '../utilities/props'
9
9
 
10
10
  type FormPillProps = {
11
11
  className?: string,
@@ -18,9 +18,6 @@ type FormPillProps = {
18
18
  avatarUrl?: string,
19
19
  size?: string,
20
20
  textTransform?: 'none' | 'lowercase',
21
- color?: "primary" | "neutral",
22
- data?: {[key: string]: string},
23
- tabIndex?: number,
24
21
  closeProps?: {
25
22
  onClick?: React.MouseEventHandler<HTMLSpanElement>,
26
23
  onMouseDown?: React.MouseEventHandler<HTMLSpanElement>,
@@ -39,26 +36,20 @@ const FormPill = (props: FormPillProps): React.ReactElement => {
39
36
  closeProps = {},
40
37
  size = '',
41
38
  textTransform = 'none',
42
- color = "primary",
43
- data = {},
44
- tabIndex,
45
39
  } = props
46
40
  const css = classnames(
47
- `pb_form_pill_kit_${color}`,
41
+ `pb_form_pill_kit_${'primary'}`,
48
42
  globalProps(props),
49
43
  className,
50
44
  size === 'small' ? 'small' : null,
51
45
  textTransform,
52
46
  )
53
47
 
54
- const dataProps = buildDataProps(data)
55
48
  const htmlProps = buildHtmlProps(htmlOptions)
56
49
 
57
50
  return (
58
51
  <div className={css}
59
52
  id={id}
60
- tabIndex={tabIndex}
61
- {...dataProps}
62
53
  {...htmlProps}
63
54
  >
64
55
  {name &&
@@ -1,5 +1 @@
1
- <%= pb_rails("form_pill", props: {
2
- text_transform: "lowercase" ,
3
- text: "THIS IS A TAG",
4
- tabindex: 0,
5
- }) %>
1
+ <%= pb_rails("form_pill", props: { text_transform: "lowercase" , text: "THIS IS A TAG" }) %>
@@ -6,7 +6,6 @@ const FormPillExample = (props) => {
6
6
  <div>
7
7
  <FormPill
8
8
  onClick={() => alert('Click!')}
9
- tabIndex={0}
10
9
  text="THIS IS A TAG"
11
10
  textTransform="lowercase"
12
11
  {...props}
@@ -2,7 +2,6 @@
2
2
  name: "Anna Black",
3
3
  avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
4
4
  size: "small",
5
- tabindex: 0,
6
5
  }) %>
7
6
 
8
7
  <br />
@@ -11,5 +10,4 @@
11
10
  <%= pb_rails("form_pill", props: {
12
11
  name: "Anna Black",
13
12
  size: "small",
14
- tabindex: 0,
15
13
  }) %>
@@ -9,7 +9,6 @@ const FormPillSize = (props) => {
9
9
  avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
10
10
  name="Anna Black"
11
11
  size="small"
12
- tabIndex={0}
13
12
  {...props}
14
13
  />
15
14
  <br />
@@ -17,7 +16,6 @@ const FormPillSize = (props) => {
17
16
  <FormPill
18
17
  name="Anna Black"
19
18
  size="small"
20
- tabIndex={0}
21
19
  {...props}
22
20
  />
23
21
  </div>
@@ -1,4 +1 @@
1
- <%= pb_rails("form_pill", props: {
2
- text: "this is a tag",
3
- tabindex: 0,
4
- }) %>
1
+ <%= pb_rails("form_pill", props: { text: "this is a tag" }) %>
@@ -6,9 +6,8 @@ const FormPillDefault = (props) => {
6
6
  <div>
7
7
  <FormPill
8
8
  onClick={() => {
9
- alert('Click!')
10
- }}
11
- tabIndex={0}
9
+ alert('Click!')
10
+ }}
12
11
  text="this is a tag"
13
12
  {...props}
14
13
  />
@@ -1,7 +1,6 @@
1
1
  <%= pb_rails("form_pill", props: {
2
2
  name: "Anna Black",
3
3
  avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
4
- tabindex: 0,
5
4
  }) %>
6
5
 
7
6
  <br />
@@ -9,5 +8,4 @@
9
8
 
10
9
  <%= pb_rails("form_pill", props: {
11
10
  name: "Anna Black",
12
- tabindex: 0,
13
11
  }) %>
@@ -9,7 +9,6 @@ const FormPillDefault = (props) => {
9
9
  avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
10
10
  name="Anna Black"
11
11
  onClick={() => alert('Click!')}
12
- tabIndex={0}
13
12
  {...props}
14
13
  />
15
14
  <br />
@@ -17,7 +16,6 @@ const FormPillDefault = (props) => {
17
16
  <FormPill
18
17
  name="Anna Black"
19
18
  onClick={() => alert('Click!')}
20
- tabIndex={0}
21
19
  {...props}
22
20
  />
23
21
  </div>
@@ -1,4 +1,4 @@
1
- <%= content_tag(:div, id: object.id, data: object.data, class: object.classname + object.size_class, tabindex: object.tabindex, **combined_html_options) do %>
1
+ <%= content_tag(:div, id: object.id, data: object.data, class: object.classname + object.size_class, **combined_html_options) do %>
2
2
  <% if object.name.present? %>
3
3
  <%= pb_rails("avatar", props: { name: object.name, image_url: object.avatar_url, size: "xs" }) %>
4
4
  <%= pb_rails("title", props: { text: object.name, size: 4, classname: "pb_form_pill_text" }) %>
@@ -11,13 +11,9 @@ module Playbook
11
11
  prop :text_transform, type: Playbook::Props::Enum,
12
12
  values: %w[none lowercase],
13
13
  default: "none"
14
- prop :color, type: Playbook::Props::Enum,
15
- values: %w[primary neutral],
16
- default: "primary"
17
- prop :tabindex
18
14
 
19
15
  def classname
20
- generate_classname("pb_form_pill_kit", color, name, text, text_transform)
16
+ generate_classname("pb_form_pill_kit", "primary", name, text, text_transform)
21
17
  end
22
18
 
23
19
  def display_text