playbook_ui 16.1.0.pre.alpha.play2725datepickermlsrequiredindicator14221 → 16.1.0.pre.alpha.play2771passphraseaccessibility14033
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 -12
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +0 -33
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +1 -1
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +0 -17
- data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +1 -10
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +0 -2
- data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_checkbox/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +4 -12
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +16 -25
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +0 -3
- data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +1 -36
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +11 -46
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.html.erb +3 -6
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.jsx +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.md +1 -3
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +5 -11
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +0 -9
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +10 -15
- data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +0 -4
- data/app/pb_kits/playbook/pb_dropdown/index.js +79 -132
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +0 -16
- data/app/pb_kits/playbook/pb_dropdown/utilities/clickOutsideHelper.tsx +0 -6
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +3 -146
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +0 -7
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +549 -650
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +3 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +7 -4
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +17 -18
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +0 -3
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.test.jsx +25 -55
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +3 -3
- data/app/pb_kits/playbook/pb_nav/_item.tsx +3 -5
- data/app/pb_kits/playbook/pb_nav/_nav.scss +3 -82
- data/app/pb_kits/playbook/pb_nav/docs/example.yml +6 -2
- data/app/pb_kits/playbook/pb_nav/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_nav/item.html.erb +1 -1
- data/app/pb_kits/playbook/pb_nav/item.rb +1 -1
- data/app/pb_kits/playbook/pb_nav/navTypes.ts +0 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +16 -51
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_required_indicator.jsx +0 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.jsx +0 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +0 -2
- data/app/pb_kits/playbook/pb_table/index.ts +27 -29
- data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +10 -10
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +1 -29
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +323 -411
- data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +0 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +21 -22
- data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -3
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -3
- data/app/pb_kits/playbook/tokens/_colors.scss +0 -3
- data/app/pb_kits/playbook/tokens/exports/_colors.module.scss +0 -10
- data/dist/chunks/{_pb_line_graph-CC2Ywwix.js → _pb_line_graph-BgKF_zz1.js} +1 -1
- data/dist/chunks/_typeahead-D-8xZ__X.js +1 -0
- data/dist/chunks/{globalProps-DYr2qrIf.js → globalProps-BhVYCqRf.js} +1 -1
- data/dist/chunks/lib-DD34ZrWL.js +29 -0
- data/dist/chunks/vendor.js +3 -3
- data/dist/menu.yml +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +2 -2
- data/dist/reset.css +1 -1
- data/lib/playbook/forms/builder/date_picker_field.rb +2 -8
- data/lib/playbook/forms/builder/form_field_builder.rb +1 -1
- data/lib/playbook/forms/builder/multi_level_select_field.rb +0 -8
- data/lib/playbook/forms/builder/typeahead_field.rb +1 -15
- data/lib/playbook/forms/builder.rb +2 -2
- data/lib/playbook/version.rb +1 -1
- metadata +6 -28
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.jsx +0 -71
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.md +0 -4
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.html.erb +0 -6
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.jsx +0 -17
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.md +0 -3
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.html.erb +0 -5
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.jsx +0 -13
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.md +0 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.md +0 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.html.erb +0 -72
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.jsx +0 -87
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.md +0 -3
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_disabled_item.html.erb +0 -24
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_disabled_item.jsx +0 -87
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_label.jsx +0 -44
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_label.md +0 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.jsx +0 -28
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.md +0 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.html.erb +0 -16
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.jsx +0 -23
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.md +0 -3
- data/app/pb_kits/playbook/tokens/_colors_accessible.scss +0 -250
- data/dist/chunks/_typeahead-BBzwt7HN.js +0 -1
- data/dist/chunks/lib-DgqmX9CF.js +0 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: db94c53faae46d3ac450cae169b49010d0fea2eef2df809b1b498a803bf97275
|
|
4
|
+
data.tar.gz: 481cc281f583cd5db425d32dea0bbd0d87cd5fff7093745f3fa674b7900064da
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a9dc190816e2a5b470ee310291cf8144b8ab3a2b26e5a251770dfb9b7b3b310c394b8a1d7dd355e21fbd320267ebb4e573a97cd6cfb1816eec07253ac36e9222
|
|
7
|
+
data.tar.gz: 325c99459bc7e398c41c7437fd373f559b32634dbca9f7119a684fb0166961c8303563f9f7f30cd51edc90843b36235ac7b67180c112d9688b430dfcf653ce38
|
|
@@ -66,18 +66,8 @@ const TableCellRenderer = ({
|
|
|
66
66
|
// Find the "owning" colDefinition by accessor. Needed for multi column logic
|
|
67
67
|
const colDef = findColumnDefByAccessor(columnDefinitions ?? [], column.id)
|
|
68
68
|
const cellAlignment = colDef?.columnStyling?.cellAlignment ?? "right"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const cellFontColorValue = colDef?.columnStyling?.fontColor
|
|
72
|
-
const cellFontColor = typeof cellFontColorValue === 'function'
|
|
73
|
-
? cellFontColorValue(row)
|
|
74
|
-
: cellFontColorValue
|
|
75
|
-
|
|
76
|
-
const cellBackgroundColorValue = colDef?.columnStyling?.cellBackgroundColor
|
|
77
|
-
const cellBackgroundColor = typeof cellBackgroundColorValue === 'function'
|
|
78
|
-
? cellBackgroundColorValue(row)
|
|
79
|
-
: cellBackgroundColorValue
|
|
80
|
-
|
|
69
|
+
const cellFontColor = colDef?.columnStyling?.fontColor
|
|
70
|
+
const cellBackgroundColor = colDef?.columnStyling?.cellBackgroundColor
|
|
81
71
|
const paddingValue = colDef?.columnStyling?.cellPadding ?? customRowStyle?.cellPadding
|
|
82
72
|
const paddingClass = paddingValue ? `p_${paddingValue}` : undefined
|
|
83
73
|
|
|
@@ -920,39 +920,6 @@ test("columnStyling.backgroundColor works as excpected", () => {
|
|
|
920
920
|
expect(firstEnrollmentCell).toHaveStyle({ backgroundColor: colors.error_subtle });
|
|
921
921
|
});
|
|
922
922
|
|
|
923
|
-
test("columnStyling.cellBackgroundColor works as expected with function", () => {
|
|
924
|
-
const styledColumnDefs = [
|
|
925
|
-
{
|
|
926
|
-
accessor: "year",
|
|
927
|
-
label: "Year",
|
|
928
|
-
cellAccessors: ["quarter", "month", "day"],
|
|
929
|
-
},
|
|
930
|
-
{
|
|
931
|
-
accessor: "newEnrollments",
|
|
932
|
-
label: "New Enrollments",
|
|
933
|
-
columnStyling:{
|
|
934
|
-
cellBackgroundColor: (row) => row.original.newEnrollments > 15 ? colors.success_subtle : colors.error_subtle,
|
|
935
|
-
fontColor: (row) => row.original.newEnrollments > 15 ? colors.success : colors.error,
|
|
936
|
-
},
|
|
937
|
-
},
|
|
938
|
-
{
|
|
939
|
-
accessor: "scheduledMeetings",
|
|
940
|
-
label: "Scheduled Meetings",
|
|
941
|
-
},
|
|
942
|
-
];
|
|
943
|
-
|
|
944
|
-
render(
|
|
945
|
-
<AdvancedTable
|
|
946
|
-
columnDefinitions={styledColumnDefs}
|
|
947
|
-
data={{ testid: testId }}
|
|
948
|
-
tableData={MOCK_DATA}
|
|
949
|
-
/>
|
|
950
|
-
);
|
|
951
|
-
|
|
952
|
-
const firstEnrollmentCell = screen.getAllByText("20")[0].closest("td");
|
|
953
|
-
expect(firstEnrollmentCell).toHaveStyle({ backgroundColor: colors.success_subtle, color: colors.success });
|
|
954
|
-
});
|
|
955
|
-
|
|
956
923
|
test("columnStyling.headerBackgroundColor works as excpected", () => {
|
|
957
924
|
const styledColumnDefs = [
|
|
958
925
|
{
|
|
@@ -2,4 +2,4 @@ the `enableSorting` prop is a boolean prop set to false by default. If true, the
|
|
|
2
2
|
|
|
3
3
|
### sortIcon
|
|
4
4
|
|
|
5
|
-
An optional prop, `sortIcon` allows you to customize your icon sets by passing it an array of any comma-separated pair of icon values. The first icon value will replace the kit's default icon when sort direction is desc, and the second value will replace the default icon when sort direction is asc. `sortIcon` also allows you to pass it a single icon as a string, in which case the icon will not toggle with the sort state. Default for this prop is `["arrow-up-wide
|
|
5
|
+
An optional prop, `sortIcon` allows you to customize your icon sets by passing it an array of any comma-separated pair of icon values. The first icon value will replace the kit's default icon when sort direction is desc, and the second value will replace the default icon when sort direction is asc. `sortIcon` also allows you to pass it a single icon as a string, in which case the icon will not toggle with the sort state. Default for this prop is `["arrow-up-short-wide", "arrow-down-short-wide"]`. All strings must be valid FA icons.
|
|
@@ -78,7 +78,6 @@ examples:
|
|
|
78
78
|
- advanced_table_column_styling: Column Styling
|
|
79
79
|
- advanced_table_column_styling_column_headers: Column Styling with Multiple Headers
|
|
80
80
|
- advanced_table_column_styling_background: Column Styling Background Color
|
|
81
|
-
- advanced_table_column_styling_background_custom: Column Styling Background Color (Custom)
|
|
82
81
|
- advanced_table_column_styling_background_multi: Column Styling Background Color with Multiple Headers
|
|
83
82
|
- advanced_table_padding_control: Padding Control using Column Styling
|
|
84
83
|
- advanced_table_column_border_color: Column Group Border Color
|
|
@@ -47,5 +47,4 @@ export { default as AdvancedTableSortPerColumnForMultiColumn } from './_advanced
|
|
|
47
47
|
export { default as AdvancedTablePaddingControl } from './_advanced_table_padding_control.jsx'
|
|
48
48
|
export { default as AdvancedTablePaddingControlPerRow } from './_advanced_table_padding_control_per_row.jsx'
|
|
49
49
|
export { default as AdvancedTableColumnStylingBackground } from './_advanced_table_column_styling_background.jsx'
|
|
50
|
-
export { default as AdvancedTableColumnStylingBackgroundMulti } from './_advanced_table_column_styling_background_multi.jsx'
|
|
51
|
-
export { default as AdvancedTableColumnStylingBackgroundCustom } from './_advanced_table_column_styling_background_custom.jsx'
|
|
50
|
+
export { default as AdvancedTableColumnStylingBackgroundMulti } from './_advanced_table_column_styling_background_multi.jsx'
|
|
@@ -4,8 +4,6 @@ import Icon from '../pb_icon/_icon'
|
|
|
4
4
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
|
5
5
|
import classnames from 'classnames'
|
|
6
6
|
import { globalProps, GlobalProps } from '../utilities/globalProps'
|
|
7
|
-
import colors from '../tokens/exports/_colors.module.scss'
|
|
8
|
-
import spacing from '../tokens/exports/_spacing.module.scss'
|
|
9
7
|
|
|
10
8
|
type CheckboxProps = {
|
|
11
9
|
aria?: {[key: string]: string},
|
|
@@ -21,7 +19,6 @@ type CheckboxProps = {
|
|
|
21
19
|
indeterminate?: boolean,
|
|
22
20
|
name?: string,
|
|
23
21
|
onChange?: (event: React.FormEvent<HTMLInputElement>) => void,
|
|
24
|
-
requiredIndicator?: boolean,
|
|
25
22
|
tabIndex?: number,
|
|
26
23
|
text?: string,
|
|
27
24
|
value?: string,
|
|
@@ -42,7 +39,6 @@ const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
|
|
|
42
39
|
indeterminate = false,
|
|
43
40
|
name = '',
|
|
44
41
|
onChange = () => { void 0 },
|
|
45
|
-
requiredIndicator = false,
|
|
46
42
|
tabIndex,
|
|
47
43
|
text = '',
|
|
48
44
|
value = '',
|
|
@@ -128,20 +124,7 @@ const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
|
|
|
128
124
|
variant={null}
|
|
129
125
|
>
|
|
130
126
|
{text}
|
|
131
|
-
{requiredIndicator && (
|
|
132
|
-
<span
|
|
133
|
-
aria-hidden="true"
|
|
134
|
-
className="pb_required_indicator"
|
|
135
|
-
style={{
|
|
136
|
-
color: colors.error,
|
|
137
|
-
marginLeft: spacing.space_xs,
|
|
138
|
-
}}
|
|
139
|
-
>
|
|
140
|
-
{'*'}
|
|
141
|
-
</span>
|
|
142
|
-
)}
|
|
143
127
|
</Body>
|
|
144
|
-
|
|
145
128
|
</label>
|
|
146
129
|
)
|
|
147
130
|
})
|
|
@@ -5,15 +5,6 @@
|
|
|
5
5
|
<%= pb_rails("icon", props: { icon: "minus", classname: "indeterminate_icon hidden", fixed_width: true}) %>
|
|
6
6
|
</span>
|
|
7
7
|
<span class="pb_checkbox_label">
|
|
8
|
-
<%= pb_rails("body", props: { status: object.checkbox_label_status, dark: object.dark, margin_right: object.form_spacing ? "xs" : "" })
|
|
9
|
-
<%= object.text%>
|
|
10
|
-
<% if object.required_indicator %>
|
|
11
|
-
<span
|
|
12
|
-
class="pb_checkbox_required_indicator"
|
|
13
|
-
aria-hidden="true"
|
|
14
|
-
style="color: #DA0014;"
|
|
15
|
-
>*</span>
|
|
16
|
-
<% end %>
|
|
17
|
-
<% end %>
|
|
8
|
+
<%= pb_rails("body", props: { status: object.checkbox_label_status, text: object.text, dark: object.dark, margin_right: object.form_spacing ? "xs" : "" }) %>
|
|
18
9
|
</span>
|
|
19
10
|
<% end %>
|
|
@@ -23,8 +23,6 @@ module Playbook
|
|
|
23
23
|
prop :hidden_input, type: Playbook::Props::Boolean,
|
|
24
24
|
default: false
|
|
25
25
|
prop :hidden_value
|
|
26
|
-
prop :required_indicator, type: Playbook::Props::Boolean,
|
|
27
|
-
default: false
|
|
28
26
|
|
|
29
27
|
def classname
|
|
30
28
|
generate_classname("pb_checkbox_kit", checked_class) + error_class
|
|
@@ -8,7 +8,6 @@ examples:
|
|
|
8
8
|
- checkbox_indeterminate: Indeterminate Checkbox
|
|
9
9
|
- checkbox_disabled: Disabled Checkbox
|
|
10
10
|
- checkbox_form: Form and Hidden Input
|
|
11
|
-
# - checkbox_required_indicator: Required Indicator
|
|
12
11
|
|
|
13
12
|
react:
|
|
14
13
|
- checkbox_default: Default
|
|
@@ -18,7 +17,6 @@ examples:
|
|
|
18
17
|
- checkbox_error: Default w/ Error
|
|
19
18
|
- checkbox_indeterminate: Indeterminate Checkbox
|
|
20
19
|
- checkbox_disabled: Disabled Checkbox
|
|
21
|
-
# - checkbox_required_indicator: Required Indicator
|
|
22
20
|
|
|
23
21
|
swift:
|
|
24
22
|
- checkbox_default_swift: Default
|
|
@@ -5,4 +5,3 @@ export { default as CheckboxError } from './_checkbox_error.jsx'
|
|
|
5
5
|
export { default as CheckboxChecked } from './_checkbox_checked.jsx'
|
|
6
6
|
export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
|
|
7
7
|
export { default as CheckboxDisabled } from './_checkbox_disabled.jsx'
|
|
8
|
-
export { default as CheckboxRequiredIndicator } from './_checkbox_required_indicator.jsx'
|
|
@@ -10,7 +10,6 @@ import datePickerHelper from './date_picker_helper'
|
|
|
10
10
|
import Icon from '../pb_icon/_icon'
|
|
11
11
|
import Caption from '../pb_caption/_caption'
|
|
12
12
|
import Body from '../pb_body/_body'
|
|
13
|
-
import colors from "../tokens/exports/_colors.module.scss"
|
|
14
13
|
|
|
15
14
|
type DatePickerProps = {
|
|
16
15
|
allowInput?: boolean,
|
|
@@ -44,7 +43,6 @@ type DatePickerProps = {
|
|
|
44
43
|
pickerId: string,
|
|
45
44
|
placeholder?: string,
|
|
46
45
|
positionElement?: HTMLElement | null,
|
|
47
|
-
requiredIndicator?: boolean
|
|
48
46
|
scrollContainer?: string,
|
|
49
47
|
selectionType?: "month" | "week"| "quickpick",
|
|
50
48
|
showTimezone?: boolean,
|
|
@@ -99,7 +97,6 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
|
99
97
|
plugins = false,
|
|
100
98
|
position,
|
|
101
99
|
positionElement,
|
|
102
|
-
requiredIndicator,
|
|
103
100
|
scrollContainer,
|
|
104
101
|
selectionType = '',
|
|
105
102
|
showTimezone = false,
|
|
@@ -217,15 +214,10 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
|
217
214
|
|
|
218
215
|
{!hideLabel && (
|
|
219
216
|
<label htmlFor={pickerId}>
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
{label}
|
|
223
|
-
|
|
224
|
-
) : (
|
|
225
|
-
<Caption className="pb_date_picker_kit_label"
|
|
226
|
-
text={label}
|
|
227
|
-
/>
|
|
228
|
-
)}
|
|
217
|
+
<Caption
|
|
218
|
+
className="pb_date_picker_kit_label"
|
|
219
|
+
text={label}
|
|
220
|
+
/>
|
|
229
221
|
</label>
|
|
230
222
|
)}
|
|
231
223
|
<>
|
|
@@ -4,35 +4,26 @@
|
|
|
4
4
|
'data-validation-message' => object.validation_message,
|
|
5
5
|
) do %>
|
|
6
6
|
<div class="input_wrapper">
|
|
7
|
-
<% if !object.hide_label && object.label %>
|
|
8
|
-
<label for="<%= object.picker_id %>">
|
|
9
|
-
<% if object.required_indicator %>
|
|
10
|
-
<%= pb_rails("caption", props: { dark: object.dark, classname: "pb_date_picker_kit_label" }) do %>
|
|
11
|
-
<%= object.label %><span style="color: #DA0014;"> *</span>
|
|
12
|
-
<% end %>
|
|
13
|
-
<% else %>
|
|
14
|
-
<%= pb_rails("caption", props: { text: object.label, dark: object.dark, classname: "pb_date_picker_kit_label" }) %>
|
|
15
|
-
<% end %>
|
|
16
|
-
</label>
|
|
17
|
-
<% end %>
|
|
18
7
|
<% if content.present? %>
|
|
19
8
|
<%= content %>
|
|
20
9
|
<% else %>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
10
|
+
<%= pb_rails("text_input", props: {
|
|
11
|
+
aria: object.input_aria,
|
|
12
|
+
autocomplete: false,
|
|
13
|
+
cursor: object.cursor,
|
|
14
|
+
dark: object.dark,
|
|
15
|
+
data: object.input_data,
|
|
16
|
+
disabled: object.disable_input,
|
|
17
|
+
error: object.error,
|
|
18
|
+
id: object.picker_id,
|
|
19
|
+
label: object.hide_label ? nil : object.label,
|
|
20
|
+
margin_bottom: "none",
|
|
21
|
+
name: object.name,
|
|
22
|
+
placeholder: object.placeholder,
|
|
23
|
+
required: object.required,
|
|
24
|
+
}) %>
|
|
35
25
|
<% end %>
|
|
26
|
+
|
|
36
27
|
<% if object.selection_type == "quickpick" %>
|
|
37
28
|
<input type="hidden" id="<%= "#{object.start_date_id}" %>" name="<%= "#{object.start_date_name}" %>">
|
|
38
29
|
<input type="hidden" id="<%= "#{object.end_date_id}" %>" name="<%= "#{object.end_date_name}" %>">
|
|
@@ -71,8 +71,6 @@ module Playbook
|
|
|
71
71
|
default: false
|
|
72
72
|
prop :required, type: Playbook::Props::Boolean,
|
|
73
73
|
default: false
|
|
74
|
-
prop :required_indicator, type: Playbook::Props::Boolean,
|
|
75
|
-
default: false
|
|
76
74
|
prop :year_range, type: Playbook::Props::Array,
|
|
77
75
|
default: [1900, 2100]
|
|
78
76
|
prop :custom_event_type, type: Playbook::Props::String,
|
|
@@ -115,7 +113,6 @@ module Playbook
|
|
|
115
113
|
position: position,
|
|
116
114
|
positionElement: position_element,
|
|
117
115
|
required: required,
|
|
118
|
-
requiredIndicator: required_indicator,
|
|
119
116
|
selectionType: selection_type,
|
|
120
117
|
showTimezone: show_timezone,
|
|
121
118
|
staticPosition: static_position,
|
|
@@ -257,7 +257,7 @@ describe('DatePicker Kit', () => {
|
|
|
257
257
|
const testId = 'datepicker-out-of-range-after'
|
|
258
258
|
const futureDateString = '01/15/2020'
|
|
259
259
|
const maxDateString = '01/10/2020'
|
|
260
|
-
|
|
260
|
+
|
|
261
261
|
render(
|
|
262
262
|
<DatePicker
|
|
263
263
|
data={{ testid: testId }}
|
|
@@ -275,39 +275,4 @@ describe('DatePicker Kit', () => {
|
|
|
275
275
|
expect(input).toHaveValue('01/15/2020')
|
|
276
276
|
}, { timeout: 5000 })
|
|
277
277
|
})
|
|
278
|
-
|
|
279
|
-
test("renders required indicator asterisk when requiredIndicator is true", () => {
|
|
280
|
-
const testId = "datepicker-required-indicator"
|
|
281
|
-
|
|
282
|
-
render(
|
|
283
|
-
<DatePicker
|
|
284
|
-
data={{ testid: testId }}
|
|
285
|
-
label="Required Date"
|
|
286
|
-
pickerId="date-picker-required-indicator"
|
|
287
|
-
requiredIndicator
|
|
288
|
-
/>
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
const kit = screen.getByTestId(testId)
|
|
292
|
-
const label = within(kit).getByText(/Required Date/)
|
|
293
|
-
expect(label).toBeInTheDocument()
|
|
294
|
-
expect(kit).toHaveTextContent("*")
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
test("does not render required indicator asterisk when requiredIndicator is false", () => {
|
|
298
|
-
const testId = "datepicker-no-required-indicator"
|
|
299
|
-
|
|
300
|
-
render(
|
|
301
|
-
<DatePicker
|
|
302
|
-
data={{ testid: testId }}
|
|
303
|
-
label="Optional Date"
|
|
304
|
-
pickerId="date-picker-no-required-indicator"
|
|
305
|
-
/>
|
|
306
|
-
)
|
|
307
|
-
|
|
308
|
-
const kit = screen.getByTestId(testId)
|
|
309
|
-
const label = within(kit).getByText(/Optional Date/)
|
|
310
|
-
expect(label).toBeInTheDocument()
|
|
311
|
-
expect(kit).not.toHaveTextContent("*")
|
|
312
|
-
})
|
|
313
278
|
})
|
|
@@ -31,7 +31,6 @@ examples:
|
|
|
31
31
|
- date_picker_time: Time Selection
|
|
32
32
|
- date_picker_positions: Custom Positions
|
|
33
33
|
- date_picker_positions_element: Custom Position (based on element)
|
|
34
|
-
- date_picker_required_indicator: Required Indicator
|
|
35
34
|
- date_picker_turbo_frames: Within Turbo Frames
|
|
36
35
|
|
|
37
36
|
react:
|
|
@@ -65,4 +64,3 @@ examples:
|
|
|
65
64
|
- date_picker_time: Time Selection
|
|
66
65
|
- date_picker_positions: Custom Positions
|
|
67
66
|
- date_picker_positions_element: Custom Position (based on element)
|
|
68
|
-
- date_picker_required_indicator: Required Indicator
|
|
@@ -27,5 +27,4 @@ export { default as DatePickerQuickPickCustom } from './_date_picker_quick_pick_
|
|
|
27
27
|
export { default as DatePickerQuickPickCustomOverride } from './_date_picker_quick_pick_custom_override'
|
|
28
28
|
export { default as DatePickerQuickPickDefaultDate } from './_date_picker_quick_pick_default_date'
|
|
29
29
|
export { default as DatePickerRangePattern } from './_date_picker_range_pattern'
|
|
30
|
-
export { default as DatePickerAndDropdownRange } from './_date_picker_and_dropdown_range.jsx'
|
|
31
|
-
export { default as DatePickerRequiredIndicator } from "./_date_picker_required_indicator.jsx";
|
|
30
|
+
export { default as DatePickerAndDropdownRange } from './_date_picker_and_dropdown_range.jsx'
|
|
@@ -119,16 +119,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
119
119
|
|
|
120
120
|
const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(isClosed);
|
|
121
121
|
|
|
122
|
-
// Use a suffix for the trigger ID to avoid conflict with the outer div's id
|
|
123
|
-
const sanitizeForId = (str: string) =>
|
|
124
|
-
str.toLowerCase().replace(/\s+/g, "_").replace(/[^a-z0-9_]/g, "");
|
|
125
|
-
const selectId = id
|
|
126
|
-
? `${id}_trigger`
|
|
127
|
-
: label
|
|
128
|
-
? sanitizeForId(label)
|
|
129
|
-
: undefined;
|
|
130
|
-
const errorId = error ? `${selectId}-error` : undefined;
|
|
131
|
-
|
|
132
122
|
const [filterItem, setFilterItem] = useState("");
|
|
133
123
|
const initialSelected = useMemo(() => {
|
|
134
124
|
// Handle quickpick variant with string defaultValue (e.g., "This Month")
|
|
@@ -161,19 +151,9 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
161
151
|
|
|
162
152
|
const dropdownRef = useRef(null);
|
|
163
153
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
164
|
-
const inputWrapperRef = useRef
|
|
154
|
+
const inputWrapperRef = useRef(null);
|
|
165
155
|
const dropdownContainerRef = useRef(null);
|
|
166
156
|
|
|
167
|
-
const handleLabelClick = (e: React.MouseEvent) => {
|
|
168
|
-
e.stopPropagation();
|
|
169
|
-
if (selectId) {
|
|
170
|
-
const trigger = document.getElementById(selectId);
|
|
171
|
-
if (trigger) trigger.focus();
|
|
172
|
-
}
|
|
173
|
-
setIsInputFocused(true);
|
|
174
|
-
toggleDropdown();
|
|
175
|
-
};
|
|
176
|
-
|
|
177
157
|
const selectedArray = Array.isArray(selected)
|
|
178
158
|
? selected
|
|
179
159
|
: selected && Object.keys(selected).length
|
|
@@ -431,12 +411,9 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
431
411
|
autocomplete,
|
|
432
412
|
clearable,
|
|
433
413
|
dropdownContainerRef,
|
|
434
|
-
error,
|
|
435
|
-
errorId,
|
|
436
|
-
filterItem,
|
|
437
414
|
filteredOptions,
|
|
415
|
+
filterItem,
|
|
438
416
|
focusedOptionIndex,
|
|
439
|
-
label,
|
|
440
417
|
formPillProps,
|
|
441
418
|
handleBackspace,
|
|
442
419
|
handleChange,
|
|
@@ -446,7 +423,6 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
446
423
|
inputWrapperRef,
|
|
447
424
|
isDropDownClosed,
|
|
448
425
|
isInputFocused,
|
|
449
|
-
selectId,
|
|
450
426
|
multiSelect,
|
|
451
427
|
onSelect,
|
|
452
428
|
optionsWithBlankSelection,
|
|
@@ -458,20 +434,13 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
458
434
|
toggleDropdown
|
|
459
435
|
}}
|
|
460
436
|
>
|
|
461
|
-
{label &&
|
|
462
|
-
<
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
className="pb_dropdown_kit_label"
|
|
469
|
-
dark={dark}
|
|
470
|
-
marginBottom="xs"
|
|
471
|
-
text={label}
|
|
472
|
-
/>
|
|
473
|
-
</label>
|
|
474
|
-
)}
|
|
437
|
+
{label &&
|
|
438
|
+
<Caption
|
|
439
|
+
dark={dark}
|
|
440
|
+
marginBottom="xs"
|
|
441
|
+
text={label}
|
|
442
|
+
/>
|
|
443
|
+
}
|
|
475
444
|
<div className={`dropdown_wrapper ${error ? 'error' : ''}`}
|
|
476
445
|
onBlur={() => {
|
|
477
446
|
// Debounce to delay the execution to prevent jumpiness in Focus state
|
|
@@ -504,16 +473,12 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
|
|
|
504
473
|
</>
|
|
505
474
|
)}
|
|
506
475
|
|
|
507
|
-
{error &&
|
|
476
|
+
{error &&
|
|
508
477
|
<Body
|
|
509
|
-
aria={{ atomic: "true", live: "polite" }}
|
|
510
|
-
dark={dark}
|
|
511
|
-
htmlOptions={{ role: "alert" }}
|
|
512
|
-
id={errorId}
|
|
513
478
|
status="negative"
|
|
514
479
|
text={error}
|
|
515
480
|
/>
|
|
516
|
-
|
|
481
|
+
}
|
|
517
482
|
</div>
|
|
518
483
|
</DropdownContext.Provider>
|
|
519
484
|
</div>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
const option = e.detail;
|
|
77
77
|
const dropdown = e.target;
|
|
78
78
|
|
|
79
|
-
const display = dropdown.querySelector("
|
|
79
|
+
const display = dropdown.querySelector("#dropdown_trigger_custom_display");
|
|
80
80
|
if (!display) return;
|
|
81
81
|
|
|
82
82
|
const nameEl = display.querySelector("#dropdown-avatar-name");
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
<%
|
|
1
|
+
<%
|
|
2
2
|
options = [
|
|
3
3
|
{ label: 'United States', value: 'unitedStates', id: 'us' },
|
|
4
4
|
{ label: 'Canada', value: 'canada', id: 'ca' },
|
|
5
5
|
{ label: 'Pakistan', value: 'pakistan', id: 'pk' },
|
|
6
6
|
]
|
|
7
|
+
|
|
7
8
|
%>
|
|
8
9
|
|
|
9
|
-
<%= pb_rails("dropdown", props: {
|
|
10
|
-
id: "select_a_country",
|
|
11
|
-
label: "Select a Country",
|
|
12
|
-
options: options
|
|
13
|
-
}) %>
|
|
10
|
+
<%= pb_rails("dropdown", props: {options: options, label: "Select a Country"}) %>
|
|
@@ -1,3 +1 @@
|
|
|
1
|
-
The top-level Dropdown component optionally accepts any string through a `label` prop to produce a label above your trigger element.
|
|
2
|
-
|
|
3
|
-
Add an `id` to wire the label to the trigger so that clicking the label will move focus directly to the input, and open the drop-down.
|
|
1
|
+
The top-level Dropdown component optionally accepts any string through a `label` prop to produce a label above your trigger element.
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
<%= pb_content_tag do %>
|
|
2
2
|
<% if object.label.present? %>
|
|
3
|
-
|
|
4
|
-
<%= pb_rails("caption", props: { text: object.label, margin_bottom: "xs", classname: "pb_dropdown_kit_label", dark: object.dark }) %>
|
|
5
|
-
</label>
|
|
3
|
+
<%= pb_rails("caption", props: {text: object.label, margin_bottom:"xs"}) %>
|
|
6
4
|
<% end %>
|
|
7
5
|
<div class="dropdown_wrapper<%= error_class %>" style="position: relative">
|
|
8
6
|
<input
|
|
9
7
|
data-default-value="<%= input_default_value %>"
|
|
10
|
-
|
|
8
|
+
id="dropdown-selected-option"
|
|
11
9
|
name="<%= object.name %><%= '[]' if object.multi_select %>"
|
|
12
10
|
style="display: none"
|
|
13
11
|
<%= object.required ? "required" : ""%>
|
|
@@ -18,11 +16,9 @@
|
|
|
18
16
|
<% end %>
|
|
19
17
|
<% if content.present? %>
|
|
20
18
|
<%= content.presence %>
|
|
21
|
-
|
|
22
|
-
<%= pb_rails("body", props: { status: "negative", text: object.error, id: object.error_id, aria: { atomic: "true", live: "polite" }, html_options: { role: "alert" }, dark: object.dark }) %>
|
|
23
|
-
<% end %>
|
|
19
|
+
<%= pb_rails("body", props: { status: "negative", text: object.error }) %>
|
|
24
20
|
<% else %>
|
|
25
|
-
<%= pb_rails("dropdown/dropdown_trigger", props:
|
|
21
|
+
<%= pb_rails("dropdown/dropdown_trigger", props:{ autocomplete: object.autocomplete, multi_select:object.multi_select, placeholder: object.placeholder }) %>
|
|
26
22
|
<%= pb_rails("dropdown/dropdown_container", props: { searchbar: object.searchbar, constrain_height: object.constrain_height }) do %>
|
|
27
23
|
<% if options_with_blank.present? %>
|
|
28
24
|
<% options_with_blank.each do |option| %>
|
|
@@ -31,9 +27,7 @@
|
|
|
31
27
|
<% end %>
|
|
32
28
|
<% end %>
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
<%= pb_rails("body", props: { status: "negative", text: object.error, id: object.error_id, aria: { atomic: "true", live: "polite" }, html_options: { role: "alert" }, dark: object.dark }) %>
|
|
36
|
-
<% end %>
|
|
30
|
+
<%= pb_rails("body", props: { status: "negative", text: object.error }) %>
|
|
37
31
|
<% end %>
|
|
38
32
|
</div>
|
|
39
33
|
<% end %>
|
|
@@ -10,7 +10,6 @@ module Playbook
|
|
|
10
10
|
prop :label, type: Playbook::Props::String
|
|
11
11
|
prop :name, type: Playbook::Props::String
|
|
12
12
|
prop :error, type: Playbook::Props::String
|
|
13
|
-
prop :id, type: Playbook::Props::String
|
|
14
13
|
prop :required, type: Playbook::Props::Boolean,
|
|
15
14
|
default: false
|
|
16
15
|
prop :default_value
|
|
@@ -69,14 +68,6 @@ module Playbook
|
|
|
69
68
|
generate_classname("pb_dropdown", variant, separators_class)
|
|
70
69
|
end
|
|
71
70
|
|
|
72
|
-
def select_id
|
|
73
|
-
id.presence || (label.present? ? label.downcase.gsub(/\s+/, "_").gsub(/[^a-z0-9_]/, "") : nil)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def error_id
|
|
77
|
-
error.present? ? "#{select_id || 'dropdown_trigger'}-error" : nil
|
|
78
|
-
end
|
|
79
|
-
|
|
80
71
|
private
|
|
81
72
|
|
|
82
73
|
def error_class
|