playbook_ui 14.14.0 → 14.15.0.pre.alpha.PBNTR902multilevelselecthiddeninputbug6580
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 +127 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +55 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/TablePagination.tsx +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +275 -0
- data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +143 -3
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +66 -0
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +195 -0
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +45 -99
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +73 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +52 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +80 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +123 -7
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -299
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
- data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
- data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
- data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
- data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
- data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
- data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
- data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
- data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
- data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
- data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
- data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
- data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
- data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
- data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +25 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +7 -1
- data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
- data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +7 -1
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
- data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
- data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
- data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
- data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
- data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +2 -2
- data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_select/index.js +38 -0
- data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
- data/app/pb_kits/playbook/pb_select/select.rb +8 -0
- data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
- data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
- data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
- data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
- data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
- data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
- data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
- data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
- data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_title/title.rb +10 -1
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
- data/app/pb_kits/playbook/utilities/object.test.js +99 -0
- data/app/pb_kits/playbook/utilities/object.ts +29 -1
- data/dist/chunks/_typeahead-CaXmU2Fm.js +36 -0
- data/dist/chunks/_weekday_stacked-C7auj4WH.js +45 -0
- data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
- data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
- data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +3 -3
- 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/time_zone_select_field.rb +19 -0
- data/lib/playbook/forms/builder.rb +1 -0
- data/lib/playbook/version.rb +2 -2
- metadata +69 -7
- data/dist/chunks/_typeahead-PqkcDf1H.js +0 -36
- data/dist/chunks/_weekday_stacked-B_pw5Znc.js +0 -45
- data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
@@ -0,0 +1,58 @@
|
|
1
|
+
import React, { useState } from "react"
|
2
|
+
import { useForm } from "react-hook-form"
|
3
|
+
import { Button, Body, Select } from "playbook-ui"
|
4
|
+
|
5
|
+
const SelectReactHook = (props) => {
|
6
|
+
const { register, handleSubmit, formState: { errors } } = useForm({
|
7
|
+
defaultValues: {
|
8
|
+
food: '',
|
9
|
+
},
|
10
|
+
})
|
11
|
+
|
12
|
+
const [submittedData, setSubmittedData] = useState({
|
13
|
+
food: '',
|
14
|
+
})
|
15
|
+
|
16
|
+
const onSubmit = (data) => {
|
17
|
+
setSubmittedData(data)
|
18
|
+
}
|
19
|
+
|
20
|
+
const options = [
|
21
|
+
{
|
22
|
+
value: 1,
|
23
|
+
text: 'Burgers',
|
24
|
+
},
|
25
|
+
{
|
26
|
+
value: 2,
|
27
|
+
text: 'Pizza',
|
28
|
+
},
|
29
|
+
{
|
30
|
+
value: 3,
|
31
|
+
text: 'Tacos',
|
32
|
+
},
|
33
|
+
]
|
34
|
+
|
35
|
+
return (
|
36
|
+
<>
|
37
|
+
<form onSubmit={handleSubmit(onSubmit)}>
|
38
|
+
<Select
|
39
|
+
{...props}
|
40
|
+
{...register("food", { required: true })}
|
41
|
+
error={errors.food ? "Please select a food." : null}
|
42
|
+
label="Favorite Food"
|
43
|
+
options={options}
|
44
|
+
/>
|
45
|
+
<br />
|
46
|
+
<Button htmlType="submit"
|
47
|
+
marginTop="sm"
|
48
|
+
text="Submit"
|
49
|
+
/>
|
50
|
+
</form>
|
51
|
+
<Body padding="xs"
|
52
|
+
text={`Food: ${submittedData.food}`}
|
53
|
+
/>
|
54
|
+
</>
|
55
|
+
)
|
56
|
+
}
|
57
|
+
|
58
|
+
export default SelectReactHook
|
@@ -0,0 +1 @@
|
|
1
|
+
You can pass react-hook-form props to a select kit. You can use `register` which will make the value available for both the form validation and submission.
|
@@ -10,3 +10,4 @@ export { default as SelectInline } from './_select_inline.jsx'
|
|
10
10
|
export { default as SelectInlineShowArrow } from './_select_inline_show_arrow.jsx'
|
11
11
|
export { default as SelectInlineCompact } from './_select_inline_compact.jsx'
|
12
12
|
export { default as SelectMultiple } from './_select_multiple.jsx'
|
13
|
+
export { default as SelectReactHook } from './_select_react_hook.jsx'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import PbEnhancedElement from "../pb_enhanced_element";
|
2
|
+
|
3
|
+
const SELECT_WRAPPER_SELECTOR = "[data-pb-select]";
|
4
|
+
const SELECT_VALIDATION_MESSAGE_CLASS = ".pb_body_kit_negative";
|
5
|
+
|
6
|
+
export default class PbSelect extends PbEnhancedElement {
|
7
|
+
static get selector() {
|
8
|
+
return SELECT_WRAPPER_SELECTOR;
|
9
|
+
}
|
10
|
+
|
11
|
+
connect() {
|
12
|
+
this.setValidationMessage();
|
13
|
+
}
|
14
|
+
|
15
|
+
setValidationMessage() {
|
16
|
+
const validationMessage = this.element.dataset?.validationMessage;
|
17
|
+
|
18
|
+
if (validationMessage) {
|
19
|
+
const selectElement = this.element.querySelector("select");
|
20
|
+
const setErrorTextContent = (text, timeout) => {
|
21
|
+
setTimeout(() => {
|
22
|
+
const errorMessageElement = this.element.querySelector(SELECT_VALIDATION_MESSAGE_CLASS);
|
23
|
+
if (errorMessageElement) {
|
24
|
+
errorMessageElement.textContent = text;
|
25
|
+
} else {
|
26
|
+
setErrorTextContent(text, 100);
|
27
|
+
}
|
28
|
+
}, timeout);
|
29
|
+
};
|
30
|
+
|
31
|
+
selectElement.addEventListener("change", (e) => {
|
32
|
+
if (!e.target.checkValidity()) {
|
33
|
+
setErrorTextContent(validationMessage, 300);
|
34
|
+
}
|
35
|
+
});
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
@@ -1,8 +1,6 @@
|
|
1
|
-
<%=
|
2
|
-
|
3
|
-
|
4
|
-
class: object.classnames,
|
5
|
-
**combined_html_options) do %>
|
1
|
+
<%= pb_content_tag(:div,
|
2
|
+
id: nil,
|
3
|
+
class: object.classnames ) do %>
|
6
4
|
<% if object.label %>
|
7
5
|
<label class="pb_select_kit_label" for="<%= object.name %>">
|
8
6
|
<%= pb_rails("caption", props: { text: object.label, dark: object.dark }) %>
|
@@ -21,6 +21,7 @@ module Playbook
|
|
21
21
|
prop :options, type: Playbook::Props::HashArray, required: false, default: []
|
22
22
|
prop :show_arrow, type: Playbook::Props::Boolean, default: false
|
23
23
|
prop :required, type: Playbook::Props::Boolean, default: false
|
24
|
+
prop :validation_message, type: Playbook::Props::String, default: ""
|
24
25
|
|
25
26
|
def classnames
|
26
27
|
classname + inline_class + compact_class + show_arrow_class
|
@@ -88,6 +89,13 @@ module Playbook
|
|
88
89
|
"app/pb_kits/playbook/utilities/icons/angle-down.svg"
|
89
90
|
end
|
90
91
|
|
92
|
+
def data_attributes
|
93
|
+
data = attributes[:data] || {}
|
94
|
+
data.merge!("data-pb-select" => true)
|
95
|
+
data.merge!("data-validation-message" => validation_message) if validation_message.present?
|
96
|
+
data
|
97
|
+
end
|
98
|
+
|
91
99
|
private
|
92
100
|
|
93
101
|
def error_class
|
@@ -1,8 +1,4 @@
|
|
1
|
-
<%=
|
2
|
-
id: object.id,
|
3
|
-
data: object.data,
|
4
|
-
class: object.classname,
|
5
|
-
**combined_html_options) do %>
|
1
|
+
<%= pb_content_tag do %>
|
6
2
|
|
7
3
|
<% if object.multi %>
|
8
4
|
<%= check_box_tag(object.name, object.value, object.checked, object.additional_input_options) %>
|
@@ -243,7 +243,7 @@ $gap_lg: $height_from_top + $space_lg;
|
|
243
243
|
}
|
244
244
|
[class=pb_timeline_item_left_block] {
|
245
245
|
margin-bottom: $space_lg;
|
246
|
-
width: $space_lg;
|
246
|
+
min-width: $space_lg;
|
247
247
|
}
|
248
248
|
[class=pb_timeline_item_right_block] {
|
249
249
|
@include flex_wrapper(column);
|
@@ -263,7 +263,7 @@ $gap_lg: $height_from_top + $space_lg;
|
|
263
263
|
}
|
264
264
|
[class=pb_timeline_item_left_block] {
|
265
265
|
margin-bottom: $space_lg;
|
266
|
-
width: $space_lg;
|
266
|
+
min-width: $space_lg;
|
267
267
|
}
|
268
268
|
[class=pb_timeline_item_right_block] {
|
269
269
|
@include flex_wrapper(column);
|
@@ -31,6 +31,38 @@
|
|
31
31
|
@include pb_title_thin;
|
32
32
|
}
|
33
33
|
|
34
|
+
&[class*=_display] {
|
35
|
+
font-size: clamp(24px, calc(1.25vw + 5.3vw), 128px);
|
36
|
+
}
|
37
|
+
|
38
|
+
&[class*=_dynamic] {
|
39
|
+
&[class*=_xs] {
|
40
|
+
font-size: min(2vw, 80vw / 16);
|
41
|
+
}
|
42
|
+
|
43
|
+
&[class*=_sm] {
|
44
|
+
font-size: min(2.5vw, 96vw / 16);
|
45
|
+
}
|
46
|
+
|
47
|
+
&[class*=_md] {
|
48
|
+
font-size: min(4vw, 160vw / 16);
|
49
|
+
}
|
50
|
+
|
51
|
+
&[class*=_lg] {
|
52
|
+
font-size: min(5vw, 192vw / 16);
|
53
|
+
}
|
54
|
+
|
55
|
+
&[class*=_xl] {
|
56
|
+
font-size: min(6vw, 224vw / 16);
|
57
|
+
}
|
58
|
+
|
59
|
+
&[class*=_xxl] {
|
60
|
+
font-size: min(8vw, 256vw / 16);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
|
34
66
|
@each $size, $size_value in $breakpoints_grid {
|
35
67
|
@for $title_size_value from 1 through 4 {
|
36
68
|
$min_size: map-get($size_value, "min");
|
@@ -3,7 +3,7 @@ import classnames from 'classnames'
|
|
3
3
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
4
4
|
import { deprecatedProps, GlobalProps, globalProps } from '../utilities/globalProps'
|
5
5
|
|
6
|
-
type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4"
|
6
|
+
type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4" | "display"
|
7
7
|
type SizeResponsiveType = {[key: string]: SizeType}
|
8
8
|
|
9
9
|
type TitleProps = {
|
@@ -16,6 +16,7 @@ type TitleProps = {
|
|
16
16
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
17
17
|
id?: string,
|
18
18
|
size?: SizeType | SizeResponsiveType,
|
19
|
+
displaySize?: null | "xs" | "sm" | "md" | "lg" | "xl" | "xxl",
|
19
20
|
tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span",
|
20
21
|
text?: string,
|
21
22
|
variant?: null | "link",
|
@@ -32,6 +33,7 @@ const Title = (props: TitleProps): React.ReactElement => {
|
|
32
33
|
htmlOptions = {},
|
33
34
|
id,
|
34
35
|
size = 3,
|
36
|
+
displaySize = null,
|
35
37
|
bold = true,
|
36
38
|
tag = 'h3',
|
37
39
|
text,
|
@@ -56,9 +58,16 @@ const Title = (props: TitleProps): React.ReactElement => {
|
|
56
58
|
return css.trim()
|
57
59
|
}
|
58
60
|
|
61
|
+
const buildDisplaySize = () => {
|
62
|
+
if (displaySize) {
|
63
|
+
return `pb_title_kit_dynamic_${displaySize}`
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
59
67
|
const classes = classnames(
|
60
68
|
buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
|
61
69
|
globalProps(props),
|
70
|
+
buildDisplaySize(),
|
62
71
|
buildResponsiveSizeCss(),
|
63
72
|
className
|
64
73
|
)
|
@@ -1,10 +1,9 @@
|
|
1
1
|
<%= pb_rails("title", props: {
|
2
|
+
margin_bottom: "md"
|
2
3
|
}) do %>
|
3
4
|
Default Title
|
4
5
|
<% end %>
|
5
6
|
|
6
|
-
<br/>
|
7
|
-
|
8
7
|
<%= pb_rails("title", props: { text: "Title 1", tag: "h1", size: 1 }) %>
|
9
8
|
<%= pb_rails("title", props: { text: "Title 2", tag: "h2", size: 2 }) %>
|
10
9
|
<%= pb_rails("title", props: { text: "Title 3", tag: "h3", size: 3 }) %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<%= pb_rails("title", props: { text: "Display Size xs", tag: "h1", display_size: "xs" }) %>
|
2
|
+
<%= pb_rails("title", props: { text: "Display Size sm", tag: "h1", display_size: "sm" }) %>
|
3
|
+
<%= pb_rails("title", props: { text: "Display Size md", tag: "h1", display_size: "md" }) %>
|
4
|
+
<%= pb_rails("title", props: { text: "Display Size lg", tag: "h1", display_size: "lg" }) %>
|
5
|
+
<%= pb_rails("title", props: { text: "Display Size xl", tag: "h1", display_size: "xl" }) %>
|
6
|
+
<%= pb_rails("title", props: { text: "Display Size xxl", tag: "h1", display_size: "xxl" }) %>
|
7
|
+
<%= pb_rails("title", props: { text: "This is a size of display", tag: "h1", size: "display"}) %>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import Title from '../_title'
|
4
|
+
|
5
|
+
const TitleDisplaySize = (props) => {
|
6
|
+
return (
|
7
|
+
<div>
|
8
|
+
<Title
|
9
|
+
displaySize="xs"
|
10
|
+
tag="h1"
|
11
|
+
text="Display Size xs"
|
12
|
+
{...props}
|
13
|
+
/>
|
14
|
+
<Title
|
15
|
+
displaySize="sm"
|
16
|
+
tag="h1"
|
17
|
+
text="Display Size sm"
|
18
|
+
{...props}
|
19
|
+
/>
|
20
|
+
<Title
|
21
|
+
displaySize="md"
|
22
|
+
tag="h1"
|
23
|
+
text="Display Size md"
|
24
|
+
{...props}
|
25
|
+
/>
|
26
|
+
<Title
|
27
|
+
displaySize="lg"
|
28
|
+
tag="h1"
|
29
|
+
text="Display Size lg"
|
30
|
+
{...props}
|
31
|
+
/>
|
32
|
+
<Title
|
33
|
+
displaySize="xl"
|
34
|
+
tag="h1"
|
35
|
+
text="Display Size xl"
|
36
|
+
{...props}
|
37
|
+
/>
|
38
|
+
<Title
|
39
|
+
displaySize="xxl"
|
40
|
+
tag="h1"
|
41
|
+
text="Display Size xxl"
|
42
|
+
{...props}
|
43
|
+
/>
|
44
|
+
<Title
|
45
|
+
size="display"
|
46
|
+
tag="h1"
|
47
|
+
text="This is a size of display"
|
48
|
+
{...props}
|
49
|
+
/>
|
50
|
+
</div>
|
51
|
+
)
|
52
|
+
}
|
53
|
+
|
54
|
+
export default TitleDisplaySize
|
@@ -0,0 +1 @@
|
|
1
|
+
Responsive sizes for large screens and tablets, perfect for digital signage.
|
@@ -5,6 +5,7 @@ examples:
|
|
5
5
|
- title_colors: Colors
|
6
6
|
- title_responsive: Responsive
|
7
7
|
- title_truncate: Truncate
|
8
|
+
- title_display_size: Display Size
|
8
9
|
|
9
10
|
react:
|
10
11
|
- title_default: Default UI
|
@@ -12,3 +13,4 @@ examples:
|
|
12
13
|
- title_colors: Colors
|
13
14
|
- title_responsive: Responsive
|
14
15
|
- title_truncate: Truncate
|
16
|
+
- title_display_size: Display Size
|
@@ -3,3 +3,4 @@ export { default as TitleLightWeight } from './_title_light_weight.jsx'
|
|
3
3
|
export { default as TitleColors } from './_title_colors.jsx'
|
4
4
|
export { default as TitleResponsive } from './_title_responsive.jsx'
|
5
5
|
export { default as TitleTruncate } from './_title_truncate.jsx'
|
6
|
+
export { default as TitleDisplaySize } from './_title_display_size.jsx'
|
@@ -16,12 +16,15 @@ module Playbook
|
|
16
16
|
default: nil,
|
17
17
|
deprecated: true
|
18
18
|
prop :bold, type: Playbook::Props::Boolean, default: true
|
19
|
+
prop :display_size, type: Playbook::Props::Enum,
|
20
|
+
values: [nil, "xs", "sm", "md", "lg", "xl", "xxl"],
|
21
|
+
default: nil
|
19
22
|
|
20
23
|
def classname
|
21
24
|
if is_size_responsive
|
22
25
|
generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
|
23
26
|
else
|
24
|
-
generate_classname("pb_title_kit", size, variant, color, is_bold)
|
27
|
+
generate_classname("pb_title_kit", size, variant, color, is_bold) + generate_display_size
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
@@ -29,6 +32,12 @@ module Playbook
|
|
29
32
|
bold ? nil : "thin"
|
30
33
|
end
|
31
34
|
|
35
|
+
def generate_display_size
|
36
|
+
return "" if display_size.nil?
|
37
|
+
|
38
|
+
" pb_title_kit_dynamic_#{display_size}"
|
39
|
+
end
|
40
|
+
|
32
41
|
def is_size_responsive
|
33
42
|
try(:size).is_a?(::Hash)
|
34
43
|
end
|
@@ -141,7 +141,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
141
141
|
|
142
142
|
&[data-popper-placement="right"] {
|
143
143
|
box-shadow: -8px 0 28px 0 $tooltip_shadow;
|
144
|
-
margin: 0 0 0 $space_sm;
|
145
144
|
.arrow {
|
146
145
|
left: -18px;
|
147
146
|
right: auto;
|
@@ -156,7 +155,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
156
155
|
|
157
156
|
&[data-popper-placement="bottom"] {
|
158
157
|
box-shadow: 0 -12px 28px 0 $tooltip_shadow;
|
159
|
-
margin: $space_sm 0 0 0;
|
160
158
|
.arrow {
|
161
159
|
top: -18px;
|
162
160
|
margin-bottom: 0;
|
@@ -169,7 +167,6 @@ $tooltip_shadow: rgba(60, 106, 172, 0.18);
|
|
169
167
|
|
170
168
|
&[data-popper-placement="left"] {
|
171
169
|
box-shadow: 8px 0 28px 0 $tooltip_shadow;
|
172
|
-
margin: 0 $space_sm 0 0;
|
173
170
|
.arrow {
|
174
171
|
margin-bottom: 0;
|
175
172
|
right: -18px;
|
@@ -25,12 +25,18 @@ type TooltipProps = {
|
|
25
25
|
children: JSX.Element,
|
26
26
|
data?: { [key: string]: string },
|
27
27
|
delay?: number | Partial<{open: number; close: number}>,
|
28
|
+
height?: string,
|
28
29
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
29
30
|
icon?: string,
|
30
31
|
interaction?: boolean,
|
32
|
+
maxHeight?: string,
|
33
|
+
maxWidth?: string,
|
34
|
+
minHeight?: string,
|
35
|
+
minWidth?: string,
|
31
36
|
placement?: Placement,
|
32
37
|
position?: "absolute" | "fixed";
|
33
38
|
text: string,
|
39
|
+
width: string,
|
34
40
|
showTooltip?: boolean,
|
35
41
|
forceOpenTooltip?: boolean,
|
36
42
|
} & GlobalProps
|
@@ -42,13 +48,19 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
42
48
|
children,
|
43
49
|
data = {},
|
44
50
|
delay = 0,
|
51
|
+
height,
|
45
52
|
htmlOptions = {},
|
46
53
|
icon = null,
|
47
54
|
interaction = false,
|
55
|
+
maxHeight,
|
56
|
+
maxWidth,
|
57
|
+
minHeight,
|
58
|
+
minWidth,
|
48
59
|
placement: preferredPlacement = "top",
|
49
60
|
position = "absolute",
|
50
61
|
text,
|
51
62
|
showTooltip = true,
|
63
|
+
width,
|
52
64
|
zIndex,
|
53
65
|
forceOpenTooltip = false,
|
54
66
|
...rest
|
@@ -115,6 +127,18 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
115
127
|
top: "bottom",
|
116
128
|
}[placement.split("-")[0]]
|
117
129
|
|
130
|
+
const tooltipSizing = () => {
|
131
|
+
return Object.assign(
|
132
|
+
{},
|
133
|
+
height ? { height: height } : {},
|
134
|
+
maxHeight ? { maxHeight: maxHeight } : {},
|
135
|
+
maxWidth ? { maxWidth: maxWidth } : {},
|
136
|
+
minHeight ? { minHeight: minHeight } : {},
|
137
|
+
minWidth ? { minWidth: minWidth } : {},
|
138
|
+
width ? { width: width } : {}
|
139
|
+
);
|
140
|
+
};
|
141
|
+
|
118
142
|
return (
|
119
143
|
<>
|
120
144
|
<div
|
@@ -144,6 +168,7 @@ const Tooltip = forwardRef((props: TooltipProps, ref: ForwardedRef<unknown>): Re
|
|
144
168
|
ref: refs.setFloating,
|
145
169
|
role: "tooltip",
|
146
170
|
style: {
|
171
|
+
...tooltipSizing(),
|
147
172
|
position: strategy,
|
148
173
|
top: y ?? 0,
|
149
174
|
left: x ?? 0,
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<%= pb_rails("flex", props: { orientation: "row", gap: "md" }) do %>
|
2
|
+
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
3
|
+
<%= pb_rails("button", props: {classname: "tooltip-delay", text: "1s delay"}) %>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
7
|
+
<%= pb_rails("button", props: {classname: "tooltip-open-delay", text: "Open only"}) %>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<%= pb_rails("flex/flex_item", props: {margin_top: "md"}) do %>
|
11
|
+
<%= pb_rails("button", props: {classname: "tooltip-close-delay", text: "Close only"}) %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<%= pb_rails("tooltip", props: {
|
15
|
+
trigger_element_selector: ".tooltip-delay",
|
16
|
+
tooltip_id: "delay-tooltip",
|
17
|
+
position: 'top',
|
18
|
+
delay_open: 1000,
|
19
|
+
delay_close: 1000
|
20
|
+
}) do %>
|
21
|
+
1s open/close delay
|
22
|
+
<% end %>
|
23
|
+
<%= pb_rails("tooltip", props: {
|
24
|
+
trigger_element_selector: ".tooltip-open-delay",
|
25
|
+
tooltip_id: "open-tooltip",
|
26
|
+
position: 'top',
|
27
|
+
delay_open: 1000
|
28
|
+
}) do %>
|
29
|
+
1s open delay
|
30
|
+
<% end %>
|
31
|
+
<%= pb_rails("tooltip", props: {
|
32
|
+
trigger_element_selector: ".tooltip-close-delay",
|
33
|
+
tooltip_id: "close-tooltip",
|
34
|
+
position: 'top',
|
35
|
+
delay_close: 1000
|
36
|
+
}) do %>
|
37
|
+
1s close delay
|
38
|
+
<% end %>
|
39
|
+
<% end %>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%= pb_rails("flex", props: { gap: "md", wrap: true }) do %>
|
2
|
+
<%= pb_rails("flex/flex_item") do %>
|
3
|
+
<%= pb_rails("button", props: { text: "With Interaction", id: "tooltip-interaction"}) %>
|
4
|
+
|
5
|
+
<%= pb_rails("tooltip", props: {
|
6
|
+
trigger_element_selector: "#tooltip-interaction",
|
7
|
+
tooltip_id: "tooltip-with-interaction",
|
8
|
+
position: 'top',
|
9
|
+
interaction: true
|
10
|
+
}) do %>
|
11
|
+
You can copy me
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= pb_rails("flex/flex_item") do %>
|
16
|
+
<%= pb_rails("button", props: { text: "No Interaction", id: "tooltip-no-interaction"}) %>
|
17
|
+
|
18
|
+
<%= pb_rails("tooltip", props: {
|
19
|
+
trigger_element_selector: "#tooltip-no-interaction",
|
20
|
+
tooltip_id: "tooltip-without-interaction",
|
21
|
+
position: 'top',
|
22
|
+
}) do %>
|
23
|
+
I'm just a regular tooltip
|
24
|
+
<% end %>
|
25
|
+
<% end %>
|
26
|
+
<% end %>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { Button, Tooltip, Flex, FlexItem } from 'playbook-ui';
|
3
|
+
|
4
|
+
const TooltipSizing = (props) => {
|
5
|
+
|
6
|
+
return (
|
7
|
+
<Flex
|
8
|
+
flexDirection='row'
|
9
|
+
gap='md'
|
10
|
+
wrap
|
11
|
+
>
|
12
|
+
<FlexItem>
|
13
|
+
<Tooltip
|
14
|
+
height='150px'
|
15
|
+
placement='top'
|
16
|
+
text="I'm 150px high and 100px wide!"
|
17
|
+
width='100px'
|
18
|
+
{...props}
|
19
|
+
>
|
20
|
+
<Button text="Height and Width"/>
|
21
|
+
</Tooltip>
|
22
|
+
</FlexItem>
|
23
|
+
<FlexItem>
|
24
|
+
<Tooltip
|
25
|
+
maxHeight='100px'
|
26
|
+
placement='top'
|
27
|
+
text="I have a maxHeight of 100px! Lorem ipsum dolor sit amet consectetur adipisicing elit."
|
28
|
+
width='250px'
|
29
|
+
{...props}
|
30
|
+
>
|
31
|
+
<Button text="maxHeight"/>
|
32
|
+
</Tooltip>
|
33
|
+
</FlexItem>
|
34
|
+
<FlexItem>
|
35
|
+
<Tooltip
|
36
|
+
maxWidth='150px'
|
37
|
+
placement='top'
|
38
|
+
text="I have a maxWidth of 150px! Lorem ipsum dolor sit amet consectetur adipisicing elit."
|
39
|
+
{...props}
|
40
|
+
>
|
41
|
+
<Button text="maxWidth"/>
|
42
|
+
</Tooltip>
|
43
|
+
</FlexItem>
|
44
|
+
<FlexItem>
|
45
|
+
<Tooltip
|
46
|
+
minWidth='300px'
|
47
|
+
placement='top'
|
48
|
+
text="I have a minWidth of 300px!"
|
49
|
+
{...props}
|
50
|
+
>
|
51
|
+
<Button text="minWidth"/>
|
52
|
+
</Tooltip>
|
53
|
+
</FlexItem>
|
54
|
+
<FlexItem>
|
55
|
+
<Tooltip
|
56
|
+
maxWidth='150px'
|
57
|
+
minHeight='300px'
|
58
|
+
placement='top'
|
59
|
+
text="I have a minHeight of 300px!"
|
60
|
+
{...props}
|
61
|
+
>
|
62
|
+
<Button text="minHeight"/>
|
63
|
+
</Tooltip>
|
64
|
+
</FlexItem>
|
65
|
+
</Flex>
|
66
|
+
)
|
67
|
+
}
|
68
|
+
|
69
|
+
export default TooltipSizing
|