playbook_ui 15.4.0 → 15.5.0.pre.alpha.PLAY2554homeaddressstreetaccessibility12695

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +96 -6
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +2 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +3 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_editing.jsx +3 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.jsx +2 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_copy_button/_copy_button.tsx +21 -8
  11. data/app/pb_kits/playbook/pb_copy_button/copy_button.html.erb +6 -2
  12. data/app/pb_kits/playbook/pb_copy_button/copy_button.rb +3 -0
  13. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +24 -0
  14. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant.html.erb +9 -0
  15. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant.jsx +24 -0
  16. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant_rails.md +1 -0
  17. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_button_variant_react.md +1 -0
  18. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.html.erb +2 -2
  19. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_default.jsx +1 -2
  20. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.html.erb +2 -2
  21. data/app/pb_kits/playbook/pb_copy_button/docs/_copy_button_from.jsx +2 -0
  22. data/app/pb_kits/playbook/pb_copy_button/docs/example.yml +2 -0
  23. data/app/pb_kits/playbook/pb_copy_button/docs/index.js +1 -0
  24. data/app/pb_kits/playbook/pb_currency/docs/_currency_abbreviated.md +1 -0
  25. data/app/pb_kits/playbook/pb_currency/docs/_currency_matching_decimals_rails.md +1 -0
  26. data/app/pb_kits/playbook/pb_currency/docs/_currency_matching_decimals_react.md +1 -0
  27. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.html.erb +10 -0
  28. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.jsx +10 -0
  29. data/app/pb_kits/playbook/pb_currency/docs/_currency_negative.md +1 -0
  30. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol_rails.md +1 -0
  31. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol_react.md +1 -0
  32. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +7 -0
  33. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.jsx +7 -0
  34. data/app/pb_kits/playbook/pb_currency/docs/_description.md +2 -2
  35. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +25 -11
  36. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +44 -3
  37. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +20 -13
  38. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.rb +6 -4
  39. data/app/pb_kits/playbook/pb_date_range_inline/date_range_inline.test.js +17 -0
  40. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.html.erb +4 -0
  41. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.jsx +43 -0
  42. data/app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_show_current_year.md +1 -0
  43. data/app/pb_kits/playbook/pb_date_range_inline/docs/_description.md +1 -1
  44. data/app/pb_kits/playbook/pb_date_range_inline/docs/example.yml +3 -2
  45. data/app/pb_kits/playbook/pb_date_range_inline/docs/index.js +1 -0
  46. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +6 -4
  47. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +2 -3
  48. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +11 -5
  49. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +26 -9
  50. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.html.erb +12 -0
  51. data/app/pb_kits/playbook/pb_date_stacked/docs/{_date_stacked_not_current_year.jsx → _date_stacked_current_year.jsx} +6 -5
  52. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.md +1 -0
  53. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_default.html.erb +1 -1
  54. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_default.jsx +1 -1
  55. data/app/pb_kits/playbook/pb_date_stacked/docs/_description.md +1 -1
  56. data/app/pb_kits/playbook/pb_date_stacked/docs/example.yml +2 -2
  57. data/app/pb_kits/playbook/pb_date_stacked/docs/index.js +1 -1
  58. data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +3 -0
  59. data/app/pb_kits/playbook/pb_date_time/date_time.html.erb +1 -0
  60. data/app/pb_kits/playbook/pb_date_time/date_time.rb +1 -0
  61. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year.html.erb +4 -0
  62. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year.jsx +14 -0
  63. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year_rails.md +1 -0
  64. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_show_current_year_react.md +1 -0
  65. data/app/pb_kits/playbook/pb_date_time/docs/example.yml +3 -1
  66. data/app/pb_kits/playbook/pb_date_time/docs/index.js +1 -0
  67. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +3 -0
  68. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +2 -2
  69. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.rb +2 -0
  70. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +33 -0
  71. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.html.erb +4 -0
  72. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.jsx +22 -0
  73. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_show_current_year.md +1 -0
  74. data/app/pb_kits/playbook/pb_date_time_stacked/docs/example.yml +3 -1
  75. data/app/pb_kits/playbook/pb_date_time_stacked/docs/index.js +1 -0
  76. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.html.erb +33 -2
  77. data/app/pb_kits/playbook/pb_dialog/index.js +15 -10
  78. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +156 -6
  79. data/app/pb_kits/playbook/pb_draggable/context/types.ts +8 -3
  80. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.jsx +180 -0
  81. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_dropzone.md +22 -0
  82. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +3 -2
  83. data/app/pb_kits/playbook/pb_draggable/docs/index.js +2 -1
  84. data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +77 -1
  85. data/app/pb_kits/playbook/pb_dropdown/index.js +32 -14
  86. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_alignment.jsx +2 -1
  87. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_default.jsx +2 -1
  88. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_orientation.jsx +2 -1
  89. data/app/pb_kits/playbook/pb_empty_state/docs/_empty_state_size.jsx +2 -1
  90. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +4 -4
  91. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +31 -9
  92. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +12 -5
  93. data/app/pb_kits/playbook/pb_flex/docs/_flex_item_example.jsx +1 -0
  94. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +4 -1
  95. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.tsx +34 -22
  96. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +16 -12
  97. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +124 -0
  98. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.jsx +147 -12
  99. data/app/pb_kits/playbook/pb_home_address_street/none_emphasis.html.erb +16 -12
  100. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +16 -12
  101. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.jsx +1 -1
  102. data/app/pb_kits/playbook/pb_nav/_item.tsx +18 -4
  103. data/app/pb_kits/playbook/pb_nav/_nav.scss +30 -5
  104. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +192 -0
  105. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +1 -1
  106. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.html.erb +21 -0
  107. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.jsx +113 -0
  108. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_disabled.md +1 -0
  109. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.html.erb +30 -0
  110. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.jsx +117 -0
  111. data/app/pb_kits/playbook/pb_nav/docs/_vertical_nav_disabled.md +1 -0
  112. data/app/pb_kits/playbook/pb_nav/docs/example.yml +4 -0
  113. data/app/pb_kits/playbook/pb_nav/docs/index.js +3 -1
  114. data/app/pb_kits/playbook/pb_nav/item.html.erb +6 -4
  115. data/app/pb_kits/playbook/pb_nav/item.rb +11 -2
  116. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_description.md +3 -1
  117. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors.jsx +1 -1
  118. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.jsx +1 -1
  119. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.md +1 -0
  120. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_height.jsx +1 -1
  121. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_horizontal.jsx +1 -1
  122. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend.jsx +1 -1
  123. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_non_clickable.jsx +1 -2
  124. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.html.erb +1 -1
  125. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.jsx +1 -1
  126. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.md +11 -0
  127. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_negative_numbers.jsx +1 -1
  128. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_secondary_y_axis.jsx +1 -1
  129. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_spline.jsx +1 -2
  130. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_stacked.jsx +1 -2
  131. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_description.md +3 -1
  132. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.jsx +2 -1
  133. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.jsx +2 -1
  134. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.jsx +1 -1
  135. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.md +2 -1
  136. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.jsx +2 -1
  137. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.jsx +1 -1
  138. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.jsx +1 -1
  139. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.jsx +1 -1
  140. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.md +1 -0
  141. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.jsx +1 -1
  142. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_live_data.jsx +2 -1
  143. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.jsx +1 -1
  144. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.jsx +1 -1
  145. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_description.md +3 -1
  146. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.jsx +1 -1
  147. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.md +2 -2
  148. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.jsx +2 -1
  149. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.md +1 -0
  150. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.jsx +2 -1
  151. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.jsx +2 -1
  152. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.jsx +2 -1
  153. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.jsx +2 -1
  154. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_description.md +3 -1
  155. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.jsx +1 -1
  156. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.md +1 -0
  157. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.html.erb +1 -1
  158. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +4 -1
  159. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +384 -262
  160. data/app/pb_kits/playbook/pb_progress_step/docs/_description.md +1 -5
  161. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.html.erb +14 -0
  162. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.jsx +29 -0
  163. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_color.md +3 -0
  164. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.jsx +31 -0
  165. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.md +1 -0
  166. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.html.erb +4 -1
  167. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.jsx +14 -3
  168. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_default.md +3 -0
  169. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tracker.md +3 -0
  170. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.html.erb +1 -7
  171. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_vertical.md +1 -0
  172. data/app/pb_kits/playbook/pb_progress_step/docs/example.yml +3 -0
  173. data/app/pb_kits/playbook/pb_progress_step/docs/index.js +2 -0
  174. data/app/pb_kits/playbook/pb_progress_step/progress_step.test.js +41 -0
  175. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +3 -1
  176. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +3 -1
  177. data/app/pb_kits/playbook/pb_table/_table.tsx +28 -26
  178. data/app/pb_kits/playbook/pb_table/styles/_vertical_border.scss +49 -0
  179. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +4 -1
  180. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
  181. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +13 -2
  182. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -0
  183. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_react_hook.jsx +2 -1
  184. data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +1 -1
  185. data/app/pb_kits/playbook/utilities/_truncate.scss +2 -0
  186. data/app/pb_kits/playbook/utilities/globalProps.ts +26 -8
  187. data/app/pb_kits/playbook/utilities/test/globalProps/alignContent.test.js +18 -0
  188. data/app/pb_kits/playbook/utilities/test/globalProps/alignItems.test.js +18 -0
  189. data/app/pb_kits/playbook/utilities/test/globalProps/alignSelf.test.js +18 -0
  190. data/app/pb_kits/playbook/utilities/test/globalProps/display.test.js +18 -0
  191. data/app/pb_kits/playbook/utilities/test/globalProps/flex.test.js +18 -0
  192. data/app/pb_kits/playbook/utilities/test/globalProps/flexDirection.test.js +18 -0
  193. data/app/pb_kits/playbook/utilities/test/globalProps/flexGrow.test.js +18 -0
  194. data/app/pb_kits/playbook/utilities/test/globalProps/flexShrink.test.js +18 -0
  195. data/app/pb_kits/playbook/utilities/test/globalProps/flexWrap.test.js +18 -0
  196. data/app/pb_kits/playbook/utilities/test/globalProps/justifyContent.test.js +18 -0
  197. data/app/pb_kits/playbook/utilities/test/globalProps/justifySelf.test.js +18 -0
  198. data/app/pb_kits/playbook/utilities/test/globalProps/order.test.js +18 -0
  199. data/dist/chunks/_typeahead-CkkCTRLh.js +6 -0
  200. data/dist/chunks/lib-CgpqUb6l.js +29 -0
  201. data/dist/chunks/vendor.js +37 -1
  202. data/dist/playbook-rails-react-bindings.js +1 -1
  203. data/dist/playbook-rails.js +1 -1
  204. data/dist/playbook.css +1 -1
  205. data/lib/playbook/version.rb +2 -2
  206. metadata +48 -12
  207. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
  208. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_not_current_year.html.erb +0 -5
  209. data/dist/chunks/_line_graph-r__oOO2H.js +0 -1
  210. data/dist/chunks/_typeahead-B7c52zVj.js +0 -6
  211. data/dist/chunks/_weekday_stacked-DgiIj2w3.js +0 -37
  212. data/dist/chunks/componentRegistry-DzmmLR2x.js +0 -1
  213. data/dist/chunks/lib-CRUXizZe.js +0 -29
  214. data/dist/chunks/pb_form_validation-CywJN0ej.js +0 -1
  215. data/dist/playbook-doc.js +0 -19
