playbook_ui 14.8.0.pre.alpha.PLAY1680newwidthprop4661 → 14.8.0.pre.alpha.PLAY16254545

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -2
  3. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +2 -2
  4. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +4 -0
  5. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +7 -84
  6. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +0 -1
  7. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +1 -0
  8. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +4 -0
  9. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
  10. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +1 -1
  11. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +12 -63
  12. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +1 -2
  13. data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.html.erb +0 -47
  14. data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.jsx +0 -59
  15. data/app/pb_kits/playbook/pb_typeahead/index.ts +3 -29
  16. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -5
  17. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +0 -4
  18. data/app/pb_kits/playbook/utilities/_max_width.scss +9 -29
  19. data/app/pb_kits/playbook/utilities/_min_width.scss +2 -6
  20. data/app/pb_kits/playbook/utilities/globalPropNames.mjs +1 -1
  21. data/app/pb_kits/playbook/utilities/globalProps.ts +4 -37
  22. data/dist/chunks/{_typeahead-Bg7nPSBj.js → _typeahead-D0PihN_3.js} +2 -2
  23. data/dist/chunks/{_weekday_stacked-9V0rzCNn.js → _weekday_stacked-uMIX8f-A.js} +1 -1
  24. data/dist/chunks/{lib-SyD3buPZ.js → lib-BC6ESsxG.js} +1 -1
  25. data/dist/chunks/{pb_form_validation-Dt8UJgrJ.js → pb_form_validation-B_Z9rEbg.js} +1 -1
  26. data/dist/chunks/vendor.js +1 -1
  27. data/dist/menu.yml +0 -321
  28. data/dist/playbook-doc.js +1 -1
  29. data/dist/playbook-rails-react-bindings.js +1 -1
  30. data/dist/playbook-rails.js +1 -1
  31. data/dist/playbook.css +1 -1
  32. data/lib/playbook/classnames.rb +0 -4
  33. data/lib/playbook/forms/builder/typeahead_field.rb +0 -13
  34. data/lib/playbook/kit_base.rb +1 -16
  35. data/lib/playbook/spacing.rb +0 -21
  36. data/lib/playbook/version.rb +1 -1
  37. metadata +6 -13
  38. data/app/pb_kits/playbook/tokens/_height.scss +0 -19
  39. data/app/pb_kits/playbook/tokens/exports/_height.module.scss +0 -37
  40. data/app/pb_kits/playbook/utilities/_height.scss +0 -33
  41. data/app/pb_kits/playbook/utilities/_width.scss +0 -45
  42. data/lib/playbook/height.rb +0 -29
  43. data/lib/playbook/max_height.rb +0 -29
  44. data/lib/playbook/min_height.rb +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 470ceb2308e2f5f036f019c0ae83adb3446f845a4e83f75560b0a2d6b1bec89b
4
- data.tar.gz: 0a443da489c1d1242379a99ec020a709e4f24e03b1c65b148aefb50d91f06bc1
3
+ metadata.gz: 0b2b5ad03216b06c9f37e1792a0b208efbfd3d44b79f73696e1a3b006f89228c
4
+ data.tar.gz: 282f44cd7aee29b4bc0ca84396be2a914a3786e91c8b308c5e7f284b84d4d74c
5
5
  SHA512:
6
- metadata.gz: a9fc193798b1eff208434da829db369218807400c99f6b3b601282b3f3a4ad10107ffb75ac93a647aa0bf92fa4d2c1692d987bd183500bbcd0fe105ddd18df8b
7
- data.tar.gz: 58cc3188841d723a6d402b79b9c964bda66d33a88db3c90c1fa0753fcf220af9bb4e0850603519c4558eac64b98528024b544babab98f1ecd9efc5c10eb8e04a
6
+ metadata.gz: 0b14587326a80d3f8a7663ab14df6c51720aae8ad3a3492370dd853a956292a7b80901b2782e6ea04fbdb37b38d7810490234b4396bc9c891158432c208578f4
7
+ data.tar.gz: a1f50ae88764cf79258478662bd9cd294b394d8c3cbd3c96580045ba2a5a67c3d924d9ee0170daf134ca9400078c4709c18dff06ea98927392f412343b5d7216
@@ -111,7 +111,6 @@
111
111
  @import 'utilities/mixins';
