playbook_ui 15.6.0.pre.alpha.play266913088 → 15.6.0.pre.rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +2 -3
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +0 -4
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +0 -95
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +5 -11
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +1 -7
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +163 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +190 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +1 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -3
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +0 -57
- data/app/pb_kits/playbook/pb_background/_background.tsx +6 -6
- data/app/pb_kits/playbook/pb_background/background.test.js +1 -5
- data/app/pb_kits/playbook/pb_background/docs/_background_light.html.erb +1 -1
- data/app/pb_kits/playbook/pb_background/docs/_background_light.jsx +1 -0
- data/app/pb_kits/playbook/pb_background/docs/example.yml +2 -2
- data/app/pb_kits/playbook/pb_card/docs/_card_header.md +1 -1
- data/app/pb_kits/playbook/pb_card/docs/_card_highlight.md +1 -1
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +2 -2
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleIcon.tsx +8 -10
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +1 -0
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_state.jsx +3 -0
- data/app/pb_kits/playbook/pb_contact/_contact.tsx +24 -51
- data/app/pb_kits/playbook/pb_contact/contact.html.erb +19 -53
- data/app/pb_kits/playbook/pb_contact/contact.rb +1 -11
- data/app/pb_kits/playbook/pb_contact/contact.test.js +0 -76
- data/app/pb_kits/playbook/pb_contact/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_contact/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +0 -24
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +7 -197
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.html.erb +14 -23
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.md +1 -1
- data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +1 -2
- data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dialog/dialog.rb +0 -1
- data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +0 -14
- data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +4 -5
- data/app/pb_kits/playbook/pb_dialog/dialog_header.rb +0 -2
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.html.erb +0 -31
- data/app/pb_kits/playbook/pb_dialog/docs/example.yml +0 -4
- data/app/pb_kits/playbook/pb_dialog/docs/index.js +1 -3
- data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.md +1 -1
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +7 -458
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +3 -8
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +2 -3
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +1 -77
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +5 -7
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +1 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +0 -5
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +0 -4
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +5 -39
- data/app/pb_kits/playbook/pb_dropdown/index.js +3 -171
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +4 -4
- data/app/pb_kits/playbook/pb_filter/Filter/FilterBackground.tsx +3 -3
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +22 -34
- data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +12 -16
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/none_emphasis.html.erb +12 -16
- data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +12 -16
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +0 -10
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +15 -66
- data/app/pb_kits/playbook/pb_multiple_users/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_multiple_users/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_multiple_users/multiple_users.test.js +0 -25
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +10 -44
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.html.erb +4 -34
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.jsx +7 -16
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error.md +1 -1
- data/app/pb_kits/playbook/pb_select/_select.tsx +3 -8
- data/app/pb_kits/playbook/pb_select/docs/_select_error.md +1 -1
- data/app/pb_kits/playbook/pb_select/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_select/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_select/select.html.erb +2 -2
- data/app/pb_kits/playbook/pb_select/select.rb +1 -3
- data/app/pb_kits/playbook/pb_select/select.test.js +0 -23
- data/app/pb_kits/playbook/pb_table/_table.tsx +33 -187
- data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -4
- data/app/pb_kits/playbook/pb_table/docs/index.js +0 -2
- data/app/pb_kits/playbook/pb_table/table.html.erb +12 -68
- data/app/pb_kits/playbook/pb_table/table.rb +3 -22
- data/app/pb_kits/playbook/pb_table/table.test.js +0 -143
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.md +1 -1
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.md +1 -1
- data/app/pb_kits/playbook/pb_timeline/_item.tsx +0 -3
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_date.md +1 -1
- data/app/pb_kits/playbook/pb_timeline/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_timeline/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_timeline/item.html.erb +1 -1
- data/app/pb_kits/playbook/pb_timeline/item.rb +0 -2
- data/app/pb_kits/playbook/pb_timeline/label.html.erb +1 -2
- data/app/pb_kits/playbook/pb_timeline/label.rb +0 -2
- data/app/pb_kits/playbook/pb_timeline/subcomponents/Label.tsx +0 -3
- data/app/pb_kits/playbook/pb_timeline/timeline.test.js +0 -51
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +0 -15
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +0 -3
- data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +2 -13
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -6
- data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +7 -34
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -6
- data/app/pb_kits/playbook/tokens/_colors.scss +1 -2
- data/dist/chunks/_typeahead-kRdz5zPn.js +6 -0
- data/dist/chunks/lib-CgpqUb6l.js +29 -0
- data/dist/chunks/vendor.js +3 -3
- data/dist/menu.yml +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/forms/builder/collection_select_field.rb +1 -9
- data/lib/playbook/forms/builder/select_field.rb +1 -9
- data/lib/playbook/forms/builder/time_zone_select_field.rb +1 -9
- data/lib/playbook/pb_kit_helper.rb +0 -35
- data/lib/playbook/version.rb +2 -2
- metadata +4 -54
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_colors_rails.html.erb +0 -43
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_colors_rails.md +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.jsx +0 -54
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.md +0 -9
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.jsx +0 -80
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.md +0 -3
- data/app/pb_kits/playbook/pb_background/docs/_background_light.md +0 -1
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled.html.erb +0 -33
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled.jsx +0 -46
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled_rails.md +0 -2
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled_react.md +0 -2
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.html.erb +0 -24
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.jsx +0 -60
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.md +0 -3
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible.html.erb +0 -71
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible.jsx +0 -57
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible_rails.md +0 -1
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible_react.md +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.jsx +0 -180
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.md +0 -22
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_default_dates.html.erb +0 -19
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_rails.html.erb +0 -12
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_rails.md +0 -26
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end_rails.html.erb +0 -19
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end_rails.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_default_rails.html.erb +0 -30
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_default_rails.md +0 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_rails.html.erb +0 -29
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_rails.md +0 -13
- data/app/pb_kits/playbook/pb_dropdown/quickpick_helper.rb +0 -75
- data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.jsx +0 -42
- data/app/pb_kits/playbook/pb_multiple_users/docs/_multiple_users_with_tooltip.md +0 -1
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.html.erb +0 -16
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.jsx +0 -30
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.md +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.jsx +0 -134
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.md +0 -34
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.html.erb +0 -101
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md +0 -33
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.jsx +0 -180
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.md +0 -3
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.html.erb +0 -122
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.md +0 -3
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.html.erb +0 -60
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.jsx +0 -118
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.md +0 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.html.erb +0 -30
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.jsx +0 -37
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_input_display.md +0 -3
- data/app/pb_kits/playbook/utilities/deprecated.ts +0 -73
- data/dist/chunks/_typeahead-CbjBmIDu.js +0 -6
- data/dist/chunks/lib-DxDBrGZX.js +0 -29
|
@@ -119,59 +119,6 @@ module Playbook
|
|
|
119
119
|
end
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
# Get header background color from column styling
|
|
123
|
-
def header_background_color(cell)
|
|
124
|
-
original_def = find_original_column_def_for_cell(cell)
|
|
125
|
-
return nil unless original_def
|
|
126
|
-
|
|
127
|
-
original_def.dig(:column_styling, :header_background_color)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Get header font color from column styling
|
|
131
|
-
def header_font_color(cell)
|
|
132
|
-
original_def = find_original_column_def_for_cell(cell)
|
|
133
|
-
return nil unless original_def
|
|
134
|
-
|
|
135
|
-
original_def.dig(:column_styling, :header_font_color)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Check if header has custom background color
|
|
139
|
-
def has_custom_header_background_color?(cell)
|
|
140
|
-
cell[:header_background_color].present?
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Returns component info for header cell (uses background kit if custom bg color)
|
|
144
|
-
def header_component_info(cell, cell_index, row_index)
|
|
145
|
-
header_id = cell[:accessor].present? ? cell[:accessor] : "header_#{row_index}_#{cell_index}"
|
|
146
|
-
classname = [th_classname(is_first_column: cell_index.zero?), ("last-header-cell" if cell[:is_last_in_group] && cell_index != 0)].compact.join(" ")
|
|
147
|
-
|
|
148
|
-
if has_custom_header_background_color?(cell)
|
|
149
|
-
component_name = "background"
|
|
150
|
-
component_props = {
|
|
151
|
-
background_color: cell[:header_background_color],
|
|
152
|
-
tag: "th",
|
|
153
|
-
classname: classname,
|
|
154
|
-
}
|
|
155
|
-
component_props[:html_options] = {
|
|
156
|
-
id: header_id,
|
|
157
|
-
colspan: cell[:colspan],
|
|
158
|
-
style: { color: cell[:header_font_color] },
|
|
159
|
-
}
|
|
160
|
-
component_props[:html_options][:style].delete(:color) unless cell[:header_font_color].present?
|
|
161
|
-
else
|
|
162
|
-
component_name = "table/table_header"
|
|
163
|
-
component_props = {
|
|
164
|
-
id: header_id,
|
|
165
|
-
colspan: cell[:colspan],
|
|
166
|
-
classname: classname,
|
|
167
|
-
sort_menu: cell[:accessor] ? cell[:sort_menu] : nil,
|
|
168
|
-
}
|
|
169
|
-
component_props[:html_options] = { style: { color: cell[:header_font_color] } } if cell[:header_font_color].present?
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
{ name: component_name, props: component_props }
|
|
173
|
-
end
|
|
174
|
-
|
|
175
122
|
private
|
|
176
123
|
|
|
177
124
|
# Find the original column definition for a cell
|
|
@@ -216,8 +163,6 @@ module Playbook
|
|
|
216
163
|
else
|
|
217
164
|
raw_styling = col[:column_styling] || {}
|
|
218
165
|
header_alignment = raw_styling[:header_alignment]
|
|
219
|
-
header_background_color = raw_styling[:header_background_color]
|
|
220
|
-
header_font_color = raw_styling[:header_font_color]
|
|
221
166
|
|
|
222
167
|
colspan = 1
|
|
223
168
|
cell_hash = {
|
|
@@ -227,8 +172,6 @@ module Playbook
|
|
|
227
172
|
sort_menu: col[:sort_menu],
|
|
228
173
|
is_last_in_group: is_last && current_depth.positive?,
|
|
229
174
|
header_alignment: header_alignment,
|
|
230
|
-
header_background_color: header_background_color,
|
|
231
|
-
header_font_color: header_font_color,
|
|
232
175
|
}
|
|
233
176
|
cell_hash[:id] = col[:id] if col[:id].present?
|
|
234
177
|
rows[current_depth] << cell_hash
|
|
@@ -102,16 +102,16 @@ const Background = (props: BackgroundProps): React.ReactElement => {
|
|
|
102
102
|
useEffect(() => {
|
|
103
103
|
const updateResponsiveProps = () => {
|
|
104
104
|
setResponsiveProps({
|
|
105
|
-
backgroundSize: getResponsiveValue(backgroundSize),
|
|
106
|
-
backgroundPosition: getResponsiveValue(backgroundPosition),
|
|
107
|
-
backgroundRepeat: getResponsiveValue(backgroundRepeat),
|
|
108
|
-
backgroundColor: getResponsiveValue(backgroundColor),
|
|
109
|
-
imageUrl: getResponsiveValue(imageUrl),
|
|
105
|
+
backgroundSize: getResponsiveValue(props.backgroundSize),
|
|
106
|
+
backgroundPosition: getResponsiveValue(props.backgroundPosition),
|
|
107
|
+
backgroundRepeat: getResponsiveValue(props.backgroundRepeat),
|
|
108
|
+
backgroundColor: getResponsiveValue(props.backgroundColor),
|
|
109
|
+
imageUrl: getResponsiveValue(props.imageUrl),
|
|
110
110
|
});
|
|
111
111
|
};
|
|
112
112
|
window.addEventListener('resize', updateResponsiveProps);
|
|
113
113
|
return () => window.removeEventListener('resize', updateResponsiveProps);
|
|
114
|
-
}, [
|
|
114
|
+
}, [props]);
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
// Extract currently applicable responsive values.
|
|
@@ -4,6 +4,7 @@ import Background from './_background'
|
|
|
4
4
|
|
|
5
5
|
const props = {
|
|
6
6
|
data: { testid: 'background' },
|
|
7
|
+
backgroundColor: null,
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
it('Should be accessible', async () => {
|
|
@@ -41,8 +42,3 @@ test('applies correct overlay class when imageOverlay prop is provided', () => {
|
|
|
41
42
|
const kit = renderKit(Background, props, { imageOverlay: 'opacity_6' });
|
|
42
43
|
expect(kit).toHaveClass('imageoverlay_opacity_6');
|
|
43
44
|
});
|
|
44
|
-
|
|
45
|
-
test('Sets backgroundColor to light as default when no backgroundColor prop is provided', () => {
|
|
46
|
-
const kit = renderKit(Background, props);
|
|
47
|
-
expect(kit).toHaveClass('pb_background_color_light');
|
|
48
|
-
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
examples:
|
|
2
2
|
|
|
3
3
|
rails:
|
|
4
|
-
- background_light:
|
|
4
|
+
- background_light: Light
|
|
5
5
|
- background_white: White
|
|
6
6
|
- background_gradient: Gradient
|
|
7
7
|
- background_image: Image
|
|
@@ -11,7 +11,7 @@ examples:
|
|
|
11
11
|
- background_size: Size
|
|
12
12
|
|
|
13
13
|
react:
|
|
14
|
-
- background_light:
|
|
14
|
+
- background_light: Light
|
|
15
15
|
- background_white: White
|
|
16
16
|
- background_gradient: Gradient
|
|
17
17
|
- background_image: Image
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Card headers pass category, product, status and background colors only. List of all category, product, status and background colors can be viewed <a href="https://playbook.powerapp.cloud/
|
|
1
|
+
Card headers pass category, product, status and background colors only. List of all category, product, status and background colors can be viewed <a href="https://playbook.powerapp.cloud/token/colors" target="_blank">here</a>.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Card highlight can pass status, product, and category colors. List of all colors can be viewed <a href="https://playbook.powerapp.cloud/
|
|
1
|
+
Card highlight can pass status, product, and category colors. List of all colors can be viewed <a href="https://playbook.powerapp.cloud/token/colors" target="_blank">here</a>.
|
|
@@ -25,11 +25,11 @@ exports[`html structure is correct 1`] = `
|
|
|
25
25
|
>
|
|
26
26
|
<div
|
|
27
27
|
class="icon_wrapper"
|
|
28
|
-
style="vertical-align: middle;"
|
|
28
|
+
style="vertical-align: middle; color: rgb(193, 205, 214);"
|
|
29
29
|
>
|
|
30
30
|
<svg
|
|
31
31
|
aria-label="chevron-down icon"
|
|
32
|
-
class="pb_custom_icon svg-inline--fa
|
|
32
|
+
class="pb_custom_icon svg-inline--fa svg_lg svg_fw"
|
|
33
33
|
color="currentColor"
|
|
34
34
|
fill="none"
|
|
35
35
|
height="auto"
|
|
@@ -27,12 +27,12 @@ type colorMap = {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
const colorMap = {
|
|
30
|
-
default:"
|
|
31
|
-
light: "
|
|
32
|
-
lighter: "
|
|
33
|
-
link: "
|
|
34
|
-
error: "
|
|
35
|
-
success: "
|
|
30
|
+
default: "#242B42",
|
|
31
|
+
light: "#687887",
|
|
32
|
+
lighter: "#C1CDD6",
|
|
33
|
+
link: "#0056CF",
|
|
34
|
+
error: "#FF2229",
|
|
35
|
+
success: "#00CA74",
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const CollapsibleIcon = ({
|
|
@@ -68,10 +68,9 @@ const CollapsibleIcon = ({
|
|
|
68
68
|
className="icon_wrapper"
|
|
69
69
|
key={icon ? showIcon(icon)[0] : "chevron-down"}
|
|
70
70
|
onClick={(e) => handleIconClick(e)}
|
|
71
|
-
style={{ verticalAlign: "middle"}}
|
|
71
|
+
style={{ verticalAlign: "middle", color: color }}
|
|
72
72
|
>
|
|
73
73
|
<Icon
|
|
74
|
-
color={color}
|
|
75
74
|
icon={icon ? showIcon(icon)[0] : "chevron-down"}
|
|
76
75
|
size={iconSize}
|
|
77
76
|
/>
|
|
@@ -81,10 +80,9 @@ const CollapsibleIcon = ({
|
|
|
81
80
|
className="icon_wrapper"
|
|
82
81
|
key={icon ? showIcon(icon)[1] : "chevron-up"}
|
|
83
82
|
onClick={(e) => handleIconClick(e)}
|
|
84
|
-
style={{ verticalAlign: "middle" }}
|
|
83
|
+
style={{ verticalAlign: "middle", color: color }}
|
|
85
84
|
>
|
|
86
85
|
<Icon
|
|
87
|
-
color={color}
|
|
88
86
|
icon={icon ? showIcon(icon)[1] : "chevron-up"}
|
|
89
87
|
size={iconSize}
|
|
90
88
|
/>
|
|
@@ -22,6 +22,7 @@ const CollapsibleState = (props) => {
|
|
|
22
22
|
<Collapsible
|
|
23
23
|
collapsed={isCollapsed}
|
|
24
24
|
icon={["plus", "minus"]}
|
|
25
|
+
iconColor='white'
|
|
25
26
|
padding="none"
|
|
26
27
|
>
|
|
27
28
|
<Collapsible.Main padding="sm"
|
|
@@ -40,6 +41,7 @@ const CollapsibleState = (props) => {
|
|
|
40
41
|
<Collapsible
|
|
41
42
|
collapsed={isCollapsed}
|
|
42
43
|
icon={["plus", "minus"]}
|
|
44
|
+
iconColor='white'
|
|
43
45
|
padding="none"
|
|
44
46
|
>
|
|
45
47
|
<Collapsible.Main padding="sm"
|
|
@@ -58,6 +60,7 @@ const CollapsibleState = (props) => {
|
|
|
58
60
|
<Collapsible
|
|
59
61
|
collapsed={isCollapsed}
|
|
60
62
|
icon={["plus", "minus"]}
|
|
63
|
+
iconColor='white'
|
|
61
64
|
padding="none"
|
|
62
65
|
>
|
|
63
66
|
<Collapsible.Main padding="sm"
|
|
@@ -61,9 +61,7 @@ type ContactProps = {
|
|
|
61
61
|
data?: { [key: string]: string }
|
|
62
62
|
dark?: boolean
|
|
63
63
|
htmlOptions?: { [key: string]: string | number | boolean | (() => void) }
|
|
64
|
-
iconEnabled?: boolean
|
|
65
64
|
id?: string
|
|
66
|
-
unstyled?: boolean
|
|
67
65
|
}
|
|
68
66
|
|
|
69
67
|
const Contact = (props: ContactProps): React.ReactElement => {
|
|
@@ -76,9 +74,7 @@ const Contact = (props: ContactProps): React.ReactElement => {
|
|
|
76
74
|
data = {},
|
|
77
75
|
dark = false,
|
|
78
76
|
htmlOptions = {},
|
|
79
|
-
iconEnabled = true,
|
|
80
77
|
id,
|
|
81
|
-
unstyled = false,
|
|
82
78
|
} = props
|
|
83
79
|
const ariaProps = buildAriaProps(aria)
|
|
84
80
|
const dataProps = buildDataProps(data)
|
|
@@ -89,51 +85,6 @@ const Contact = (props: ContactProps): React.ReactElement => {
|
|
|
89
85
|
className
|
|
90
86
|
)
|
|
91
87
|
|
|
92
|
-
const formattedValue = formatContact(contactValue, contactType)
|
|
93
|
-
const content = (
|
|
94
|
-
<>
|
|
95
|
-
{iconEnabled && (contactType === 'email' ? (
|
|
96
|
-
<Icon
|
|
97
|
-
className="svg-inline--fa envelope"
|
|
98
|
-
customIcon={envelopeIcon}
|
|
99
|
-
dark={dark}
|
|
100
|
-
fixedWidth
|
|
101
|
-
/>
|
|
102
|
-
) : (
|
|
103
|
-
<Icon
|
|
104
|
-
dark={dark}
|
|
105
|
-
fixedWidth
|
|
106
|
-
icon={contactTypeMap[contactType] || 'phone'}
|
|
107
|
-
/>
|
|
108
|
-
))}
|
|
109
|
-
{iconEnabled ? ` ${formattedValue} ` : formattedValue}
|
|
110
|
-
{contactDetail && (
|
|
111
|
-
<Caption
|
|
112
|
-
dark={dark}
|
|
113
|
-
size="xs"
|
|
114
|
-
tag="span"
|
|
115
|
-
text={contactDetail}
|
|
116
|
-
/>
|
|
117
|
-
)}
|
|
118
|
-
</>
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
// When unstyled, render just the content without Body wrapper
|
|
122
|
-
if (unstyled) {
|
|
123
|
-
return (
|
|
124
|
-
<span
|
|
125
|
-
{...ariaProps}
|
|
126
|
-
{...dataProps}
|
|
127
|
-
{...htmlProps}
|
|
128
|
-
className={classes}
|
|
129
|
-
id={id}
|
|
130
|
-
>
|
|
131
|
-
{content}
|
|
132
|
-
</span>
|
|
133
|
-
)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Default styled mode with Body wrapper
|
|
137
88
|
return (
|
|
138
89
|
<div
|
|
139
90
|
{...ariaProps}
|
|
@@ -144,11 +95,33 @@ const Contact = (props: ContactProps): React.ReactElement => {
|
|
|
144
95
|
>
|
|
145
96
|
<Body
|
|
146
97
|
className="pb_contact_kit"
|
|
147
|
-
color="light"
|
|
98
|
+
color={"light"}
|
|
148
99
|
dark={dark}
|
|
149
100
|
tag="span"
|
|
150
101
|
>
|
|
151
|
-
|
|
102
|
+
{contactType === 'email' ? (
|
|
103
|
+
<Icon
|
|
104
|
+
className="svg-inline--fa envelope"
|
|
105
|
+
customIcon={envelopeIcon}
|
|
106
|
+
dark={dark}
|
|
107
|
+
fixedWidth
|
|
108
|
+
/>
|
|
109
|
+
) : (
|
|
110
|
+
<Icon
|
|
111
|
+
dark={dark}
|
|
112
|
+
fixedWidth
|
|
113
|
+
icon={contactTypeMap[contactType] || 'phone'}
|
|
114
|
+
/>
|
|
115
|
+
)}
|
|
116
|
+
{` ${formatContact(contactValue, contactType)} `}
|
|
117
|
+
{contactDetail && (
|
|
118
|
+
<Caption
|
|
119
|
+
dark={dark}
|
|
120
|
+
size="xs"
|
|
121
|
+
tag="span"
|
|
122
|
+
text={contactDetail}
|
|
123
|
+
/>
|
|
124
|
+
)}
|
|
152
125
|
</Body>
|
|
153
126
|
</div>
|
|
154
127
|
)
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
<%=
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
dark: object.dark
|
|
15
|
-
}) %>
|
|
16
|
-
<% end %>
|
|
17
|
-
<%= " #{object.formatted_contact_value}" if object.contact_value %>
|
|
1
|
+
<%= pb_content_tag do %>
|
|
2
|
+
<%= pb_rails("body", props: {
|
|
3
|
+
tag: "span",
|
|
4
|
+
classname: "pb_contact_kit",
|
|
5
|
+
color: "light",
|
|
6
|
+
dark: object.dark
|
|
7
|
+
}) do %>
|
|
8
|
+
<% if contact_type == "email" %>
|
|
9
|
+
<%= pb_rails("icon", props: {
|
|
10
|
+
custom_icon: Playbook::Engine::root.join(envelope_path),
|
|
11
|
+
fixed_width: true,
|
|
12
|
+
dark: object.dark
|
|
13
|
+
}) %>
|
|
18
14
|
<% else %>
|
|
19
|
-
<%=
|
|
15
|
+
<%= pb_rails("icon", props: {
|
|
16
|
+
icon: object.contact_icon,
|
|
17
|
+
fixed_width: true,
|
|
18
|
+
dark: object.dark
|
|
19
|
+
}) %>
|
|
20
20
|
<% end %>
|
|
21
|
+
<%= object.formatted_contact_value if object.contact_value %>
|
|
21
22
|
|
|
22
23
|
<%= pb_rails("caption", props: {
|
|
23
24
|
text: object.contact_detail,
|
|
@@ -26,39 +27,4 @@
|
|
|
26
27
|
dark: object.dark
|
|
27
28
|
}) if object.contact_detail %>
|
|
28
29
|
<% end %>
|
|
29
|
-
<% else %>
|
|
30
|
-
<%= pb_content_tag do %>
|
|
31
|
-
<%= pb_rails("body", props: {
|
|
32
|
-
tag: "span",
|
|
33
|
-
classname: "pb_contact_kit",
|
|
34
|
-
color: "light",
|
|
35
|
-
dark: object.dark
|
|
36
|
-
}) do %>
|
|
37
|
-
<% if icon_enabled %>
|
|
38
|
-
<% if contact_type == "email" %>
|
|
39
|
-
<%= pb_rails("icon", props: {
|
|
40
|
-
custom_icon: Playbook::Engine::root.join(envelope_path),
|
|
41
|
-
fixed_width: true,
|
|
42
|
-
dark: object.dark
|
|
43
|
-
}) %>
|
|
44
|
-
<% else %>
|
|
45
|
-
<%= pb_rails("icon", props: {
|
|
46
|
-
icon: object.contact_icon,
|
|
47
|
-
fixed_width: true,
|
|
48
|
-
dark: object.dark
|
|
49
|
-
}) %>
|
|
50
|
-
<% end %>
|
|
51
|
-
<%= " #{object.formatted_contact_value}" if object.contact_value %>
|
|
52
|
-
<% else %>
|
|
53
|
-
<%= object.formatted_contact_value if object.contact_value %>
|
|
54
|
-
<% end %>
|
|
55
|
-
|
|
56
|
-
<%= pb_rails("caption", props: {
|
|
57
|
-
text: object.contact_detail,
|
|
58
|
-
tag: 'span',
|
|
59
|
-
size: 'xs',
|
|
60
|
-
dark: object.dark
|
|
61
|
-
}) if object.contact_detail %>
|
|
62
|
-
<% end %>
|
|
63
|
-
<% end %>
|
|
64
30
|
<% end %>
|
|
@@ -8,8 +8,6 @@ module Playbook
|
|
|
8
8
|
prop :contact_type
|
|
9
9
|
prop :contact_value
|
|
10
10
|
prop :contact_detail
|
|
11
|
-
prop :icon_enabled, type: Playbook::Props::Boolean, default: true
|
|
12
|
-
prop :unstyled, type: Playbook::Props::Boolean, default: false
|
|
13
11
|
|
|
14
12
|
def classname
|
|
15
13
|
generate_classname("pb_contact_kit")
|
|
@@ -46,15 +44,7 @@ module Playbook
|
|
|
46
44
|
elsif contact_type == "international"
|
|
47
45
|
contact_value
|
|
48
46
|
else
|
|
49
|
-
|
|
50
|
-
# Format like "+1 (212) 555-1234"
|
|
51
|
-
intl_code = ""
|
|
52
|
-
cleaned_number = formatted_value
|
|
53
|
-
if cleaned_number.length == 11 && cleaned_number.start_with?("1")
|
|
54
|
-
intl_code = "+1 "
|
|
55
|
-
cleaned_number = cleaned_number.sub(/^1/, "")
|
|
56
|
-
end
|
|
57
|
-
"#{intl_code}#{number_to_phone(cleaned_number, area_code: true)}"
|
|
47
|
+
number_to_phone(formatted_value, area_code: true)
|
|
58
48
|
end
|
|
59
49
|
end
|
|
60
50
|
|
|
@@ -149,79 +149,3 @@ test('international contact type preserves original format', () => {
|
|
|
149
149
|
const kit = screen.getByTestId('test-international-format')
|
|
150
150
|
expect(kit).toHaveTextContent('+44 20 7946 0958')
|
|
151
151
|
})
|
|
152
|
-
|
|
153
|
-
test('iconEnabled prop hides icon when false', () => {
|
|
154
|
-
render(
|
|
155
|
-
<>
|
|
156
|
-
<Contact
|
|
157
|
-
contactType="home"
|
|
158
|
-
contactValue="2125551234"
|
|
159
|
-
data={{ testid: 'test-with-icon' }}
|
|
160
|
-
iconEnabled
|
|
161
|
-
/>
|
|
162
|
-
<Contact
|
|
163
|
-
contactType="home"
|
|
164
|
-
contactValue="2125551234"
|
|
165
|
-
data={{ testid: 'test-without-icon' }}
|
|
166
|
-
iconEnabled={false}
|
|
167
|
-
/>
|
|
168
|
-
</>
|
|
169
|
-
)
|
|
170
|
-
|
|
171
|
-
// With icon enabled, should have icon
|
|
172
|
-
expect(screen.getByTestId('test-with-icon').querySelector('.pb_custom_icon')).toBeInTheDocument()
|
|
173
|
-
|
|
174
|
-
// Without icon, should not have icon
|
|
175
|
-
expect(screen.getByTestId('test-without-icon').querySelector('.pb_custom_icon')).not.toBeInTheDocument()
|
|
176
|
-
|
|
177
|
-
// But should still have the formatted phone number
|
|
178
|
-
expect(screen.getByTestId('test-without-icon')).toHaveTextContent('(212) 555-1234')
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
test('unstyled prop renders without Body wrapper', () => {
|
|
182
|
-
render(
|
|
183
|
-
<>
|
|
184
|
-
<Contact
|
|
185
|
-
contactType="home"
|
|
186
|
-
contactValue="2125551234"
|
|
187
|
-
data={{ testid: 'test-styled' }}
|
|
188
|
-
/>
|
|
189
|
-
<Contact
|
|
190
|
-
contactType="home"
|
|
191
|
-
contactValue="2125551234"
|
|
192
|
-
data={{ testid: 'test-unstyled' }}
|
|
193
|
-
unstyled
|
|
194
|
-
/>
|
|
195
|
-
</>
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
// Styled version should have Body wrapper with pb_contact_kit class
|
|
199
|
-
const styled = screen.getByTestId('test-styled')
|
|
200
|
-
const styledBody = styled.querySelector('span.pb_contact_kit')
|
|
201
|
-
expect(styledBody).toBeInTheDocument()
|
|
202
|
-
expect(styledBody).toHaveTextContent('(212) 555-1234')
|
|
203
|
-
|
|
204
|
-
// Unstyled version should be a span without Body wrapper
|
|
205
|
-
const unstyled = screen.getByTestId('test-unstyled')
|
|
206
|
-
expect(unstyled.tagName).toBe('SPAN')
|
|
207
|
-
expect(unstyled.querySelector('span.pb_contact_kit')).not.toBeInTheDocument()
|
|
208
|
-
expect(unstyled).toHaveTextContent('(212) 555-1234')
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
test('unstyled and iconEnabled work together', () => {
|
|
212
|
-
render(
|
|
213
|
-
<Contact
|
|
214
|
-
contactType="home"
|
|
215
|
-
contactValue="2125551234"
|
|
216
|
-
data={{ testid: 'test-unstyled-no-icon' }}
|
|
217
|
-
iconEnabled={false}
|
|
218
|
-
unstyled
|
|
219
|
-
/>
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
const kit = screen.getByTestId('test-unstyled-no-icon')
|
|
223
|
-
expect(kit.tagName).toBe('SPAN')
|
|
224
|
-
expect(kit.querySelector('.pb_custom_icon')).not.toBeInTheDocument()
|
|
225
|
-
expect(kit.querySelector('.pb_body_kit')).not.toBeInTheDocument()
|
|
226
|
-
expect(kit).toHaveTextContent('(212) 555-1234')
|
|
227
|
-
})
|
|
@@ -3,13 +3,11 @@ examples:
|
|
|
3
3
|
rails:
|
|
4
4
|
- contact_default: Default
|
|
5
5
|
- contact_with_detail: Detail Indicator
|
|
6
|
-
- contact_unstyled: Unstyled
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
react:
|
|
10
9
|
- contact_default: Default
|
|
11
10
|
- contact_with_detail: Detail Indicator
|
|
12
|
-
- contact_unstyled: Unstyled
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
swift:
|
|
@@ -251,28 +251,4 @@ describe('DatePicker Kit', () => {
|
|
|
251
251
|
expect(input).toHaveValue(DateTime.getYearStartDate(new Date()).formatDate() + " to " + new Date().formatDate())
|
|
252
252
|
})
|
|
253
253
|
})
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
test('displays defaultDate when it is later than maxDate', async () => {
|
|
257
|
-
const testId = 'datepicker-out-of-range-after'
|
|
258
|
-
const futureDateString = '01/15/2020'
|
|
259
|
-
const maxDateString = '01/10/2020'
|
|
260
|
-
|
|
261
|
-
render(
|
|
262
|
-
<DatePicker
|
|
263
|
-
data={{ testid: testId }}
|
|
264
|
-
defaultDate={futureDateString}
|
|
265
|
-
format="m/d/Y"
|
|
266
|
-
maxDate={maxDateString}
|
|
267
|
-
pickerId="date-picker-out-of-range-after"
|
|
268
|
-
/>
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
const kit = screen.getByTestId(testId)
|
|
272
|
-
const input = within(kit).getByPlaceholderText('Select Date')
|
|
273
|
-
|
|
274
|
-
await waitFor(() => {
|
|
275
|
-
expect(input).toHaveValue('01/15/2020')
|
|
276
|
-
}, { timeout: 5000 })
|
|
277
|
-
})
|
|
278
254
|
})
|