playbook_ui 16.7.0 → 16.8.0.pre.alpha.PLAY2935formbuilderrequiredindicatorbug16780
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 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +5 -1
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +24 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/ColumnLayoutHelper.ts +138 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +144 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +6 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_width.jsx +57 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_width.md +66 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_enable_toggle_expansion_rails.html.erb +62 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_enable_toggle_expansion_rails.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_header.jsx +12 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_header.md +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_header_rails.html.erb +16 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_header_rails.md +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_scroll_limitation.jsx +68 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sticky_scroll_limitation.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +16 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +12 -5
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +5 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.json +180 -5839
- data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.overrides.json +5 -30
- data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_column_definitions_styling.json +4 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_card/_card.tsx +1 -1
- data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
- data/app/pb_kits/playbook/pb_currency/_currency.tsx +9 -6
- data/app/pb_kits/playbook/pb_currency/currency.rb +5 -10
- data/app/pb_kits/playbook/pb_currency/currency.test.js +44 -1
- data/app/pb_kits/playbook/pb_date/docs/_playground.json +13 -17
- data/app/pb_kits/playbook/pb_date/docs/_playground.overrides.json +13 -16
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +3 -2
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +38 -23
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +31 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_dialog_submission.jsx +2 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.html.erb +0 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_inline.jsx +0 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/_playground.json +136 -42
- data/app/pb_kits/playbook/pb_date_picker/docs/_playground.overrides.json +113 -45
- data/app/pb_kits/playbook/pb_date_range_inline/docs/_playground.json +48 -6
- data/app/pb_kits/playbook/pb_date_range_inline/docs/_playground.overrides.json +57 -0
- data/app/pb_kits/playbook/pb_date_range_stacked/docs/_playground.json +28 -5
- data/app/pb_kits/playbook/pb_date_range_stacked/docs/_playground.overrides.json +38 -0
- data/app/pb_kits/playbook/pb_date_stacked/docs/_playground.json +1 -1
- data/app/pb_kits/playbook/pb_date_stacked/docs/_playground.overrides.json +1 -1
- data/app/pb_kits/playbook/pb_date_time/docs/_playground.json +16 -3
- data/app/pb_kits/playbook/pb_date_time/docs/_playground.overrides.json +16 -3
- data/app/pb_kits/playbook/pb_date_time_stacked/docs/_playground.json +11 -15
- data/app/pb_kits/playbook/pb_date_time_stacked/docs/_playground.overrides.json +11 -15
- data/app/pb_kits/playbook/pb_date_year_stacked/docs/_playground.json +4 -4
- data/app/pb_kits/playbook/pb_date_year_stacked/docs/_playground.overrides.json +4 -4
- data/app/pb_kits/playbook/pb_detail/docs/_playground.json +12 -18
- data/app/pb_kits/playbook/pb_detail/docs/_playground.overrides.json +13 -12
- data/app/pb_kits/playbook/pb_dialog/docs/_playground.json +108 -42
- data/app/pb_kits/playbook/pb_dialog/docs/_playground.overrides.json +88 -40
- data/app/pb_kits/playbook/pb_distribution_bar/docs/_playground.json +65 -7
- data/app/pb_kits/playbook/pb_distribution_bar/docs/_playground.overrides.json +45 -0
- data/app/pb_kits/playbook/pb_draggable/_draggable.scss +19 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.md +2 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_react.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.md +2 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_react.md +3 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.md +3 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_react.md +3 -1
- data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +16 -0
- data/app/pb_kits/playbook/pb_draggable/draggable_container.html.erb +3 -1
- data/app/pb_kits/playbook/pb_draggable/draggable_item.html.erb +1 -0
- data/app/pb_kits/playbook/pb_draggable/index.js +149 -7
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +1 -0
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +67 -1
- data/app/pb_kits/playbook/pb_draggable/touchDrag.test.js +38 -0
- data/app/pb_kits/playbook/pb_draggable/utilities/touchDrag.ts +173 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_playground.json +318 -21
- data/app/pb_kits/playbook/pb_dropdown/docs/_playground.overrides.json +192 -19
- data/app/pb_kits/playbook/pb_empty_state/docs/_playground.json +77 -12
- data/app/pb_kits/playbook/pb_empty_state/docs/_playground.overrides.json +79 -0
- data/app/pb_kits/playbook/pb_file_upload/docs/_playground.json +98 -13
- data/app/pb_kits/playbook/pb_file_upload/docs/_playground.overrides.json +99 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +20 -19
- data/app/pb_kits/playbook/pb_icon/_icon.scss +2 -1
- data/app/pb_kits/playbook/pb_icon/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_icon/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_link/docs/_playground.json +81 -40
- data/app/pb_kits/playbook/pb_link/docs/_playground.overrides.json +88 -30
- data/app/pb_kits/playbook/pb_list/_list_item.tsx +4 -1
- data/app/pb_kits/playbook/pb_list/item.html.erb +1 -1
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_centered_data.html.erb +90 -0
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_centered_data.jsx +100 -0
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_centered_data.md +1 -0
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.json +4 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +1 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +262 -43
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_default.md +12 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_simple.html.erb +9 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_simple.md +8 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/kit.schema.json +18 -9
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.html.erb +162 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.rb +71 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor_rails.js +202 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky.html.erb +85 -83
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky.jsx +88 -86
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky.md +3 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_external_filter_rails.md +1 -1
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +37 -0
- data/app/pb_kits/playbook/pb_title/docs/_playground.json +72 -23
- data/app/pb_kits/playbook/pb_title/docs/_playground.overrides.json +80 -16
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +133 -102
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +54 -41
- data/app/pb_kits/playbook/pb_tooltip/tooltip.test.jsx +60 -2
- data/dist/chunks/{_pb_line_graph-CIWJe3Gr.js → _pb_line_graph-BgsTI0CL.js} +1 -1
- data/dist/chunks/_typeahead-DA__Kgp5.js +5 -0
- data/dist/chunks/{globalProps-CqO4Tko1.js → globalProps-DOB47YGB.js} +1 -1
- data/dist/chunks/{lib-czQnE40X.js → lib-BzglXly2.js} +2 -2
- data/dist/chunks/vendor.js +4 -4
- data/dist/menu.yml +71 -132
- 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/form_field_builder.rb +2 -0
- data/lib/playbook/version.rb +2 -2
- metadata +31 -10
- data/app/pb_kits/playbook/pb_icon/docs/_icon_fa_kit.html.erb +0 -1
- data/app/pb_kits/playbook/pb_icon/docs/_icon_fa_kit.jsx +0 -21
- data/app/pb_kits/playbook/pb_icon/docs/_icon_fa_kit.md +0 -7
- data/dist/chunks/_typeahead-B_Ac4z84.js +0 -1
|
@@ -22,123 +22,144 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
&.flipped {
|
|
39
|
-
margin-top: 15px;
|
|
40
|
-
.arrow {
|
|
41
|
-
border-color: transparent transparent $white transparent;
|
|
42
|
-
transform: rotate(180deg);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
25
|
+
$arrow_vertical_offset: calc(50% - #{$space_xs * 1.2});
|
|
26
|
+
|
|
27
|
+
@mixin tooltip-base-styles {
|
|
28
|
+
display: block;
|
|
29
|
+
opacity: 0;
|
|
30
|
+
position: absolute;
|
|
31
|
+
left: $offscreen;
|
|
32
|
+
top: 0;
|
|
33
|
+
animation-name: fadeIn;
|
|
34
|
+
animation-duration: 150ms;
|
|
35
|
+
animation-timing-function: linear;
|
|
36
|
+
animation-fill-mode: forwards;
|
|
45
37
|
|
|
38
|
+
&.flipped {
|
|
39
|
+
margin-top: 15px;
|
|
46
40
|
.arrow {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
top: 100%;
|
|
50
|
-
left: calc(50% - 10px);
|
|
51
|
-
border-color: $white transparent transparent transparent;
|
|
52
|
-
border-style: solid;
|
|
53
|
-
border-width: 10px;
|
|
54
|
-
margin-bottom: 50px;
|
|
41
|
+
border-color: transparent transparent $white transparent;
|
|
42
|
+
transform: rotate(180deg);
|
|
55
43
|
}
|
|
44
|
+
}
|
|
56
45
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
46
|
+
.arrow {
|
|
47
|
+
content: " ";
|
|
48
|
+
position: absolute;
|
|
49
|
+
top: 100%;
|
|
50
|
+
left: calc(50% - 10px);
|
|
51
|
+
border-color: $white transparent transparent transparent;
|
|
52
|
+
border-style: solid;
|
|
53
|
+
border-width: 10px;
|
|
54
|
+
margin-bottom: 50px;
|
|
55
|
+
}
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
&.visible {
|
|
58
|
+
z-index: $z_max !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&.visible,
|
|
62
|
+
&.show {
|
|
63
|
+
z-index: $z_max;
|
|
64
|
+
padding: $space_xs $space_sm;
|
|
65
|
+
box-shadow: $shadow_deeper;
|
|
66
|
+
border-radius: $border_rad_light;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
&.visible {
|
|
70
|
+
color: $white;
|
|
71
|
+
background-color: rgba($black, $opacity_9);
|
|
72
|
+
|
|
73
|
+
.arrow_bg {
|
|
74
|
+
width: 10px;
|
|
75
|
+
height: 10px;
|
|
68
76
|
background-color: rgba($black, $opacity_9);
|
|
69
|
-
|
|
70
|
-
box-shadow: -8px 0 28px 0 $tooltip_shadow;
|
|
71
|
-
}
|
|
72
|
-
&.bottom {
|
|
73
|
-
box-shadow: 0 -12px 28px 0 $tooltip_shadow;
|
|
74
|
-
}
|
|
75
|
-
&.left {
|
|
76
|
-
box-shadow: 8px 0 28px 0 $tooltip_shadow;
|
|
77
|
-
}
|
|
78
|
-
// react arrow
|
|
79
|
-
.arrow_bg {
|
|
80
|
-
width: 10px;
|
|
81
|
-
height: 10px;
|
|
82
|
-
background-color: rgba($black, $opacity_9);
|
|
83
|
-
transform: rotate(45deg);
|
|
84
|
-
}
|
|
77
|
+
transform: rotate(45deg);
|
|
85
78
|
}
|
|
79
|
+
}
|
|
86
80
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
81
|
+
&.show {
|
|
82
|
+
opacity: 1;
|
|
83
|
+
margin-bottom: $space_sm;
|
|
84
|
+
color: $white;
|
|
85
|
+
background-color: rgba($black, $opacity_9);
|
|
86
|
+
|
|
87
|
+
&.fade_out {
|
|
88
|
+
animation-name: fadeOut;
|
|
89
|
+
animation-duration: 150ms;
|
|
90
|
+
animation-timing-function: linear;
|
|
91
|
+
animation-fill-mode: forwards;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.arrow {
|
|
95
|
+
border-color: $black transparent transparent transparent;
|
|
96
|
+
opacity: $opacity_9;
|
|
103
97
|
}
|
|
104
98
|
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@mixin tooltip-dark-styles {
|
|
102
|
+
&.visible {
|
|
103
|
+
color: $charcoal;
|
|
104
|
+
background-color: $white;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&.show {
|
|
108
|
+
color: $charcoal;
|
|
109
|
+
background-color: $white;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.arrow {
|
|
113
|
+
border-color: $white transparent transparent transparent;
|
|
114
|
+
opacity: $opacity_10;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.arrow_bg {
|
|
118
|
+
background-color: $white;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&.flipped {
|
|
122
|
+
.arrow {
|
|
123
|
+
border-color: transparent transparent $black transparent;
|
|
124
|
+
opacity: $opacity_9;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.pb_tooltip_kit {
|
|
130
|
+
~ .tooltip_tooltip,
|
|
131
|
+
.tooltip_tooltip {
|
|
132
|
+
@include tooltip-base-styles;
|
|
133
|
+
}
|
|
105
134
|
|
|
106
135
|
&.dark {
|
|
107
|
-
|
|
136
|
+
&.tooltip_tooltip,
|
|
137
|
+
~ .tooltip_tooltip,
|
|
108
138
|
.tooltip_tooltip {
|
|
109
|
-
|
|
110
|
-
&.visible {
|
|
111
|
-
color: $charcoal;
|
|
112
|
-
background-color: $white;
|
|
113
|
-
}
|
|
114
|
-
//rails
|
|
115
|
-
&.show {
|
|
116
|
-
color: $charcoal;
|
|
117
|
-
background-color: $white;
|
|
118
|
-
}
|
|
119
|
-
.arrow {
|
|
120
|
-
border-color: $white transparent transparent transparent;
|
|
121
|
-
opacity: $opacity_10;
|
|
122
|
-
}
|
|
123
|
-
// react arrow
|
|
124
|
-
.arrow_bg {
|
|
125
|
-
background-color: $white;
|
|
126
|
-
}
|
|
127
|
-
&.flipped {
|
|
128
|
-
.arrow {
|
|
129
|
-
border-color: transparent transparent $black transparent;
|
|
130
|
-
opacity: $opacity_9;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
139
|
+
@include tooltip-dark-styles;
|
|
133
140
|
}
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
143
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
.tooltip_tooltip {
|
|
145
|
+
@include tooltip-base-styles;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.tooltip_tooltip.dark,
|
|
149
|
+
.pb_tooltip_kit.dark ~ .tooltip_tooltip,
|
|
150
|
+
.pb_tooltip_kit.dark .tooltip_tooltip {
|
|
151
|
+
@include tooltip-dark-styles;
|
|
152
|
+
}
|
|
140
153
|
|
|
141
|
-
|
|
154
|
+
.tooltip_tooltip,
|
|
155
|
+
.pb_tooltip_kit ~ .tooltip_tooltip,
|
|
156
|
+
.pb_tooltip_kit .tooltip_tooltip {
|
|
157
|
+
&[data-placement="right"],
|
|
158
|
+
&[data-placement="right-start"],
|
|
159
|
+
&[data-placement="right-end"],
|
|
160
|
+
&[data-popper-placement="right"],
|
|
161
|
+
&[data-popper-placement="right-start"],
|
|
162
|
+
&[data-popper-placement="right-end"] {
|
|
142
163
|
box-shadow: -8px 0 28px 0 $tooltip_shadow;
|
|
143
164
|
.arrow {
|
|
144
165
|
left: -18px;
|
|
@@ -148,11 +169,16 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
|
148
169
|
transform: rotate(90deg);
|
|
149
170
|
}
|
|
150
171
|
&.flipped .arrow {
|
|
151
|
-
|
|
172
|
+
transform: rotate(270deg);
|
|
152
173
|
}
|
|
153
174
|
}
|
|
154
175
|
|
|
155
|
-
&[data-
|
|
176
|
+
&[data-placement="bottom"],
|
|
177
|
+
&[data-placement="bottom-start"],
|
|
178
|
+
&[data-placement="bottom-end"],
|
|
179
|
+
&[data-popper-placement="bottom"],
|
|
180
|
+
&[data-popper-placement="bottom-start"],
|
|
181
|
+
&[data-popper-placement="bottom-end"] {
|
|
156
182
|
box-shadow: 0 -12px 28px 0 $tooltip_shadow;
|
|
157
183
|
.arrow {
|
|
158
184
|
top: -18px;
|
|
@@ -164,7 +190,12 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
|
164
190
|
}
|
|
165
191
|
}
|
|
166
192
|
|
|
167
|
-
&[data-
|
|
193
|
+
&[data-placement="left"],
|
|
194
|
+
&[data-placement="left-start"],
|
|
195
|
+
&[data-placement="left-end"],
|
|
196
|
+
&[data-popper-placement="left"],
|
|
197
|
+
&[data-popper-placement="left-start"],
|
|
198
|
+
&[data-popper-placement="left-end"] {
|
|
168
199
|
box-shadow: 8px 0 28px 0 $tooltip_shadow;
|
|
169
200
|
.arrow {
|
|
170
201
|
margin-bottom: 0;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { useRef, useState, forwardRef, ForwardedRef } from "react"
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
+
autoUpdate,
|
|
4
5
|
arrow,
|
|
6
|
+
FloatingPortal,
|
|
5
7
|
flip,
|
|
6
8
|
offset,
|
|
7
9
|
Placement,
|
|
@@ -43,6 +45,8 @@ type TooltipProps = {
|
|
|
43
45
|
forceOpenTooltip?: boolean,
|
|
44
46
|
} & GlobalProps
|
|
45
47
|
|
|
48
|
+
const TOOLTIP_BOUNDARY_PADDING = 8
|
|
49
|
+
|
|
46
50
|
const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): React.ReactElement => {
|
|
47
51
|
const {
|
|
48
52
|
aria = {},
|
|
@@ -90,17 +94,20 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
|
90
94
|
y,
|
|
91
95
|
} = useFloating({
|
|
92
96
|
strategy: position,
|
|
97
|
+
whileElementsMounted: autoUpdate,
|
|
93
98
|
middleware: [
|
|
94
|
-
|
|
95
|
-
element: arrowRef,
|
|
96
|
-
}),
|
|
99
|
+
offset(10),
|
|
97
100
|
flip({
|
|
98
101
|
fallbackPlacements: ["top", "right", "bottom", "left"],
|
|
99
102
|
fallbackStrategy: "initialPlacement",
|
|
100
103
|
flipAlignment: false,
|
|
104
|
+
padding: TOOLTIP_BOUNDARY_PADDING,
|
|
105
|
+
}),
|
|
106
|
+
shift({ padding: TOOLTIP_BOUNDARY_PADDING }),
|
|
107
|
+
arrow({
|
|
108
|
+
element: arrowRef,
|
|
109
|
+
padding: TOOLTIP_BOUNDARY_PADDING,
|
|
101
110
|
}),
|
|
102
|
-
offset(10),
|
|
103
|
-
shift()
|
|
104
111
|
],
|
|
105
112
|
open,
|
|
106
113
|
onOpenChange(open) {
|
|
@@ -136,6 +143,7 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
|
136
143
|
right: "left",
|
|
137
144
|
top: "bottom",
|
|
138
145
|
}[placement.split("-")[0]]
|
|
146
|
+
const arrowPlacementStyle = staticSide ? { [staticSide]: "-5px" } : {}
|
|
139
147
|
|
|
140
148
|
const tooltipSizing = () => {
|
|
141
149
|
return Object.assign(
|
|
@@ -174,43 +182,48 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
|
174
182
|
{children}
|
|
175
183
|
</div>
|
|
176
184
|
{(open || forceOpenTooltip) && (
|
|
177
|
-
<
|
|
178
|
-
{...getFloatingProps({
|
|
179
|
-
className: `tooltip_tooltip ${placement} visible`,
|
|
180
|
-
ref: refs.setFloating,
|
|
181
|
-
role: "tooltip",
|
|
182
|
-
style: {
|
|
183
|
-
...tooltipSizing(),
|
|
184
|
-
position: strategy,
|
|
185
|
-
top: y ?? 0,
|
|
186
|
-
left: x ?? 0,
|
|
187
|
-
zIndex: zIndex ?? 0,
|
|
188
|
-
},
|
|
189
|
-
})}
|
|
190
|
-
>
|
|
191
|
-
<Flex
|
|
192
|
-
align="center"
|
|
193
|
-
gap="xs"
|
|
194
|
-
>
|
|
195
|
-
{icon && (
|
|
196
|
-
<i className={`pb_icon_kit`}>
|
|
197
|
-
<Icon
|
|
198
|
-
icon={icon}
|
|
199
|
-
/>
|
|
200
|
-
</i>)}
|
|
201
|
-
{text}
|
|
202
|
-
</Flex>
|
|
185
|
+
<FloatingPortal>
|
|
203
186
|
<div
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
187
|
+
data-placement={placement}
|
|
188
|
+
{...getFloatingProps({
|
|
189
|
+
className: classnames(`tooltip_tooltip ${placement} visible`, {
|
|
190
|
+
dark: rest.dark,
|
|
191
|
+
}),
|
|
192
|
+
ref: refs.setFloating,
|
|
193
|
+
role: "tooltip",
|
|
194
|
+
style: {
|
|
195
|
+
...tooltipSizing(),
|
|
196
|
+
position: strategy,
|
|
197
|
+
top: y ?? 0,
|
|
198
|
+
left: x ?? 0,
|
|
199
|
+
...(zIndex ? { zIndex } : {}),
|
|
200
|
+
},
|
|
201
|
+
})}
|
|
202
|
+
>
|
|
203
|
+
<Flex
|
|
204
|
+
align="center"
|
|
205
|
+
gap="xs"
|
|
206
|
+
>
|
|
207
|
+
{icon && (
|
|
208
|
+
<i className={`pb_icon_kit`}>
|
|
209
|
+
<Icon
|
|
210
|
+
icon={icon}
|
|
211
|
+
/>
|
|
212
|
+
</i>)}
|
|
213
|
+
{text}
|
|
214
|
+
</Flex>
|
|
215
|
+
<div
|
|
216
|
+
className="arrow_bg"
|
|
217
|
+
ref={arrowRef}
|
|
218
|
+
style={{
|
|
219
|
+
position: "absolute",
|
|
220
|
+
left: arrowX != null ? `${arrowX}px` : "",
|
|
221
|
+
top: arrowY != null ? `${arrowY}px` : "",
|
|
222
|
+
...arrowPlacementStyle,
|
|
223
|
+
}}
|
|
224
|
+
/>
|
|
225
|
+
</div>
|
|
226
|
+
</FloatingPortal>
|
|
214
227
|
)}
|
|
215
228
|
</>
|
|
216
229
|
)
|
|
@@ -2,6 +2,17 @@ import React from "react";
|
|
|
2
2
|
import { cleanup, render, screen, fireEvent, waitFor } from "../utilities/test-utils";
|
|
3
3
|
import { Button, Tooltip } from "playbook-ui";
|
|
4
4
|
|
|
5
|
+
jest.mock("@floating-ui/react", () => {
|
|
6
|
+
const actual = jest.requireActual("@floating-ui/react")
|
|
7
|
+
|
|
8
|
+
return {
|
|
9
|
+
...actual,
|
|
10
|
+
useFloating: jest.fn(actual.useFloating),
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
const { useFloating } = require("@floating-ui/react")
|
|
15
|
+
|
|
5
16
|
function TooltipTest() {
|
|
6
17
|
const text = "this is a text",
|
|
7
18
|
placement = "top",
|
|
@@ -35,7 +46,10 @@ test("opens on mouseenter", async () => {
|
|
|
35
46
|
|
|
36
47
|
fireEvent.mouseEnter(screen.getByRole("tooltip_trigger"));
|
|
37
48
|
await waitFor(() => {
|
|
38
|
-
|
|
49
|
+
const tooltip = screen.queryByRole("tooltip");
|
|
50
|
+
|
|
51
|
+
expect(tooltip).toBeInTheDocument();
|
|
52
|
+
expect(tooltip?.closest("[data-floating-ui-portal]")).toBeInTheDocument();
|
|
39
53
|
cleanup();
|
|
40
54
|
})
|
|
41
55
|
});
|
|
@@ -72,6 +86,7 @@ test("has default position absolute", async () => {
|
|
|
72
86
|
fireEvent.mouseEnter(screen.getByRole("tooltip_trigger"));
|
|
73
87
|
await waitFor(() => {
|
|
74
88
|
expect(screen.queryByRole("tooltip")).toHaveStyle({"position": "absolute"});
|
|
89
|
+
expect(screen.queryByRole("tooltip")).not.toHaveStyle({"z-index": "0"});
|
|
75
90
|
cleanup();
|
|
76
91
|
})
|
|
77
92
|
|
|
@@ -127,4 +142,47 @@ test("doesn't display tooltip with showTooltip set to false", async () => {
|
|
|
127
142
|
})
|
|
128
143
|
|
|
129
144
|
cleanup();
|
|
130
|
-
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("keeps the arrow visible when placement flips left with center offset", async () => {
|
|
148
|
+
const actual = jest.requireActual("@floating-ui/react")
|
|
149
|
+
|
|
150
|
+
useFloating.mockImplementationOnce((options) => {
|
|
151
|
+
const result = actual.useFloating(options)
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
...result,
|
|
155
|
+
middlewareData: {
|
|
156
|
+
...result.middlewareData,
|
|
157
|
+
arrow: {
|
|
158
|
+
centerOffset: 12,
|
|
159
|
+
x: 6,
|
|
160
|
+
y: 10,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
open: true,
|
|
164
|
+
placement: "left",
|
|
165
|
+
x: 20,
|
|
166
|
+
y: 30,
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
render(
|
|
171
|
+
<Tooltip
|
|
172
|
+
data={{ testid: "left-placement-arrow-test" }}
|
|
173
|
+
forceOpenTooltip
|
|
174
|
+
placement="left"
|
|
175
|
+
text="left placement"
|
|
176
|
+
zIndex="10"
|
|
177
|
+
>
|
|
178
|
+
<Button text="hover me" />
|
|
179
|
+
</Tooltip>
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
const tooltip = await screen.findByRole("tooltip")
|
|
183
|
+
const arrow = tooltip.querySelector(".arrow_bg")
|
|
184
|
+
|
|
185
|
+
expect(tooltip).toHaveAttribute("data-placement", "left")
|
|
186
|
+
expect(arrow).toBeInTheDocument()
|
|
187
|
+
expect(arrow).not.toHaveStyle({ opacity: "0" })
|
|
188
|
+
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx}from"react/jsx-runtime";import{useMemo}from"react";import{b as buildAriaProps,a as buildDataProps,c as buildHtmlProps,d as classnames,e as buildCss,g as globalProps}from"./globalProps-
|
|
1
|
+
import{jsx}from"react/jsx-runtime";import{useMemo}from"react";import{b as buildAriaProps,a as buildDataProps,c as buildHtmlProps,d as classnames,e as buildCss,g as globalProps}from"./globalProps-DOB47YGB.js";import Highcharts from"highcharts";import HighchartsReact from"highcharts-react-official";import{t as typography,c as colors}from"./lib-BzglXly2.js";import highchartsMore from"highcharts/highcharts-more";import solidGauge from"highcharts/modules/solid-gauge";const barGraphTheme={title:{text:"",style:{color:colors.text_lt_default,fontFamily:typography.font_family_base,fontWeight:typography.bold,fontSize:typography.heading_3}},subtitle:{text:"",style:{fontFamily:typography.font_family_base,color:colors.text_lt_light,fontWeight:typography.regular,fontSize:typography.text_base}},chart:{type:"column"},tooltip:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,colors.bg_dark],[1,colors.bg_dark]]},style:{fontFamily:typography.font_family_base,color:colors.text_dk_default,fontWeight:typography.regular,fontSize:typography.text_smaller}},colors:[colors.data_1,colors.data_2,colors.data_3,colors.data_4,colors.data_5,colors.data_6,colors.data_7],credits:{enabled:false},legend:{enabled:false,itemStyle:{color:colors.text_lt_light,fill:colors.text_lt_light,fontSize:typography.text_smaller}},xAxis:{gridLineWidth:0,lineColor:colors.border_light,tickColor:colors.border_light,labels:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}},title:{style:{color:colors.text_lt_default,fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_4}}},yAxis:{alternateGridColor:void 0,minorTickInterval:null,gridLineColor:colors.border_light,minorGridLineColor:colors.border_light,lineWidth:0,tickWidth:0,labels:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}},title:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}}}};const PbBarGraph=props=>{const{aria:aria={},data:data={},id:id,htmlOptions:htmlOptions={},options:options,className:className}=props;const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const classes=classnames(buildCss("pb_pb_bar_graph"),globalProps(props),className);const mergedOptions=useMemo((()=>{if(!options||typeof options!=="object"){console.error("❌ Invalid options passed to <PbBarGraph />",options);return{}}return Highcharts.merge({},barGraphTheme,options)}),[options]);return jsx("div",{children:jsx(HighchartsReact,{containerProps:{className:classnames(classes),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:mergedOptions})})};const pbCircleChartTheme={title:{text:"",style:{color:colors.text_lt_default,fontFamily:typography.font_family_base,fontWeight:typography.bold,fontSize:typography.heading_3}},chart:{type:"pie"},tooltip:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,colors.bg_dark],[1,colors.bg_dark]]},pointFormat:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',followPointer:true,shadow:false,borderWidth:0,borderRadius:10,style:{fontFamily:typography.font_family_base,color:colors.text_dk_default,fontWeight:typography.regular,fontSize:typography.text_smaller}},plotOptions:{pie:{dataLabels:{enabled:false,connectorShape:"straight",connectorWidth:3,format:"<div>{point.name}</div>",style:{fontFamily:typography.font_family_base,fontSize:typography.text_smaller,color:colors.text_lt_light,fontWeight:typography.regular,textOutline:"2px $white"}},innerSize:"50%",borderColor:"",borderWidth:null,colors:[colors.data_1,colors.data_2,colors.data_3,colors.data_4,colors.data_5,colors.data_6,colors.data_7]}},legend:{layout:"horizontal",align:"center",verticalAlign:"bottom",itemStyle:{fontFamily:typography.font_family_base,color:colors.text_lt_light,fontWeight:typography.regular,fontSize:typography.text_smaller},itemHoverStyle:{color:colors.text_lt_default},itemHiddenStyle:{color:colors.text_lt_lighter}},credits:{enabled:false}};const PbCircleChart=props=>{const{aria:aria={},className:className,data:data={},id:id,htmlOptions:htmlOptions={},options:options}=props;const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const classes=classnames(buildCss("pb_pb_circle_chart"),globalProps(props),className);const mergedOptions=useMemo((()=>{if(!options||typeof options!=="object"){console.error("❌ Invalid options passed to <PbCircleChart />",options);return{}}return Highcharts.merge({},pbCircleChartTheme,options)}),[options]);return jsx("div",{children:jsx(HighchartsReact,{containerProps:{className:classnames(classes),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:mergedOptions})})};const pbGaugeGraphTheme={title:{text:"",style:{fontFamily:typography.font_family_base,fontSize:typography.text_larger}},chart:{type:"solidgauge",events:{render(){this.container;const arc=this.container.querySelector("path.gauge-pane");if(arc)arc.setAttribute("stroke-linejoin","round")}}},pane:{size:"90%",startAngle:-100,endAngle:100,background:[{borderWidth:20,innerRadius:"90%",outerRadius:"90%",shape:"arc",className:"gauge-pane",borderColor:colors.border_light,borderRadius:"50%"}]},tooltip:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,colors.bg_dark],[1,colors.bg_dark]]},pointFormat:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',followPointer:true,shadow:false,borderWidth:0,borderRadius:10,style:{fontFamily:typography.font_family_base,color:colors.text_dk_default,fontWeight:typography.regular,fontSize:typography.text_smaller}},yAxis:{min:0,max:100,lineWidth:0,tickPositions:[]},plotOptions:{solidgauge:{borderColor:colors.data_1,borderWidth:20,color:colors.data_1,radius:90,innerRadius:"90%",y:-26,dataLabels:{borderWidth:0,color:colors.text_lt_default,enabled:true,format:'<span class="fix">{y:,f}</span>',style:{fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_2},y:-26}}},credits:{enabled:false}};const PbGaugeChart=props=>{const{aria:aria={},className:className,data:data={},htmlOptions:htmlOptions={},id:id,ref:ref,options:options={}}=props;const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const classes=classnames(buildCss("pb_pb_gauge_chart"),globalProps(props),className);const mergedOptions=useMemo((()=>{if(!options||typeof options!=="object"){console.error("❌ Invalid options passed to <PbLineGraph />",options);return{}}return Highcharts.merge({},pbGaugeGraphTheme,options)}),[options]);highchartsMore(Highcharts);solidGauge(Highcharts);return jsx("div",{children:jsx(HighchartsReact,{containerProps:{className:classnames(classes),id:id,ref:ref,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:mergedOptions})})};const pbLineGraphTheme={title:{text:"",style:{color:colors.text_lt_default,fontFamily:typography.font_family_base,fontWeight:typography.bold,fontSize:typography.heading_3}},subtitle:{text:"",style:{fontFamily:typography.font_family_base,color:colors.text_lt_light,fontWeight:typography.regular,fontSize:typography.text_base}},chart:{type:"line"},tooltip:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,colors.bg_dark],[1,colors.bg_dark]]},followPointer:true,shadow:false,borderWidth:0,borderRadius:10,style:{fontFamily:typography.font_family_base,color:colors.text_dk_default,fontWeight:typography.regular,fontSize:typography.text_smaller}},plotOptions:{line:{dataLabels:{enabled:false}}},credits:{enabled:false},legend:{enabled:false,itemStyle:{fontFamily:typography.font_family_base,color:colors.text_lt_light,fontWeight:typography.regular,fontSize:typography.text_smaller},itemHoverStyle:{color:colors.text_lt_default},itemHiddenStyle:{color:colors.text_lt_lighter}},colors:[colors.data_1,colors.data_2,colors.data_3,colors.data_4,colors.data_5,colors.data_6,colors.data_7],xAxis:{gridLineWidth:0,lineColor:colors.border_light,tickColor:colors.border_light,labels:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}},title:{style:{color:colors.text_lt_default,fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_4}}},yAxis:{alternateGridColor:void 0,minorTickInterval:null,gridLineColor:colors.border_light,minorGridLineColor:colors.border_light,lineWidth:0,tickWidth:0,tickPixelInterval:50,labels:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}},title:{style:{fontFamily:typography.font_family_base,color:colors.text_lt_lighter,fontWeight:typography.bold,fontSize:typography.text_smaller}}}};const PbLineGraph=props=>{const{aria:aria={},className:className,data:data={},id:id,htmlOptions:htmlOptions={},options:options}=props;const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const classes=classnames(buildCss("pb_pb_line_graph"),globalProps(props),className);const mergedOptions=useMemo((()=>{if(!options||typeof options!=="object"){console.error("❌ Invalid options passed to <PbLineGraph />",options);return{}}return Highcharts.merge({},pbLineGraphTheme,options)}),[options]);return jsx("div",{children:jsx(HighchartsReact,{containerProps:{className:classnames(classes),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:mergedOptions})})};export{PbBarGraph as P,PbCircleChart as a,PbGaugeChart as b,PbLineGraph as c};
|