112
112
  @import 'utilities/spacing';
113
113
  @import 'utilities/cursor';
114
- @import 'utilities/width';
115
114
  @import 'utilities/min_width';
116
115
  @import 'utilities/max_width';
117
116
  @import 'utilities/positioning';
@@ -127,4 +126,3 @@
127
126
  @import 'utilities/overflow';
128
127
  @import 'utilities/truncate';
129
128
  @import 'utilities/vertical_align';
130
- @import 'utilities/height';
@@ -6,12 +6,12 @@
6
6
  ) do %>
7
7
  <%= content.presence || object.input %>
8
8
  <% if object.indeterminate %>
9
- <span data-pb-checkbox-icon-span="true" class="pb_checkbox_indeterminate">
9
+ <span class="pb_checkbox_indeterminate">
10
10
  <%= pb_rails("icon", props: { icon: "minus", classname: "indeterminate_icon", fixed_width: true}) %>
11
11
  <%= pb_rails("icon", props: { icon: "check", classname: "check_icon hidden", fixed_width: true}) %>
12
12
  </span>
13
13
  <% else %>
14
- <span data-pb-checkbox-icon-span="true" class="pb_checkbox_checkmark">
14
+ <span class="pb_checkbox_checkmark">
15
15
  <%= pb_rails("icon", props: { icon: "check", classname: "check_icon", fixed_width: true}) %>
16
16
  <%= pb_rails("icon", props: { icon: "minus", classname: "indeterminate_icon hidden", fixed_width: true}) %>
17
17
  </span>
@@ -18,6 +18,10 @@ module Playbook
18
18
  prop :form_spacing, type: Playbook::Props::Boolean,
19
19
  default: false
20
20
 
21
+ def checked_html
22
+ checked ? "checked='true'" : nil
23
+ end
24
+
21
25
  def classname
22
26
  generate_classname("pb_checkbox_kit", checked_class) + indeterminate_class + error_class
23
27
  end
@@ -1,84 +1,7 @@
1
- <% checkboxes = [
2
- { name: 'Coffee', id: 'coffee', checked: false },
3
- { name: 'Ice Cream', id: 'ice-cream', checked: false },
4
- { name: 'Chocolate', id: 'chocolate', checked: true }
5
- ] %>
6
-
7
- <%= pb_rails("table", props: { container: false, size: "md" }) do %>
8
- <thead>
9
- <tr>
10
- <th>
11
- <%= pb_rails("checkbox", props: {
12
- checked: true,
13
- text: "Uncheck All",
14
- value: "checkbox-value",
15
- name: "main-checkbox",
16
- indeterminate: true,
17
- id: "indeterminate-checkbox"
18
- }) %>
19
- </th>
20
- </tr>
21
- </thead>
22
-
23
- <tbody>
24
- <% checkboxes.each do |checkbox| %>
25
- <tr>
26
- <td>
27
- <%= pb_rails("checkbox", props: {
28
- checked: checkbox[:checked],
29
- text: checkbox[:name],
30
- value: checkbox[:id],
31
- name: "#{checkbox[:id]}-indeterminate-checkbox",
32
- id: "#{checkbox[:id]}-indeterminate-checkbox",
33
- }) %>
34
- </td>
35
- </tr>
36
- <% end %>
37
- </tbody>
38
- <% end %>
39
-
40
- <script>
41
- document.addEventListener('DOMContentLoaded', function() {
42
- const mainCheckboxWrapper = document.getElementById('indeterminate-checkbox');
43
- const mainCheckbox = document.getElementsByName("main-checkbox")[0];
44
- const childCheckboxes = document.querySelectorAll('input[type="checkbox"][id$="indeterminate-checkbox"]');
45
-
46
- const updateMainCheckbox = () => {
47
- // Count the number of checked child checkboxes
48
- const checkedCount = Array.from(childCheckboxes).filter(cb => cb.checked).length;
49
- // Determine if the main checkbox should be in an indeterminate state
50
- const indeterminate = checkedCount > 0 && checkedCount < childCheckboxes.length;
51
-
52
- // Set the main checkbox states
53
- mainCheckbox.indeterminate = indeterminate;
54
- mainCheckbox.checked = checkedCount > 0;
55
-
56
- // Determine the main checkbox label based on the number of checked checkboxes
57
- const text = checkedCount === 0 ? 'Check All' : 'Uncheck All';
58
-
59
- // Determine the icon class to add and remove based on the number of checked checkboxes
60
- const iconClassToAdd = checkedCount === 0 ? 'pb_checkbox_checkmark' : 'pb_checkbox_indeterminate';
61
- const iconClassToRemove = checkedCount === 0 ? 'pb_checkbox_indeterminate' : 'pb_checkbox_checkmark';
62
-
63
- // Update main checkbox label
64
- mainCheckboxWrapper.getElementsByClassName('pb_body_kit')[0].textContent = text;
65
-
66
- // Add and remove the icon class to the main checkbox wrapper
67
- mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.add(iconClassToAdd);
68
- mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.remove(iconClassToRemove);
69
-
70
- // Toggle the visibility of the checkbox icon based on the indeterminate state
71
- mainCheckboxWrapper.getElementsByClassName("indeterminate_icon")[0].classList.toggle('hidden', !indeterminate);
72
- mainCheckboxWrapper.getElementsByClassName("check_icon")[0].classList.toggle('hidden', indeterminate);
73
- };
74
-
75
- mainCheckbox.addEventListener('change', function() {
76
- childCheckboxes.forEach(cb => cb.checked = this.checked);
77
- updateMainCheckbox();
78
- });
79
-
80
- childCheckboxes.forEach(cb => {
81
- cb.addEventListener('change', updateMainCheckbox);
82
- });
83
- });
84
- </script>
1
+ <%= pb_rails("checkbox" , props: {
2
+ text: "Select ",
3
+ value: "checkbox-value",
4
+ name: "main",
5
+ indeterminate: true,
6
+ id: "test-indeterminate-js"
7
+ }) %>
@@ -53,7 +53,6 @@
53
53
  }
