playbook_ui_docs 16.9.0 → 16.10.0.pre.alpha.PLAY3053advancedtablebottompinnedrowsreact17469

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 (226) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +19 -2
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_react.md +2 -2
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +4 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.jsx +6 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +1 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_react.md +1 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +36 -44
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.jsx +10 -19
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +0 -4
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_react.md +3 -5
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.json +2 -8
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.overrides.json +1 -8
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +0 -1
  16. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.html.erb +1 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.jsx +15 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_asc.md +1 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_playground.json +1 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +2 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_event_listeners_rails.md +1 -1
  23. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_independent_containers.html.erb +35 -0
  24. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_independent_containers_rails.md +8 -0
  25. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_rails.md +3 -1
  26. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers_react.md +1 -1
  27. data/app/pb_kits/playbook/pb_draggable/docs/_playground.json +260 -19
  28. data/app/pb_kits/playbook/pb_draggable/docs/_playground.overrides.json +258 -13
  29. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +1 -0
  30. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.html.erb +93 -0
  31. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.jsx +127 -0
  32. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.md +1 -0
  33. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.html.erb +10 -0
  34. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.jsx +37 -0
  35. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.html.erb +10 -0
  36. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.jsx +37 -0
  37. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.md +1 -0
  38. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.json +150 -237
  39. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.overrides.json +58 -74
  40. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +6 -0
  41. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +3 -0
  42. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.html.erb +66 -0
  43. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.jsx +53 -0
  44. data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_remove_replace.md +5 -0
  45. data/app/pb_kits/playbook/pb_file_upload/docs/_playground.json +2 -1
  46. data/app/pb_kits/playbook/pb_file_upload/docs/example.yml +3 -1
  47. data/app/pb_kits/playbook/pb_file_upload/docs/index.js +1 -0
  48. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive.html.erb +116 -0
  49. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive.md +12 -0
  50. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive_react.jsx +153 -0
  51. data/app/pb_kits/playbook/pb_filter/docs/_filter_interactive_react.md +10 -0
  52. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.html.erb +1 -1
  53. data/app/pb_kits/playbook/pb_filter/docs/_playground.json +308 -5
  54. data/app/pb_kits/playbook/pb_filter/docs/_playground.overrides.json +312 -0
  55. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  56. data/app/pb_kits/playbook/pb_filter/docs/index.js +2 -1
  57. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.json +210 -14
  58. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.overrides.json +231 -0
  59. data/app/pb_kits/playbook/pb_flex/docs/_playground.json +297 -38
  60. data/app/pb_kits/playbook/pb_flex/docs/_playground.overrides.json +300 -40
  61. data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +20 -19
  62. data/app/pb_kits/playbook/pb_form/docs/_playground.json +1 -13
  63. data/app/pb_kits/playbook/pb_form_group/docs/_playground.json +82 -5
  64. data/app/pb_kits/playbook/pb_form_group/docs/_playground.overrides.json +91 -0
  65. data/app/pb_kits/playbook/pb_form_pill/docs/_playground.json +155 -14
  66. data/app/pb_kits/playbook/pb_form_pill/docs/_playground.overrides.json +147 -0
  67. data/app/pb_kits/playbook/pb_full_screen/docs/_description.md +1 -0
  68. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.jsx +68 -0
  69. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.md +1 -0
  70. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.jsx +71 -0
  71. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.md +1 -0
  72. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.html.erb +3 -0
  73. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.jsx +63 -0
  74. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.md +1 -0
  75. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.jsx +68 -0
  76. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.md +1 -0
  77. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.jsx +68 -0
  78. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.md +1 -0
  79. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.jsx +149 -0
  80. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.md +1 -0
  81. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.json +155 -0
  82. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.overrides.json +137 -0
  83. data/app/pb_kits/playbook/pb_full_screen/docs/example.yml +14 -0
  84. data/app/pb_kits/playbook/pb_full_screen/docs/index.js +6 -0
  85. data/app/pb_kits/playbook/pb_hashtag/docs/_playground.json +72 -11
  86. data/app/pb_kits/playbook/pb_hashtag/docs/_playground.overrides.json +75 -0
  87. data/app/pb_kits/playbook/pb_highlight/docs/_playground.json +75 -4
  88. data/app/pb_kits/playbook/pb_highlight/docs/_playground.overrides.json +75 -0
  89. data/app/pb_kits/playbook/pb_home_address_street/docs/_playground.json +138 -12
  90. data/app/pb_kits/playbook/pb_home_address_street/docs/_playground.overrides.json +162 -0
  91. data/app/pb_kits/playbook/pb_icon/docs/_icon_default.jsx +1 -1
  92. data/app/pb_kits/playbook/pb_icon/docs/_playground.json +66 -41
  93. data/app/pb_kits/playbook/pb_icon/docs/_playground.overrides.json +85 -27
  94. data/app/pb_kits/playbook/pb_icon_button/docs/_playground.json +111 -9
  95. data/app/pb_kits/playbook/pb_icon_button/docs/_playground.overrides.json +131 -0
  96. data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.json +92 -7
  97. data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.overrides.json +108 -0
  98. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.json +32 -17
  99. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.overrides.json +81 -8
  100. data/app/pb_kits/playbook/pb_icon_value/docs/_playground.json +28 -18
  101. data/app/pb_kits/playbook/pb_icon_value/docs/_playground.overrides.json +58 -9
  102. data/app/pb_kits/playbook/pb_image/docs/_playground.json +124 -47
  103. data/app/pb_kits/playbook/pb_image/docs/_playground.overrides.json +122 -47
  104. data/app/pb_kits/playbook/pb_label_pill/docs/_playground.json +68 -6
  105. data/app/pb_kits/playbook/pb_label_pill/docs/_playground.overrides.json +85 -0
  106. data/app/pb_kits/playbook/pb_label_value/docs/_playground.json +59 -36
  107. data/app/pb_kits/playbook/pb_label_value/docs/_playground.overrides.json +101 -30
  108. data/app/pb_kits/playbook/pb_layout/docs/_playground.json +216 -10
  109. data/app/pb_kits/playbook/pb_layout/docs/_playground.overrides.json +188 -0
  110. data/app/pb_kits/playbook/pb_legend/docs/_playground.json +60 -7
  111. data/app/pb_kits/playbook/pb_legend/docs/_playground.overrides.json +77 -0
  112. data/app/pb_kits/playbook/pb_list/docs/_playground.json +165 -17
  113. data/app/pb_kits/playbook/pb_list/docs/_playground.overrides.json +191 -0
  114. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.html.erb +21 -0
  115. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.jsx +55 -0
  116. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_color.md +1 -0
  117. data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.json +28 -1
  118. data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.overrides.json +27 -1
  119. data/app/pb_kits/playbook/pb_loading_inline/docs/example.yml +2 -0
  120. data/app/pb_kits/playbook/pb_loading_inline/docs/index.js +1 -0
  121. data/app/pb_kits/playbook/pb_map/docs/_playground.json +164 -7
  122. data/app/pb_kits/playbook/pb_map/docs/_playground.overrides.json +180 -0
  123. data/app/pb_kits/playbook/pb_message/docs/_playground.json +114 -8
  124. data/app/pb_kits/playbook/pb_message/docs/_playground.overrides.json +144 -0
  125. data/app/pb_kits/playbook/pb_multi_level_select/docs/_playground.json +310 -61
  126. data/app/pb_kits/playbook/pb_multi_level_select/docs/_playground.overrides.json +327 -44
  127. data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.json +35 -6
  128. data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.overrides.json +35 -6
  129. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.json +32 -21
  130. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.overrides.json +32 -21
  131. data/app/pb_kits/playbook/pb_nav/docs/_playground.json +546 -18
  132. data/app/pb_kits/playbook/pb_nav/docs/_playground.overrides.json +561 -14
  133. data/app/pb_kits/playbook/pb_online_status/docs/_playground.json +18 -23
  134. data/app/pb_kits/playbook/pb_online_status/docs/_playground.overrides.json +18 -14
  135. data/app/pb_kits/playbook/pb_overlay/docs/_playground.json +133 -14
  136. data/app/pb_kits/playbook/pb_overlay/docs/_playground.overrides.json +154 -0
  137. data/app/pb_kits/playbook/pb_pagination/docs/_playground.json +35 -14
  138. data/app/pb_kits/playbook/pb_pagination/docs/_playground.overrides.json +35 -14
  139. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb +1 -1
  140. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.html.erb +1 -1
  141. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.html.erb +5 -5
  142. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.html.erb +1 -1
  143. data/app/pb_kits/playbook/pb_passphrase/docs/_playground.json +129 -14
  144. data/app/pb_kits/playbook/pb_passphrase/docs/_playground.overrides.json +148 -0
  145. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_playground.json +378 -4
  146. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_playground.overrides.json +245 -0
  147. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_playground.json +215 -4
  148. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_playground.overrides.json +224 -0
  149. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_playground.json +149 -4
  150. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_playground.overrides.json +162 -0
  151. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_playground.json +392 -4
  152. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_playground.overrides.json +212 -0
  153. data/app/pb_kits/playbook/pb_person/docs/_playground.json +27 -11
  154. data/app/pb_kits/playbook/pb_person/docs/_playground.overrides.json +34 -9
  155. data/app/pb_kits/playbook/pb_person_contact/docs/_playground.json +72 -21
  156. data/app/pb_kits/playbook/pb_person_contact/docs/_playground.overrides.json +71 -21
  157. data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.json +179 -21
  158. data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.overrides.json +180 -0
  159. data/app/pb_kits/playbook/pb_pill/docs/_playground.json +16 -49
  160. data/app/pb_kits/playbook/pb_pill/docs/_playground.overrides.json +33 -30
  161. data/app/pb_kits/playbook/pb_popover/docs/_playground.json +155 -46
  162. data/app/pb_kits/playbook/pb_popover/docs/_playground.overrides.json +162 -30
  163. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +9 -11
  164. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.json +26 -13
  165. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.overrides.json +24 -6
  166. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.json +50 -17
  167. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.overrides.json +41 -7
  168. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.json +197 -10
  169. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.overrides.json +189 -0
  170. data/app/pb_kits/playbook/pb_radio/docs/_playground.json +80 -6
  171. data/app/pb_kits/playbook/pb_radio/docs/_playground.overrides.json +82 -3
  172. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.json +152 -22
  173. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.overrides.json +153 -0
  174. data/app/pb_kits/playbook/pb_select/docs/_playground.json +65 -19
  175. data/app/pb_kits/playbook/pb_select/docs/_playground.overrides.json +54 -14
  176. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.json +75 -82
  177. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.overrides.json +76 -76
  178. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.json +105 -15
  179. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.overrides.json +106 -0
  180. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.json +37 -21
  181. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.overrides.json +35 -18
  182. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.json +174 -12
  183. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.overrides.json +162 -10
  184. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.json +68 -6
  185. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.overrides.json +80 -0
  186. data/app/pb_kits/playbook/pb_source/docs/_playground.json +67 -6
  187. data/app/pb_kits/playbook/pb_source/docs/_playground.overrides.json +80 -0
  188. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.json +28 -53
  189. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.overrides.json +33 -32
  190. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.json +15 -9
  191. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.overrides.json +15 -5
  192. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.json +19 -9
  193. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.overrides.json +18 -7
  194. data/app/pb_kits/playbook/pb_table/docs/_playground.json +223 -21
  195. data/app/pb_kits/playbook/pb_table/docs/_playground.overrides.json +176 -0
  196. data/app/pb_kits/playbook/pb_text_input/docs/_playground.json +44 -5
  197. data/app/pb_kits/playbook/pb_text_input/docs/_playground.overrides.json +39 -3
  198. data/app/pb_kits/playbook/pb_textarea/docs/_playground.json +35 -3
  199. data/app/pb_kits/playbook/pb_textarea/docs/_playground.overrides.json +28 -3
  200. data/app/pb_kits/playbook/pb_time/docs/_playground.json +28 -14
  201. data/app/pb_kits/playbook/pb_time/docs/_playground.overrides.json +26 -13
  202. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.json +36 -30
  203. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.overrides.json +31 -26
  204. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.json +63 -9
  205. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.overrides.json +69 -0
  206. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.json +30 -9
  207. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.overrides.json +30 -9
  208. data/app/pb_kits/playbook/pb_timeline/docs/_playground.json +178 -6
  209. data/app/pb_kits/playbook/pb_timeline/docs/_playground.overrides.json +165 -0
  210. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.json +36 -21
  211. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.overrides.json +35 -20
  212. data/app/pb_kits/playbook/pb_toggle/docs/_playground.json +24 -13
  213. data/app/pb_kits/playbook/pb_toggle/docs/_playground.overrides.json +20 -12
  214. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.json +42 -23
  215. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.overrides.json +35 -15
  216. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.json +124 -44
  217. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.overrides.json +98 -31
  218. data/app/pb_kits/playbook/pb_user/docs/_playground.json +33 -15
  219. data/app/pb_kits/playbook/pb_user/docs/_playground.overrides.json +32 -15
  220. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.json +26 -12
  221. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.overrides.json +26 -9
  222. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.json +32 -5
  223. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.overrides.json +30 -4
  224. metadata +73 -4
  225. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.jsx +0 -92
  226. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_fullscreen.md +0 -3
