playbook_ui 14.16.0.pre.rc.6 → 14.17.0.pre.alpha.PBNTR935draggablelinedesign7118
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/Utilities/types.ts +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +104 -2
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +168 -85
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +10 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +20 -7
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +90 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.jsx +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.html.erb +39 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.md +6 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +4 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_advanced_table/index.js +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +4 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +19 -9
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +38 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +49 -37
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +39 -0
- data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +1 -1
- data/app/pb_kits/playbook/pb_button/_button.scss +5 -5
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +1 -1
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +14 -7
- data/app/pb_kits/playbook/pb_contact/contact.test.js +7 -7
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +34 -34
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +2 -2
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +16 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -11
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -7
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +28 -24
- data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.test.js +2 -2
- data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_draggable/_draggable.scss +138 -5
- data/app/pb_kits/playbook/pb_draggable/_draggable.tsx +6 -4
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +91 -24
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +35 -28
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.jsx +181 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.jsx +99 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line.jsx +115 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_line.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_table_react.jsx → _draggable_with_table.jsx} +1 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +3 -1
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +9 -6
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +4 -1
- data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +71 -3
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +12 -2
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +65 -6
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +3 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +8 -8
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +3 -3
- data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +3 -4
- data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +2 -2
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +67 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +67 -0
- data/app/pb_kits/playbook/pb_form/pb_form_validation.js +1 -1
- data/app/pb_kits/playbook/pb_form_group/_form_group.scss +22 -0
- data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +1 -1
- data/app/pb_kits/playbook/pb_icon/_icon.scss +8 -1
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.html.erb +10 -4
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.jsx +49 -24
- data/app/pb_kits/playbook/pb_icon/icon.test.js +9 -9
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +4 -1
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_click.jsx +13 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_icon_circle/icon_circle.test.js +1 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
- data/app/pb_kits/playbook/pb_icon_value/icon_value.test.js +1 -1
- data/app/pb_kits/playbook/pb_label_value/label_value.test.js +1 -1
- data/app/pb_kits/playbook/pb_layout/_layout.scss +58 -0
- data/app/pb_kits/playbook/pb_layout/_layout.tsx +20 -7
- data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.jsx +190 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_bracket.md +5 -0
- data/app/pb_kits/playbook/pb_layout/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_layout/layout.test.js +4 -0
- data/app/pb_kits/playbook/pb_layout/subcomponents/_game.tsx +90 -0
- data/app/pb_kits/playbook/pb_layout/subcomponents/_round.tsx +57 -0
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Slide.tsx +1 -1
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Slides.tsx +1 -1
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Thumbnails.tsx +1 -1
- data/app/pb_kits/playbook/pb_lightbox/hooks/useVisibility.js +1 -1
- data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +1 -1
- data/app/pb_kits/playbook/pb_link/link.test.jsx +2 -2
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +23 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +28 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +72 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +97 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +71 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_multi_level_select/index.js +105 -0
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +10 -0
- data/app/pb_kits/playbook/pb_nav/_nav.scss +5 -0
- data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +5 -3
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +29 -11
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.html.erb +4 -4
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.rb +2 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_vertical.md +1 -0
- data/app/pb_kits/playbook/pb_stat_change/stat_change.test.js +8 -4
- data/app/pb_kits/playbook/pb_table/_table.tsx +4 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless.jsx +50 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_borderless_react.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating.jsx +59 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_header_style_floating_react.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_table/styles/_headers.scss +76 -0
- data/app/pb_kits/playbook/pb_table/styles/_striped.scss +3 -3
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +11 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +11 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +5 -0
- data/app/pb_kits/playbook/pb_table/table.test.js +17 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +183 -56
- data/app/pb_kits/playbook/pb_tooltip/tooltip.html.erb +2 -5
- data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +1 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.html.erb +19 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.jsx +23 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.jsx +4 -4
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_typeahead/index.ts +2 -2
- data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -5
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
- data/app/pb_kits/playbook/pb_user/_user.tsx +78 -13
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.html.erb +22 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +40 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_rails.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_react.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_user/user.html.erb +28 -12
- data/app/pb_kits/playbook/pb_user/user.rb +17 -1
- data/app/pb_kits/playbook/pb_user/user.test.js +182 -1
- data/app/pb_kits/playbook/pb_user_badge/user_badge.html.erb +1 -6
- data/app/pb_kits/playbook/tokens/_colors.scss +1 -4
- data/app/pb_kits/playbook/utilities/globalProps.ts +1 -1
- data/app/pb_kits/playbook/utilities/object.test.js +287 -1
- data/app/pb_kits/playbook/utilities/object.ts +171 -3
- data/app/pb_kits/playbook/utilities/text.ts +1 -1
- data/dist/chunks/_typeahead-HqfDnjRe.js +22 -0
- data/dist/chunks/_weekday_stacked-DVQITtQ9.js +45 -0
- data/dist/chunks/lib-BGzBzFZX.js +29 -0
- data/dist/chunks/{pb_form_validation-BvDxpfs-.js → pb_form_validation-BvNy9Bd6.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- 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/forms/builder/multi_level_select_field.rb +2 -0
- data/lib/playbook/kit_base.rb +4 -4
- data/lib/playbook/version.rb +2 -2
- metadata +53 -21
- data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +0 -282
- data/dist/chunks/_typeahead-CRAPc8k-.js +0 -22
- data/dist/chunks/_weekday_stacked-T0kFfioG.js +0 -45
- data/dist/chunks/lib-BeKPJYlk.js +0 -29
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows_no_subrows.md → _advanced_table_selectable_rows_no_subrows_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_selectable_rows.md → _advanced_table_selectable_rows_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_default_rails.html.erb → _draggable_default.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_default.md → _draggable_default_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_multiple_containers_rails.html.erb → _draggable_multiple_containers.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_multiple_containers.md → _draggable_multiple_containers_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_cards_rails.html.erb → _draggable_with_cards.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_cards.md → _draggable_with_cards_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_list_rails.html.erb → _draggable_with_list.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_list.md → _draggable_with_list_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_selectable_list_rails.html.erb → _draggable_with_selectable_list.html.erb} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_selectable_list.md → _draggable_with_selectable_list_react.md} +0 -0
- /data/app/pb_kits/playbook/pb_draggable/docs/{_draggable_with_table.md → _draggable_with_table_rails.md} +0 -0
|
@@ -22,24 +22,82 @@ type DraggableItemProps = {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
const DraggableItem = (props: DraggableItemProps) => {
|
|
25
|
-
const {
|
|
25
|
+
const {
|
|
26
|
+
aria = {},
|
|
27
|
+
children,
|
|
28
|
+
className,
|
|
29
|
+
container,
|
|
30
|
+
data = {},
|
|
31
|
+
htmlOptions = {},
|
|
32
|
+
id,
|
|
33
|
+
dragId,
|
|
34
|
+
tag="div"
|
|
35
|
+
} = props;
|
|
26
36
|
|
|
27
|
-
const {
|
|
28
|
-
|
|
37
|
+
const {
|
|
38
|
+
isDragging,
|
|
39
|
+
handleDragStart,
|
|
40
|
+
handleDragEnter,
|
|
41
|
+
handleDragEnd,
|
|
42
|
+
dropZone = 'ghost',
|
|
43
|
+
dropZoneColor = 'neutral',
|
|
44
|
+
direction = 'horizontal'
|
|
45
|
+
} = DraggableContext();
|
|
46
|
+
|
|
47
|
+
const itemRef = React.useRef<HTMLElement>(null);
|
|
29
48
|
|
|
30
49
|
const ariaProps = buildAriaProps(aria);
|
|
31
50
|
const dataProps = buildDataProps(data);
|
|
32
51
|
const htmlProps = buildHtmlProps(htmlOptions);
|
|
33
|
-
|
|
34
52
|
const Tag: React.ReactElement | any = `${tag}`;
|
|
35
|
-
|
|
53
|
+
|
|
36
54
|
const classes = classnames(
|
|
37
55
|
buildCss("pb_draggable_item"),
|
|
38
56
|
`${isDragging === dragId ? "is_dragging" : ""}`,
|
|
57
|
+
isDragging === dragId ? `drop_zone_${dropZone}` : "",
|
|
58
|
+
isDragging === dragId && dropZone !== 'ghost' ? `drop_zone_color_${dropZoneColor}` : '',
|
|
39
59
|
globalProps(props),
|
|
40
60
|
className
|
|
41
61
|
);
|
|
42
62
|
|
|
63
|
+
// Enhanced drag start handler that preserves dimensions
|
|
64
|
+
const onDragStart = (e: React.DragEvent) => {
|
|
65
|
+
if (dropZone !== 'ghost' && itemRef.current) {
|
|
66
|
+
// Create a clone for the drag image
|
|
67
|
+
const clone = itemRef.current.cloneNode(true) as HTMLElement;
|
|
68
|
+
|
|
69
|
+
// Remove any classes that might affect appearance
|
|
70
|
+
clone.className = clone.className.replace(/drop_zone_[^ ]*/g, '');
|
|
71
|
+
clone.className = clone.className.replace(/is_dragging/g, '');
|
|
72
|
+
|
|
73
|
+
// Get the original dimensions
|
|
74
|
+
const rect = itemRef.current.getBoundingClientRect();
|
|
75
|
+
|
|
76
|
+
// Ensure it's styled properly but invisible on the page
|
|
77
|
+
clone.style.position = 'fixed';
|
|
78
|
+
clone.style.top = '-9999px';
|
|
79
|
+
clone.style.left = '-9999px';
|
|
80
|
+
clone.style.width = `${rect.width}px`; // Preserve width
|
|
81
|
+
clone.style.height = `${rect.height}px`; // Preserve height
|
|
82
|
+
clone.style.opacity = '1';
|
|
83
|
+
clone.style.pointerEvents = 'none';
|
|
84
|
+
|
|
85
|
+
// Add to document temporarily
|
|
86
|
+
document.body.appendChild(clone);
|
|
87
|
+
|
|
88
|
+
// Set as drag image
|
|
89
|
+
e.dataTransfer.setDragImage(clone, e.clientX - rect.left, e.clientY - rect.top);
|
|
90
|
+
|
|
91
|
+
// Remove after a short delay
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
document.body.removeChild(clone);
|
|
94
|
+
}, 0);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Call the original handler
|
|
98
|
+
handleDragStart(dragId, container);
|
|
99
|
+
};
|
|
100
|
+
|
|
43
101
|
return (
|
|
44
102
|
<Tag
|
|
45
103
|
{...ariaProps}
|
|
@@ -51,7 +109,8 @@ const DraggableItem = (props: DraggableItemProps) => {
|
|
|
51
109
|
key={dragId}
|
|
52
110
|
onDragEnd={() => handleDragEnd()}
|
|
53
111
|
onDragEnter={() => handleDragEnter(dragId, container)}
|
|
54
|
-
onDragStart={
|
|
112
|
+
onDragStart={onDragStart}
|
|
113
|
+
ref={itemRef}
|
|
55
114
|
>
|
|
56
115
|
{children}
|
|
57
116
|
</Tag>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
|
|
2
|
+
<%= pb_rails("body", props: { text: " The breakpoint prop determines when the Drawer is always visible. Above the specified breakpoint, the Drawer remains open on the page. Below it, only the trigger element is shown, allowing you to toggle the drawer open and closed. To see this in action, click the button below and resize your window.", padding_bottom: "md" }) %>
|
|
3
|
+
<%= pb_rails("button", props: { text: "Open Doc Example in New Tab", new_window: true, link: "/drawer_page", margin_right: "lg" }) %>
|
|
@@ -12,7 +12,7 @@ const DropdownWithAutocomplete = (props) => {
|
|
|
12
12
|
label: "Jasper Furniss",
|
|
13
13
|
value: "Jasper Furniss",
|
|
14
14
|
territory: "PHL",
|
|
15
|
-
title: "
|
|
15
|
+
title: "Lead UX Engineer",
|
|
16
16
|
id: "jasper-furniss",
|
|
17
17
|
status: "Offline"
|
|
18
18
|
},
|
|
@@ -25,18 +25,18 @@ const DropdownWithAutocomplete = (props) => {
|
|
|
25
25
|
status: "Away"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
|
-
label: "
|
|
29
|
-
value: "
|
|
28
|
+
label: "Carlos Lima",
|
|
29
|
+
value: "Carlos Lima",
|
|
30
30
|
territory: "PHL",
|
|
31
|
-
title: "
|
|
32
|
-
id: "
|
|
31
|
+
title: "Nitro Developer",
|
|
32
|
+
id: "carlos-lima",
|
|
33
33
|
status: "Online"
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
label: "Courtney Long",
|
|
37
37
|
value: "Courtney Long",
|
|
38
38
|
territory: "PHL",
|
|
39
|
-
title: "UX
|
|
39
|
+
title: "Lead UX Designer",
|
|
40
40
|
id: "courtney-long",
|
|
41
41
|
status: "Online"
|
|
42
42
|
}
|
data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_autocomplete_and_custom_display.jsx
CHANGED
|
@@ -15,7 +15,7 @@ const DropdownWithAutocompleteAndCustomDisplay = (props) => {
|
|
|
15
15
|
label: "Jasper Furniss",
|
|
16
16
|
value: "Jasper Furniss",
|
|
17
17
|
territory: "PHL",
|
|
18
|
-
title: "
|
|
18
|
+
title: "Lead UX Engineer",
|
|
19
19
|
id: "jasper-furniss",
|
|
20
20
|
status: "Offline"
|
|
21
21
|
},
|
|
@@ -28,18 +28,18 @@ const DropdownWithAutocompleteAndCustomDisplay = (props) => {
|
|
|
28
28
|
status: "Away"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
label: "
|
|
32
|
-
value: "
|
|
31
|
+
label: "Carlos Lima",
|
|
32
|
+
value: "Carlos Lima",
|
|
33
33
|
territory: "PHL",
|
|
34
|
-
title: "
|
|
35
|
-
id: "
|
|
34
|
+
title: "Nitro Developer",
|
|
35
|
+
id: "carlos-lima",
|
|
36
36
|
status: "Online"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
label: "Courtney Long",
|
|
40
40
|
value: "Courtney Long",
|
|
41
41
|
territory: "PHL",
|
|
42
|
-
title: "UX
|
|
42
|
+
title: "Lead UX Designer",
|
|
43
43
|
id: "courtney-long",
|
|
44
44
|
status: "Online"
|
|
45
45
|
}
|
|
@@ -15,7 +15,7 @@ const DropdownWithCustomDisplay = (props) => {
|
|
|
15
15
|
label: "Jasper Furniss",
|
|
16
16
|
value: "Jasper Furniss",
|
|
17
17
|
territory: "PHL",
|
|
18
|
-
title: "
|
|
18
|
+
title: "Lead UX Engineer",
|
|
19
19
|
id: "jasper-furniss",
|
|
20
20
|
status: "Offline"
|
|
21
21
|
},
|
|
@@ -28,18 +28,18 @@ const DropdownWithCustomDisplay = (props) => {
|
|
|
28
28
|
status: "Away"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
label: "
|
|
32
|
-
value: "
|
|
31
|
+
label: "Carlos Lima",
|
|
32
|
+
value: "Carlos Lima",
|
|
33
33
|
territory: "PHL",
|
|
34
|
-
title: "
|
|
35
|
-
id: "
|
|
34
|
+
title: "Nitro Developer",
|
|
35
|
+
id: "carlos-lima",
|
|
36
36
|
status: "Online"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
label: "Courtney Long",
|
|
40
40
|
value: "Courtney Long",
|
|
41
41
|
territory: "PHL",
|
|
42
|
-
title: "UX
|
|
42
|
+
title: "Lead UX Designer",
|
|
43
43
|
id: "courtney-long",
|
|
44
44
|
status: "Online"
|
|
45
45
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<%
|
|
2
|
-
|
|
2
|
+
options = [
|
|
3
3
|
{
|
|
4
4
|
label: "Jasper Furniss",
|
|
5
5
|
value: "Jasper Furniss",
|
|
6
6
|
territory: "PHL",
|
|
7
|
-
title: "
|
|
7
|
+
title: "Lead UX Engineer",
|
|
8
8
|
id: "jasper-furniss",
|
|
9
9
|
status: "Offline"
|
|
10
10
|
},
|
|
@@ -17,22 +17,22 @@
|
|
|
17
17
|
status: "Away"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
label: "
|
|
21
|
-
value: "
|
|
20
|
+
label: "Carlos Lima",
|
|
21
|
+
value: "Carlos Lima",
|
|
22
22
|
territory: "PHL",
|
|
23
|
-
title: "
|
|
24
|
-
id: "
|
|
23
|
+
title: "Nitro Developer",
|
|
24
|
+
id: "carlos-lima",
|
|
25
25
|
status: "Online"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
label: "Courtney Long",
|
|
29
29
|
value: "Courtney Long",
|
|
30
30
|
territory: "PHL",
|
|
31
|
-
title: "UX
|
|
31
|
+
title: "Lead UX Designer",
|
|
32
32
|
id: "courtney-long",
|
|
33
33
|
status: "Online"
|
|
34
34
|
}
|
|
35
|
-
]
|
|
35
|
+
];
|
|
36
36
|
|
|
37
37
|
%>
|
|
38
38
|
|
|
@@ -95,7 +95,7 @@ test('generated customDisplay for trigger', () => {
|
|
|
95
95
|
|
|
96
96
|
const kit = screen.getByTestId(testId)
|
|
97
97
|
const trigger = kit.querySelector('.pb_dropdown_trigger')
|
|
98
|
-
const customDisplay = trigger.querySelector('.
|
|
98
|
+
const customDisplay = trigger.querySelector('.pb_custom_icon')
|
|
99
99
|
expect(customDisplay).toBeInTheDocument()
|
|
100
100
|
})
|
|
101
101
|
|
|
@@ -170,7 +170,7 @@ test('generated custom Trigger', () => {
|
|
|
170
170
|
options={options}
|
|
171
171
|
>
|
|
172
172
|
<Dropdown.Trigger>
|
|
173
|
-
<Icon icon="
|
|
173
|
+
<Icon icon="flag" />
|
|
174
174
|
</Dropdown.Trigger>
|
|
175
175
|
{options.map((option) => (
|
|
176
176
|
<Dropdown.Option key={option.id}
|
|
@@ -182,7 +182,7 @@ test('generated custom Trigger', () => {
|
|
|
182
182
|
|
|
183
183
|
const kit = screen.getByTestId(testId)
|
|
184
184
|
const trigger = kit.querySelector('.pb_dropdown_trigger')
|
|
185
|
-
const customTrigger = trigger.querySelector('.
|
|
185
|
+
const customTrigger = trigger.querySelector('.pb_custom_icon')
|
|
186
186
|
expect(customTrigger).toBeInTheDocument()
|
|
187
187
|
})
|
|
188
188
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { map } from '
|
|
3
|
-
import { isEmpty, omitBy } from '../../utilities/object'
|
|
2
|
+
import { isEmpty, omitBy, map } from '../../utilities/object'
|
|
4
3
|
|
|
5
4
|
import Body from '../../pb_body/_body'
|
|
6
5
|
import Caption from '../../pb_caption/_caption'
|
|
@@ -46,12 +45,12 @@ const CurrentFilters = ({ dark, filters }: CurrentFiltersProps): React.ReactElem
|
|
|
46
45
|
dark={dark}
|
|
47
46
|
size={4}
|
|
48
47
|
tag="h4"
|
|
49
|
-
text={name}
|
|
48
|
+
text={`${name}`}
|
|
50
49
|
/> :
|
|
51
50
|
<div>
|
|
52
51
|
<Caption
|
|
53
52
|
dark={dark}
|
|
54
|
-
text={name}
|
|
53
|
+
text={`${name}`}
|
|
55
54
|
/>
|
|
56
55
|
<Title
|
|
57
56
|
dark={dark}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import { find,
|
|
2
|
+
import { find, partial, map } from '../../utilities/object'
|
|
3
3
|
|
|
4
4
|
import Button from '../../pb_button/_button'
|
|
5
5
|
import Icon from '../../pb_icon/_icon'
|
|
@@ -26,7 +26,7 @@ const directionIcon = (dir: Direction) => (
|
|
|
26
26
|
|
|
27
27
|
const renderOptions = (options: SortOptions, value: SortValue[], handleChange: (arg0: SortValue) => void) => (
|
|
28
28
|
map(options, (label, name) => {
|
|
29
|
-
const next = nextValue(value, name)
|
|
29
|
+
const next = nextValue(value, String(name))
|
|
30
30
|
return (
|
|
31
31
|
<ListItem key={`option-${next.name}-${next.dir}`}>
|
|
32
32
|
<Button
|
|
@@ -7,7 +7,7 @@ $pb_pill_height: 25px;
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
$confirmation_toast_colors: (
|
|
10
|
-
neutral: $
|
|
10
|
+
neutral: $text_lt_light,
|
|
11
11
|
success: $success,
|
|
12
12
|
error: $error,
|
|
13
13
|
tip: transparent,
|
|
@@ -87,7 +87,7 @@ $confirmation_toast_colors: (
|
|
|
87
87
|
overflow: hidden;
|
|
88
88
|
display: -webkit-box;
|
|
89
89
|
-webkit-line-clamp: 3;
|
|
90
|
-
-webkit-box-orient: vertical;
|
|
90
|
+
-webkit-box-orient: vertical;
|
|
91
91
|
white-space: normal;
|
|
92
92
|
text-align: left;
|
|
93
93
|
}
|
|
@@ -22,6 +22,72 @@
|
|
|
22
22
|
|
|
23
23
|
%>
|
|
24
24
|
|
|
25
|
+
<% treeData = [{
|
|
26
|
+
label: "Power Home Remodeling",
|
|
27
|
+
value: "Power Home Remodeling",
|
|
28
|
+
id: "100",
|
|
29
|
+
expanded: true,
|
|
30
|
+
children: [
|
|
31
|
+
{
|
|
32
|
+
label: "People",
|
|
33
|
+
value: "People",
|
|
34
|
+
id: "101",
|
|
35
|
+
expanded: true,
|
|
36
|
+
children: [
|
|
37
|
+
{
|
|
38
|
+
label: "Talent Acquisition",
|
|
39
|
+
value: "Talent Acquisition",
|
|
40
|
+
id: "102",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: "Business Affairs",
|
|
44
|
+
value: "Business Affairs",
|
|
45
|
+
id: "103",
|
|
46
|
+
children: [
|
|
47
|
+
{
|
|
48
|
+
label: "Initiatives",
|
|
49
|
+
value: "Initiatives",
|
|
50
|
+
id: "104",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
label: "Learning & Development",
|
|
54
|
+
value: "Learning & Development",
|
|
55
|
+
id: "105",
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: "People Experience",
|
|
61
|
+
value: "People Experience",
|
|
62
|
+
id: "106",
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: "Contact Center",
|
|
68
|
+
value: "Contact Center",
|
|
69
|
+
id: "107",
|
|
70
|
+
children: [
|
|
71
|
+
{
|
|
72
|
+
label: "Appointment Management",
|
|
73
|
+
value: "Appointment Management",
|
|
74
|
+
id: "108",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: "Customer Service",
|
|
78
|
+
value: "Customer Service",
|
|
79
|
+
id: "109",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
label: "Energy",
|
|
83
|
+
value: "Energy",
|
|
84
|
+
id: "110",
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
}] %>
|
|
90
|
+
|
|
25
91
|
<%= pb_form_with(scope: :example, url: "", method: :get) do |form| %>
|
|
26
92
|
<%= form.typeahead :example_typeahead, props: { data: { typeahead_example1: true, user: {} }, label: true, placeholder: "Search for a user" } %>
|
|
27
93
|
<%= form.text_field :example_text_field, props: { label: true } %>
|
|
@@ -47,6 +113,7 @@
|
|
|
47
113
|
<%= form.date_picker :example_date_picker_1, props: { label: true } %>
|
|
48
114
|
<%= form.star_rating_field :example_star_rating, props: { variant: "interactive", label: true } %>
|
|
49
115
|
<%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true } %>
|
|
116
|
+
<%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form-default", tree_data: treeData, margin_bottom: "sm", label: "Example Multi Level Select field" } %>
|
|
50
117
|
|
|
51
118
|
<%= form.actions do |action| %>
|
|
52
119
|
<%= action.submit %>
|
|
@@ -21,6 +21,72 @@
|
|
|
21
21
|
]
|
|
22
22
|
%>
|
|
23
23
|
|
|
24
|
+
<% treeData = [{
|
|
25
|
+
label: "Power Home Remodeling",
|
|
26
|
+
value: "Power Home Remodeling",
|
|
27
|
+
id: "100",
|
|
28
|
+
expanded: true,
|
|
29
|
+
children: [
|
|
30
|
+
{
|
|
31
|
+
label: "People",
|
|
32
|
+
value: "People",
|
|
33
|
+
id: "101",
|
|
34
|
+
expanded: true,
|
|
35
|
+
children: [
|
|
36
|
+
{
|
|
37
|
+
label: "Talent Acquisition",
|
|
38
|
+
value: "Talent Acquisition",
|
|
39
|
+
id: "102",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: "Business Affairs",
|
|
43
|
+
value: "Business Affairs",
|
|
44
|
+
id: "103",
|
|
45
|
+
children: [
|
|
46
|
+
{
|
|
47
|
+
label: "Initiatives",
|
|
48
|
+
value: "Initiatives",
|
|
49
|
+
id: "104",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: "Learning & Development",
|
|
53
|
+
value: "Learning & Development",
|
|
54
|
+
id: "105",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
label: "People Experience",
|
|
60
|
+
value: "People Experience",
|
|
61
|
+
id: "106",
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: "Contact Center",
|
|
67
|
+
value: "Contact Center",
|
|
68
|
+
id: "107",
|
|
69
|
+
children: [
|
|
70
|
+
{
|
|
71
|
+
label: "Appointment Management",
|
|
72
|
+
value: "Appointment Management",
|
|
73
|
+
id: "108",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
label: "Customer Service",
|
|
77
|
+
value: "Customer Service",
|
|
78
|
+
id: "109",
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: "Energy",
|
|
82
|
+
value: "Energy",
|
|
83
|
+
id: "110",
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
}] %>
|
|
89
|
+
|
|
24
90
|
<%= pb_form_with(scope: :example, method: :get, url: "", validate: true) do |form| %>
|
|
25
91
|
<%= 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
92
|
<%= form.text_field :example_text_field_validation, props: { label: true, required: true } %>
|
|
@@ -38,6 +104,7 @@
|
|
|
38
104
|
<%= form.date_picker :example_date_picker_2, props: { label: true, required: true, validation_message: "Please, select a date.", allow_input: true } %>
|
|
39
105
|
<%= form.star_rating_field :example_star_rating_validation, props: { variant: "interactive", label: true, required: true } %>
|
|
40
106
|
<%= form.time_zone_select_field :example_time_zone_select, ActiveSupport::TimeZone.us_zones, { default: "Eastern Time (US & Canada)" }, props: { label: true, blank_selection: "Select a Time Zone...", required: true } %>
|
|
107
|
+
<%= form.multi_level_select :example_multi_level_select, props: { id: "multi-level-select-form", tree_data: treeData, margin_bottom: "sm", required: true, label: "Example Multi Level Select field" } %>
|
|
41
108
|
|
|
42
109
|
<%= form.actions do |action| %>
|
|
43
110
|
<%= action.submit %>
|
|
@@ -205,4 +205,26 @@
|
|
|
205
205
|
border-top-left-radius: 0;
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
|
+
|
|
209
|
+
.pb_text_input_kit.error {
|
|
210
|
+
.text_input_wrapper {
|
|
211
|
+
input:focus {
|
|
212
|
+
outline: none;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
& + * input,
|
|
217
|
+
& + * select {
|
|
218
|
+
border-left-color: $red;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.pb_text_input_kit:not(.error):focus-within + .error,
|
|
223
|
+
.pb_text_input_kit:not(.error):focus-within + .pb_select .error {
|
|
224
|
+
input,
|
|
225
|
+
select {
|
|
226
|
+
border-left: none;
|
|
227
|
+
padding-left: calc(var(--iti-flag-width) + 1px);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
208
230
|
}
|
|
@@ -13,7 +13,7 @@ import typography from "../tokens/exports/_typography.module.scss";
|
|
|
13
13
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
|
|
14
14
|
import { globalProps } from "../utilities/globalProps";
|
|
15
15
|
import { GenericObject } from "../types";
|
|
16
|
-
import { merge } from '
|
|
16
|
+
import { merge } from '../utilities/object'
|
|
17
17
|
|
|
18
18
|
type GaugeProps = {
|
|
19
19
|
aria: { [key: string]: string };
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
@import "../tokens/colors";
|
|
2
2
|
|
|
3
|
+
$additional_colors: (
|
|
4
|
+
"light": $text_lt_light,
|
|
5
|
+
"lighter": $text_lt_lighter,
|
|
6
|
+
"link": $primary
|
|
7
|
+
);
|
|
8
|
+
|
|
3
9
|
// All the merges below create $icon_colors, a map of all color tokens in colors.scss
|
|
4
10
|
$merge_kits1: map-merge($status_colors, $category_colors);
|
|
5
11
|
$merge_kits2: map-merge($merge_kits1, $product_colors);
|
|
6
12
|
$merge_kits3: map-merge($merge_kits2, $text_colors);
|
|
7
|
-
$
|
|
13
|
+
$merge_kits4: map-merge($merge_kits3, $data_colors);
|
|
14
|
+
$icon_colors: map-merge($merge_kits4, $additional_colors);
|
|
8
15
|
|
|
9
16
|
.pb_custom_icon, .pb_icon_kit {
|
|
10
17
|
@each $color_name, $color_value in $icon_colors {
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
<%= pb_rails("flex", props: {
|
|
2
|
-
<%= pb_rails("icon", props: { icon: "user", fixed_width: true, color: "primary",
|
|
3
|
-
<%= pb_rails("icon", props: { icon: "recycle", fixed_width: true, color: "data_4",
|
|
1
|
+
<%= pb_rails("flex", props: { margin_bottom: "sm" }) do %>
|
|
2
|
+
<%= pb_rails("icon", props: { icon: "user", fixed_width: true, color: "primary", size: "2x" }) %>
|
|
3
|
+
<%= pb_rails("icon", props: { icon: "recycle", fixed_width: true, color: "data_4", size: "2x" }) %>
|
|
4
4
|
<%= pb_rails("icon", props: { icon: "roofing", fixed_width: true, color: "product_5_background", size: "2x" }) %>
|
|
5
|
-
<% end %>
|
|
5
|
+
<% end %>
|
|
6
|
+
|
|
7
|
+
<%= pb_rails("flex", props: {}) do %>
|
|
8
|
+
<%= pb_rails("icon", props: { icon: "user", fixed_width: true, color: "light", size: "2x" }) %>
|
|
9
|
+
<%= pb_rails("icon", props: { icon: "recycle", fixed_width: true, color: "lighter", size: "2x" }) %>
|
|
10
|
+
<%= pb_rails("icon", props: { icon: "roofing", fixed_width: true, color: "link", size: "2x" }) %>
|
|
11
|
+
<% end %>
|
|
@@ -1,32 +1,57 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import Icon from "../_icon"
|
|
3
|
+
import Flex from "../../pb_flex/_flex"
|
|
3
4
|
|
|
4
5
|
const IconDefault = (props) => {
|
|
5
6
|
return (
|
|
6
|
-
<div
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
7
|
+
<div>
|
|
8
|
+
<Flex marginBottom="sm">
|
|
9
|
+
<Icon
|
|
10
|
+
color="primary"
|
|
11
|
+
fixedWidth
|
|
12
|
+
icon="user"
|
|
13
|
+
size="2x"
|
|
14
|
+
{...props}
|
|
15
|
+
/>
|
|
16
|
+
<Icon
|
|
17
|
+
color="data_4"
|
|
18
|
+
fixedWidth
|
|
19
|
+
icon="recycle"
|
|
20
|
+
size="2x"
|
|
21
|
+
{...props}
|
|
22
|
+
/>
|
|
23
|
+
<Icon
|
|
24
|
+
color="product_5_background"
|
|
25
|
+
fixedWidth
|
|
26
|
+
icon="product-roofing"
|
|
27
|
+
size="2x"
|
|
28
|
+
{...props}
|
|
29
|
+
/>
|
|
30
|
+
</Flex>
|
|
31
|
+
|
|
32
|
+
<Flex>
|
|
33
|
+
<Icon
|
|
34
|
+
color="light"
|
|
35
|
+
fixedWidth
|
|
36
|
+
icon="user"
|
|
37
|
+
size="2x"
|
|
38
|
+
{...props}
|
|
39
|
+
/>
|
|
40
|
+
<Icon
|
|
41
|
+
color="lighter"
|
|
42
|
+
fixedWidth
|
|
43
|
+
icon="recycle"
|
|
44
|
+
size="2x"
|
|
45
|
+
{...props}
|
|
46
|
+
/>
|
|
47
|
+
<Icon
|
|
48
|
+
color="link"
|
|
49
|
+
fixedWidth
|
|
50
|
+
icon="product-roofing"
|
|
51
|
+
size="2x"
|
|
52
|
+
{...props}
|
|
53
|
+
/>
|
|
54
|
+
</Flex>
|
|
30
55
|
</div>
|
|
31
56
|
)
|
|
32
57
|
}
|