54
54
 
55
55
  .pb_dropdown_container {
56
- position: absolute;
57
56
  background-color: $white;
58
57
  overflow: hidden;
59
58
  box-shadow: $shadow_deep;
@@ -3,6 +3,7 @@
3
3
  class: object.classname,
4
4
  data: object.data,
5
5
  id: object.id,
6
+ style: object.container_style,
6
7
  **combined_html_options) do %>
7
8
  <%= pb_rails("list", props: {ordered: false, borderless: false}) do %>
8
9
  <% if content.present? %>
@@ -7,6 +7,10 @@ module Playbook
7
7
  generate_classname("pb_dropdown_container", "close", separator: " ")
8
8
  end
9
9
 
10
+ def container_style
11
+ "position: absolute"
12
+ end
13
+
10
14
  def data
11
15
  Hash(prop(:data)).merge(dropdown_container: true)
12
16
  end
@@ -23,7 +23,7 @@
23
23
  %>
24
24
 
25
25
  <%= pb_form_with(scope: :example, url: "", method: :get) do |form| %>
26
- <%= form.typeahead :example_typeahead, props: { data: { typeahead_example1: true, user: {} }, label: true, placeholder: "Search for a user" } %>
26
+ <%= form.typeahead :example_user, props: { data: { typeahead_example1: true, user: {} }, placeholder: "Search for a user" } %>
27
27
  <%= form.text_field :example_text_field, props: { label: true } %>
28
28
  <%= form.phone_number_field :example_phone_number_field, props: { label: "Example phone field" } %>
29
29
  <%= form.email_field :example_email_field, props: { label: true } %>
@@ -92,7 +92,7 @@
92
92
  const selectedUserData = JSON.parse(selectedUserJSON)
93
93
 
94
94
  // set the input field's value
95
- event.target.querySelector('input[name=example_typeahead]').value = selectedUserData.login
95
+ event.target.querySelector('input[name=example_user]').value = selectedUserData.login
96
96
 
97
97
  // log the selected option's dataset
98
98
  console.log('The selected user data:')
@@ -1,5 +1,5 @@
1
1
  <%= pb_form_with(scope: :example, url: "", method: :get, loading: true) do |form| %>
2
- <%= form.text_field :example_text_field_loading, props: { label: true } %>
2
+ <%= form.text_field :example_text_field, props: { label: true } %>
3
3
 