@@ -0,0 +1,153 @@
1
+ import React, { useState } from "react";
2
+
3
+ import Filter from "../_filter";
4
+
5
+ import Button from "../../pb_button/_button";
6
+ import DatePicker from "../../pb_date_picker/_date_picker";
7
+ import Dropdown from "../../pb_dropdown/_dropdown";
8
+ import Flex from "../../pb_flex/_flex";
9
+ import Select from "../../pb_select/_select";
10
+
11
+ const territorySelectOptions = [
12
+ { value: "USA" },
13
+ { value: "Canada" },
14
+ { value: "Brazil" },
15
+ { value: "Philippines" },
16
+ ];
17
+
18
+ const statusDropdownOptions = [
19
+ { id: "open", label: "Open", value: "open" },
20
+ { id: "in_progress", label: "In progress", value: "in_progress" },
21
+ { id: "resolved", label: "Resolved", value: "resolved" },
22
+ { id: "closed", label: "Closed", value: "closed" },
23
+ ];
24
+
25
+ const INITIAL_FILTERS = {
26
+ territory: "USA",
27
+ status: "open",
28
+ dateRange: "quickpick-this-week",
29
+ startDate: "05/01/2026",
30
+ };
31
+
32
+ const statusOptionForValue = (value) =>
33
+ value
34
+ ? statusDropdownOptions.find((opt) => opt.value === value)
35
+ : undefined;
36
+
37
+ const FilterInteractive = (props) => {
38
+ const [filters, setFilters] = useState(INITIAL_FILTERS);
39
+
40
+ const updateFilter = (key) => (value) =>
41
+ setFilters((prev) => ({ ...prev, [key]: value }));
42
+
43
+ const handleClear = () => {
44
+ setFilters(INITIAL_FILTERS);
45
+ };
46
+
47
+ return (
48
+ <Filter
49
+ {...props}
50
+ filters={{
51
+ Territory: filters.territory,
52
+ Status: filters.status,
53
+ "Date range": filters.dateRange,
54
+ "Start date": filters.startDate,
55
+ }}
56
+ interactiveFilters={{
57
+ Territory: {
58
+ type: "select",
59
+ options: territorySelectOptions,
60
+ value: filters.territory,
61
+ onChange: updateFilter("territory"),
62
+ },
63
+ Status: {
64
+ type: "dropdown",
65
+ options: statusDropdownOptions,
66
+ value: filters.status,
67
+ onChange: updateFilter("status"),
68
+ },
69
+ "Date range": {
70
+ type: "dropdown",
71
+ variant: "quickpick",
72
+ value: filters.dateRange,
73
+ onChange: updateFilter("dateRange"),
74
+ },
75
+ "Start date": {
76
+ type: "date-picker",
77
+ value: filters.startDate,
78
+ onChange: updateFilter("startDate"),
79
+ format: "m/d/Y",
80
+ },
81
+ }}
82
+ minWidth="360px"
83
+ results={546}
84
+ sortOptions={{
85
+ popularity: "Popularity",
86
+ }}
87
+ sortValue={[{ name: "popularity", dir: "desc" }]}
88
+ >
89
+ {({ closePopover }) => (
90
+ <form>
91
+ <Select
92
+ {...props}
93
+ label="Territory"
94
+ name="location"
95
+ onChange={(e) => updateFilter("territory")(e.target.value)}
96
+ options={territorySelectOptions}
97
+ value={filters.territory}
98
+ />
99
+ <Dropdown
100
+ {...props}
101
+ blankSelection="Select status..."
102
+ defaultValue={statusOptionForValue(filters.status)}
103
+ key={filters.status || "cleared"}
104
+ label="Status"
105
+ marginBottom="sm"
106
+ onSelect={(option) =>
107
+ updateFilter("status")(option ? option.value : "")
108
+ }
109
+ options={statusDropdownOptions}
110
+ />
111
+
112
+ <Dropdown
113
+ {...props}
114
+ key={filters.dateRange || "cleared"}
115
+ label="Date range"
116
+ marginBottom="sm"
117
+ onSelect={(option) =>
118
+ updateFilter("dateRange")(option ? option.id : "")
119
+ }
120
+ variant="quickpick"
121
+ />
122
+
123
+ <DatePicker
124
+ {...props}
125
+ inputValue={filters.startDate}
126
+ label="Start date"
127
+ onChange={updateFilter("startDate")}
128
+ pickerId="filter-panel-start-date"
129
+ />
130
+
131
+ <Flex
132
+ {...props}
133
+ spacing="between"
134
+ >
135
+ <Button
136
+ {...props}
137
+ onClick={closePopover}
138
+ text="Apply"
139
+ />
140
+ <Button
141
+ {...props}
142
+ onClick={handleClear}
143
+ text="Clear"
144
+ variant="secondary"
145
+ />
146
+ </Flex>
147
+ </form>
148
+ )}
149
+ </Filter>
150
+ );
151
+ };
152
+
153
+ export default FilterInteractive;
@@ -0,0 +1,10 @@
1
+ Click an applied filter chip to edit it inline. `interactiveFilters` supports:
2
+
3
+ - `type: 'select'` / `'dropdown'`: pick from a list of options.
4
+ - `type: 'date-picker'`: inline calendar. Supports `format`, `minDate`, `maxDate`, and `mode`.
5
+
6
+ For date ranges, use `type: 'dropdown'` with `variant: 'quickpick'`. The Filter kit generates the same quickpick options as Dropdown, so no `options` are needed. Values are quickpick ids, such as `quickpick-this-week`.
7
+
8
+ Keep `filters`, `interactiveFilters.value`, and the filter popover fields backed by the same state so chip labels and form controls stay in sync.
9
+
10
+ On Rails, pass `interactive_filters` with `target_input` so chip picks update the linked form control. Re-read submitted params in your view after Apply so `filters` reflects the new values.
@@ -32,7 +32,7 @@
32
32
  <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
