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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +2 -12
  3. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +0 -33
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.md +1 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
  7. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +1 -1
  8. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +0 -17
  9. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +1 -10
  10. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +0 -2
  11. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +0 -2
  12. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +0 -1
  13. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +4 -12
  14. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +16 -25
  15. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +0 -3
  16. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +1 -36
  17. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +0 -2
  18. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -2
  19. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +11 -46
  20. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +1 -1
  21. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.html.erb +3 -6
  22. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.jsx +0 -1
  23. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_label.md +1 -3
  24. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +5 -11
  25. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +0 -9
  26. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +10 -15
  27. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +0 -4
  28. data/app/pb_kits/playbook/pb_dropdown/index.js +79 -132
  29. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +0 -16
  30. data/app/pb_kits/playbook/pb_dropdown/utilities/clickOutsideHelper.tsx +0 -6
  31. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +3 -146
  32. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +0 -7
  33. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +549 -650
  34. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +3 -3
  35. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +7 -4
  36. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +0 -2
  37. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +17 -18
  38. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +0 -3
  39. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.test.jsx +25 -55
  40. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +3 -3
  41. data/app/pb_kits/playbook/pb_nav/_item.tsx +3 -5
  42. data/app/pb_kits/playbook/pb_nav/_nav.scss +3 -82
  43. data/app/pb_kits/playbook/pb_nav/docs/example.yml +6 -2
  44. data/app/pb_kits/playbook/pb_nav/docs/index.js +1 -2
  45. data/app/pb_kits/playbook/pb_nav/item.html.erb +1 -1
  46. data/app/pb_kits/playbook/pb_nav/item.rb +1 -1
  47. data/app/pb_kits/playbook/pb_nav/navTypes.ts +0 -1
  48. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +16 -51
  49. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_required_indicator.jsx +0 -1
  50. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_required_indicator.jsx +0 -1
  51. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +0 -2
  52. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +0 -2
  53. data/app/pb_kits/playbook/pb_table/index.ts +27 -29
  54. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +10 -10
  55. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +1 -29
  56. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +323 -411
  57. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +0 -2
  58. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -2
  59. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +21 -22
  60. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +2 -3
  61. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -3
  62. data/app/pb_kits/playbook/tokens/_colors.scss +0 -3
  63. data/app/pb_kits/playbook/tokens/exports/_colors.module.scss +0 -10
  64. data/dist/chunks/{_pb_line_graph-CC2Ywwix.js → _pb_line_graph-BgKF_zz1.js} +1 -1
  65. data/dist/chunks/_typeahead-D-8xZ__X.js +1 -0
  66. data/dist/chunks/{globalProps-DYr2qrIf.js → globalProps-BhVYCqRf.js} +1 -1
  67. data/dist/chunks/lib-DD34ZrWL.js +29 -0
  68. data/dist/chunks/vendor.js +3 -3
  69. data/dist/menu.yml +1 -1
  70. data/dist/playbook-rails-react-bindings.js +1 -1
  71. data/dist/playbook-rails.js +1 -1
  72. data/dist/playbook.css +2 -2
  73. data/dist/reset.css +1 -1
  74. data/lib/playbook/forms/builder/date_picker_field.rb +2 -8
  75. data/lib/playbook/forms/builder/form_field_builder.rb +1 -1
  76. data/lib/playbook/forms/builder/multi_level_select_field.rb +0 -8
  77. data/lib/playbook/forms/builder/typeahead_field.rb +1 -15
  78. data/lib/playbook/forms/builder.rb +2 -2
  79. data/lib/playbook/version.rb +1 -1
  80. metadata +6 -28
  81. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.jsx +0 -71
  82. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_custom.md +0 -4
  83. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.html.erb +0 -6
  84. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.jsx +0 -17
  85. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_required_indicator.md +0 -3
  86. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.html.erb +0 -5
  87. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.jsx +0 -13
  88. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_required_indicator.md +0 -1
  89. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.md +0 -3
  90. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.html.erb +0 -72
  91. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.jsx +0 -87
  92. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_required_indicator.md +0 -3
  93. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_disabled_item.html.erb +0 -24
  94. data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_disabled_item.jsx +0 -87
  95. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_label.jsx +0 -44
  96. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_label.md +0 -1
  97. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.jsx +0 -28
  98. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_label.md +0 -1
  99. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.html.erb +0 -16
  100. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.jsx +0 -23
  101. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_required_indicator.md +0 -3
  102. data/app/pb_kits/playbook/tokens/_colors_accessible.scss +0 -250
  103. data/dist/chunks/_typeahead-BBzwt7HN.js +0 -1
  104. data/dist/chunks/lib-DgqmX9CF.js +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 694cf7465a53b857cde65a88e8ed0b21f563b1e456aefbf09c5c971f09ee6612
4
- data.tar.gz: 412af2afa615e39bc9a705824c8576beb21d729e3d2a5f6e6b89d3ad1529eb8a
3
+ metadata.gz: db94c53faae46d3ac450cae169b49010d0fea2eef2df809b1b498a803bf97275
4
+ data.tar.gz: 481cc281f583cd5db425d32dea0bbd0d87cd5fff7093745f3fa674b7900064da
5
5
  SHA512:
6
- metadata.gz: 8fd99f98d48beca4ed7e6251138c61f151932c3ad8b410963e5e0e7c7bc269d2b6e42350a85d30c2f5921993d26b1dc2ca7ae5d09efa6b845344b5cbc53c6664
7
- data.tar.gz: 4dc5224aaff8577af5f9721bd8d3ec7ca89243763c4d654df9b2afb67cd4e5dfcd81d9ec0479458176f804def932856ff12d14be9926864260743a6a47c9fbcd
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
- // Support function-based styling for conditional rendering
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-short", "arrow-down-short-wide"]`. All strings must be valid FA icons.
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'
@@ -168,4 +168,4 @@ $transition: $transition_cubic;
168
168
  border-color: $error;
169
169
  }
170
170
  }
171
- }
171
+ }
@@ -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" : "" }) do %>
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
- {requiredIndicator ? (
221
- <Caption className="pb_date_picker_kit_label">
222
- {label} <span style={{ color: `${colors.error}` }}>*</span>
223
- </Caption>
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
- <%= pb_rails("text_input", props: {
22
- aria: object.input_aria,
23
- autocomplete: false,
24
- cursor: object.cursor,
25
- dark: object.dark,
26
- data: object.input_data,
27
- disabled: object.disable_input,
28
- error: object.error,
29
- id: object.picker_id,
30
- margin_bottom: "none",
31
- name: object.name,
32
- placeholder: object.placeholder,
33
- required: object.required,
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<HTMLDivElement | null>(null);
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
- <label
463
- data-dropdown="pb-dropdown-label"
464
- htmlFor={selectId}
465
- onClick={handleLabelClick}
466
- >
467
- <Caption
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("[data-dropdown-trigger-custom-display]");
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"}) %>
@@ -25,7 +25,6 @@ const DropdownDefault = (props) => {
25
25
  return (
26
26
  <div>
27
27
  <Dropdown
28
- id="select_a_country"
29
28
  label="Select a Country"
30
29
  options={options}
31
30
  {...props}
@@ -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
- <label for="<%= object.select_id %>" data-dropdown="pb-dropdown-label">
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
- data-dropdown-selected-option
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
- <% if object.error.present? %>
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: { autocomplete: object.autocomplete, multi_select: object.multi_select, placeholder: object.placeholder, select_id: object.select_id, label: object.label, error_id: object.error_id, error: object.error }) %>
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
- <% if object.error.present? %>
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