4
4
  <%= form.actions do |action| %>
5
5
  <%= action.submit %>
@@ -22,74 +22,23 @@
22
22
  %>
23
23
 
24
24
  <%= pb_form_with(scope: :example, method: :get, url: "", validate: true) do |form| %>
25
- <%= form.typeahead :example_typeahead_validation, props: { data: { typeahead_example2: true, user: {} }, label: true, placeholder: "Search for a user", required: true, validation: { message: "Please select a user." } } %>
26
- <%= form.text_field :example_text_field_validation, props: { label: true, required: true } %>
27
- <%= form.phone_number_field :example_phone_number_field_validation, props: { label: "Example phone field" } %>
28
- <%= form.email_field :example_email_field_validation, props: { label: true, required: true } %>
29
- <%= form.number_field :example_number_field_validation, props: { label: true, required: true } %>
30
- <%= form.search_field :example_project_number_validation, props: { label: true, required: true, validation: { pattern: "[0-9]{2}-[0-9]{5}", message: "Please enter a valid project number (example: 33-12345)." } } %>
31
- <%= form.password_field :example_password_field_validation, props: { label: true, required: true } %>
32
- <%= form.url_field :example_url_field_validation, props: { label: true, required: true } %>
33
- <%= form.text_area :example_text_area_validation, props: { label: true, required: true } %>
34
- <%= form.dropdown_field :example_dropdown_validation, props: { label: true, options: example_dropdown_options, required: true } %>
35
- <%= form.select :example_select_validation, [ ["Yes", 1], ["No", 2] ], props: { label: true, blank_selection: "Select One...", required: true } %>
36
- <%= form.collection_select :example_collection_select_validation, example_collection, :value, :name, props: { label: true, blank_selection: "Select One...", required: true } %>
25
+ <%= form.text_field :example_text_field, props: { label: true, required: true } %>
26
+ <%= form.phone_number_field :example_phone_number_field, props: { label: "Example phone field" } %>
27
+ <%= form.email_field :example_email_field, props: { label: true, required: true } %>
28
+ <%= form.number_field :example_number_field, props: { label: true, required: true } %>
29
+ <%= form.search_field :example_project_number, props: { label: true, required: true, validation: { pattern: "[0-9]{2}-[0-9]{5}", message: "Please enter a valid project number (example: 33-12345)." } } %>
30
+ <%= form.password_field :example_password_field, props: { label: true, required: true } %>
31
+ <%= form.url_field :example_url_field, props: { label: true, required: true } %>
32
+ <%= form.text_area :example_text_area, props: { label: true, required: true } %>
33
+ <%= form.dropdown_field :example_dropdown, props: { label: true, options: example_dropdown_options, required: true } %>
34
+ <%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true, blank_selection: "Select One...", required: true } %>
35
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true, blank_selection: "Select One...", required: true } %>
37
36
  <%= form.check_box :example_checkbox, props: { text: "Example Checkbox", label: true, required: true } %>
38
37
  <%= form.date_picker :example_date_picker_2, props: { label: true, required: true } %>
39
- <%= form.star_rating_field :example_star_rating_validation, props: { variant: "interactive", label: true, required: true } %>
38
+ <%= form.star_rating_field :example_star_rating, props: { variant: "interactive", label: true, required: true } %>
40
39
 
41
40
  <%= form.actions do |action| %>
42
41
  <%= action.submit %>
43
42
  <%= action.button props: { type: "reset", text: "Cancel", variant: "secondary" } %>
44
43
  <% end %>
45
44
  <% end %>
