playbook_ui 14.25.0.pre.alpha.PLAY2361datepickerarrownav10273 → 14.25.0.pre.alpha.PLAY2369textinputautocompleteprop9970

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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +65 -60
  6. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +1 -1
  7. data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
  8. data/app/pb_kits/playbook/pb_badge/_badge.scss +29 -135
  9. data/app/pb_kits/playbook/pb_body/_body.scss +35 -108
  10. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +1 -1
  11. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +30 -17
  12. data/app/pb_kits/playbook/pb_button/_button.scss +31 -39
  13. data/app/pb_kits/playbook/pb_button/_button.tsx +12 -12
  14. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  15. data/app/pb_kits/playbook/pb_button/button.rb +18 -11
  16. data/app/pb_kits/playbook/pb_button/button.test.js +3 -3
  17. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +73 -82
  18. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +33 -32
  19. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +1 -1
  20. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +2 -2
  21. data/app/pb_kits/playbook/pb_caption/_caption.scss +17 -100
  22. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +8 -1
  23. data/app/pb_kits/playbook/pb_card/_card.scss +79 -116
  24. data/app/pb_kits/playbook/pb_card/_card.tsx +11 -26
  25. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +1 -1
  26. data/app/pb_kits/playbook/pb_card/card.rb +7 -8
  27. data/app/pb_kits/playbook/pb_card/card_header.rb +2 -6
  28. data/app/pb_kits/playbook/pb_card/docs/_card_header.html.erb +1 -1
  29. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +2 -11
  30. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +7 -7
  31. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +1 -1
  32. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  33. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +4 -4
  34. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +1 -1
  35. data/app/pb_kits/playbook/pb_currency/_currency.scss +39 -124
  36. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +6 -16
  37. data/app/pb_kits/playbook/pb_date/_date.scss +18 -16
  38. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
  39. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +3 -15
  40. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +12 -12
  41. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
  42. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +5 -6
  43. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +23 -29
  44. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +1 -1
  45. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
  46. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +2 -2
  47. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +26 -66
  48. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +1 -1
  49. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +2 -2
  50. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +15 -8
  51. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +7 -6
  52. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +14 -17
  53. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -1
  54. data/app/pb_kits/playbook/pb_detail/_detail.scss +21 -86
  55. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +123 -330
  56. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +2 -16
  57. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +7 -10
  58. data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +1 -1
  59. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +25 -0
  60. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +381 -0
  61. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +231 -0
  62. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +3 -0
  63. data/app/pb_kits/playbook/pb_drawer/context.ts +11 -0
  64. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  65. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +41 -0
  66. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  67. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +78 -0
  68. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +3 -0
  69. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +26 -0
  70. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -0
  71. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +59 -0
  72. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  73. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +61 -0
  74. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +24 -0
  75. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  76. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +54 -0
  77. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  78. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  79. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +99 -0
  80. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +20 -0
  81. data/app/pb_kits/playbook/pb_drawer/docs/index.js +7 -0
  82. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -0
  83. data/app/pb_kits/playbook/pb_drawer/drawer.rb +56 -0
  84. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +81 -0
  85. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +60 -0
  86. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +21 -0
  87. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  88. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  89. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
  90. data/app/pb_kits/playbook/pb_dropdown/index.js +3 -3
  91. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
  92. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +9 -20
  93. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
  94. data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
  95. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +29 -65
  96. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +2 -1
  97. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
  98. data/app/pb_kits/playbook/pb_flex/_flex.scss +100 -106
  99. data/app/pb_kits/playbook/pb_flex/_flex.tsx +25 -32
  100. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +51 -146
  101. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +8 -19
  102. data/app/pb_kits/playbook/pb_flex/flex.rb +16 -16
  103. data/app/pb_kits/playbook/pb_flex/flex_item.rb +6 -6
  104. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
  105. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +344 -381
  106. data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
  107. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +7 -8
  108. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +2 -9
  109. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
  110. data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
  111. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
  112. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
  113. data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
  114. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +39 -40
  115. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  116. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
  117. data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +15 -16
  118. data/app/pb_kits/playbook/pb_image/_image.scss +36 -41
  119. data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
  120. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +2 -3
  121. data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
  122. data/app/pb_kits/playbook/pb_layout/_layout.scss +305 -336
  123. data/app/pb_kits/playbook/pb_layout/_layout.tsx +11 -14
  124. data/app/pb_kits/playbook/pb_layout/item.rb +7 -1
  125. data/app/pb_kits/playbook/pb_layout/layout.rb +25 -16
  126. data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
  127. data/app/pb_kits/playbook/pb_legend/_legend.scss +16 -66
  128. data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
  129. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
  130. data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
  131. data/app/pb_kits/playbook/pb_link/_link.scss +19 -113
  132. data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
  133. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +11 -13
  134. data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
  135. data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
  136. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
  137. data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
  138. data/app/pb_kits/playbook/pb_message/_message.scss +16 -21
  139. data/app/pb_kits/playbook/pb_message/_message.tsx +0 -1
  140. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +12 -5
  141. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
  142. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +3 -6
  143. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +15 -16
  144. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
  145. data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
  146. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
  147. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +15 -19
  148. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
  149. data/app/pb_kits/playbook/pb_online_status/online_status.rb +4 -5
  150. data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
  151. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
  152. data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
  153. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +2 -5
  154. data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
  155. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
  156. data/app/pb_kits/playbook/pb_pill/_pill.scss +21 -23
  157. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +13 -15
  158. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +33 -108
  159. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
  160. data/app/pb_kits/playbook/pb_radio/_radio.scss +52 -71
  161. data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
  162. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +3 -0
  163. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
  164. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +70 -81
  165. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +1 -9
  166. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
  167. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +1 -3
  168. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +1 -7
  169. data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
  170. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +2 -6
  171. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +8 -17
  172. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +29 -39
  173. data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +0 -2
  174. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +11 -8
  175. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +3 -2
  176. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
  177. data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
  178. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
  179. data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
  180. data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
  181. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
  182. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +3 -0
  183. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -3
  184. data/app/pb_kits/playbook/pb_text_input/text_input.test.js +38 -0
  185. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
  186. data/app/pb_kits/playbook/pb_time/_time.scss +17 -44
  187. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +23 -44
  188. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +1 -1
  189. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +8 -5
  190. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +10 -16
  191. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +4 -1
  192. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +1 -1
  193. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +2 -2
  194. data/app/pb_kits/playbook/pb_title/_title.scss +39 -44
  195. data/app/pb_kits/playbook/pb_title/_title.tsx +8 -17
  196. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
  197. data/app/pb_kits/playbook/pb_title/title.rb +10 -20
  198. data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
  199. data/app/pb_kits/playbook/pb_title_count/_title_count.scss +8 -19
  200. data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +11 -10
  201. data/app/pb_kits/playbook/pb_toggle/_toggle.scss +1 -4
  202. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +4 -3
  203. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -1
  204. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
  205. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
  206. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +1 -1
  207. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.html.erb +22 -1
  208. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.jsx +1 -1
  209. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_without_pills.html.erb +2 -2
  210. data/app/pb_kits/playbook/pb_user/_user.scss +33 -83
  211. data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
  212. data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +8 -23
  213. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
  214. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
  215. data/dist/chunks/{_line_graph-DHO-uYxy.js → _line_graph-QVm2TVXJ.js} +1 -1
  216. data/dist/chunks/_typeahead-DENY2KW9.js +6 -0
  217. data/dist/chunks/{_weekday_stacked-B1esXFeA.js → _weekday_stacked-DOM5KkBF.js} +2 -2
  218. data/dist/chunks/{lib-C43ywQsO.js → lib-CY5ZPzic.js} +1 -1
  219. data/dist/chunks/{pb_form_validation-Cqj3itLG.js → pb_form_validation-D3b0JKHH.js} +1 -1
  220. data/dist/chunks/vendor.js +1 -1
  221. data/dist/menu.yml +6 -0
  222. data/dist/playbook-doc.js +2 -2
  223. data/dist/playbook-rails-react-bindings.js +1 -1
  224. data/dist/playbook-rails.js +1 -1
  225. data/dist/playbook.css +1 -1
  226. data/lib/playbook/version.rb +1 -1
  227. metadata +36 -7
  228. data/dist/chunks/_typeahead-_kMvPVfz.js +0 -6
