playbook_ui 14.16.0.pre.rc.6 → 14.17.0.pre.alpha.PBNTR920emojipickerpoc7130
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 +115 -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 +184 -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 +97 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +3 -3
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +11 -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_text_input/docs/_text_input_emoji_picker.jsx +371 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +1 -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-7W5Ha5Td.js +22 -0
- data/dist/chunks/_weekday_stacked-DSKatW3m.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 +40 -9
- 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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
import Layout from '../../pb_layout/_layout'
|
|
4
|
+
import Flex from '../../pb_flex/_flex'
|
|
5
|
+
import Body from '../../pb_body/_body'
|
|
6
|
+
import Caption from '../../pb_caption/_caption'
|
|
7
|
+
import SectionSeparator from '../../pb_section_separator/_section_separator'
|
|
8
|
+
|
|
9
|
+
const LayoutBracket = () => {
|
|
10
|
+
return (
|
|
11
|
+
<div>
|
|
12
|
+
<Layout
|
|
13
|
+
layout="bracket"
|
|
14
|
+
>
|
|
15
|
+
<Layout.RoundLabel>
|
|
16
|
+
<Caption>Wild Card</Caption>
|
|
17
|
+
<SectionSeparator marginY="sm"/>
|
|
18
|
+
</Layout.RoundLabel>
|
|
19
|
+
<Layout.Round marginBottom={{ xs: "md", sm: "md" }}>
|
|
20
|
+
<Layout.Game>
|
|
21
|
+
<Flex justify="between">
|
|
22
|
+
<Body>Packers</Body>
|
|
23
|
+
<Body>10</Body>
|
|
24
|
+
</Flex>
|
|
25
|
+
<Flex justify="between">
|
|
26
|
+
<Body><strong>Eagles</strong></Body>
|
|
27
|
+
<Body>22</Body>
|
|
28
|
+
</Flex>
|
|
29
|
+
</Layout.Game>
|
|
30
|
+
<Layout.Game>
|
|
31
|
+
<Flex justify="between">
|
|
32
|
+
<Body>Vikings</Body>
|
|
33
|
+
<Body>9</Body>
|
|
34
|
+
</Flex>
|
|
35
|
+
<Flex justify="between">
|
|
36
|
+
<Body><strong>Rams</strong></Body>
|
|
37
|
+
<Body>27</Body>
|
|
38
|
+
</Flex>
|
|
39
|
+
</Layout.Game>
|
|
40
|
+
<Layout.Game>
|
|
41
|
+
<Flex justify="between">
|
|
42
|
+
<Body><strong>Lions</strong></Body>
|
|
43
|
+
</Flex>
|
|
44
|
+
<Flex justify="between">
|
|
45
|
+
<Body>BYE</Body>
|
|
46
|
+
</Flex>
|
|
47
|
+
</Layout.Game>
|
|
48
|
+
<Layout.Game>
|
|
49
|
+
<Flex justify="between">
|
|
50
|
+
<Body><strong>Commanders</strong></Body>
|
|
51
|
+
<Body>23</Body>
|
|
52
|
+
</Flex>
|
|
53
|
+
<Flex justify="between">
|
|
54
|
+
<Body>Buccaneers</Body>
|
|
55
|
+
<Body>20</Body>
|
|
56
|
+
</Flex>
|
|
57
|
+
</Layout.Game>
|
|
58
|
+
<Layout.Game>
|
|
59
|
+
<Flex justify="between">
|
|
60
|
+
<Body><strong>Chiefs</strong></Body>
|
|
61
|
+
</Flex>
|
|
62
|
+
<Flex justify="between">
|
|
63
|
+
<Body>BYE</Body>
|
|
64
|
+
</Flex>
|
|
65
|
+
</Layout.Game>
|
|
66
|
+
<Layout.Game>
|
|
67
|
+
<Flex justify="between">
|
|
68
|
+
<Body>Chargers</Body>
|
|
69
|
+
<Body>12</Body>
|
|
70
|
+
</Flex>
|
|
71
|
+
<Flex justify="between">
|
|
72
|
+
<Body><strong>Texans</strong></Body>
|
|
73
|
+
<Body>32</Body>
|
|
74
|
+
</Flex>
|
|
75
|
+
</Layout.Game>
|
|
76
|
+
<Layout.Game>
|
|
77
|
+
<Flex justify="between">
|
|
78
|
+
<Body>Broncos</Body>
|
|
79
|
+
<Body>7</Body>
|
|
80
|
+
</Flex>
|
|
81
|
+
<Flex justify="between">
|
|
82
|
+
<Body><strong>Bills</strong></Body>
|
|
83
|
+
<Body>31</Body>
|
|
84
|
+
</Flex>
|
|
85
|
+
</Layout.Game>
|
|
86
|
+
<Layout.Game>
|
|
87
|
+
<Flex justify="between">
|
|
88
|
+
<Body>Steelers</Body>
|
|
89
|
+
<Body>14</Body>
|
|
90
|
+
</Flex>
|
|
91
|
+
<Flex justify="between">
|
|
92
|
+
<Body><strong>Ravens</strong></Body>
|
|
93
|
+
<Body>28</Body>
|
|
94
|
+
</Flex>
|
|
95
|
+
</Layout.Game>
|
|
96
|
+
</Layout.Round>
|
|
97
|
+
<Layout.RoundLabel>
|
|
98
|
+
<Caption>Divisional</Caption>
|
|
99
|
+
<SectionSeparator marginY="sm"/>
|
|
100
|
+
</Layout.RoundLabel>
|
|
101
|
+
<Layout.Round marginBottom={{ xs: "md", sm: "md" }}>
|
|
102
|
+
<Layout.Game>
|
|
103
|
+
<Flex justify="between">
|
|
104
|
+
<Body>Rams</Body>
|
|
105
|
+
<Body>22</Body>
|
|
106
|
+
</Flex>
|
|
107
|
+
<Flex justify="between">
|
|
108
|
+
<Body><strong>Eagles</strong></Body>
|
|
109
|
+
<Body>28</Body>
|
|
110
|
+
</Flex>
|
|
111
|
+
</Layout.Game>
|
|
112
|
+
<Layout.Game>
|
|
113
|
+
<Flex justify="between">
|
|
114
|
+
<Body><strong>Commanders</strong></Body>
|
|
115
|
+
<Body>45</Body>
|
|
116
|
+
</Flex>
|
|
117
|
+
<Flex justify="between">
|
|
118
|
+
<Body>Lions</Body>
|
|
119
|
+
<Body>31</Body>
|
|
120
|
+
</Flex>
|
|
121
|
+
</Layout.Game>
|
|
122
|
+
<Layout.Game>
|
|
123
|
+
<Flex justify="between">
|
|
124
|
+
<Body>Texans</Body>
|
|
125
|
+
<Body>14</Body>
|
|
126
|
+
</Flex>
|
|
127
|
+
<Flex justify="between">
|
|
128
|
+
<Body><strong>Chiefs</strong></Body>
|
|
129
|
+
<Body>23</Body>
|
|
130
|
+
</Flex>
|
|
131
|
+
</Layout.Game>
|
|
132
|
+
<Layout.Game>
|
|
133
|
+
<Flex justify="between">
|
|
134
|
+
<Body>Ravens</Body>
|
|
135
|
+
<Body>25</Body>
|
|
136
|
+
</Flex>
|
|
137
|
+
<Flex justify="between">
|
|
138
|
+
<Body><strong>Bills</strong></Body>
|
|
139
|
+
<Body>27</Body>
|
|
140
|
+
</Flex>
|
|
141
|
+
</Layout.Game>
|
|
142
|
+
</Layout.Round>
|
|
143
|
+
<Layout.RoundLabel>
|
|
144
|
+
<Caption>Conference</Caption>
|
|
145
|
+
<SectionSeparator marginY="sm"/>
|
|
146
|
+
</Layout.RoundLabel>
|
|
147
|
+
<Layout.Round marginBottom={{ xs: "md", sm: "md" }}>
|
|
148
|
+
<Layout.Game>
|
|
149
|
+
<Flex justify="between">
|
|
150
|
+
<Body>Commanders</Body>
|
|
151
|
+
<Body>23</Body>
|
|
152
|
+
</Flex>
|
|
153
|
+
<Flex justify="between">
|
|
154
|
+
<Body><strong>Eagles</strong></Body>
|
|
155
|
+
<Body>55</Body>
|
|
156
|
+
</Flex>
|
|
157
|
+
</Layout.Game>
|
|
158
|
+
<Layout.Game>
|
|
159
|
+
<Flex justify="between">
|
|
160
|
+
<Body>Bills</Body>
|
|
161
|
+
<Body>29</Body>
|
|
162
|
+
</Flex>
|
|
163
|
+
<Flex justify="between">
|
|
164
|
+
<Body><strong>Chiefs</strong></Body>
|
|
165
|
+
<Body>32</Body>
|
|
166
|
+
</Flex>
|
|
167
|
+
</Layout.Game>
|
|
168
|
+
</Layout.Round>
|
|
169
|
+
<Layout.RoundLabel>
|
|
170
|
+
<Caption>Super Bowl</Caption>
|
|
171
|
+
<SectionSeparator marginY="sm"/>
|
|
172
|
+
</Layout.RoundLabel>
|
|
173
|
+
<Layout.Round>
|
|
174
|
+
<Layout.Game>
|
|
175
|
+
<Flex justify="between">
|
|
176
|
+
<Body>Chiefs</Body>
|
|
177
|
+
<Body>22</Body>
|
|
178
|
+
</Flex>
|
|
179
|
+
<Flex justify="between">
|
|
180
|
+
<Body><strong>Eagles</strong></Body>
|
|
181
|
+
<Body>40</Body>
|
|
182
|
+
</Flex>
|
|
183
|
+
</Layout.Game>
|
|
184
|
+
</Layout.Round>
|
|
185
|
+
</Layout>
|
|
186
|
+
</div>
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export default LayoutBracket
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Use `<Layout.RoundLabel>`, `<Layout.Round>`, and `<Layout.Game>` to make a bracket layout.
|
|
2
|
+
|
|
3
|
+
On mobile devices, `<Layout.RoundLabel>` will display (on desktop these components are hidden) and the bracket will be in one column.
|
|
4
|
+
|
|
5
|
+
Ensure that each `<Layout.Game>` maintains a consistent height for the bracket lines to lay out properly.
|
|
@@ -7,4 +7,5 @@ export { default as LayoutKanbanResponsive } from './_layout_kanban_responsive.j
|
|
|
7
7
|
export { default as LayoutCollectionDetail } from './_layout_collection_detail.jsx'
|
|
8
8
|
export { default as LayoutContent } from './_layout_content.jsx'
|
|
9
9
|
export { default as LayoutMasonry } from './_layout_masonry.jsx'
|
|
10
|
+
export { default as LayoutBracket } from './_layout_bracket.jsx'
|
|
10
11
|
|
|
@@ -82,6 +82,10 @@ test("render all layout variants", () => {
|
|
|
82
82
|
layout: "masonry",
|
|
83
83
|
expected: "pb_layout_kit_masonry_size_md_left_light",
|
|
84
84
|
},
|
|
85
|
+
{
|
|
86
|
+
layout: "bracket",
|
|
87
|
+
expected: "pb_layout_kit_bracket",
|
|
88
|
+
},
|
|
85
89
|
]
|
|
86
90
|
|
|
87
91
|
testValues.forEach(({ layout, expected }) => {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import classnames from 'classnames'
|
|
3
|
+
|
|
4
|
+
import { GlobalProps, globalProps, globalInlineProps } from '../../utilities/globalProps'
|
|
5
|
+
|
|
6
|
+
import Card from '../../pb_card/_card'
|
|
7
|
+
import SectionSeparator from '../../pb_section_separator/_section_separator'
|
|
8
|
+
|
|
9
|
+
type LayoutGameProps = {
|
|
10
|
+
children: React.ReactNode[] | React.ReactNode,
|
|
11
|
+
className?: string,
|
|
12
|
+
numberOfRounds: number,
|
|
13
|
+
numberOfGames: number,
|
|
14
|
+
isOdd: boolean,
|
|
15
|
+
} & GlobalProps
|
|
16
|
+
|
|
17
|
+
// Game component (modeled after Item)
|
|
18
|
+
const Game = (props: LayoutGameProps) => {
|
|
19
|
+
const { children, className, numberOfRounds, numberOfGames, isOdd } = props
|
|
20
|
+
const dynamicInlineProps = globalInlineProps(props)
|
|
21
|
+
|
|
22
|
+
const numberOfChildren = Array.isArray(children) ? children.length : 0
|
|
23
|
+
|
|
24
|
+
const isMultiple = Array.isArray(children)
|
|
25
|
+
|
|
26
|
+
let ratio = 0
|
|
27
|
+
let exponent
|
|
28
|
+
if (numberOfGames > 1) {
|
|
29
|
+
exponent = (numberOfRounds) - Math.log2(numberOfGames) - 1
|
|
30
|
+
ratio = 2 ** exponent
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (numberOfChildren === 2) {
|
|
34
|
+
const [firstChild, secondChild] = React.Children.toArray(children)
|
|
35
|
+
|
|
36
|
+
if (React.isValidElement(firstChild) && React.isValidElement(secondChild)) {
|
|
37
|
+
return (
|
|
38
|
+
<div
|
|
39
|
+
className={classnames('layout_game', globalProps(props), className)}
|
|
40
|
+
style={dynamicInlineProps}
|
|
41
|
+
>
|
|
42
|
+
<Card
|
|
43
|
+
marginY="xs"
|
|
44
|
+
padding="none"
|
|
45
|
+
shadow="deep"
|
|
46
|
+
>
|
|
47
|
+
<Card.Body padding="xs">{firstChild}</Card.Body>
|
|
48
|
+
<SectionSeparator />
|
|
49
|
+
<Card.Body padding="xs">{secondChild}</Card.Body>
|
|
50
|
+
</Card>
|
|
51
|
+
{isOdd && numberOfGames > 1 &&
|
|
52
|
+
<div
|
|
53
|
+
className="half_box"
|
|
54
|
+
style={{ height: `calc(${ratio} * 100% + 4px)` }}
|
|
55
|
+
/>
|
|
56
|
+
}
|
|
57
|
+
</div>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div
|
|
64
|
+
className={classnames('layout_game', globalProps(props), className)}
|
|
65
|
+
style={dynamicInlineProps}
|
|
66
|
+
>
|
|
67
|
+
{((!isMultiple && children) || numberOfChildren >= 1 )? (
|
|
68
|
+
children
|
|
69
|
+
) : (
|
|
70
|
+
<Card
|
|
71
|
+
marginY="xs"
|
|
72
|
+
padding="none"
|
|
73
|
+
shadow="deep"
|
|
74
|
+
>
|
|
75
|
+
<Card.Body padding="xs">To be determined...</Card.Body>
|
|
76
|
+
<SectionSeparator />
|
|
77
|
+
<Card.Body padding="xs">To be determined...</Card.Body>
|
|
78
|
+
</Card>
|
|
79
|
+
)}
|
|
80
|
+
{isOdd && numberOfGames > 1 &&
|
|
81
|
+
<div
|
|
82
|
+
className="half_box"
|
|
83
|
+
style={{ height: `calc(${ratio} * 100% + 4px)` }}
|
|
84
|
+
/>
|
|
85
|
+
}
|
|
86
|
+
</div>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export default Game
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import classnames from 'classnames'
|
|
3
|
+
|
|
4
|
+
import { GlobalProps, globalProps, globalInlineProps } from '../../utilities/globalProps'
|
|
5
|
+
|
|
6
|
+
type LayoutRoundLabelProps = {
|
|
7
|
+
children: React.ReactNode[] | React.ReactNode,
|
|
8
|
+
className?: string,
|
|
9
|
+
} & GlobalProps
|
|
10
|
+
|
|
11
|
+
export const RoundLabel = (props: LayoutRoundLabelProps) => {
|
|
12
|
+
const { children, className } = props
|
|
13
|
+
const dynamicInlineProps = globalInlineProps(props)
|
|
14
|
+
return (
|
|
15
|
+
<div
|
|
16
|
+
className={classnames('layout_round_label', className)}
|
|
17
|
+
style={dynamicInlineProps}
|
|
18
|
+
>
|
|
19
|
+
{children}
|
|
20
|
+
</div>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type LayoutRoundProps = {
|
|
25
|
+
children: React.ReactNode[] | React.ReactNode,
|
|
26
|
+
className?: string,
|
|
27
|
+
numberOfRounds: number,
|
|
28
|
+
} & GlobalProps
|
|
29
|
+
|
|
30
|
+
export const Round = (props: LayoutRoundProps) => {
|
|
31
|
+
const { children, className, numberOfRounds } = props
|
|
32
|
+
const dynamicInlineProps = globalInlineProps(props)
|
|
33
|
+
const numberOfChildren = Array.isArray(children) ? children.length : 0
|
|
34
|
+
|
|
35
|
+
const childrenWithProps = Array.isArray(children) ? children.map((child, index) =>
|
|
36
|
+
React.isValidElement(child) ? React.cloneElement(child, { numberOfRounds, numberOfGames: numberOfChildren, isOdd: index % 2 === 0, key: `child_${index}` }) : child
|
|
37
|
+
) : children
|
|
38
|
+
|
|
39
|
+
const rightConnectors = Array.from({ length: numberOfChildren / 2 }, (_, index) => (
|
|
40
|
+
<div
|
|
41
|
+
className="right_connector"
|
|
42
|
+
key={`right_connector_${index}`}
|
|
43
|
+
/>
|
|
44
|
+
))
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<>
|
|
48
|
+
<div
|
|
49
|
+
className={classnames('layout_round', globalProps(props), className)}
|
|
50
|
+
style={dynamicInlineProps}
|
|
51
|
+
>
|
|
52
|
+
{childrenWithProps}
|
|
53
|
+
</div>
|
|
54
|
+
<div className="connector_container">{rightConnectors}</div>
|
|
55
|
+
</>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
@@ -8,7 +8,7 @@ import Highcharts from "highcharts";
|
|
|
8
8
|
import { highchartsTheme } from "../pb_dashboard/pbChartsLightTheme";
|
|
9
9
|
import { highchartsDarkTheme } from "../pb_dashboard/pbChartsDarkTheme";
|
|
10
10
|
import mapColors from "../pb_dashboard/pbChartsColorsHelper";
|
|
11
|
-
import { merge } from '
|
|
11
|
+
import { merge } from '../utilities/object'
|
|
12
12
|
|
|
13
13
|
type LineGraphProps = {
|
|
14
14
|
align?: "left" | "right" | "center";
|
|
@@ -73,7 +73,7 @@ test('adds icon', () => {
|
|
|
73
73
|
|
|
74
74
|
const kit = screen.getByTestId('icon-test')
|
|
75
75
|
|
|
76
|
-
const icon = kit.querySelector('.
|
|
76
|
+
const icon = kit.querySelector('.pb_custom_icon')
|
|
77
77
|
expect(icon).toBeInTheDocument();
|
|
78
78
|
})
|
|
79
79
|
|
|
@@ -87,7 +87,7 @@ test('adds icon right', () => {
|
|
|
87
87
|
|
|
88
88
|
const kit = screen.getByTestId('icon-right-test')
|
|
89
89
|
|
|
90
|
-
const icon = kit.querySelector('.
|
|
90
|
+
const icon = kit.querySelector('.pb_custom_icon')
|
|
91
91
|
expect(icon).toBeInTheDocument();
|
|
92
92
|
})
|
|
93
93
|
|
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
.pb_multi_level_select {
|
|
11
11
|
font-family: $font-family-base;
|
|
12
12
|
|
|
13
|
+
&.error {
|
|
14
|
+
.wrapper {
|
|
15
|
+
.input_wrapper {
|
|
16
|
+
border-color: $error;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
[class*=pb_body_kit_negative] {
|
|
20
|
+
margin-top: $space_xxs;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
13
23
|
.wrapper {
|
|
14
24
|
position: relative;
|
|
15
25
|
|
|
@@ -92,4 +102,17 @@
|
|
|
92
102
|
.open {
|
|
93
103
|
display: block;
|
|
94
104
|
}
|
|
105
|
+
|
|
106
|
+
&.dark {
|
|
107
|
+
&.error {
|
|
108
|
+
.wrapper {
|
|
109
|
+
.input_wrapper {
|
|
110
|
+
border-color: $error_dark;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
[class*=pb_body_kit_negative] {
|
|
114
|
+
color: $error_dark;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
95
118
|
}
|
|
@@ -7,9 +7,12 @@ import {
|
|
|
7
7
|
buildDataProps,
|
|
8
8
|
buildHtmlProps,
|
|
9
9
|
} from "../utilities/props";
|
|
10
|
+
import { cloneDeep } from "../utilities/object";
|
|
11
|
+
|
|
10
12
|
import Icon from "../pb_icon/_icon";
|
|
11
13
|
import FormPill from "../pb_form_pill/_form_pill";
|
|
12
|
-
import
|
|
14
|
+
import Body from "../pb_body/_body";
|
|
15
|
+
import Caption from "../pb_caption/_caption";
|
|
13
16
|
import MultiLevelSelectOptions from "./multi_level_select_options";
|
|
14
17
|
import MultiLevelSelectContext from "./context";
|
|
15
18
|
|
|
@@ -35,11 +38,14 @@ type MultiLevelSelectProps = {
|
|
|
35
38
|
className?: string
|
|
36
39
|
data?: { [key: string]: string }
|
|
37
40
|
disabled?: boolean
|
|
41
|
+
error?: string
|
|
38
42
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
|
39
43
|
id?: string
|
|
40
44
|
inputDisplay?: "pills" | "none"
|
|
41
45
|
inputName?: string
|
|
46
|
+
label?: string
|
|
42
47
|
name?: string
|
|
48
|
+
required?: boolean
|
|
43
49
|
returnAllSelected?: boolean
|
|
44
50
|
treeData?: { [key: string]: string; }[] | any
|
|
45
51
|
onChange?: (event: { target: { name?: string; value: any } }) => void
|
|
@@ -56,11 +62,14 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
56
62
|
className,
|
|
57
63
|
data = {},
|
|
58
64
|
disabled = false,
|
|
65
|
+
error,
|
|
59
66
|
htmlOptions = {},
|
|
60
67
|
id,
|
|
61
68
|
inputDisplay = "pills",
|
|
62
69
|
inputName,
|
|
63
70
|
name,
|
|
71
|
+
label,
|
|
72
|
+
required = false,
|
|
64
73
|
returnAllSelected = false,
|
|
65
74
|
treeData,
|
|
66
75
|
onChange = () => null,
|
|
@@ -77,6 +86,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
77
86
|
const htmlProps = buildHtmlProps(htmlOptions);
|
|
78
87
|
const classes = classnames(
|
|
79
88
|
buildCss("pb_multi_level_select"),
|
|
89
|
+
error && "error",
|
|
80
90
|
globalProps(props),
|
|
81
91
|
className
|
|
82
92
|
);
|
|
@@ -439,6 +449,12 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
439
449
|
className={classes}
|
|
440
450
|
id={id}
|
|
441
451
|
>
|
|
452
|
+
{label &&
|
|
453
|
+
<Caption
|
|
454
|
+
marginBottom="xs"
|
|
455
|
+
text={label}
|
|
456
|
+
/>
|
|
457
|
+
}
|
|
442
458
|
<MultiLevelSelectContext.Provider value={{
|
|
443
459
|
variant,
|
|
444
460
|
inputName,
|
|
@@ -462,6 +478,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
462
478
|
disabled={disabled}
|
|
463
479
|
key={selectedItem.id}
|
|
464
480
|
name={`${name}[]`}
|
|
481
|
+
required={required}
|
|
465
482
|
type="hidden"
|
|
466
483
|
value={selectedItem.id}
|
|
467
484
|
/>
|
|
@@ -476,6 +493,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
476
493
|
disabled={disabled}
|
|
477
494
|
key={item.id}
|
|
478
495
|
name={`${name}[]`}
|
|
496
|
+
required={required}
|
|
479
497
|
type="hidden"
|
|
480
498
|
value={item.id}
|
|
481
499
|
/>
|
|
@@ -488,6 +506,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
488
506
|
disabled={disabled}
|
|
489
507
|
key={item.id}
|
|
490
508
|
name={`${name}[]`}
|
|
509
|
+
required={required}
|
|
491
510
|
type="hidden"
|
|
492
511
|
value={item.id}
|
|
493
512
|
/>
|
|
@@ -548,6 +567,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
548
567
|
} selected`
|
|
549
568
|
: "Start typing..."
|
|
550
569
|
}
|
|
570
|
+
required={required}
|
|
551
571
|
value={singleSelectedItem.value || filterItem}
|
|
552
572
|
/>
|
|
553
573
|
</div>
|
|
@@ -580,6 +600,13 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
|
|
|
580
600
|
</div>
|
|
581
601
|
</div>
|
|
582
602
|
</MultiLevelSelectContext.Provider>
|
|
603
|
+
{error &&
|
|
604
|
+
<Body
|
|
605
|
+
dark={props.dark}
|
|
606
|
+
status="negative"
|
|
607
|
+
text={error}
|
|
608
|
+
/>
|
|
609
|
+
}
|
|
583
610
|
</div>
|
|
584
611
|
);
|
|
585
612
|
}) as MultiLevelSelectComponent;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<% treeData = [{
|
|
2
|
+
label: "Power Home Remodeling",
|
|
3
|
+
value: "Power Home Remodeling",
|
|
4
|
+
id: "100",
|
|
5
|
+
expanded: true,
|
|
6
|
+
children: [
|
|
7
|
+
{
|
|
8
|
+
label: "People",
|
|
9
|
+
value: "People",
|
|
10
|
+
id: "101",
|
|
11
|
+
expanded: true,
|
|
12
|
+
children: [
|
|
13
|
+
{
|
|
14
|
+
label: "Talent Acquisition",
|
|
15
|
+
value: "Talent Acquisition",
|
|
16
|
+
id: "102",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
label: "Business Affairs",
|
|
20
|
+
value: "Business Affairs",
|
|
21
|
+
id: "103",
|
|
22
|
+
children: [
|
|
23
|
+
{
|
|
24
|
+
label: "Initiatives",
|
|
25
|
+
value: "Initiatives",
|
|
26
|
+
id: "104",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
label: "Learning & Development",
|
|
30
|
+
value: "Learning & Development",
|
|
31
|
+
id: "105",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
label: "People Experience",
|
|
37
|
+
value: "People Experience",
|
|
38
|
+
id: "106",
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: "Contact Center",
|
|
44
|
+
value: "Contact Center",
|
|
45
|
+
id: "107",
|
|
46
|
+
children: [
|
|
47
|
+
{
|
|
48
|
+
label: "Appointment Management",
|
|
49
|
+
value: "Appointment Management",
|
|
50
|
+
id: "108",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
label: "Customer Service",
|
|
54
|
+
value: "Customer Service",
|
|
55
|
+
id: "109",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: "Energy",
|
|
59
|
+
value: "Energy",
|
|
60
|
+
id: "110",
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}] %>
|
|
66
|
+
|
|
67
|
+
<%= pb_rails("multi_level_select", props: {
|
|
68
|
+
error: "Please make a valid selection",
|
|
69
|
+
id: "multi-level-select-error-rails",
|
|
70
|
+
name: "my_array",
|
|
71
|
+
tree_data: treeData
|
|
72
|
+
}) %>
|