46
-
47
- <!-- form.typeahead user results example template -->
48
- <template data-typeahead-example-result-option>
49
- <%= pb_rails("user", props: {
50
- name: tag(:slot, name: "name"),
51
- orientation: "horizontal",
52
- align: "left",
53
- avatar_url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=",
54
- avatar: true
55
- }) %>
56
- </template>
57
-
58
- <!-- form.typeahead JS example implementation -->
59
- <%= javascript_tag defer: "defer" do %>
60
- document.addEventListener("pb-typeahead-kit-search", function(event) {
61
- if (!event.target.dataset || !event.target.dataset.typeaheadExample2) return
62
-
63
- fetch(`https://api.github.com/search/users?q=${encodeURIComponent(event.detail.searchingFor)}`)
64
- .then(response => response.json())
65
- .then((result) => {
66
- const resultOptionTemplate = document.querySelector("[data-typeahead-example-result-option]")
67
-
68
- event.detail.setResults((result.items || []).map((user) => {
69
- const wrapper = resultOptionTemplate.content.cloneNode(true)
70
- wrapper.children[0].dataset.user = JSON.stringify(user)
71
- wrapper.querySelector('slot[name="name"]').replaceWith(user.login)
72
- wrapper.querySelector('img').dataset.src = user.avatar_url
73
- return wrapper
74
- }))
75
- })
76
- })
77
-
78
-
79
- document.addEventListener("pb-typeahead-kit-result-option-selected", function(event) {
80
- if (!event.target.dataset.typeaheadExample2) return
81
-
82
- const selectedUserJSON = event.detail.selected.firstElementChild.dataset.user
83
- const selectedUserData = JSON.parse(selectedUserJSON)
84
-
85
- // set the input field's value
86
- event.target.querySelector('input[name=example_typeahead_validation]').value = selectedUserData.login
87
-
88
- // log the selected option's dataset
89
- console.log('The selected user data:')
90
- console.dir(selectedUserData)
91
-
92
- // do even more with the data later - TBD
93
- event.target.dataset.user = selectedUserJSON
94
- })
95
- <% end %>
@@ -6,7 +6,6 @@
6
6
  value: "selected_with_icon",
7
7
  checked: true,
8
8
  icon: true,
9
-
10
9
  }) do %>
11
10
  Selected, with icon
12
11
  <% end %>
@@ -37,4 +36,4 @@
37
36
  Disabled
38
37
  <% end %>
39
38
 
40
- </div>
39
+ </div>
@@ -41,50 +41,3 @@
41
41
  }) %>
42
42
  <% end %>
43
43
  <% end %>
44
-
45
- <br /><br /><br />
46
-
47
- <%= pb_rails("timeline", props: {orientation: "vertical", show_date: true}) do %>
48
- <%= pb_rails("timeline/item") do |item| %>
49
-
50
- <% item.label do %>
51
- <%= pb_rails("timeline/label") do %>
52
- <%= pb_rails("title", props: { text: "Any Kit", size: 4 }) %>
53
- <% end %>
54
- <% end %>
55
-
56
- <% item.step do %>
57
- <%= pb_rails("timeline/step", props: { icon: 'user', icon_color: 'royal' }) %>
58
- <% end %>
59
-
60
- <% item.detail do %>
61
- <%= pb_rails("title_detail", props: {
62
- title: "Jackson Heights",
63
- detail: "37-27 74th Street"
64
- }) %>
65
- <% end %>
66
- <% end %>
67
-
68
- <%= pb_rails("timeline/item", props: {icon: "map-marker-alt", icon_color: "purple", date: Date.today+1, line_style: "dotted" }) do |item| %>
69
- <%= pb_rails("title_detail", props: {
70
- title: "Society Hill",
71
- detail: "72 E St Astoria"
72
- }) %>
73
- <% end %>
74
-
75
- <%= pb_rails("timeline/item") do |item| %>
76
-
77
- <% item.step do %>
78
- <%= pb_rails("timeline/step") do %>
79
- <%= pb_rails("pill", props: { text: "3" , variant: "success" }) %>
80
- <% end %>
81
- <% end %>
82
-
83
- <% item.detail do %>
84
- <%= pb_rails("title_detail", props: {
85
- title: "Greenpoint",
86
- detail: "81 Gate St Brooklyn"
87
- }) %>
88
- <% end %>
89
- <% end %>
90
- <% end %>
@@ -62,65 +62,6 @@ const TimelineWithChildren = (props) => (
62
62
  </Timeline.Detail>
63
63
  </Timeline.Item>
64
64
  </Timeline>
65
-
66
- <br />
67
- <br />
68
- <br />
69
-
70
- <Timeline orientation="vertical"
71
- showDate
72
- {...props}
73
- >
74
- <Timeline.Item lineStyle="solid"
75
- {...props}
76
- >
77
- <Timeline.Label>
78
- <Title size={4}
79
- text='Any Kit'
80
- />
81
- </Timeline.Label>
82
- <Timeline.Step icon="user"
83
- iconColor="royal"
84
- />
85
- <Timeline.Detail>
86
- <TitleDetail detail="37-27 74th Street"
87
- title="Jackson Heights"
88
- {...props}
89
- />
90
- </Timeline.Detail>
91
- </Timeline.Item>
92
-
93
- <Timeline.Item lineStyle="dotted"
94
- {...props}
95
- >
96
- <Timeline.Label date={new Date(new Date().setDate(new Date().getDate() + 1))} />
97
- <Timeline.Step icon="map-marker-alt"
98
- iconColor="purple"
99
- />
100
- <Timeline.Detail>
101
- <TitleDetail detail="72 E St Astoria"
102
- title="Society Hill"
103
- {...props}
104
- />
105
- </Timeline.Detail>
106
- </Timeline.Item>
107
-
108
- <Timeline.Item lineStyle="solid"
109
- {...props}
110
- >
111
- <Timeline.Step>
112
- <Pill text="3"
113
- variant="success"
114
- />
115
- </Timeline.Step>
116
- <Timeline.Detail>
117
- <TitleDetail detail="81 Gate St Brooklyn"
118
- title="Greenpoint"
119
- {...props}
120
- />
121
- </Timeline.Detail>
122
- </Timeline.Item>
123
- </Timeline>
124
65
  </div>
125
66
  )
