playbook_ui 14.8.0.pre.alpha.PLAY1680newwidthprop4661 → 14.8.0.pre.alpha.PLAY16254545
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/_playbook.scss +0 -2
- data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +2 -2
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +4 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +7 -84
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +0 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +1 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +4 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +12 -63
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +1 -2
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.html.erb +0 -47
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.jsx +0 -59
- data/app/pb_kits/playbook/pb_typeahead/index.ts +3 -29
- data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -5
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +0 -4
- data/app/pb_kits/playbook/utilities/_max_width.scss +9 -29
- data/app/pb_kits/playbook/utilities/_min_width.scss +2 -6
- data/app/pb_kits/playbook/utilities/globalPropNames.mjs +1 -1
- data/app/pb_kits/playbook/utilities/globalProps.ts +4 -37
- data/dist/chunks/{_typeahead-Bg7nPSBj.js → _typeahead-D0PihN_3.js} +2 -2
- data/dist/chunks/{_weekday_stacked-9V0rzCNn.js → _weekday_stacked-uMIX8f-A.js} +1 -1
- data/dist/chunks/{lib-SyD3buPZ.js → lib-BC6ESsxG.js} +1 -1
- data/dist/chunks/{pb_form_validation-Dt8UJgrJ.js → pb_form_validation-B_Z9rEbg.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +0 -321
- 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/classnames.rb +0 -4
- data/lib/playbook/forms/builder/typeahead_field.rb +0 -13
- data/lib/playbook/kit_base.rb +1 -16
- data/lib/playbook/spacing.rb +0 -21
- data/lib/playbook/version.rb +1 -1
- metadata +6 -13
- data/app/pb_kits/playbook/tokens/_height.scss +0 -19
- data/app/pb_kits/playbook/tokens/exports/_height.module.scss +0 -37
- data/app/pb_kits/playbook/utilities/_height.scss +0 -33
- data/app/pb_kits/playbook/utilities/_width.scss +0 -45
- data/lib/playbook/height.rb +0 -29
- data/lib/playbook/max_height.rb +0 -29
- data/lib/playbook/min_height.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b2b5ad03216b06c9f37e1792a0b208efbfd3d44b79f73696e1a3b006f89228c
|
4
|
+
data.tar.gz: 282f44cd7aee29b4bc0ca84396be2a914a3786e91c8b308c5e7f284b84d4d74c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
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
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
+
}) %>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
%>
|
24
24
|
|
25
25
|
<%= pb_form_with(scope: :example, url: "", method: :get) do |form| %>
|
26
|
-
<%= form.typeahead :
|
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=
|
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 :
|
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.
|
26
|
-
<%= form.
|
27
|
-
<%= form.
|
28
|
-
<%= form.
|
29
|
-
<%= form.
|
30
|
-
<%= form.
|
31
|
-
<%= form.
|
32
|
-
<%= form.
|
33
|
-
<%= form.
|
34
|
-
<%= form.
|
35
|
-
<%= form.
|
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 :
|
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 %>
|
@@ -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:
|
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
|
-
|
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
|
-
|
2
|
-
|
1
|
+
.max_width_xs {
|
2
|
+
max-width: 360px;
|
3
|
+
}
|
3
4
|
.max_width_0 {
|
4
|
-
max-width:
|
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:
|
12
|
+
max-width: 540px;
|
25
13
|
}
|
26
14
|
|
27
15
|
.max_width_md {
|
28
|
-
max-width:
|
16
|
+
max-width: 720px;
|
29
17
|
}
|
30
18
|
|
31
19
|
.max_width_lg {
|
32
|
-
max-width:
|
20
|
+
max-width: 960px;
|
33
21
|
}
|
34
22
|
|
35
23
|
.max_width_xl {
|
36
|
-
max-width:
|
24
|
+
max-width: 1140px;
|
37
25
|
}
|
38
26
|
|
39
27
|
.max_width_xxl {
|
40
|
-
max-width:
|
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
|
-
.
|
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
|
-
.
|
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",
|