playbook_ui 14.11.0.pre.rc.17 → 14.11.1.pre.alpha.PBNTR440enableglobalpropspbformwith5624

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +18 -2
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +27 -5
  5. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +17 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +23 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +29 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +61 -4
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +2 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_no_subrows.jsx +50 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination.jsx +1 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination_with_props.jsx +1 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.jsx +60 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.md +5 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions.jsx +78 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_actions.md +1 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header.jsx +53 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header.md +1 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.jsx +52 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_no_subrows.md +1 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.md +2 -2
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +33 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +1 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_no_subrows.json +42 -0
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_with_id.json +299 -0
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -0
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +6 -1
  29. data/app/pb_kits/playbook/pb_button/button.html.erb +2 -3
  30. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +1 -6
  31. data/app/pb_kits/playbook/pb_collapsible/collapsible.html.erb +3 -1
  32. data/app/pb_kits/playbook/pb_collapsible/collapsible.rb +3 -0
  33. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +24 -16
  34. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  35. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md +1 -1
  36. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_turbo_frames.html.erb +13 -0
  37. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_turbo_frames_rails.md +3 -0
  38. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +1 -0
  39. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.html.erb +3 -9
  40. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.md +5 -0
  41. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.html.erb +38 -0
  42. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.md +3 -0
  43. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +1 -0
  44. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +145 -183
  45. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +158 -268
  46. data/app/pb_kits/playbook/pb_drawer/context.ts +11 -0
  47. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +38 -0
  48. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -45
  49. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -1
  50. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +9 -16
  51. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +44 -19
  52. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +21 -3
  53. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +16 -21
  54. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +2 -19
  55. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +2 -1
  56. data/app/pb_kits/playbook/pb_drawer/docs/index.js +1 -0
  57. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +5 -5
  58. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +60 -0
  59. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +21 -0
  60. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_subtle_variant.md +1 -1
  61. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +7 -12
  62. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +9 -14
  63. data/app/pb_kits/playbook/pb_dropdown/dropdown_option.html.erb +6 -11
  64. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +8 -14
  65. data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +78 -0
  66. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb +3 -0
  67. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +7 -0
  68. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +16 -0
  69. data/app/pb_kits/playbook/pb_icon_button/icon_button.rb +22 -0
  70. data/app/pb_kits/playbook/pb_list/item.html.erb +30 -8
  71. data/app/pb_kits/playbook/pb_list/item.rb +7 -0
  72. data/app/pb_kits/playbook/pb_list/list.html.erb +31 -11
  73. data/app/pb_kits/playbook/pb_list/list.rb +4 -0
  74. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +6 -1
  75. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +4 -0
  76. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx +1 -0
  77. data/app/pb_kits/playbook/pb_multiple_users/multiple_users.html.erb +1 -1
  78. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +30 -12
  79. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.html.erb +15 -0
  80. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.jsx +24 -0
  81. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_format.md +1 -0
  82. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +3 -1
  83. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  84. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  85. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.test.js +20 -1
  86. data/app/pb_kits/playbook/pb_radio/_radio.scss +12 -8
  87. data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_children.jsx +8 -3
  88. data/app/pb_kits/playbook/pb_select/_select.scss +3 -5
  89. data/app/pb_kits/playbook/pb_select/_select.tsx +5 -1
  90. data/app/pb_kits/playbook/pb_select/select.html.erb +2 -2
  91. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.tsx +9 -1
  92. data/app/pb_kits/playbook/pb_selectable_icon/docs/_selectable_icon_default.jsx +4 -1
  93. data/app/pb_kits/playbook/pb_selectable_icon/docs/_selectable_icon_single_select.jsx +4 -1
  94. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.html.erb +17 -3
  95. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.rb +3 -0
  96. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +11 -4
  97. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.rb +3 -0
  98. data/app/pb_kits/playbook/pb_table/_table.tsx +2 -3
  99. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.html.erb +74 -0
  100. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_rails.md +3 -0
  101. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_rails.md +2 -2
  102. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.html.erb +74 -0
  103. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_rails.md +3 -0
  104. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.html.erb +47 -0
  105. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_rails.md +2 -0
  106. data/app/pb_kits/playbook/pb_table/docs/example.yml +3 -0
  107. data/app/pb_kits/playbook/pb_table/index.ts +187 -88
  108. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +12 -0
  109. data/app/pb_kits/playbook/pb_table/styles/_scroll.scss +6 -5
  110. data/app/pb_kits/playbook/pb_table/table.html.erb +1 -1
  111. data/app/pb_kits/playbook/pb_table/table.rb +17 -2
  112. data/app/pb_kits/playbook/pb_table/table_row.html.erb +20 -1
  113. data/app/pb_kits/playbook/pb_table/table_row.rb +5 -0
  114. data/app/pb_kits/playbook/pb_table/utilities/addDataTitle.ts +22 -0
  115. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +46 -0
  116. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask_rails.md +3 -0
  117. data/app/pb_kits/playbook/pb_text_input/docs/example.yml +2 -1
  118. data/app/pb_kits/playbook/pb_text_input/index.js +103 -0
  119. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +4 -0
  120. data/app/pb_kits/playbook/pb_text_input/text_input.rb +33 -3
  121. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +30 -30
  122. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -2
  123. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +12 -4
  124. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +5 -1
  125. data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.tsx +8 -3
  126. data/app/pb_kits/playbook/pb_typeahead/components/MenuList.tsx +6 -1
  127. data/app/pb_kits/playbook/pb_typeahead/components/Option.tsx +21 -6
  128. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.tsx +13 -6
  129. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +7 -3
  130. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_menu_list.jsx +2 -0
  131. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_truncated_text.html.erb +19 -0
  132. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_truncated_text.jsx +27 -0
  133. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_truncated_text.md +1 -0
  134. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +4 -2
  135. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +5 -5
  136. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  137. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  138. data/dist/chunks/_typeahead-BWwaAo_0.js +36 -0
  139. data/dist/chunks/_weekday_stacked-zyBCd1s8.js +45 -0
  140. data/dist/chunks/{lib-B7sgJtGS.js → lib-kMuhBuU7.js} +2 -2
  141. data/dist/chunks/{pb_form_validation-C5Cc0-1v.js → pb_form_validation-DBJ0wZuS.js} +1 -1
  142. data/dist/chunks/vendor.js +1 -1
  143. data/dist/menu.yml +6 -0
  144. data/dist/playbook-doc.js +1 -1
  145. data/dist/playbook-rails-react-bindings.js +1 -1
  146. data/dist/playbook-rails.js +1 -1
  147. data/dist/playbook.css +1 -1
  148. data/lib/playbook/pb_forms_global_props_helper.rb +136 -0
  149. data/lib/playbook/pb_forms_helper.rb +13 -4
  150. data/lib/playbook/version.rb +2 -2
  151. metadata +69 -11
  152. data/dist/chunks/_typeahead-C2iCBqxQ.js +0 -36
  153. data/dist/chunks/_weekday_stacked-CWnbnW7m.js +0 -45
  154. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_table_props.md → _advanced_table_table_props_react.md} +0 -0
  155. /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible.md → _table_with_collapsible_react.md} +0 -0
