playbook_ui 14.26.0.pre.rc.0 → 15.0.0

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 (227) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  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 +60 -65
  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 +135 -29
  9. data/app/pb_kits/playbook/pb_body/_body.scss +108 -35
  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 +17 -30
  12. data/app/pb_kits/playbook/pb_button/_button.scss +39 -31
  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 +11 -18
  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 +82 -73
  18. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +32 -33
  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 +100 -17
  22. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -8
  23. data/app/pb_kits/playbook/pb_card/_card.scss +116 -79
  24. data/app/pb_kits/playbook/pb_card/_card.tsx +26 -11
  25. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +1 -1
  26. data/app/pb_kits/playbook/pb_card/card.rb +8 -7
  27. data/app/pb_kits/playbook/pb_card/card_header.rb +6 -2
  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 +11 -2
  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 +124 -39
  36. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +16 -6
  37. data/app/pb_kits/playbook/pb_date/_date.scss +16 -18
  38. data/app/pb_kits/playbook/pb_date/date.test.js +506 -0
  39. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
  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 +6 -5
  43. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +29 -23
  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 +66 -26
  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 +8 -15
  51. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -7
  52. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +17 -14
  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 +86 -21
  55. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +330 -123
  56. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +16 -2
  57. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +10 -7
  58. data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +1 -1
  59. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  60. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
  61. data/app/pb_kits/playbook/pb_dropdown/index.js +3 -3
  62. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
  63. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +20 -9
  64. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
  65. data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
  66. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +65 -29
  67. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -2
  68. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_props_swift.md +3 -2
  69. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
  70. data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
  71. data/app/pb_kits/playbook/pb_flex/_flex.tsx +32 -25
  72. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
  73. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
  74. data/app/pb_kits/playbook/pb_flex/flex.rb +16 -16
  75. data/app/pb_kits/playbook/pb_flex/flex_item.rb +6 -6
  76. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
  77. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +381 -344
  78. data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
  79. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +8 -7
  80. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +9 -2
  81. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
  82. data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
  83. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
  84. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
  85. data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
  86. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +40 -39
  87. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  88. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
  89. data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +16 -15
  90. data/app/pb_kits/playbook/pb_image/_image.scss +41 -36
  91. data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
  92. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +3 -2
  93. data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
  94. data/app/pb_kits/playbook/pb_layout/_layout.scss +336 -305
  95. data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
  96. data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
  97. data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
  98. data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
  99. data/app/pb_kits/playbook/pb_legend/_legend.scss +66 -16
  100. data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
  101. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
  102. data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
  103. data/app/pb_kits/playbook/pb_link/_link.scss +113 -19
  104. data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
  105. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +13 -11
  106. data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
  107. data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
  108. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
  109. data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
  110. data/app/pb_kits/playbook/pb_message/_message.scss +21 -16
  111. data/app/pb_kits/playbook/pb_message/_message.tsx +1 -0
  112. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +5 -12
  113. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
  114. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +6 -3
  115. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +16 -15
  116. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
  117. data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
  118. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
  119. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +19 -15
  120. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
  121. data/app/pb_kits/playbook/pb_online_status/online_status.rb +5 -4
  122. data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
  123. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
  124. data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
  125. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +5 -2
  126. data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
  127. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
  128. data/app/pb_kits/playbook/pb_pill/_pill.scss +23 -21
  129. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +15 -13
  130. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +108 -33
  131. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
  132. data/app/pb_kits/playbook/pb_radio/_radio.scss +71 -52
  133. data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
  134. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -3
  135. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
  136. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +81 -70
  137. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +9 -1
  138. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
  139. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +3 -1
  140. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +7 -1
  141. data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
  142. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -2
  143. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +17 -8
  144. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +39 -29
  145. data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +2 -0
  146. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +8 -11
  147. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +2 -3
  148. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
  149. data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
  150. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
  151. data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
  152. data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
  153. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
  154. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
  155. data/app/pb_kits/playbook/pb_time/_time.scss +44 -17
  156. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +44 -23
  157. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +1 -1
  158. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +5 -8
  159. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +16 -10
  160. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +1 -4
  161. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +1 -1
  162. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +2 -2
  163. data/app/pb_kits/playbook/pb_title/_title.scss +44 -39
  164. data/app/pb_kits/playbook/pb_title/_title.tsx +17 -8
  165. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
  166. data/app/pb_kits/playbook/pb_title/title.rb +20 -10
  167. data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
  168. data/app/pb_kits/playbook/pb_title_count/_title_count.scss +19 -8
  169. data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +10 -11
  170. data/app/pb_kits/playbook/pb_toggle/_toggle.scss +4 -1
  171. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +3 -4
  172. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -1
  173. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
  174. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
  175. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +1 -1
  176. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.html.erb +1 -22
  177. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.jsx +1 -1
  178. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_without_pills.html.erb +2 -2
  179. data/app/pb_kits/playbook/pb_user/_user.scss +83 -33
  180. data/app/pb_kits/playbook/pb_user/docs/_user_props_table.md +14 -7
  181. data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
  182. data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +23 -8
  183. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
  184. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
  185. data/dist/chunks/{_line_graph-CiVc-Cod.js → _line_graph-CIyKqNGy.js} +1 -1
  186. data/dist/chunks/_typeahead-B-mDRLxH.js +6 -0
  187. data/dist/chunks/{_weekday_stacked-CX4YxAHz.js → _weekday_stacked-B_lp1Spt.js} +2 -2
  188. data/dist/chunks/{lib-CY5ZPzic.js → lib-DgtxnJqa.js} +2 -2
  189. data/dist/chunks/{pb_form_validation-D3b0JKHH.js → pb_form_validation-_NsOWfBS.js} +1 -1
  190. data/dist/chunks/vendor.js +1 -1
  191. data/dist/menu.yml +0 -6
  192. data/dist/playbook-doc.js +2 -2
  193. data/dist/playbook-rails-react-bindings.js +1 -1
  194. data/dist/playbook-rails.js +1 -1
  195. data/dist/playbook.css +1 -1
  196. data/lib/playbook/version.rb +1 -1
  197. metadata +8 -36
  198. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
  199. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
  200. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
  201. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
  202. data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
  203. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  204. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
  205. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  206. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
  207. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
  208. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
  209. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
  210. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
  211. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  212. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
  213. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
  214. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  215. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
  216. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  217. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  218. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
  219. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
  220. data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
  221. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
  222. data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
  223. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
  224. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
  225. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
  226. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  227. data/dist/chunks/_typeahead-BQnvz-Ks.js +0 -6