33
33
 
34
34
  <%= form.actions do |action| %>
35
- <%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
35
+ <%= action.submit props: { text: "Apply", data: { disable_with: "pb_rails('icon', props: { icon: 'spinner', spin: true, fixed_width: true })Searching...".html_safe },}%>
36
36
  <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
37
37
  <% end %>
38
38
  <% end %>
@@ -1,13 +1,316 @@
1
1
  {
2
2
  "template": "<Filter{{props}} />",
3
3
  "propTargets": {},
4
- "defaults": {},
4
+ "defaults": {
5
+ "background": true,
6
+ "placement": "bottom-start",
7
+ "double": false,
8
+ "filters": {
9
+ "Full Name": "John Wick",
10
+ "City": "San Francisco"
11
+ },
12
+ "isCollapsed": false,
13
+ "minWidth": "360px",
14
+ "onCollapse": "() => {}",
15
+ "onSortChange": "() => {}",
16
+ "popoverProps": {},
17
+ "results": 546,
18
+ "sortOptions": {
19
+ "popularity": "Popularity",
20
+ "manager_title": "Manager's Title",
21
+ "manager_name": "Manager's Name"
22
+ },
23
+ "sortValue": [
24
+ {
25
+ "name": "popularity",
26
+ "dir": "desc"
27
+ }
28
+ ]
29
+ },
30
+ "groups": [
31
+ {
32
+ "name": "Layout",
33
+ "props": [
34
+ "double",
35
+ "variant",
36
+ "background",
37
+ "results"
38
+ ]
39
+ },
40
+ {
41
+ "name": "Filter State",
42
+ "props": [
43
+ "filters"
44
+ ]
45
+ },
46
+ {
47
+ "name": "Sorting",
48
+ "props": [
49
+ "sortOptions",
50
+ "sortValue",
51
+ "onSortChange"
52
+ ]
53
+ },
54
+ {
55
+ "name": "Popover",
56
+ "props": [
57
+ "placement",
58
+ "minWidth",
59
+ "maxHeight",
60
+ "popoverProps"
61
+ ]
62
+ },
63
+ {
64
+ "name": "Sidebar",
65
+ "props": []
66
+ }
67
+ ],
5
68
  "presets": [
6
69
  {
7
- "name": "Default",
8
- "props": {}
70
+ "name": "Single Filter",
71
+ "structureMode": "single",
72
+ "props": {
73
+ "filters": {
74
+ "Full Name": "John Wick"
75
+ },
76
+ "minWidth": "360px",
77
+ "onSortChange": "() => {}",
78
+ "results": 546,
79
+ "sortOptions": {
80
+ "popularity": "Popularity",
81
+ "manager_title": "Manager's Title",
82
+ "manager_name": "Manager's Name"
83
+ },
84
+ "sortValue": [
85
+ {
86
+ "name": "popularity",
87
+ "dir": "desc"
88
+ }
89
+ ]
90
+ }
91
+ },
92
+ {
93
+ "name": "Double Filter",
94
+ "structureMode": "double",
95
+ "props": {
96
+ "filters": {
97
+ "Full Name": "John Wick",
98
+ "City": "San Francisco"
99
+ },
100
+ "minWidth": "375px",
101
+ "onSortChange": "() => {}",
102
+ "results": 1,
103
+ "sortOptions": {
104
+ "popularity": "Popularity",
105
+ "manager_title": "Manager's Title",
106
+ "manager_name": "Manager's Name"
107
+ },
108
+ "sortValue": [
109
+ {
110
+ "name": "popularity",
111
+ "dir": "desc"
112
+ }
113
+ ]
114
+ }
115
+ },
116
+ {
117
+ "name": "No Background",
118
+ "structureMode": "single",
119
+ "props": {
120
+ "background": false,
121
+ "filters": {
122
+ "Full Name": "John Wick",
123
+ "City": "Las Vegas"
124
+ },
125
+ "minWidth": "360px",
126
+ "onSortChange": "() => {}",
127
+ "results": 3,
128
+ "sortOptions": {
129
+ "popularity": "Popularity",
130
+ "manager_title": "Manager's Title",
131
+ "manager_name": "Manager's Name"
132
+ },
133
+ "sortValue": [
134
+ {
135
+ "name": "popularity",
136
+ "dir": "desc"
137
+ }
138
+ ]
139
+ }
140
+ },
141
+ {
142
+ "name": "Filter Only",
143
+ "structureMode": "single",
144
+ "props": {
145
+ "filters": {
146
+ "Full Name": "John Wick"
147
+ },
148
+ "minWidth": "360px"
149
+ }
150
+ },
151
+ {
152
+ "name": "Sort Only",
153
+ "structureMode": "sort_only",
154
+ "props": {
155
+ "onSortChange": "() => {}",
156
+ "sortOptions": {
157
+ "popularity": "Popularity",
158
+ "manager_title": "Manager's Title",
159
+ "manager_name": "Manager's Name"
160
+ },
161
+ "sortValue": [
162
+ {
163
+ "name": "popularity",
164
+ "dir": "desc"
165
+ }
166
+ ]
167
+ }
168
+ },
169
+ {
170
+ "name": "Constrained Popover",
171
+ "structureMode": "double",
172
+ "props": {
173
+ "filters": {
174
+ "Full Name": "John Wick",
175
+ "City": "San Francisco"
176
+ },
177
+ "maxHeight": "360px",
178
+ "minWidth": "360px",
179
+ "onSortChange": "() => {}",
180
+ "results": 1,
181
+ "sortOptions": {
182
+ "popularity": "Popularity",
183
+ "manager_title": "Manager's Title",
184
+ "manager_name": "Manager's Name"
185
+ },
186
+ "sortValue": [
187
+ {
188
+ "name": "popularity",
189
+ "dir": "desc"
190
+ }
191
+ ]
192
+ }
193
+ },
194
+ {
195
+ "name": "Sidebar",
196
+ "structureMode": "sidebar",
197
+ "props": {
198
+ "onCollapse": "() => {}",
199
+ "results": 15,
200
+ "variant": "sidebar",
201
+ "width": "xs"
202
+ }
203
+ }
204
+ ],
205
+ "conditionals": {
206
+ "isCollapsed": {
207
+ "structureMode": "sidebar"
208
+ },
209
+ "onCollapse": {
210
+ "structureMode": "sidebar"
211
+ },
212
+ "maxHeight": {
213
+ "requires": "minWidth"
214
+ }
215
+ },
216
+ "hints": {
217
+ "single_filter": {
218
+ "presetName": "Single Filter",
219
+ "message": "Single Filter shows the compact layout with the filter trigger, active filters, result count, and sort menu in one row.",
220
+ "type": "info"
221
+ },
222
+ "double_filter": {
223
+ "presetName": "Double Filter",
224
+ "message": "Double Filter splits filter controls from the result count and sort controls, using a lower row for summary and sorting.",
225
+ "type": "info"
226
+ },
227
+ "no_background": {
228
+ "presetName": "No Background",
229
+ "message": "No Background renders the same filter controls without the Card wrapper.",
230
+ "type": "info"
231
+ },
232
+ "filter_only": {
233
+ "presetName": "Filter Only",
234
+ "message": "Filter Only keeps the filter trigger and selected filter display while omitting results and sorting props.",
235
+ "type": "info"
236
+ },
237
+ "sort_only": {
238
+ "presetName": "Sort Only",
239
+ "message": "Sort-only mode omits filter children and only renders the sort trigger.",
240
+ "type": "info"
241
+ },
242
+ "constrained_popover": {
243
+ "presetName": "Constrained Popover",
244
+ "message": "Constrained Popover demonstrates maxHeight and minWidth limits for larger filter forms inside the popover.",
245
+ "type": "info"
246
+ },
247
+ "sidebar": {
248
+ "presetName": "Sidebar",
249
+ "message": "Sidebar mode uses Filter.Section subcomponents and wrapper-managed collapse state so Expand All and Collapse All control every section.",
250
+ "type": "info"
251
+ }
252
+ },
253
+ "structureModes": {
254
+ "default": "single",
255
+ "modes": {
256
+ "single": {
257
+ "label": "Single",
258
+ "template": "<Filter{{props}}>\n {{children}}\n</Filter>",
259
+ "children": "{({ closePopover }) => (\n <form>\n <TextInput\n label=\"Full Name\"\n placeholder=\"Enter name\"\n />\n <Select\n blankSelection=\"Select One...\"\n label=\"Territory\"\n name=\"location\"\n options={[\n { value: 'USA' },\n { value: 'Canada' },\n { value: 'Brazil' },\n { value: 'Philippines' },\n ]}\n />\n <Flex spacing=\"between\">\n <Button\n onClick={closePopover}\n text=\"Apply\"\n />\n <Button\n text=\"Clear\"\n variant=\"secondary\"\n />\n </Flex>\n </form>\n )}",
260
+ "props": {
261
+ "double": false,
262
+ "variant": ""
263
+ }
264
+ },
265
+ "double": {
266
+ "label": "Double",
267
+ "template": "<Filter{{props}}>\n {{children}}\n</Filter>",
268
+ "children": "{({ closePopover }) => (\n <form>\n <TextInput\n label=\"Full Name\"\n placeholder=\"Enter name\"\n />\n <Select\n blankSelection=\"Select One...\"\n label=\"Territory\"\n name=\"location\"\n options={[\n { value: 'USA' },\n { value: 'Canada' },\n { value: 'Brazil' },\n { value: 'Philippines' },\n ]}\n />\n <Flex spacing=\"between\">\n <Button\n onClick={closePopover}\n text=\"Apply\"\n />\n <Button\n text=\"Clear\"\n variant=\"secondary\"\n />\n </Flex>\n </form>\n )}",
269
+ "props": {
270
+ "double": true,
271
+ "variant": ""
272
+ }
273
+ },
274
+ "sort_only": {
275
+ "label": "Sort Only",
276
+ "template": "<Filter{{props}} />",
277
+ "children": "",
278
+ "props": {
279
+ "double": false,
280
+ "filters": {},
281
+ "results": null,
282
+ "variant": ""
283
+ }
284
+ },
285
+ "sidebar": {
286
+ "label": "Sidebar",
287
+ "template": "<Filter\n isCollapsed={isCollapsed}\n onCollapse={toggleCollapse}{{props}}\n>\n <Filter.Section headerText=\"Full Name\">\n <TextInput placeholder=\"Enter name\" />\n </Filter.Section>\n <SectionSeparator />\n <Filter.Section\n collapsed={isCollapsed}\n collapsible\n headerText=\"Territory\"\n >\n <Select\n blankSelection=\"Select One...\"\n name=\"location\"\n options={[\n { value: 'USA' },\n { value: 'Canada' },\n { value: 'Brazil' },\n { value: 'Philippines' },\n ]}\n />\n </Filter.Section>\n <SectionSeparator />\n <Filter.Section\n collapsed={isCollapsed}\n collapsible\n headerText=\"Products\"\n >\n <Checkbox text=\"Doors\" marginBottom=\"sm\" />\n <Checkbox text=\"Windows\" marginBottom=\"sm\" />\n <Checkbox text=\"Siding\" />\n </Filter.Section>\n</Filter>",
288
+ "children": "",
289
+ "imports": [
290
+ "useCollapsible"
291
+ ],
292
+ "props": {
293
+ "double": false,
294
+ "variant": "sidebar",
295
+ "width": "xs"
296
+ },
297
+ "wrapper": "const FilterSidebarExample = () => {\n const [isCollapsed, toggleCollapse] = useCollapsible(true)\n\n return {{component}}\n}\n\n<FilterSidebarExample />"
298
+ }
9
299
  }
300
+ },
301
+ "children": {
302
+ "editable": false,
303
+ "default": ""
304
+ },
305
+ "hiddenProps": [
306
+ "isCollapsed",
307
+ "onCollapse"
10
308
  ],
11
- "conditionals": {},
12
- "hints": {}
309
+ "requiredCodeProps": [
310
+ "filters",
311
+ "results",
312
+ "sortOptions",
313
+ "sortValue",
314
+ "onSortChange"
315
+ ]
13
316
  }