@@ -1,9 +1,5 @@
1
- <%= content_tag(:div,
2
- aria: object.aria,
3
- class: object.classname + object.error_class,
4
- data: object.data,
5
- id: object.id,
6
- **combined_html_options) do %>
1
+ <%= pb_content_tag(:div,
2
+ class: object.classname + object.error_class) do %>
7
3
  <div class="input_wrapper">
8
4
  <% if content.present? %>
9
5
  <%= content %>
@@ -68,18 +64,30 @@
68
64
  </div>
69
65
 
70
66
  <%= javascript_tag do %>
71
- window.addEventListener("DOMContentLoaded", () => {
72
- datePickerHelper(<%= object.date_picker_config %>, "<%= object.scroll_container %>")
67
+ (function() {
68
+ const loadDatePicker = () => {
69
+ datePickerHelper(<%= object.date_picker_config %>, "<%= object.scroll_container %>")
73
70
 
74
- if (<%= object.selection_type == "quickpick" %>) {
75
- document.getElementById("<%= object.picker_id %>").addEventListener("change", ({ target }) => {
76
- const startDate = document.getElementById("<%= object.start_date_id %>")
77
- const endDate = document.getElementById("<%= object.end_date_id %>")
78
- const splittedValue = target.value.split(" to ")
79
- startDate.value = splittedValue[0]
80
- endDate.value = splittedValue[1] ? splittedValue[1] : splittedValue[0]
71
+ if (<%= object.selection_type == "quickpick" %>) {
72
+ document.getElementById("<%= object.picker_id %>").addEventListener("change", ({ target }) => {
73
+ const startDate = document.getElementById("<%= object.start_date_id %>")
74
+ const endDate = document.getElementById("<%= object.end_date_id %>")
75
+ const splittedValue = target.value.split(" to ")
76
+ startDate.value = splittedValue[0]
77
+ endDate.value = splittedValue[1] ? splittedValue[1] : splittedValue[0]
78
+ })
79
+ }
80
+ }
81
+
82
+ window.addEventListener("DOMContentLoaded", () => {
83
+ loadDatePicker()
84
+ })
85
+
86
+ if (<%= !object.custom_event_type.empty? %>) {
87
+ window.addEventListener("<%= object.custom_event_type %>", () => {
88
+ loadDatePicker()
81
89
  })
82
90
  }
83
- })
91
+ })()
84
92
  <% end %>
85
93
  <% end %>
@@ -73,6 +73,8 @@ module Playbook
73
73
  default: false
74
74
  prop :year_range, type: Playbook::Props::Array,
75
75
  default: [1900, 2100]
76
+ prop :custom_event_type, type: Playbook::Props::String,
77
+ default: ""
76
78
 
77
79
  def classname
78
80
  default_margin_bottom = margin_bottom.present? ? "" : " mb_sm"
@@ -2,4 +2,4 @@ The `defaultDate`/`default_date` prop has a null or empty string value by defaul
2
2
 
3
3
  If you use a Date object without UTC time standardization the Date Picker kit may misinterpret that date as yesterdays date (consequence of timezone differentials and the Javascript Date Object constructor). See [this GitHub issue for more information](https://github.com/powerhome/playbook/issues/1167) and the anti-pattern examples below.
4
4
 
5
-
5
+ You can leverage the `defaultDate`/`default_date` prop with custom logic in your filter or controller files where the determination of the default value changes based on user interaction. The page can load with an initial default date picker value or placeholder text, then after filter submission save the submitted values as the "new default" (via state or params).
@@ -0,0 +1,13 @@
1
+ <%= pb_rails("date_picker", props: { picker_id: "date-picker-turbo-frames", custom_event_type: "datePickerLoader" }) %>
2
+ <%= pb_rails("button", props: { id: "date-picker-loader", text: "Click Event Simulation" }) %>
3
+
4
+ <script>
5
+ document.getElementById("date-picker-loader").addEventListener("click", () => {
6
+ window.document.dispatchEvent(
7
+ new CustomEvent("datePickerLoader", {
8
+ bubbles: true,
9
+ })
10
+ )
11
+ console.log("Event 'datePickerLoader' dispatched - in a real implementation, this event would trigger the date picker's reinitialization through the custom_event_type prop connection")
12
+ })
13
+ </script>
@@ -0,0 +1,3 @@
1
+ The `custom_event_type` prop allows you to specify a custom event that will trigger the date picker's initialization, in addition to the default initialization on `DOMContentLoaded`. This is particularly useful in dynamic contexts like Turbo Frame updates where you need to reinitialize the date picker after new content loads. For Turbo integration, use `custom_event_type: "turbo:before-render"` to ensure the date picker properly reinitializes after Turbo navigation events.
2
+
3
+ In this example, we demonstrate the setup pattern by connecting a button to dispatch a "datePickerLoader" event - while the date picker's event listener is properly configured through the `custom_event_type` prop, this demo only logs the event dispatch to the console to illustrate the connection structure.
@@ -28,6 +28,7 @@ examples:
28
28
  - date_picker_time: Time Selection
29
29
  - date_picker_positions: Custom Positions
30
30
  - date_picker_positions_element: Custom Position (based on element)
31
+ - date_picker_turbo_frames: Within Turbo Frames
31
32
 
32
33
  react:
33
34
  - date_picker_default: Default
@@ -6,14 +6,8 @@
6
6
 
7
7
  ] %>
8
8
 
9
- <%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
10
- <%= pb_rails("draggable/draggable_container") do %>
11
- <%= pb_rails("list", props: {ordered: false}) do %>
12
- <% initial_items.each do |item| %>
13
- <%= pb_rails("draggable/draggable_item", props:{drag_id: item[:id]}) do %>
14
- <%= pb_rails("list/item") do %><%= item[:name] %><% end %>
15
- <% end %>
16
- <% end %>
17
- <% end %>
9
+ <%= pb_rails("list", props: { enable_drag: true, items: initial_items }) do %>
10
+ <% initial_items.each do |item| %>
11
+ <%= pb_rails("list/item", props:{drag_id: item[:id]}) do %><%= item[:name] %><% end %>
18
12
  <% end %>
19
13
  <% end %>
@@ -0,0 +1,5 @@
1
+ For a simplified version of the Draggable API for the List kit, you can do the following:
2
+
3
+ The List kit is optimized to work with the draggable kit. To enable drag, use the `enable_drag` prop on List kit with an array of the included items AND `drag_id` prop on ListItems. You will also need to include the `items` prop containing your array of listed items for the Draggable API.
4
+
5
+ An additional optional boolean prop (set to true by default) of `drag_handle` is also available on ListItem kit to show the drag handle icon.
@@ -0,0 +1,38 @@
1
+ <%= pb_rails("selectable_list",
2
+ props: {
3
+ enable_drag: true,
4
+ variant: "radio",
5
+ items: [
6
+ { drag_id: "41",
7
+ text: "Task 1",
8
+ input_options: {
9
+ value: "1",
10
+ name: "radio-name",
11
+ }
12
+ },
13
+ { drag_id: "42",
14
+ text: "Task 2",
15
+ checked: true,
16
+ input_options: {
17
+ value: "2",
18
+ name: "radio-name",
19
+ }
20
+ },
21
+ { drag_id: "43",
22
+ text: "Task 3",
23
+ input_options: {
24
+ value: "3",
25
+ name: "radio-name",
26
+ }
27
+ },
28
+ { drag_id: "44",
29
+ text: "Task 4",
30
+ input_options: {
31
+ value: "4",
32
+ name: "radio-name",
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ )
38
+ %>
@@ -0,0 +1,3 @@
1
+ For a simplified version of the Draggable API for the SelectableList kit, you can do the following:
2
+
3
+ The SelectableList kit is optimized to work with the draggable kit. To enable drag, use the `enable_drag` prop on SelectableList kit AND `drag_id` prop within the SelectableList kit prop. An additional optional boolean prop (set to true by default) of `drag_handle` is also available on SelectableList kit to show the drag handle icon.
@@ -11,6 +11,7 @@ examples:
11
11
  rails:
12
12
  - draggable_default_rails: Default
13
13
  - draggable_with_list_rails: Draggable with List Kit
14
+ - draggable_with_selectable_list_rails: Draggable with SelectableList Kit
14
15
  - draggable_with_cards_rails: Draggable with Cards
15
16
 
16
17
 
@@ -13,10 +13,9 @@ $small: 200px;
13
13
  $medium: 250px;
14
14
  $large: 300px;
15
15
  $xlarge: 365px;
16
- $animation-duration: 0.4s;
16
+ $animation-duration: .25s;
17
17
  $z-index: $z_7;
18
18
 
19
- // Drawer animations
20
19
  @keyframes modalFadeInLeft {
21
20
  from {
22
21
  transform: translateX(-100%);
@@ -71,6 +70,62 @@ $z-index: $z_7;
71
70
  }
72
71
  }
73
72
 
73
+ @keyframes overlayFade {
74
+ from {
75
+ opacity: 0;
76
+ transform: translateY(0);
77
+ }
78
+ to {
79
+ opacity: 1;
80
+ transform: translateY(0);
81
+ }
82
+ }
83
+
84
+ @keyframes overlayFadeOut {
85
+ from {
86
+ opacity: 1;
87
+ }
88
+ to {
89
+ opacity: 0;
90
+ }
91
+ }
92
+
93
+ @keyframes modalFadeDownIn {
94
+ from {
95
+ transform: translateY(-100%);
96
+ }
97
+ to {
98
+ transform: translateY(0);
99
+ }
100
+ }
101
+
102
+ @keyframes modalFadeDownOut {
103
+ from {
104
+ transform: translateY(0);
105
+ }
106
+ to {
107
+ transform: translateY(-100%);
108
+ }
109
+ }
110
+
111
+ @keyframes modalFadeUpIn {
112
+ from {
113
+ transform: translateY(100%);
114
+ }
115
+ to {
116
+ transform: translateY(0);
117
+ }
118
+ }
119
+
120
+ @keyframes modalFadeUpOut {
121
+ from {
122
+ transform: translateY(0);
123
+ }
124
+ to {
125
+ transform: translateY(100%);
126
+ }
127
+ }
128
+
74
129
  body.PBDrawer__Body--open {
75
130
  transition: margin-left $animation-duration ease-in, margin-right $animation-duration ease-in;
76
131
  }
@@ -94,34 +149,53 @@ body.PBDrawer__Body--close {
94
149
 
95
150
  // Drawer Styles
96
151
  .pb_drawer {
97
- will-change: transform;
98
- backface-visibility: hidden;
152
+ background-color: $white;
153
+ z-index: $z-index;
154
+ border: 0;
155
+ height: 100%;
156
+ overflow: auto;
157
+ animation-duration: $animation-duration;
158
+ outline: none;
159
+
160
+ &.pb_drawer_within_element {
161
+ position: relative;
162
+ width: 100%;
163
+ display: block;
164
+ background-color: $white;
165
+ overflow: hidden;
166
+ transition: height $animation-duration ease-in-out;
167
+ height: var(--drawer-height);
168
+ z-index: 1;
169
+
170
+ &.pb_drawer_before_close {
171
+ height: 0;
172
+ }
173
+
174
+ &::before {
175
+ content: '';
176
+ position: absolute;
177
+ top: 0;
178
+ left: 0;
179
+ right: 0;
180
+ bottom: 0;
181
+ background-color: inherit;
182
+ z-index: -1;
183
+ }
184
+ }
185
+
186
+ .toggle-content.is-visible {
187
+ display: block;
188
+ height: auto;
189
+ }
99
190
 
100
191
  .drawer {
101
192
  position: sticky;
102
193
  will-change: transform;
103
- backface-visibility: hidden;
104
194
  top: 0;
105
195
  background-color: $white;
106
196
  z-index: $z_9;
107
197
  }
108
198
 
109
- // @include pb_card;
110
- background-color: $white;
111
- border: 0;
112
- box-shadow: $shadow_deepest; // border class here
113
- max-height: calc(100vh - #{$gutter * 2});
114
- max-width: calc(100vw - #{$gutter * 2});
115
- overflow: auto;
116
- animation-duration: $animation-duration;
117
- outline: none;
118
-
119
- // General _before_close styles
120
- &[class*="_before_close"] {
121
- animation-name: modalFadeOut;
122
- animation-duration: $animation-duration;
123
- }
124
-
125
199
  &[class*="_left"] {
126
200
  animation-name: modalFadeInLeft;
127
201
  }
@@ -129,17 +203,40 @@ body.PBDrawer__Body--close {
129
203
  &[class*="_left"][class*="_before_close"] {
130
204
  animation-name: modalFadeOutLeft;
131
205
  animation-duration: $animation-duration;
206
+ transform: translateX(-100%);
132
207
  }
133
208
 
134
209
  &[class*="_right"] {
135
210
  animation-name: modalFadeInRight;
211
+ justify-content: flex-end;
136
212
  }
137
213
 
138
214
  &[class*="_right"][class*="_before_close"] {
139
215
  animation-name: modalFadeOutRight;
140
216
  animation-duration: $animation-duration;
217
+ transform: translateX(100%);
218
+ }
219
+
220
+ &[class*="_bottom"] {
221
+ animation: none;
222
+ transform: none;
223
+ }
224
+
225
+ &[class*="_bottom"][class*="_before_close"] {
226
+ animation: none;
227
+ transform: none;
141
228
  }
142
229
 
230
+ &[class*="_top"] {
231
+ animation-name: modalFadeUpIn;
232
+ }
233
+
234
+ &[class*="_top"][class*="_before_close"] {
235
+ animation-name: modalFadeUpOut;
236
+ animation-duration: $animation-duration;
237
+ }
238
+
239
+
143
240
  &[class*="_xs_"] {
144
241
  width: $xsmall;
145
242
  max-width: $xsmall;
@@ -165,23 +262,21 @@ body.PBDrawer__Body--close {
165
262
  max-width: $xlarge;
166
263
  }
167
264
 
168
- &_body_open {
169
- overflow: hidden;
170
- }
171
-
172
- &_after_open {
265
+ &[class*="_full_"] {
266
+ width: 100%;
267
+ max-width: 100%;
173
268
  }
174
269
 
175
- &.drawer_border_full {
270
+ &.drawer_border-full {
176
271
  box-shadow: none;
177
272
  border: 2px solid #f3f7fb;
178
273
  }
179
274
 
180
- &.drawer_border_right {
275
+ &.drawer_border-right {
181
276
  border-right: 2px solid #f3f7fb;
182
277
  }
183
278
 
184
- &.drawer_border_left {
279
+ &.drawer_border-left {
185
280
  border-left: 2px solid #f3f7fb;
186
281
  }
187
282
 
@@ -200,78 +295,27 @@ body.PBDrawer__Body--close {
200
295
  right: 0;
201
296
  bottom: 0;
202
297
  display: flex;
203
- align-items: center;
204
- justify-content: center;
205
298
  background-color: rgba($bg_dark, $opacity_4);
206
299
  z-index: $z-index;
207
- animation-name: overlayFade;
208
- animation-duration: $animation-duration;
300
+ opacity: 0;
301
+ animation: overlayFade $animation-duration ease-in-out forwards;
302
+
303
+ &[class*="_left"]{
304
+ justify-content: flex-start;
305
+ }
209
306
 
210
- &_after_open {
307
+ &[class*="_center"]{
308
+ justify-content: center;
211
309
  }
212
- &_before_close {
213
- animation-name: overlayFadeOut;
214
- animation-duration: $animation-duration;
310
+
311
+ &[class*="_right"]{
312
+ justify-content: flex-end;
215
313
  }
216
- &[class*="full_height"] {
217
- &[class*="_left"]{
218
- justify-content: flex-start;
219
- }
220
-
221
- &[class*="_center"]{
222
- justify-content: center;
223
- }
224
-
225
- &[class*="_right"]{
226
- justify-content: flex-end;
227
- }
228
-
229
- .pb_drawer {
230
- height: 100%;
231
- max-height: 100%;
232
- max-width: none;
233
- // This empty div only has height when drawer is full height
234
- // Fix for drawer body content disappearing behind sticky footer
235
- .drawer-pseudo-footer {
236
- height: $space_xl * 2;
237
- }
238
- .drawer_footer {
239
- position: fixed;
240
- bottom: 0;
241
- background-color: $white;
242
- max-width: 100%;
243
- }
244
- &[class*="_xs_"] {
245
- width: $xsmall;
246
- .dialog_footer {
247
- width: $xsmall;
248
- }
249
- }
250
- &[class*="_sm_"] {
251
- width: $small;
252
- .dialog_footer {
253
- width: $small;
254
- }
255
- }
256
- &[class*="_md_"] {
257
- width: $medium;
258
- .dialog_footer {
259
- width: $medium;
260
- }
261
- }
262
- &[class*="_lg_"] {
263
- width: $large;
264
- .dialog_footer {
265
- width: $large;
266
- }
267
- }
268
- &[class*="_xl_"] {
269
- width: $xlarge;
270
- .dialog_footer {
271
- width: $xlarge;
272
- }
273
- }
274
- }
314
+
315
+ &_before_close {
316
+ animation: overlayFadeOut $animation-duration ease-in-out forwards;
317
+ opacity: 0;
318
+ // height: 0;
275
319
  }
276
320
  }
277
321
 
@@ -281,99 +325,17 @@ body.PBDrawer__Body--close {
281
325
  left: 0;
282
326
  right: 0;
283
327
  bottom: 0;
284
- display: flex;
285
- align-items: center;
286
- justify-content: center;
287
328
  z-index: $z-index;
288
- animation-name: overlayFade;
289
- animation-duration: $animation-duration;
290
- overflow: none; /* Ensure body remains scrollable */
291
- pointer-events: none; /* Allow interaction inside the drawer itself */
292
-
293
- body.PBDrawer--open {
294
- overflow: none; /* Ensure body remains scrollable */
295
- pointer-events: none; /* Allow interaction inside the drawer itself */
296
- }
329
+ opacity: 1;
330
+ pointer-events: none;
297
331
 
298
- &_after_open {
299
- overflow: none; /* Ensure body remains scrollable */
300
- pointer-events: none; /* Allow interaction inside the drawer itself */
301
- }
302
332
  &_before_close {
303
- animation-name: overlayFadeOut;
304
- animation-duration: $animation-duration;
305
- }
306
- &[class*="full_height"] {
307
- &[class*="_left"]{
308
- justify-content: flex-start;
309
- }
310
-
311
- &[class*="_center"]{
312
- justify-content: center;
313
- }
314
-
315
- &[class*="_right"]{
316
- justify-content: flex-end;
317
- }
318
-
319
- .pb_drawer {
320
- height: 100%;
321
- max-height: 100%;
322
- max-width: none;
323
- // This empty div only has height when drawer is full height
324
- // Fix for drawer body content disappearing behind sticky footer
325
- .drawer-pseudo-footer {
326
- height: $space_xl * 2;
327
- }
328
- .drawer_footer {
329
- position: fixed;
330
- bottom: 0;
331
- background-color: $white;
332
- max-width: 100%;
333
- }
334
- &[class*="_xs_"] {
335
- width: $xsmall;
336
- .dialog_footer {
337
- width: $xsmall;
338
- }
339
- }
340
- &[class*="_sm_"] {
341
- width: $small;
342
- .dialog_footer {
343
- width: $small;
344
- }
345
- }
346
- &[class*="_md_"] {
347
- width: $medium;
348
- .dialog_footer {
349
- width: $medium;
350
- }
351
- }
352
- &[class*="_lg_"] {
353
- width: $large;
354
- .dialog_footer {
355
- width: $large;
356
- }
357
- }
358
- &[class*="_xl_"] {
359
- width: $xlarge;
360
- .dialog_footer {
361
- width: $xlarge;
362
- }
363
- }
364
- }
333
+ height: 0;
365
334
  }
366
335
  }
367
336
 
368
- [class*="drawer_body"] {
369
- padding: $space_sm;
370
- }
371
-
372
- [class*="drawer_header"] {
373
- padding: $space_sm;
374
- }
375
337
 
376
- [class*="drawer_footer"] {
377
- padding: $space_sm;
338
+ &.pb_drawer_before_close {
339
+ transform: translateX(-100%);
378
340
  }
379
341
  }