@@ -1,20 +0,0 @@
1
- <% if within_element %>
2
- <%= pb_content_tag(:div, data: {breakpoint: object.breakpoint} ) do %>
3
- <%= content %>
4
- <% end %>
5
- <% else %>
6
- <div class="pb_drawer_wrapper"
7
- id="drawer-wrapper-<%= object.id %>"
8
- style="display:none;"
9
- data-behavior="<%= object.behavior %>"
10
- data-size="<%= object.size %>"
11
- data-placement="<%= object.placement %>"
12
- data-breakpoint="<%= object.breakpoint %>"
13
- >
14
- <div class="<%= overlay_classes %>" style="display:none;" id="drawer-overlay-<%= object.id %>">
15
- <%= pb_content_tag do %>
16
- <%= content %>
17
- <% end %>
18
- </div>
19
- </div>
20
- <% end %>
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Playbook
4
- module PbDrawer
5
- class Drawer < Playbook::KitBase
6
- prop :size, type: Playbook::Props::Enum,
7
- values: %w[xs sm md lg xl full],
8
- default: "md"
9
- prop :placement, type: Playbook::Props::Enum,
10
- values: %w[left right bottom],
11
- default: "left"
12
- prop :behavior, type: Playbook::Props::Enum,
13
- values: %w[floating push],
14
- default: "floating"
15
- prop :overlay, type: Playbook::Props::Boolean,
16
- default: true
17
- prop :within_element, type: Playbook::Props::Boolean,
18
- default: false
19
- prop :border, type: Playbook::Props::Enum,
20
- values: %w[full none right left],
21
- default: "none"
22
- prop :breakpoint, type: Playbook::Props::Enum,
23
- values: %w[none xs sm md lg xl],
24
- default: "none"
25
-
26
- def classname
27
- generate_classname("pb_drawer pb_drawer_#{size}_#{placement} #{within_class} #{border_classes}")
28
- end
29
-
30
- def border_classes
31
- case border
32
- when "full"
33
- "drawer_border-full"
34
- when "right"
35
- "drawer_border-right"
36
- when "left"
37
- "drawer_border-left"
38
- else
39
- ""
40
- end
41
- end
42
-
43
- def overlay_close
44
- !should_close_on_overlay_click ? "overlay_close" : ""
45
- end
46
-
47
- def within_class
48
- within_element ? "pb_drawer_within_element_rails" : ""
49
- end
50
-
51
- def overlay_classes
52
- "pb_drawer_#{overlay ? '' : 'no_'}overlay drawer_content_#{placement} pb_drawer_overlay_after_open #{overlay ? '' : 'no-background'}"
53
- end
54
- end
55
- end
56
- end
@@ -1,81 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { render, fireEvent, screen } from '../utilities/test-utils';
3
- import { Drawer, Button } from 'playbook-ui';
4
- import { waitFor } from '@testing-library/react';
5
-
6
- const size = 'sm';
7
-
8
- function DrawerTest({ props }) {
9
- const [isOpen, setIsOpen] = useState(false);
10
- const close = () => setIsOpen(false);
11
- const open = () => setIsOpen(true);
12
-
13
- return (
14
- <>
15
- <Button onClick={open}>{'Open Drawer'}</Button>
16
- <Drawer
17
- className="wrapper"
18
- id="drawer-id"
19
- onClose={close}
20
- opened={isOpen}
21
- placement="left"
22
- portalClassName="portal"
23
- size={size}
24
- {...props}
25
- >
26
- {props && props.children}
27
- </Drawer>
28
- </>
29
- );
30
- }
31
-
32
- test('renders with the right border class when border prop is right', async () => {
33
- render(<DrawerTest props={{ border: 'right' }} />);
34
-
35
- fireEvent.click(screen.getByText('Open Drawer'));
36
-
37
- await waitFor(() => expect(document.getElementById('drawer-id')).toBeInTheDocument());
38
-
39
- const container = document.getElementById('drawer-id');
40
- const drawer = container.querySelector('#drawer-id .pb_drawer');
41
-
42
- expect(drawer).toHaveClass('drawer_border-right');
43
- });
44
-
45
- test('renders with the full border class when border prop is full', async () => {
46
- render(<DrawerTest props={{ border: 'full' }} />);
47
-
48
- fireEvent.click(screen.getByText('Open Drawer'));
49
-
50
- await waitFor(() => expect(document.getElementById('drawer-id')).toBeInTheDocument());
51
-
52
- const container = document.getElementById('drawer-id');
53
- const drawer = container.querySelector('#drawer-id .pb_drawer');
54
- expect(drawer).toHaveClass('drawer_border-full');
55
- });
56
-
57
- test('does not have a border class when border prop is none', async () => {
58
- render(<DrawerTest props={{ border: 'none' }} />);
59
-
60
- fireEvent.click(screen.getByText('Open Drawer'));
61
-
62
- await waitFor(() => expect(document.getElementById('drawer-id')).toBeInTheDocument());
63
-
64
- const container = document.getElementById('drawer-id');
65
- const drawer = container.querySelector('#drawer-id .pb_drawer');
66
- expect(drawer).not.toHaveClass('drawer_border-right');
67
- expect(drawer).not.toHaveClass('drawer_border-left');
68
- expect(drawer).not.toHaveClass('drawer_border-full');
69
- });
70
-
71
- test('renders the correct size class for a large drawer', async () => {
72
- render(<DrawerTest props={{ size: 'lg' }} />);
73
-
74
- fireEvent.click(screen.getByText('Open Drawer'));
75
-
76
- await waitFor(() => expect(document.getElementById('drawer-id')).toBeInTheDocument());
77
-
78
- const container = document.getElementById('drawer-id');
79
- const drawer = container.querySelector('#drawer-id .pb_drawer');
80
- expect(drawer).toHaveClass('pb_drawer pb_drawer_lg_left');
81
- });
@@ -1,60 +0,0 @@
1
- import { useState, useEffect } from 'react'
2
-
3
- export const breakpointValues = {
4
- none: 0,
5
- xs: 575,
6
- sm: 768,
7
- md: 992,
8
- lg: 1200,
9
- xl: 1400,
10
- } as const
11
-
12
- type BreakpointSize = keyof typeof breakpointValues
13
-
14
- interface UseBreakpointProps {
15
- breakpoint?: BreakpointSize
16
- triggerId?: string
17
- }
18
-
19
- export const useBreakpoint = ({
20
- breakpoint = 'none',
21
- triggerId
22
- }: UseBreakpointProps) => {
23
- const [isOpenBreakpointOpen, setIsOpenBreakpointOpen] = useState(false)
24
- const [isUserClosed, setIsUserClosed] = useState(false)
25
-
26
- useEffect(() => {
27
- if (breakpoint === 'none') return
28
-
29
- const handleResize = () => {
30
- const width = window.innerWidth
31
-
32
- const openBreakpointWidth = breakpointValues[breakpoint]
33
- if (width >= openBreakpointWidth) {
34
- setIsOpenBreakpointOpen(true)
35
- } else {
36
- setIsOpenBreakpointOpen(false)
37
- setIsUserClosed(false)
38
- }
39
-
40
- // Handle menu button visibility
41
- if (triggerId) {
42
- const menuButton = document.getElementById(triggerId)
43
- if (menuButton) {
44
- menuButton.style.display = isOpenBreakpointOpen ? 'none' : ''
45
- }
46
- }
47
- }
48
-
49
- window.addEventListener('resize', handleResize)
50
- handleResize()
51
-
52
- return () => window.removeEventListener('resize', handleResize)
53
- }, [breakpoint, triggerId, isOpenBreakpointOpen])
54
-
55
- return {
56
- isOpenBreakpointOpen,
57
- isUserClosed,
58
- setIsUserClosed
59
- }
60
- }
@@ -1,21 +0,0 @@
1
- import { useState, useEffect } from 'react'
2
-
3
- export const useDrawerAnimation = (isOpen: boolean) => {
4
- const [animationState, setAnimationState] = useState('')
5
-
6
- useEffect(() => {
7
- if (isOpen) {
8
- setAnimationState('afterOpen')
9
- } else if (!isOpen && animationState === 'afterOpen') {
10
- setAnimationState('beforeClose')
11
- setTimeout(() => {
12
- setAnimationState('')
13
- }, 200)
14
- }
15
- }, [isOpen])
16
-
17
- return {
18
- animationState,
19
- isVisible: isOpen || animationState === 'beforeClose'
20
- }
21
- }
@@ -1,257 +0,0 @@
1
- import PbEnhancedElement from "../pb_enhanced_element"
2
-
3
- export default class PbDrawer extends PbEnhancedElement {
4
- static get selector() {
5
- return ".pb_drawer_wrapper"
6
- }
7
-
8
- connect() {
9
- this.handleToggleClick = this.handleToggleClick.bind(this)
10
- this.handleOutsideClick = this.handleOutsideClick.bind(this)
11
- this.handleResize = this.handleResize.bind(this)
12
-
13
- this._toggleTriggers = Array.from(document.querySelectorAll("[data-open-drawer]"))
14
- this._toggleTriggers.forEach(el => {
15
- el.addEventListener("click", this.handleToggleClick)
16
- })
17
-
18
- this._wrappers = Array.from(document.querySelectorAll(".pb_drawer_wrapper"))
19
- this._wrappers.forEach(el => {
20
- el.addEventListener("mousedown", this.handleOutsideClick)
21
- })
22
-
23
- this._withinElementDrawers = Array.from(
24
- document.querySelectorAll(".pb_drawer_within_element_rails[data-breakpoint]")
25
- )
26
-
27
- window.addEventListener("resize", this.handleResize)
28
- this.handleResize()
29
- }
30
-
31
- disconnect() {
32
- this._toggleTriggers.forEach(el => {
33
- el.removeEventListener("click", this.handleToggleClick)
34
- })
35
- this._wrappers.forEach(el => {
36
- el.removeEventListener("mousedown", this.handleOutsideClick)
37
- })
38
- window.removeEventListener("resize", this.handleResize)
39
- }
40
-
41
- getOverlay(wrapper) {
42
- if (wrapper.id && wrapper.id.startsWith("drawer-wrapper-")) {
43
- const overlayId = wrapper.id.replace("drawer-wrapper-", "drawer-overlay-")
44
- return document.getElementById(overlayId)
45
- }
46
- return wrapper.querySelector(".pb_drawer_overlay") || wrapper.querySelector(".pb_drawer_no_overlay")
47
- }
48
-
49
- handleToggleClick(event) {
50
- const trigger = event.currentTarget
51
- const drawerId = trigger.dataset.openDrawer
52
- const dialog = document.getElementById(drawerId)
53
- if (!dialog) return
54
-
55
- if (dialog.classList.contains("pb_drawer_within_element_rails")) {
56
- if (dialog.classList.contains("open")) {
57
- this.closeWithinElementDrawer(dialog)
58
- dialog.dataset.manualOpen = "false"
59
- } else {
60
- this.openWithinElementDrawer(dialog)
61
- dialog.dataset.manualOpen = "true"
62
- }
63
- return
64
- }
65
-
66
- const wrapperId = `drawer-wrapper-${drawerId}`
67
- const wrapper = document.getElementById(wrapperId)
68
- if (!wrapper) return
69
-
70
- if (wrapper !== this.element) return
71
-
72
- if (wrapper.classList.contains("open")) {
73
- this.closeDrawer(wrapper, dialog)
74
- wrapper.dataset.manualOpen = "false"
75
- } else {
76
- this.openDrawer(wrapper, dialog)
77
- wrapper.dataset.manualOpen = "true"
78
- }
79
- }
80
-
81
- openWithinElementDrawer(dialog) {
82
- if (dialog.classList.contains("open")) return
83
- dialog.style.maxHeight = "0px"
84
- dialog.offsetHeight
85
- dialog.classList.add("open")
86
- // Get trigger's height and add it to the final height
87
- const trigger = document.querySelector(`[data-open-drawer="${dialog.id}"]`)
88
- const triggerHeight = trigger ? trigger.offsetHeight : 0
89
- const finalHeight = (dialog.scrollHeight + triggerHeight) + "px"
90
- dialog.style.maxHeight = finalHeight
91
- dialog.addEventListener("transitionend", function handleOpenEnd(e) {
92
- if (e.propertyName === "max-height") {
93
- dialog.style.maxHeight = "none"
94
- dialog.removeEventListener("transitionend", handleOpenEnd)
95
- }
96
- })
97
- }
98
-
99
- closeWithinElementDrawer(dialog) {
100
- if (!dialog.classList.contains("open")) return
101
- const currentHeight = dialog.scrollHeight
102
- dialog.style.maxHeight = currentHeight + "px"
103
- dialog.offsetHeight
104
- dialog.classList.remove("open")
105
- dialog.style.maxHeight = "0px"
106
- dialog.addEventListener("transitionend", function handleCloseEnd(e) {
107
- if (e.propertyName === "max-height") {
108
- dialog.removeEventListener("transitionend", handleCloseEnd)
109
- dialog.style.maxHeight = "0px"
110
- }
111
- })
112
- }
113
-
114
- openDrawer(wrapper, dialog) {
115
- const behavior = wrapper.dataset.behavior
116
- const size = wrapper.dataset.size
117
- const placement = wrapper.dataset.placement
118
- this.handlePushOpen(behavior, size, placement)
119
-
120
- wrapper.style.display = ""
121
- const overlay = this.getOverlay(wrapper)
122
- if (overlay) overlay.style.display = ""
123
-
124
- wrapper.classList.add("open")
125
- dialog.classList.add("open")
126
- }
127
-
128
- closeDrawer(wrapper, dialog) {
129
- const behavior = wrapper.dataset.behavior
130
- this.handlePushClose(behavior)
131
-
132
- if (wrapper.className.includes("open")) wrapper.style.display = "none"
133
- const overlay = this.getOverlay(wrapper)
134
- if (overlay && wrapper.className.includes("open")) overlay.style.display = "none"
135
-
136
- wrapper.classList.remove("open")
137
- dialog.classList.remove("open")
138
- }
139
-
140
- handleOutsideClick(event) {
141
- const wrapper = event.currentTarget
142
- const dialog = wrapper.querySelector(".pb_drawer")
143
- const overlay = this.getOverlay(wrapper)
144
-
145
- if (dialog && dialog.classList.contains("pb_drawer_within_element_rails")) {
146
- return
147
- }
148
-
149
- if (wrapper.dataset.overlayClick === "overlay_close" && event.target === overlay) {
150
- this.closeDrawer(wrapper, dialog)
151
- event.stopPropagation()
152
- return
153
- }
154
-
155
- const dialogRect = dialog.getBoundingClientRect()
156
- const clickedOutside =
157
- event.clientX < dialogRect.left ||
158
- event.clientX > dialogRect.right ||
159
- event.clientY < dialogRect.top ||
160
- event.clientY > dialogRect.bottom
161
-
162
- if (clickedOutside) {
163
- this.closeDrawer(wrapper, dialog)
164
- event.stopPropagation()
165
- }
166
- }
167
-
168
- handleResize() {
169
- const breakpointValues = {
170
- none: 0,
171
- xs: 575,
172
- sm: 768,
173
- md: 992,
174
- lg: 1200,
175
- xl: 1400,
176
- }
177
-
178
- // Process wrappers
179
- this._wrappers.forEach(wrapper => {
180
- const bp = wrapper.dataset.breakpoint || "none"
181
- if (bp === "none") return
182
-
183
- const threshold = breakpointValues[bp] || 0
184
- const dialog = wrapper.querySelector(".pb_drawer")
185
- const trigger = dialog ? document.querySelector(`[data-open-drawer="${dialog.id}"]`) : null
186
-
187
- if (window.innerWidth >= threshold) {
188
- if (!wrapper.classList.contains("open")) {
189
- this.openDrawer(wrapper, dialog)
190
- }
191
- if (trigger) trigger.style.display = "none"
192
- } else {
193
- if (trigger) trigger.style.display = ""
194
- if (wrapper.classList.contains("open") && wrapper.dataset.manualOpen !== "true") {
195
- this.closeDrawer(wrapper, dialog)
196
- }
197
- }
198
- })
199
-
200
- // Process within element drawers
201
- this._withinElementDrawers.forEach(drawer => {
202
- const bp = drawer.dataset.breakpoint || "none"
203
- if (bp === "none") return
204
-
205
- const threshold = breakpointValues[bp] || 0
206
- const trigger = document.querySelector(`[data-open-drawer="${drawer.id}"]`)
207
-
208
- if (window.innerWidth >= threshold) {
209
- if (!drawer.classList.contains("open")) {
210
- this.openWithinElementDrawer(drawer)
211
- }
212
- if (trigger) trigger.style.display = "none"
213
- } else {
214
- if (trigger) trigger.style.display = ""
215
- if (drawer.classList.contains("open") && drawer.dataset.manualOpen !== "true") {
216
- this.closeWithinElementDrawer(drawer)
217
- }
218
- }
219
- })
220
- }
221
-
222
- handlePushOpen(behavior, size, placement) {
223
- if (behavior !== "push") return
224
-
225
- const sizeMap = {
226
- xl: "365px",
227
- lg: "300px",
228
- md: "250px",
229
- sm: "200px",
230
- xs: "64px",
231
- full: "100%",
232
- }
233
-
234
- const body = document.querySelector("body")
235
- if (!body) return
236
-
237
- if (placement === "left") {
238
- body.style.cssText = `margin-left: ${sizeMap[size]} !important; margin-right: '' !important;`
239
- } else if (placement === "right") {
240
- body.style.cssText = `margin-right: ${sizeMap[size]} !important; margin-left: '' !important;`
241
- }
242
- body.classList.add("PBDrawer__Body--open")
243
- }
244
-
245
- handlePushClose(behavior) {
246
- if (behavior !== "push") return
247
-
248
- const body = document.querySelector("body")
249
- if (!body) return
250
-
251
- if (body.classList.contains("PBDrawer__Body--open")) {
252
- body.classList.add("PBDrawer__Body--close")
253
- }
254
- body.style.cssText = ""
255
- body.classList.remove("PBDrawer__Body--open")
256
- }
257
- }