@@ -0,0 +1,22 @@
1
+ The multiple container functionality also supports customized dropzone styling as shown here.
2
+
3
+ In addition to this, the `enableCrossContainerPreview` prop can be used on the `DraggableProvider` as shown here to enable dropzone preview for cross-container dragging.
4
+
5
+ With `enableCrossContainerPreview`, the `onDrop` and `onDragEnd` event listeners will also provide several arguments to allow developers more context from the drag event.
6
+
7
+ The `onDrop` callback is triggered when an item is successfully dropped into a container. It provides the following arguments:
8
+
9
+ - `draggedItemId` - The ID of the item that was dragged
10
+ - `droppedContainer` - The container where the item was dropped
11
+ - `originalContainer` - The container where the drag started
12
+ - `item` - The complete item object with all properties (including the updated container)
13
+ - `itemAbove` - The item directly above the dropped item in the final position (null if at the top)
14
+ - `itemBelow` - The item directly below the dropped item in the final position (null if at the bottom)
15
+
16
+ The `onDragEnd` callback is triggered when a drag operation ends, whether it was dropped or cancelled. It provides the following arguments:
17
+
18
+ - `draggedItemId` - The ID of the item that was dragged
19
+ - `finalContainer` - The container where the item ended up (could be same as original if drag was cancelled)
20
+ - `originalContainer` - The container where the drag started
21
+ - `itemAbove` - The item directly above the dragged item in the final position (null if at the top)
22
+ - `itemBelow` - The item directly below the dragged item in the final position (null if at the bottom)
@@ -5,11 +5,12 @@ examples:
5
5
  - draggable_with_selectable_list: Draggable with SelectableList Kit