126
67
 
@@ -4,12 +4,11 @@ import { debounce } from 'lodash'
4
4
  export default class PbTypeahead extends PbEnhancedElement {
5
5
  _searchInput: HTMLInputElement
6
6
  _resultsElement: HTMLElement
7
- _debouncedSearch: () => void
7
+ _debouncedSearch: Function
8
8
  _resultsLoadingIndicator: HTMLElement
9
9
  _resultOptionTemplate: HTMLElement
10
10
  _resultsOptionCache: Map<string, Array<DocumentFragment>>
11
11
  _searchContext: string
12
- _validSelection: boolean
13
12
 
14
13
  static get selector() {
15
14
  return '[data-pb-typeahead-kit]'
@@ -87,9 +86,6 @@ export default class PbTypeahead extends PbEnhancedElement {
87
86
  const resultOption = (event.target as Element).closest('[data-result-option-item]')
88
87
  if (!resultOption) return
89
88
 
90
- this._validSelection = true
91
- this.removeValidationError()
92
-
93
89
  this.resultsCacheClear()
94
90
  this.searchInputClear()
95
91
  this.clearResults()
@@ -97,28 +93,6 @@ export default class PbTypeahead extends PbEnhancedElement {
97
93
  this.element.dispatchEvent(new CustomEvent('pb-typeahead-kit-result-option-selected', { bubbles: true, detail: { selected: resultOption, typeahead: this } }))
98
94
  }
99
95
 
100
- removeValidationError() {
101
- const inputWrapper = this.searchInput.closest('.text_input_wrapper')
102
- if (inputWrapper) {
103
- const errorMessage = inputWrapper.querySelector('.pb_body_kit_negative') as HTMLElement
104
- if (errorMessage) {
105
- errorMessage.style.display = 'none'
106
- }
107
- this.searchInput.classList.remove('error')
108
- }
109
- }
110
-
111
- showValidationError() {
112
- const inputWrapper = this.searchInput.closest('.text_input_wrapper')
113
- if (inputWrapper) {
114
- const errorMessage = inputWrapper.querySelector('.pb_body_kit_negative') as HTMLElement
115
- if (errorMessage) {
116
- errorMessage.style.display = 'block'
117
- }
118
- this.searchInput.classList.add('error')
119
- }
120
- }
121
-
122
96
  clearResults() {
123
97
  this.resultsElement.innerHTML = ''
124
98
  }
@@ -227,8 +201,8 @@ export default class PbTypeahead extends PbEnhancedElement {
227
201
  }
228
202
 
229
203
  toggleResultsLoadingIndicator(visible: boolean) {
230
- let visibilityProperty = '0'
204
+ var visibilityProperty = '0'
231
205
  if (visible) visibilityProperty = '1'
232
206
  this.resultsLoadingIndicator.style.opacity = visibilityProperty
233
207
  }
234
- }
208
+ }
@@ -17,14 +17,11 @@
17
17
  <%= pb_rails("text_input", props: {
18
18
  type: "search",
19
19
  input_options: object.input_options,
20
+ label: object.label,
20
21
  name: object.name,
21
22
  value: object.value,
22
23
  placeholder: object.placeholder,
23
24
  margin_bottom: "none",
24
- required: object.required,
25
- validation: object.validation,
26
- label: object.label,
27
- id: object.input_options[:id],
28
25
  }) %>
29
26
  <%= pb_rails("list", props: { ordered: false, borderless: false, xpadding: true, role: "status", aria: { live: "polite" }, data: { pb_typeahead_kit_results: true } }) do %>
30
27
  <% end %>
@@ -36,4 +33,4 @@
36
33
  <% end %>
37
34
  </template>
38
35
  <% end %>
39
- <% end %>
36
+ <% end %>
@@ -40,10 +40,6 @@ module Playbook
40
40
  prop :pill_color, type: Playbook::Props::Enum,
41
41
  values: %w[primary neutral success warning error info data_1 data_2 data_3 data_4 data_5 data_6 data_7 data_8 windows siding roofing doors gutters solar insulation accessories],
42
42
  default: "primary"
43
- prop :required, type: Playbook::Props::Boolean,
44
- default: false
45
- prop :validation, type: Playbook::Props::HashProp,
46
- default: {}
47
43
 
48
44
  def classname
49
45
  default_margin_bottom = margin_bottom.present? ? "" : " mb_sm"
@@ -1,49 +1,29 @@
1
- @import "../tokens/container";
2
-
1
+ .max_width_xs {
2
+ max-width: 360px;
3
+ }
3
4
  .max_width_0 {
4
- max-width: map-get($containers, 'none');
5
+ max-width: 0;
5
6
  }
6
-
7
7
  .max_width_none {
8
8
  max-width: none;
9
9
  }
10
10
 
11
- .max_width_0_percent {
12
- max-width: $container_0;
13
- }
14
-
15
- .max_width_xxs {
16
- max-width: $container_xxs;
17
- }
18
-
19
- .max_width_xs {
20
- max-width: $container_xs;
21
- }
22
-
23
11
  .max_width_sm {
24
- max-width: $container_sm;
12
+ max-width: 540px;
25
13
  }
26
14
 
27
15
  .max_width_md {
28
- max-width: $container_md;
16
+ max-width: 720px;
29
17
  }
30
18
 
31
19
  .max_width_lg {
32
- max-width: $container_lg;
20
+ max-width: 960px;
33
21
  }
34
22
 
35
23
  .max_width_xl {
36
- max-width: $container_xl;
24
+ max-width: 1140px;
37
25
  }
38
26
 
39
27
  .max_width_xxl {
40
- max-width: $container_xxl;
41
- }
42
-
43
- .max_width_100_percent {
44
- max-width: $container_100;
45
- }
46
-
47
- .width-resize {
48
- resize: horizontal;
28
+ max-width: 1320px;
49
29
  }
@@ -4,11 +4,7 @@
4
4
  min-width: map-get($containers, 'none');
5
5
  }
6
6
 
7
- .min_width_none {
8
- min-width: none;
9
- }
10
-
11
- .min_width_0_percent {
7
+ .min_with_0_percent {
12
8
  min-width: $container_0;
13
9
  }
14
10
 
@@ -44,6 +40,6 @@
44
40
  min-width: $container_100;
45
41
  }
46
42
 
47
- .width-resize {
43
+ .minwidth-resize {
48
44
  resize: horizontal;
49
45
  }
@@ -7,6 +7,7 @@ export default [
7
7
  "right",
8
8
  "top",
9
9
  "hover",
10
+ "groupHover",
10
11
  "zIndex",
11
12
  "verticalAlign",
12
13
  "truncate",
@@ -29,7 +30,6 @@ export default [
29
30
  "numberSpacing",
30
31
  "maxWidth",
31
32
  "minWidth",
32
- "width",
33
33
  "marginRight",
34
34
  "marginLeft",
35
35
  "marginTop",