@@ -2,7 +2,7 @@
2
2
  @import "../tokens/titles";
3
3
  @import "../tokens/colors";
4
4
 
5
- .pb_text_input_kit {
5
+ [class^="pb_text_input_kit"] {
6
6
  .pb_text_input_kit_label {
7
7
  margin-bottom: $space_xs;
8
8
  display: block;
@@ -76,7 +76,7 @@
76
76
  .text_input {
77
77
  border-color: $error_dark;
78
78
  }
79
- .pb_body_kit_negative {
79
+ [class*=pb_body_kit_negative] {
80
80
  color: $error_dark;
81
81
  }
82
82
  }
@@ -100,7 +100,7 @@
100
100
  }
101
101
  &.error {
102
102
  .text_input_wrapper {
103
- .pb_body_kit_negative {
103
+ [class*="pb_body_kit"] {
104
104
  margin-top: $space_xs / 2;
105
105
  }
106
106
  // The `:not` here prevents error styling from affecting the country search input in the Phone Number Input Kit.
@@ -174,9 +174,9 @@
174
174
  }
175
175
 
176
176
  .text_input_wrapper_add_on {
177
- & > .pb_text_input_kit:not(:last-child) {
177
+ & > [class^="pb_text_input_kit"]:not(:last-child) {
178
178
  .text_input_wrapper_add_on input,
179
- .pb_text_input_kit .text_input_wrapper_add_on .text_input {
179
+ [class^="pb_text_input_kit"] .text_input_wrapper_add_on .text_input {
180
180
  border-bottom-right-radius: 0;
181
181
  border-top-right-radius: 0;
182
182
  border-right-width: 0;
@@ -36,6 +36,7 @@ type TextInputProps = {
36
36
  alignment?: "right" | "left",
37
37
  border?: boolean,
38
38
  },
39
+ autoComplete?: boolean | string,
39
40
  } & GlobalProps
40
41
 
41
42
  const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>) => {
@@ -59,6 +60,7 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>
59
60
  type = 'text',
60
61
  value = '',
61
62
  children = null,
63
+ autoComplete = true,
62
64
  } = props
63
65
 
64
66
  const ariaProps = buildAriaProps(aria)
@@ -142,6 +144,7 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>
142
144
  childInput ? React.cloneElement(children, { className: "text_input" }) :
143
145
  (<input
144
146
  {...domSafeProps(props)}
147
+ autoComplete={typeof autoComplete === "string" ? autoComplete : ( autoComplete ? undefined : "off" )}
145
148
  className="text_input"
146
149
  disabled={disabled}
147
150
  id={id}
@@ -15,8 +15,7 @@ module Playbook
15
15
  "cvv" => '\d{3,4}',
16
16
  }.freeze
17
17
 
18
- prop :autocomplete, type: Playbook::Props::Boolean,
19
- default: true
18
+ prop :autocomplete, default: true
20
19
  prop :disabled, type: Playbook::Props::Boolean,
21
20
  default: false
22
21
  prop :error
@@ -69,7 +68,7 @@ module Playbook
69
68
 
70
69
  def all_input_options
71
70
  {
72
- autocomplete: autocomplete ? nil : "off",
71
+ autocomplete: autocomplete == true ? nil : (autocomplete.presence || "off"),
73
72
  class: "text_input #{input_options.dig(:classname) || ''}",
74
73
  data: validation_data,
75
74
  disabled: disabled,
@@ -306,3 +306,41 @@ test('returns masked CVV value', () => {
306
306
 
307
307
  expect(input.value).toBe('')
308
308
  })
309
+
310
+ test('adds autocomplete string attribute', () => {
311
+ render(
312
+ <TextInput
313
+ autoComplete="family-name"
314
+ data={{ testid: testId }}
315
+ />
316
+ )
317
+
318
+ const kit = screen.getByTestId(testId)
319
+ const input = within(kit).getByRole('textbox')
320
+ expect(input).toHaveAttribute("autocomplete", "family-name")
321
+ })
322
+
323
+ test('adds autocomplete "off" attribute', () => {
324
+ render(
325
+ <TextInput
326
+ autoComplete={false}
327
+ data={{ testid: testId }}
328
+ />
329
+ )
330
+
331
+ const kit = screen.getByTestId(testId)
332
+ const input = within(kit).getByRole('textbox')
333
+ expect(input).toHaveAttribute("autocomplete", "off")
334
+ })
335
+
336
+ test('does not add autocomplete attribute otherwise', () => {
337
+ render(
338
+ <TextInput
339
+ data={{ testid: testId }}
340
+ />
341
+ )
342
+
343
+ const kit = screen.getByTestId(testId)
344
+ const input = within(kit).getByRole('textbox')
345
+ expect(input).not.toHaveAttribute("autocomplete")
346
+ })
@@ -3,11 +3,11 @@
3
3
  @import "../tokens/spacing";
4
4
  @import "../tokens/titles";
5
5
 
6
- .pb_textarea_kit {
6
+ [class^=pb_textarea_kit] {
7
7
  margin-bottom: $space_sm;
8
8
 
9
- .pb_caption_kit_md {
10
- margin-bottom: $space_xs !important;
9
+ [class^=pb_caption_kit] {
10
+ margin-bottom: $space_xs;
11
11
  display: block;
12
12
  }
13
13
  textarea::placeholder,
@@ -59,8 +59,8 @@
59
59
  }
60
60
 
61
61
  &.error {
62
- .pb_body_kit_negative {
63
- margin-top: $space_xs / 2 !important;
62
+ [class*=pb_body_kit] {
63
+ margin-top: $space_xs / 2;
64
64
  }
65
65
  textarea {
66
66
  border-color: $error;
@@ -81,4 +81,4 @@
81
81
  .pb_caption_kit_xs {
82
82
  text-align: right;
83
83
  }
84
- }
84
+ }
@@ -4,20 +4,16 @@
4
4
  @import "../pb_body/body";
5
5
  @import "../pb_caption/caption";
6
6
 
7
- .pb_time_kit,
8
- .pb_time_kit_left,
9
- .pb_time_kit_center,
10
- .pb_time_kit_right,
11
- .pb_time_kit_sm,
12
- .pb_time_kit_md,
13
- .pb_time_kit_left_sm,
14
- .pb_time_kit_left_md,
15
- .pb_time_kit_center_sm,
16
- .pb_time_kit_center_md,
17
- .pb_time_kit_right_sm,
18
- .pb_time_kit_right_md {
7
+ [class^=pb_time_kit] {
8
+ &[class*=_center] {
9
+ text-align: center;
10
+ }
11
+
12
+ &[class*=_right] {
13
+ text-align: right;
14
+ }
19
15
 
20
- .pb_time_timezone {
16
+ [class^=pb_time_timezone] {
21
17
  color: $text_lt_light;
22
18
  font-weight: $bold;
23
19
 
@@ -25,36 +21,13 @@
25
21
  content: " ";
26
22
  }
27
23
  }
28
- }
29
-
30
- .pb_time_kit_center,
31
- .pb_time_kit_center_sm,
32
- .pb_time_kit_center_md {
33
- text-align: center;
34
- }
35
24
 
36
- .pb_time_kit_right,
37
- .pb_time_kit_right_sm,
38
- .pb_time_kit_right_md {
39
- text-align: right;
40
- }
41
-
42
- .pb_time_kit.dark,
43
- .pb_time_kit_left.dark,
44
- .pb_time_kit_center.dark,
45
- .pb_time_kit_right.dark,
46
- .pb_time_kit_sm.dark,
47
- .pb_time_kit_md.dark,
48
- .pb_time_kit_left_sm.dark,
49
- .pb_time_kit_left_md.dark,
50
- .pb_time_kit_center_sm.dark,
51
- .pb_time_kit_center_md.dark,
52
- .pb_time_kit_right_sm.dark,
53
- .pb_time_kit_right_md.dark {
54
- & * {
55
- @include caption_dark;
56
- }
57
- .pb_time {
58
- color: $text_dk_default;
25
+ &[class*=dark] {
26
+ & * {
27
+ @include caption_dark;
28
+ }
29
+ .pb_time {
30
+ color: $text_dk_default;
31
+ }
59
32
  }
60
- }
33
+ }
@@ -1,56 +1,35 @@
1
1
 
2
- @import "../tokens/spacing";
3
-
4
- // Base time range inline classes
5
- .pb_time_range_inline_kit_left,
6
- .pb_time_range_inline_kit_center,
7
- .pb_time_range_inline_kit_right,
8
- .pb_time_range_inline_kit_vertical {
9
- .pb_time_range_inline_wrapper {
2
+ [class^=pb_time_range_inline_kit] {
3
+ &[class*=_center] {
4
+ & > [class^=pb_caption],
5
+ & > [class^=pb_body] {
6
+ text-align: center;
7
+ }
8
+ & > [class*=pb_time_range_inline_wrapper] {
9
+ justify-content: center;
10
+ }
11
+ }
12
+ &[class*=_right] {
13
+ & > [class^=pb_caption],
14
+ & > [class^=pb_body] {
15
+ text-align: right;
16
+ }
17
+ & > [class*=pb_time_range_inline_wrapper] {
18
+ justify-content: flex-end;
19
+ }
20
+ }
21
+ [class^=pb_time_range_inline_wrapper] {
10
22
  display: flex;
11
23
  align-items: center;
12
- .pb_time_range_inline_arrow {
24
+ [class*=pb_time_range_inline_arrow] {
13
25
  margin-left: $space_xs/2;
14
26
  margin-right: $space_xs/2;
15
27
  }
16
- .pb_time_range_inline_timezone {
28
+ [class*=pb_time_range_inline_timezone] {
17
29
  margin-left: $space_xs/2;
18
30
  }
19
- .pb_time_range_inline_icon {
31
+ [class*=pb_time_range_inline_icon] {
20
32
  margin-right: $space_xs/2;
21
33
  }
22
34
  }
23
35
  }
24
-
25
- // Center alignment
26
- .pb_time_range_inline_kit_center {
27
- & > .pb_caption_kit,
28
- & > .pb_body_kit {
29
- text-align: center;
30
- }
31
- & > .pb_time_range_inline_wrapper {
32
- justify-content: center;
33
- }
34
- }
35
-
36
- // Right alignment
37
- .pb_time_range_inline_kit_right {
38
- & > .pb_caption_kit,
39
- & > .pb_body_kit {
40
- text-align: right;
41
- }
42
- & > .pb_time_range_inline_wrapper {
43
- justify-content: flex-end;
44
- }
45
- }
46
-
47
- // Vertical alignment
48
- .pb_time_range_inline_kit_vertical {
49
- & > .pb_caption_kit,
50
- & > .pb_body_kit {
51
- text-align: center;
52
- }
53
- & > .pb_time_range_inline_wrapper {
54
- justify-content: center;
55
- }
56
- }
@@ -16,7 +16,7 @@ module Playbook
16
16
  prop :timezone, default: false
17
17
 
18
18
  def classname
19
- generate_classname("pb_time_range_inline_kit", alignment)
19
+ generate_classname("pb_time_range_inline_kit", dark_class, alignment)
20
20
  end
21
21
 
22
22
  def format_start_time_string
@@ -2,12 +2,15 @@
2
2
  @import "../pb_caption/caption";
3
3
  @import "../tokens/colors";
4
4
 
5
- .pb_time_stacked_kit_center {
6
- text-align: center;
7
- }
5
+ [class^=pb_time_stacked_kit] {
6
+ &[class*=_center] {
7
+ text-align: center;
8
+ }
9
+
10
+ &[class*=_right] {
11
+ text-align: right;
12
+ }
8
13
 
9
- .pb_time_stacked_kit_right {
10
- text-align: right;
11
14
  }
12
15
 
13
16
  .time-spacing {
@@ -1,22 +1,16 @@
1
1
  @import "timestamp-mixins";
2
2
  @import "../tokens/colors";
3
3
 
4
- .pb_timestamp_kit_left,
5
- .pb_timestamp_kit_center,
6
- .pb_timestamp_kit_right {
4
+ [class^=pb_timestamp_kit]{
7
5
  @include pb_timestamp;
8
- }
9
-
10
- .pb_timestamp_kit_center {
11
- text-align: center;
12
- }
13
-
14
- .pb_timestamp_kit_right {
15
- text-align: right;
16
- }
17
6
 
18
- .pb_timestamp_kit_left.dark,
19
- .pb_timestamp_kit_center.dark,
20
- .pb_timestamp_kit_right.dark {
21
- color: $text_dk_default;
7
+ &[class*=_center] {
8
+ text-align: center;
9
+ }
10
+ &[class*=_right] {
11
+ text-align: right;
12
+ }
13
+ &[class*=_dark] {
14
+ color: $text_dk_default;
15
+ }
22
16
  }
@@ -49,7 +49,10 @@ const Timestamp = (props: TimestampProps): React.ReactElement => {
49
49
  const dataProps = buildDataProps(data)
50
50
  const htmlProps = buildHtmlProps(htmlOptions)
51
51
  const classes = classnames(
52
- buildCss('pb_timestamp_kit', align),
52
+ buildCss('pb_timestamp_kit', align, {
53
+ dark: dark,
54
+ variant: variant,
55
+ }),
53
56
  globalProps(props),
54
57
  className
55
58
  )
@@ -40,7 +40,7 @@ module Playbook
40
40
  SECS_PER_CENT = 100 * SECS_PER_YEAR # 3,153,600,000 seconds
41
41
 
42
42
  def classname
43
- generate_classname("pb_timestamp_kit", align)
43
+ generate_classname("pb_timestamp_kit", variant_class, align)
44
44
  end
45
45
 
46
46
  def timestamp_text
@@ -36,7 +36,7 @@ describe("Timestamp Kit", () => {
36
36
  );
37
37
 
38
38
  const kit = screen.getByTestId(testId);
39
- expect(kit).toHaveClass("pb_timestamp_kit_left");
39
+ expect(kit).toHaveClass("pb_timestamp_kit_left_variant");
40
40
  });
41
41
 
42
42
  test("renders Timestamp time", () => {
@@ -79,7 +79,7 @@ describe("Timestamp Kit", () => {
79
79
  );
80
80
 
81
81
  const kit = screen.getByTestId(testId);
82
- expect(kit).toHaveClass("pb_timestamp_kit_center");
82
+ expect(kit).toHaveClass("pb_timestamp_kit_center_variant");
83
83
  });
84
84
 
85
85
  test("renders Timestamp timezone", () => {
@@ -1,78 +1,73 @@
1
1
  @import "../tokens/titles";
2
2
  @import "../tokens/colors";
3
- @import "../tokens/typography";
4
3
  @import "../tokens/screen_sizes";
5
4
  @import './title_mixin';
6
5
 
7
- .pb_title_kit {
8
- // Base title styles - default to title 3 styling
9
- @include pb_title_3;
10
- @include pb_title_bold;
11
-
12
- // Size-based styles (these will override the base)
13
- &.pb_title_1 {
6
+ [class^=pb_title_kit] {
7
+ &[class*=_1] {
14
8
  @include pb_title_1;
9
+ @include title_colors;
15
10
  @include pb_title_bold;
16
11
  }
17
12
 
18
- &.pb_title_2 {
13
+ &[class*=_2] {
19
14
  @include pb_title_2;
15
+ @include title_colors;
20
16
  @include pb_title_bold;
21
17
  }
22
18
 
23
- &.pb_title_3 {
19
+ &[class*=_3] {
24
20
  @include pb_title_3;
21
+ @include title_colors;
25
22
  @include pb_title_bold;
26
23
  }
27
24
 
28
- &.pb_title_4 {
25
+ &[class*=_4] {
29
26
  @include pb_title_4;
27
+ @include title_colors;
30
28
  }
31
29
 
32
- &.pb_title_thin {
30
+ &[class*=_thin] {
33
31
  @include pb_title_thin;
34
32
  }
35
33
 
36
- // Color classes
37
- @include title_colors;
38
-
39
- // Display sizes
40
- &.pb_title_display {
34
+ &[class*=_display] {
41
35
  font-size: clamp(24px, calc(1.25vw + 5.3vw), 128px);
42
- font-weight: $bold;
43
- }
44
-
45
- // Dynamic sizes
46
- &.pb_title_dynamic_xs {
47
- font-size: min(2vw, 80vw / 16);
48
- }
49
-
50
- &.pb_title_dynamic_sm {
51
- font-size: min(2.5vw, 96vw / 16);
52
36
  }
53
37
 
54
- &.pb_title_dynamic_md {
55
- font-size: min(4vw, 160vw / 16);
56
- }
57
-
58
- &.pb_title_dynamic_lg {
59
- font-size: min(5vw, 192vw / 16);
60
- }
61
-
62
- &.pb_title_dynamic_xl {
63
- font-size: min(6vw, 224vw / 16);
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
+ }
64
62
  }
63
+
65
64
 
66
- &.pb_title_dynamic_xxl {
67
- font-size: min(8vw, 256vw / 16);
68
- }
69
65
 
70
- // Responsive breakpoint classes
71
66
  @each $size, $size_value in $breakpoints_grid {
72
67
  @for $title_size_value from 1 through 4 {
73
68
  $min_size: map-get($size_value, "min");
74
69
  $max_size: map-get($size_value, "max");
75
- &.pb_title_#{$size}_#{$title_size_value} {
70
+ &[class*=_#{$size}_#{$title_size_value}] {
76
71
  @include break_on($min_size, $max_size) {
77
72
  @if $title_size_value == 1 { @include pb_title_1; }
78
73
  @else if $title_size_value == 2 { @include pb_title_2; }
@@ -88,9 +83,9 @@
88
83
  &.dark {
89
84
  @include title_dark;
90
85
  @each $name, $color in $pb_dark_title_colors {
91
- &.pb_title_#{$name} {
86
+ &[class*="_#{$name}"] {
92
87
  color: $color;
93
88
  }
94
89
  }
95
90
  }
96
- }
91
+ }
@@ -43,41 +43,32 @@ const Title = (props: TitleProps): React.ReactElement => {
43
43
  const ariaProps: {[key: string]: string | number} = buildAriaProps(aria)
44
44
  const dataProps: {[key: string]: string | number} = buildDataProps(data)
45
45
  const htmlProps = buildHtmlProps(htmlOptions)
46
+ const getBold = bold ? '' : 'thin'
46
47
  const isSizeNumberOrString = typeof size === "number" || typeof size === "string"
47
48
 
48
49
  const buildResponsiveSizeCss = () => {
49
- const classes: string[] = []
50
+ let css = ''
50
51
 
51
52
  if (!isSizeNumberOrString) {
52
53
  Object.entries(size).forEach((sizeObj) => {
53
- classes.push(`pb_title_${sizeObj[0]}_${sizeObj[1]}`)
54
+ css += `pb_title_kit_${sizeObj[0]}_${sizeObj[1]} `
54
55
  })
55
56
  }
56
57
 
57
- return classes
58
+ return css.trim()
58
59
  }
59
60
 
60
61
  const buildDisplaySize = () => {
61
62
  if (displaySize) {
62
- return [`pb_title_dynamic_${displaySize}`]
63
+ return `pb_title_kit_dynamic_${displaySize}`
63
64
  }
64
- return []
65
65
  }
66
66
 
67
- const titleClasses = ['pb_title_kit']
68
-
69
- if (isSizeNumberOrString) {
70
- titleClasses.push(`pb_title_${size}`)
71
- }
72
- if (variant) titleClasses.push(`pb_title_${variant}`)
73
- if (color) titleClasses.push(`pb_title_${color}`)
74
- if (!bold) titleClasses.push('pb_title_thin')
75
- titleClasses.push(...buildDisplaySize())
76
- titleClasses.push(...buildResponsiveSizeCss())
77
-
78
67
  const classes = classnames(
79
- titleClasses.join(' '),
68
+ buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
80
69
  globalProps(props),
70
+ buildDisplaySize(),
71
+ buildResponsiveSizeCss(),
81
72
  className
82
73
  )
83
74
  const Tag: React.ReactElement | any = `${tag}`
@@ -20,7 +20,7 @@ $pb_dark_title_colors: (
20
20
 
21
21
  @mixin title_colors {
22
22
  @each $name, $color in $pb_title_colors {
23
- &.pb_title_#{$name} {
23
+ &[class*=_#{$name}] {
24
24
  color: $color
25
25
  }
26
26
  }
@@ -28,4 +28,4 @@ $pb_dark_title_colors: (
28
28
 
29
29
  @mixin title_dark {
30
30
  color: $text_dk_default;
31
- }
31
+ }
@@ -21,46 +21,36 @@ module Playbook
21
21
  default: nil
22
22
 
23
23
  def classname
24
- title_classes = ["pb_title_kit"]
25
-
26
24
  if is_size_responsive
27
- title_classes << "pb_title_#{variant}" if variant.present?
28
- title_classes << "pb_title_#{color}" if color.present?
29
- title_classes << "pb_title_#{is_bold}" if is_bold.present?
30
- title_classes += generate_responsive_size_classes
25
+ generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
31
26
  else
32
- title_classes << "pb_title_#{size}" if size.present?
33
- title_classes << "pb_title_#{variant}" if variant.present?
34
- title_classes << "pb_title_#{color}" if color.present?
35
- title_classes << "pb_title_#{is_bold}" if is_bold.present?
36
- title_classes += generate_display_size_classes
27
+ generate_classname("pb_title_kit", size, variant, color, is_bold) + generate_display_size
37
28
  end
38
-
39
- generate_classname(title_classes.compact.join(" "), separator: " ")
40
29
  end
41
30
 
42
31
  def is_bold
43
32
  bold ? nil : "thin"
44
33
  end
45
34
 
46
- def generate_display_size_classes
47
- return [] if display_size.nil?
35
+ def generate_display_size
36
+ return "" if display_size.nil?
48
37
 
49
- ["pb_title_dynamic_#{display_size}"]
38
+ " pb_title_kit_dynamic_#{display_size}"
50
39
  end
51
40
 
52
41
  def is_size_responsive
53
42
  try(:size).is_a?(::Hash)
54
43
  end
55
44
 
56
- def generate_responsive_size_classes
57
- classes = []
45
+ def generate_responsive_size_classname
46
+ css = ""
58
47
  if is_size_responsive
59
48
  size.each do |key, value|
60
- classes << "pb_title_#{key}_#{value}"
49
+ css += " pb_title_kit_#{key}_#{value}"
61
50
  end
62
51
  end
63
- classes
52
+
53
+ css unless css.blank?
64
54
  end
65
55
  end
66
56
  end