6
6
  - draggable_with_cards: Draggable with Cards
7
7
  - draggable_with_table: Draggable with Table
8
- - draggable_multiple_containers: Dragging Across Multiple Containers
9
8
  - draggable_drop_zones: Draggable Drop Zones
10
9
  - draggable_drop_zones_colors: Draggable Drop Zones Colors
11
10
  - draggable_drop_zones_line: Draggable Drop Zones Line
12
11
  - draggable_event_listeners: Draggable Event Listeners
12
+ - draggable_multiple_containers: Dragging Across Multiple Containers
13
+ - draggable_multiple_containers_dropzone: Dragging Across Multiple Containers with Dropzones
13
14
 
14
15
  rails:
15
16
  - draggable_default: Default
@@ -17,8 +18,8 @@ examples:
17
18
  - draggable_with_selectable_list: Draggable with SelectableList Kit
18
19
  - draggable_with_cards: Draggable with Cards
19
20
  - draggable_with_table: Draggable with Table
20
- - draggable_multiple_containers: Dragging Across Multiple Containers
21
21
  - draggable_drop_zones: Draggable Drop Zones
22
22
  - draggable_drop_zones_colors: Draggable Drop Zones Colors
23
23
  - draggable_drop_zones_line: Draggable Drop Zones Line
24
24
  - draggable_event_listeners: Draggable Event Listeners
25
+ - draggable_multiple_containers: Dragging Across Multiple Containers
@@ -7,4 +7,5 @@ export { default as DraggableWithTable } from './_draggable_with_table.jsx'
7
7
  export { default as DraggableDropZones } from './_draggable_drop_zones.jsx'
8
8
  export { default as DraggableDropZonesColors } from './_draggable_drop_zones_colors.jsx'
9
9
  export { default as DraggableDropZonesLine } from './_draggable_drop_zones_line.jsx'
10
- export { default as DraggableEventListeners } from './_draggable_event_listeners.jsx'
10
+ export { default as DraggableEventListeners } from './_draggable_event_listeners.jsx'
11
+ export { default as DraggableMultipleContainersDropzone } from './_draggable_multiple_containers_dropzone.jsx'
@@ -255,4 +255,80 @@ test("line dropZone with horizontal direction applies 'line_horizontal' class to
255
255
  const container = kit.querySelector(".pb_draggable_container");
256
256
 
257
257
  expect(container).toHaveClass("line_horizontal");
258
- });
258
+ });
259
+
260
+ // Cross-container drag tests
261
+ const multiContainerData = [
262
+ { id: "1", container: "To Do", text: "Task 1" },
263
+ { id: "2", container: "To Do", text: "Task 2" },
264
+ { id: "3", container: "In Progress", text: "Task 3" },
265
+ { id: "4", container: "Done", text: "Task 4" },
266
+ ];
267
+
268
+ const containers = ["To Do", "In Progress", "Done"];
269
+
270
+ const DraggableMultipleContainers = () => {
271
+ const [initialState, setInitialState] = useState(multiContainerData);
272
+
273
+ return (
274
+ <div data-testid={testId}>
275
+ <DraggableProvider
276
+ dropZone={{ type: "outline" }}
277
+ initialItems={multiContainerData}
278
+ onReorder={(items) => setInitialState(items)}
279
+ >
280
+ {containers.map((container) => (
281
+ <Draggable.Container
282
+ container={container}
283
+ data={{testid:`container-${container}`}}
284
+ key={container}
285
+ >
286
+ {initialState
287
+ .filter((item) => item.container === container)
288
+ .map(({ id, text }) => (
289
+ <Draggable.Item
290
+ container={container}
291
+ data-testid={`item-${id}`}
292
+ dragId={id}
293
+ key={id}
294
+ >
295
+ {text}
296
+ </Draggable.Item>
297
+ ))}
298
+ </Draggable.Container>
299
+ ))}
300
+ </DraggableProvider>
301
+ </div>
302
+ );
303
+ };
304
+
305
+ test("renders multiple containers with correct items", () => {
306
+ render(<DraggableMultipleContainers />);
307
+
308
+ const kit = screen.getByTestId(testId);
309
+ expect(kit).toBeInTheDocument();
310
+
311
+ containers.forEach((container) => {
312
+ const containerEl = kit.querySelector(`[data-testid="container-${container}"]`);
313
+ expect(containerEl).toBeInTheDocument();
314
+ });
315
+
316
+ // Check items are in correct containers
317
+ expect(screen.getByText("Task 1")).toBeInTheDocument();
318
+ expect(screen.getByText("Task 2")).toBeInTheDocument();
319
+ expect(screen.getByText("Task 3")).toBeInTheDocument();
320
+ expect(screen.getByText("Task 4")).toBeInTheDocument();
321
+ });
322
+
323
+ test("items have correct container association", () => {
324
+ const { container } = render(<DraggableMultipleContainers />);
325
+
326
+ // items rendered within their respective containers
327
+ const todoContainer = container.querySelector('[data-testid="container-To Do"]');
328
+ const inProgressContainer = container.querySelector('[data-testid="container-In Progress"]');
329
+ const doneContainer = container.querySelector('[data-testid="container-Done"]');
330
+
331
+ expect(todoContainer.querySelectorAll('.pb_draggable_item')).toHaveLength(2);
332
+ expect(inProgressContainer.querySelectorAll('.pb_draggable_item')).toHaveLength(1);
333
+ expect(doneContainer.querySelectorAll('.pb_draggable_item')).toHaveLength(1);
334
+ })
@@ -33,6 +33,8 @@ export default class PbDropdown extends PbEnhancedElement {
33
33
  this.formPillProps = this.element.dataset.formPillProps
34
34
  ? JSON.parse(this.element.dataset.formPillProps)
35
35
  : {};
36
+ const baseInput = this.element.querySelector(DROPDOWN_INPUT);
37
+ this.wasOriginallyRequired = baseInput && baseInput.hasAttribute("required");
36
38
  this.setDefaultValue();
37
39
  this.bindEventListeners();
38
40
  this.bindSearchInput();
@@ -126,7 +128,7 @@ export default class PbDropdown extends PbEnhancedElement {
126
128
  .label.toString()
127
129
  .toLowerCase();
128
130
 
129
- // hide or show option
131
+ // hide or show option
130
132
  const match = label.includes(lcTerm);
131
133
  opt.style.display = match ? "" : "none";
132
134
  if (match) hasMatch = true
@@ -356,17 +358,6 @@ export default class PbDropdown extends PbEnhancedElement {
356
358
  }
357
359
 
358
360
  clearFormValidation(input) {
359
- if (input.checkValidity()) {
360
- const dropdownWrapperElement = input.closest(".dropdown_wrapper");
361
- dropdownWrapperElement.classList.remove("error");
362
-
363
- const errorLabelElement = dropdownWrapperElement.querySelector(
364
- ".pb_body_kit_negative"
365
- );
366
- if (errorLabelElement) {
367
- errorLabelElement.remove();
368
- }
369
- }
370
361
  if (this.isMultiSelect) {
371
362
  if (this.selectedOptions.size > 0) {
372
363
  const dropdownWrapperElement = input.closest(".dropdown_wrapper");
@@ -377,6 +368,19 @@ export default class PbDropdown extends PbEnhancedElement {
377
368
  if (errorLabelElement) {
378
369
  errorLabelElement.remove();
379
370
  }
371
+ return;
372
+ }
373
+ }
374
+
375
+ if (input.checkValidity()) {
376
+ const dropdownWrapperElement = input.closest(".dropdown_wrapper");
377
+ dropdownWrapperElement.classList.remove("error");
378
+
379
+ const errorLabelElement = dropdownWrapperElement.querySelector(
380
+ ".pb_body_kit_negative"
381
+ );
382
+ if (errorLabelElement) {
383
+ errorLabelElement.remove();
380
384
  }
381
385
  }
382
386
  }
@@ -585,7 +589,9 @@ export default class PbDropdown extends PbEnhancedElement {
585
589
  // for multi_select, for each selectedOption, create a hidden input
586
590
  const name = baseInput.getAttribute("name");
587
591
  this.selectedOptions.forEach((raw) => {
588
- const id = JSON.parse(raw).id;
592
+ const optionData = JSON.parse(raw);
593
+ // Use id if available, otherwise fall back to value
594
+ const id = optionData.id || optionData.value;
589
595
  const inp = document.createElement("input");
590
596
  inp.type = "hidden";
591
597
  inp.name = name;
@@ -593,7 +599,19 @@ export default class PbDropdown extends PbEnhancedElement {
593
599
  inp.dataset.generated = "true";
594
600
  baseInput.insertAdjacentElement("afterend", inp);
595
601
  });
596
- baseInput.value = "";
602
+
603
+ // For multi-select, remove required from base input when there are selections
604
+ // The generated inputs handle the form submission with actual values
605
+ // Restore required attribute when there are no selections (if it was originally required)
606
+ if (this.selectedOptions.size > 0) {
607
+ baseInput.value = "";
608
+ baseInput.removeAttribute("required");
609
+ } else {
610
+ baseInput.value = "";
611
+ if (this.wasOriginallyRequired) {
612
+ baseInput.setAttribute("required", "");
613
+ }
614
+ }
597
615
  }
598
616
 
599
617
  handleBackspaceClear() {
@@ -1,5 +1,6 @@
1
1
  import React from 'react'
2
- import { EmptyState, Flex } from 'playbook-ui'
2
+ import EmptyState from '../_empty_state'
3
+ import Flex from '../../pb_flex/_flex'
3
4
 
4
5
  const EmptyStateAlignment = (props) => (
5
6
  <Flex align="center"
@@ -1,5 +1,6 @@
1
1
  import React from 'react'
2
- import { EmptyState, Flex } from 'playbook-ui'
2
+ import EmptyState from '../_empty_state'
3
+ import Flex from '../../pb_flex/_flex'
3
4
 
4
5
  const EmptyStateDefault = (props) => (
5
6
  <Flex align="center"
@@ -1,5 +1,6 @@
1
1
  import React from 'react'
2
- import { EmptyState, Flex } from 'playbook-ui'
2
+ import EmptyState from '../_empty_state'
3
+ import Flex from '../../pb_flex/_flex'
3
4
 
4
5
  const EmptyStateOrientation = (props) => (
5
6
  <Flex align="center"
@@ -1,5 +1,6 @@
1
1
  import React from 'react'
2
- import { EmptyState, Flex } from 'playbook-ui'
2
+ import EmptyState from '../_empty_state'
3
+ import Flex from '../../pb_flex/_flex'
3
4
 
4
5
  const EmptyStateSize = (props) => (
5
6
  <Flex align="center"
@@ -1,5 +1,5 @@
1
1
  .pb_file_upload_kit {
2
- .pb_card_kit_deselected_border_radius_md {
2
+ .pb_card_kit {
3
3
  border: 1px #ccc dashed;
4
4
  text-align: center;
5
5
  }
@@ -11,7 +11,7 @@
11
11
  }
12
12
  &.error,
13
13
  &.pb_file_upload_kit_error {
14
- .pb_card_kit_deselected_border_radius_md {
14
+ .pb_card_kit {
15
15
  border-color: $error;
16
16
  }
17
17
  .pb_body_kit_negative {
@@ -30,12 +30,12 @@
30
30
  }
31
31
 
32
32
  .dark .pb_file_upload_kit {
33
- .pb_card_kit_deselected_border_radius_md {
33
+ .pb_card_kit {
34
34
  border: 1px $text_dk_lighter dashed;
35
35
  }
36
36
  &.error,
37
37
  &.pb_file_upload_kit_error {
38
- .pb_card_kit_deselected_border_radius_md {
38
+ .pb_card_kit {
39
39
  border-color: $error_dark;
40
40
  }
41
41
  }
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from "react";
1
+ import React, { useEffect, useState, useRef } from "react";
2
2
  import classnames from "classnames";
3
3
 
4
4
  import { globalProps, GlobalProps } from "../utilities/globalProps";
@@ -36,6 +36,7 @@ type FixedConfirmationToastProps = {
36
36
 
37
37
  const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.ReactElement => {
38
38
  const [showToast, toggleToast] = useState(true);
39
+ const timeoutRef = useRef<NodeJS.Timeout | null>(null);
39
40
 
40
41
  const {
41
42
  autoClose = 0,
@@ -67,21 +68,42 @@ const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.React
67
68
 
68
69
  const htmlProps = buildHtmlProps(htmlOptions);
69
70
 
70
- const autoCloseToast = () => {
71
- if (autoClose && open) {
72
- setTimeout(() => {
71
+ useEffect(() => {
72
+ toggleToast(open);
73
+ }, [open]);
74
+
75
+ // Manage auto-close timeout separately
76
+ useEffect(() => {
77
+ // Clear any existing timeout
78
+ if (timeoutRef.current) {
79
+ clearTimeout(timeoutRef.current);
80
+ timeoutRef.current = null;
81
+ }
82
+
83
+ // Set new timeout if autoClose is enabled and toast is open
84
+ if (autoClose && open && showToast) {
85
+ timeoutRef.current = setTimeout(() => {
73
86
  toggleToast(false);
74
87
  onClose();
88
+ timeoutRef.current = null;
75
89
  }, autoClose);
76
90
  }
77
- };
78
91
 
79
- useEffect(() => {
80
- toggleToast(open);
81
- autoCloseToast();
82
- }, [open]);
92
+ // Cleanup function to clear timeout on unmount or when dependencies change
93
+ return () => {
94
+ if (timeoutRef.current) {
95
+ clearTimeout(timeoutRef.current);
96
+ timeoutRef.current = null;
97
+ }
98
+ };
99
+ }, [autoClose, open, showToast, onClose]);
83
100
 
84
101
  const handleClick = () => {
102
+ // Clear autoClose timeout when manually closing
103
+ if (timeoutRef.current) {
104
+ clearTimeout(timeoutRef.current);
105
+ timeoutRef.current = null;
106
+ }
85
107
  toggleToast(!closeable);
86
108
  onClose();
87
109
  };
@@ -2,6 +2,7 @@ import React from 'react'
2
2
  import classnames from 'classnames'
3
3
  import { buildCss, buildHtmlProps } from '../utilities/props'
4
4
  import { globalProps, GlobalProps, globalInlineProps} from '../utilities/globalProps'
5
+
5
6
  type FlexItemPropTypes = {
6
7
  children: React.ReactNode[] | React.ReactNode,
7
8
  fixedSize?: string,
@@ -28,22 +29,28 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
28
29
  alignSelf,
29
30
  displayFlex
30
31
  } = props
32
+
31
33
  const growClass = grow === true ? 'pb_flex_item_kit_grow' : ''
32
34
  const displayFlexClass = displayFlex === true ? 'pb_flex_item_kit_display_flex' : ''
33
35
  const flexClass = flex !== 'none' ? `pb_flex_item_kit_flex_${flex}` : ''
34
36
  const shrinkClass = shrink === true ? 'pb_flex_item_kit_shrink' : ''
35
37
  const alignSelfClass = alignSelf ? `pb_flex_item_kit_align_self_${alignSelf}` : ''
36
- const fixedStyle =
37
- fixedSize !== undefined ? { flexBasis: `${fixedSize}` } : null
38
+ const fixedStyle = fixedSize !== undefined ? { flexBasis: `${fixedSize}` } : null
38
39
  const orderClass = order !== 'none' ? `pb_flex_item_kit_order_${order}` : ''
39
40
  const dynamicInlineProps = globalInlineProps(props)
41
+
42
+ // Extract style from htmlOptions and remove it
43
+ const { style: htmlStyle, ...htmlOptionsWithoutStyle } = htmlOptions
44
+ const htmlStyleObj = htmlStyle && typeof htmlStyle === 'object' ? htmlStyle : {}
45
+
46
+ // Merge all styles
40
47
  const combinedStyles = {
48
+ ...htmlStyleObj,
41
49
  ...fixedStyle,
42
50
  ...dynamicInlineProps
43
51
  }
44
52
 
45
- const htmlProps = buildHtmlProps(htmlOptions)
46
-
53
+ const htmlProps = buildHtmlProps(htmlOptionsWithoutStyle)
47
54
 
48
55
  return (
49
56
  <div
@@ -66,4 +73,4 @@ const FlexItem = (props: FlexItemPropTypes): React.ReactElement => {
66
73
  )
67
74
  }
68
75
 
69
- export default FlexItem
76
+ export default FlexItem
@@ -15,6 +15,7 @@ const FlexItemExample = (props) => {
15
15
  <FlexItem
16
16
  displayFlex
17
17
  gap="xs"
18
+ htmlOptions={{style: {padding:"2px"}}}
18
19
  {...props}
19
20
  >
20
21
  <FlexItem>
@@ -1,5 +1,8 @@
1
1
  import React from 'react'
2
- import { Card, Caption, FormPill, Typeahead } from 'playbook-ui'
2
+ import Card from '../../pb_card/_card'
3
+ import Caption from '../../pb_caption/_caption'
4
+ import FormPill from '../_form_pill'
5
+ import Typeahead from '../../pb_typeahead/_typeahead'
3
6
 
4
7
  const names = [
5
8
  { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
@@ -96,20 +96,24 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
96
96
  {hasAllEmptyProps && '—'}
97
97
  {emphasis == 'street' && !hasAllEmptyProps &&
98
98
  <div>
99
- <Title
100
- className="pb_home_address_street_address"
101
- dark={dark}
102
- size={4}
103
- >
104
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
105
- </Title>
106
- <Title
107
- className="pb_home_address_street_address"
108
- dark={dark}
109
- size={4}
110
- >
111
- {titleize(addressCont)}
112
- </Title>
99
+ {(address || houseStyle) && (
100
+ <Title
101
+ className="pb_home_address_street_address"
102
+ dark={dark}
103
+ size={4}
104
+ >
105
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
106
+ </Title>
107
+ )}
108
+ {addressCont && (
109
+ <Title
110
+ className="pb_home_address_street_address"
111
+ dark={dark}
112
+ size={4}
113
+ >
114
+ {titleize(addressCont)}
115
+ </Title>
116
+ )}
113
117
  <Body color="light">
114
118
  {`${city ? `${titleize(city)}, ` : ''}${uppercaseState}${zipcode ? ` ${zipcode}` : ''}`}
115
119
  </Body>
@@ -117,10 +121,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
117
121
  }
118
122
  {emphasis == 'city' && !hasAllEmptyProps &&
119
123
  <div>
120
- <Body color="light">
121
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
122
- </Body>
123
- <Body color="light">{titleize(addressCont)}</Body>
124
+ {(address || houseStyle) && (
125
+ <Body color="light">
126
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
127
+ </Body>
128
+ )}
129
+ {addressCont && (
130
+ <Body color="light">{titleize(addressCont)}</Body>
131
+ )}
124
132
  <div>
125
133
  <Title
126
134
  className="pb_home_address_street_address"
@@ -141,10 +149,14 @@ const HomeAddressStreet = (props: HomeAddressStreetProps): React.ReactElement =>
141
149
  }
142
150
  {emphasis == 'none' && !hasAllEmptyProps &&
143
151
  <div>
144
- <Body dark={dark}>
145
- {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
146
- </Body>
147
- <Body dark={dark}>{formatStreetAdr(addressCont)}</Body>
152
+ {(address || houseStyle) && (
153
+ <Body dark={dark}>
154
+ {joinPresent([formatStreetAdr(address), houseStyle], ' · ')}
155
+ </Body>
156
+ )}
157
+ {addressCont && (
158
+ <Body dark={dark}>{formatStreetAdr(addressCont)}</Body>
159
+ )}
148
160
  <div>
149
161
  <Body
150
162
  color="light"
@@ -1,15 +1,19 @@
1
- <%= pb_rails "body", props: {
2
- classname: "pb_home_address_street_address",
3
- color: "light",
4
- text: object.address_house_style,
5
- dark: object.dark
6
- } %>
7
- <%= pb_rails "body", props: {
8
- classname: "pb_home_address_street_address",
9
- color: "light",
10
- text: object.address_house_style2,
11
- dark: object.dark
12
- } %>
1
+ <% if object.address_house_style.present? %>
2
+ <%= pb_rails "body", props: {
3
+ classname: "pb_home_address_street_address",
4
+ color: "light",
5
+ text: object.address_house_style,
6
+ dark: object.dark
7
+ } %>
8
+ <% end %>
9
+ <% if object.address_house_style2.present? %>
10
+ <%= pb_rails "body", props: {
11
+ classname: "pb_home_address_street_address",
12
+ color: "light",
13
+ text: object.address_house_style2,
14
+ dark: object.dark
15
+ } %>
16
+ <% end %>
13
17
  <div>
14
18
  <%= pb_rails "title", props: {
15
19
  tag: "span",
@@ -1,3 +1,4 @@
1
+ <%= pb_rails("caption", props: { text: "with all" }) %>
1
2
  <%= pb_rails("home_address_street", props: {
2
3
  address: "70 Prospect Ave",
3
4
  address_cont: "Apt M18",
@@ -9,3 +10,126 @@
9
10
  zipcode: "19382",
10
11
  territory: "PHL",
11
12
  }) %>
13
+
14
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "First two lines blank: without address and address cont and housestyle" }) %>
15
+ <%= pb_rails("home_address_street", props: {
16
+ city: "West Chester",
17
+ home_id: 8250263,
18
+ home_url: "https://powerhrg.com/",
19
+ state: "PA",
20
+ zipcode: "19382",
21
+ territory: "PHL",
22
+ }) %>
23
+
24
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "First line half blank Second line full: with housestyle and without address and address cont" }) %>
25
+ <%= pb_rails("home_address_street", props: {
26
+ city: "West Chester",
27
+ home_id: 8250263,
28
+ home_url: "https://powerhrg.com/",
29
+ house_style: "Colonial",
30
+ state: "PA",
31
+ zipcode: "19382",
32
+ territory: "PHL",
33
+ }) %>
34
+
35
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "First line full Second line blank: with address and housestyle and without address cont" }) %>
36
+ <%= pb_rails("home_address_street", props: {
37
+ address: "70 Prospect Ave",
38
+ city: "West Chester",
39
+ home_id: 8250263,
40
+ home_url: "https://powerhrg.com/",
41
+ house_style: "Colonial",
42
+ state: "PA",
43
+ zipcode: "19382",
44
+ territory: "PHL",
45
+ }) %>
46
+
47
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "First line half blank Second line full: without address and with housestyle and address cont" }) %>
48
+ <%= pb_rails("home_address_street", props: {
49
+ address_cont: "Apt M18",
50
+ city: "West Chester",
51
+ home_id: 8250263,
52
+ home_url: "https://powerhrg.com/",
53
+ house_style: "Colonial",
54
+ state: "PA",
55
+ zipcode: "19382",
56
+ territory: "PHL",
57
+ }) %>
58
+
59
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "First line blank Second line full: with address cont and without address and housestyle" }) %>
60
+ <%= pb_rails("home_address_street", props: {
61
+ address_cont: "Apt M18",
62
+ city: "West Chester",
63
+ home_id: 8250263,
64
+ home_url: "https://powerhrg.com/",
65
+ state: "PA",
66
+ zipcode: "19382",
67
+ territory: "PHL",
68
+ }) %>
69
+
70
+ <%= pb_rails("caption", props: { margin_top: "sm", text: "Emphasis, Modified, Target and Formatted doc examples below" }) %>
71
+ <%= pb_rails("home_address_street", props: {
72
+ address: "70 Prospect Ave",
73
+ city: "West Chester",
74
+ emphasis: "none",
75
+ home_id: 8250263,
76
+ home_url: "https://powerhrg.com/",
77
+ house_style: "Colonial",
78
+ margin_bottom: "sm",
79
+ state: "PA",
80
+ zipcode: "19382",
81
+ territory: "PHL",
82
+ }) %>
83
+
84
+ <%= pb_rails("home_address_street", props: {
85
+ city: "West Chester",
86
+ emphasis: "city",
87
+ home_id: 8250263,
88
+ home_url: "https://powerhrg.com/",
89
+ margin_bottom: "sm",
90
+ state: "PA",
91
+ zipcode: "19382",
92
+ territory: "PHL",
93
+ }) %>
94
+
95
+ <%= pb_rails("home_address_street", props: {
96
+ city: "West Chester",
97
+ emphasis: "none",
98
+ home_id: 8250263,
99
+ home_url: "https://powerhrg.com/",
100
+ margin_bottom: "sm",
101
+ state: "PA",
102
+ zipcode: "19382",
103
+ territory: "PHL",
104
+ }) %>
105
+
106
+ <%= pb_rails("home_address_street", props: {
107
+ address: "70 Prospect Ave",
108
+ city: "West Chester",
109
+ margin_bottom: "sm",
110
+ state: "PA",
111
+ zipcode: "19382",
112
+ territory: "PHL",
113
+ }) %>
114
+
115
+ <%= pb_rails("home_address_street", props: {
116
+ city: "West Chester",
117
+ home_id: 8250263,
118
+ home_url: "https://powerhrg.com/",
119
+ margin_bottom: "sm",
120
+ state: "PA",
121
+ target: "_blank",
122
+ zipcode: "19382",
123
+ territory: "PHL",
124
+ }) %>
125
+
126
+ <%= pb_rails("home_address_street", props: {
127
+ address: "70 pRoSpEcT ave",
128
+ city: "West Chester",
129
+ home_id: 8250263,
130
+ home_url: "https://powerhrg.com/",
131
+ preserve_case: true,
132
+ state: "pa",
133
+ zipcode: "19382",
134
+ territory: "PHL",
135
+ }) %>