playbook_ui 18.2.0 → 18.3.0.pre.alpha.PLAY3342advancedtablereactmulticolumnselectablerow21082

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 (466) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/CollapsibleTrail.tsx +8 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +39 -8
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +62 -2
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +24 -4
  6. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +105 -66
  7. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +29 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +83 -5
  9. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +3 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  11. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1100 -1
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +1 -1
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +5 -2
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +3 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi_select_all.jsx +82 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi_select_all.md +3 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +3 -1
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators.jsx +67 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators.md +7 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators_rails.html.erb +78 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators_rails.md +3 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.jsx +177 -58
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.json +17 -2
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.overrides.json +8 -1
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_group_separators.json +328 -0
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -0
  29. data/app/pb_kits/playbook/pb_advanced_table/index.js +39 -2
  30. data/app/pb_kits/playbook/pb_advanced_table/kit.schema.json +44 -16
  31. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +2 -2
  32. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +53 -23
  33. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +1 -1
  34. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +1 -1
  35. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
  36. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +3 -1
  37. data/app/pb_kits/playbook/pb_avatar/kit.schema.json +23 -10
  38. data/app/pb_kits/playbook/pb_background/docs/_playground.json +1 -0
  39. data/app/pb_kits/playbook/pb_background/kit.schema.json +10 -3
  40. data/app/pb_kits/playbook/pb_badge/docs/_playground.json +2 -0
  41. data/app/pb_kits/playbook/pb_badge/kit.schema.json +27 -13
  42. data/app/pb_kits/playbook/pb_body/docs/_playground.json +3 -3
  43. data/app/pb_kits/playbook/pb_body/kit.schema.json +14 -5
  44. data/app/pb_kits/playbook/pb_button/_button.tsx +3 -1
  45. data/app/pb_kits/playbook/pb_button/button.rb +3 -0
  46. data/app/pb_kits/playbook/pb_button/button.test.js +154 -0
  47. data/app/pb_kits/playbook/pb_button/docs/_button_options_rails.md +5 -0
  48. data/app/pb_kits/playbook/pb_button/docs/_button_options_react.md +9 -0
  49. data/app/pb_kits/playbook/pb_button/docs/_playground.json +4 -2
  50. data/app/pb_kits/playbook/pb_button/docs/_playground.overrides.json +1 -1
  51. data/app/pb_kits/playbook/pb_button/docs/example.yml +1 -1
  52. data/app/pb_kits/playbook/pb_button/kit.schema.json +31 -27
  53. data/app/pb_kits/playbook/pb_caption/kit.schema.json +17 -7
  54. data/app/pb_kits/playbook/pb_card/docs/_playground.json +1 -0
  55. data/app/pb_kits/playbook/pb_card/kit.schema.json +2 -1
  56. data/app/pb_kits/playbook/pb_checkbox/docs/_playground.json +6 -1
  57. data/app/pb_kits/playbook/pb_checkbox/kit.schema.json +10 -5
  58. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +4 -4
  59. data/app/pb_kits/playbook/pb_collapsible/collapsible.test.js +81 -2
  60. data/app/pb_kits/playbook/pb_contact/_contact.tsx +4 -1
  61. data/app/pb_kits/playbook/pb_contact/docs/_playground.json +1 -0
  62. data/app/pb_kits/playbook/pb_contact/kit.schema.json +3 -1
  63. data/app/pb_kits/playbook/pb_copy_button/docs/_playground.json +5 -1
  64. data/app/pb_kits/playbook/pb_copy_button/kit.schema.json +10 -5
  65. data/app/pb_kits/playbook/pb_currency/docs/_playground.json +1 -1
  66. data/app/pb_kits/playbook/pb_currency/kit.schema.json +6 -2
  67. data/app/pb_kits/playbook/pb_dashboard_value/docs/_playground.json +2 -2
  68. data/app/pb_kits/playbook/pb_dashboard_value/kit.schema.json +4 -2
  69. data/app/pb_kits/playbook/pb_date/_date.tsx +3 -1
  70. data/app/pb_kits/playbook/pb_date/date.test.js +1 -1
  71. data/app/pb_kits/playbook/pb_date/docs/_playground.json +1 -0
  72. data/app/pb_kits/playbook/pb_date/kit.schema.json +17 -7
  73. data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +4 -0
  74. data/app/pb_kits/playbook/pb_date_picker/docs/_playground.json +4 -1
  75. data/app/pb_kits/playbook/pb_date_picker/kit.schema.json +32 -14
  76. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +3 -1
  77. data/app/pb_kits/playbook/pb_date_range_inline/docs/_playground.json +1 -0
  78. data/app/pb_kits/playbook/pb_date_range_inline/kit.schema.json +3 -1
  79. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -1
  80. data/app/pb_kits/playbook/pb_date_range_stacked/kit.schema.json +1 -0
  81. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +4 -1
  82. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +1 -0
  83. data/app/pb_kits/playbook/pb_date_stacked/kit.schema.json +1 -0
  84. data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +3 -1
  85. data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -0
  86. data/app/pb_kits/playbook/pb_date_time/docs/_playground.json +2 -1
  87. data/app/pb_kits/playbook/pb_date_time/kit.schema.json +3 -1
  88. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -1
  89. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_playground.json +1 -0
  90. data/app/pb_kits/playbook/pb_date_time_stacked/kit.schema.json +3 -1
  91. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +3 -1
  92. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -0
  93. data/app/pb_kits/playbook/pb_date_year_stacked/kit.schema.json +1 -0
  94. data/app/pb_kits/playbook/pb_detail/docs/_playground.json +2 -1
  95. data/app/pb_kits/playbook/pb_detail/kit.schema.json +2 -1
  96. data/app/pb_kits/playbook/pb_dialog/docs/_playground.json +1 -1
  97. data/app/pb_kits/playbook/pb_dialog/kit.schema.json +22 -9
  98. data/app/pb_kits/playbook/pb_distribution_bar/docs/_playground.json +2 -2
  99. data/app/pb_kits/playbook/pb_distribution_bar/kit.schema.json +2 -1
  100. data/app/pb_kits/playbook/pb_draggable/utilities/touchDrag.ts +10 -0
  101. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +112 -0
  102. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +121 -15
  103. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills.html.erb +51 -0
  104. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills.jsx +62 -0
  105. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills_rails.md +9 -0
  106. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills_react.md +9 -0
  107. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_form.jsx +50 -0
  108. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_form_react.md +9 -0
  109. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation.html.erb +16 -0
  110. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation.jsx +27 -0
  111. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation_rails.md +9 -0
  112. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation_react.md +9 -0
  113. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.json +39 -3
  114. data/app/pb_kits/playbook/pb_dropdown/docs/_playground.overrides.json +13 -2
  115. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +5 -0
  116. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +4 -1
  117. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +2 -2
  118. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +24 -1
  119. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +235 -1
  120. data/app/pb_kits/playbook/pb_dropdown/dropdown_creation.test.jsx +414 -0
  121. data/app/pb_kits/playbook/pb_dropdown/dropdown_form.test.jsx +173 -0
  122. data/app/pb_kits/playbook/pb_dropdown/dropdown_index.test.js +545 -0
  123. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +22 -5
  124. data/app/pb_kits/playbook/pb_dropdown/index.js +260 -37
  125. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +3 -1
  126. data/app/pb_kits/playbook/pb_dropdown/kit.schema.json +59 -9
  127. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +43 -25
  128. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownFormFields.tsx +83 -0
  129. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +13 -5
  130. data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +336 -31
  131. data/app/pb_kits/playbook/pb_dropdown/utilities/optionCreation.ts +21 -0
  132. data/app/pb_kits/playbook/pb_dropdown/utilities/pillReorder.js +281 -0
  133. data/app/pb_kits/playbook/pb_dropdown/utilities/quickpickDateSync.test.ts +24 -0
  134. data/app/pb_kits/playbook/pb_dropdown/utilities/usePillDropIndicator.ts +144 -0
  135. data/app/pb_kits/playbook/pb_empty_state/docs/_playground.json +1 -1
  136. data/app/pb_kits/playbook/pb_empty_state/kit.schema.json +2 -1
  137. data/app/pb_kits/playbook/pb_file_upload/docs/_playground.json +3 -2
  138. data/app/pb_kits/playbook/pb_file_upload/kit.schema.json +8 -3
  139. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +8 -1
  140. data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.html.erb +38 -0
  141. data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.jsx +69 -0
  142. data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.md +1 -0
  143. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  144. data/app/pb_kits/playbook/pb_filter/docs/index.js +2 -1
  145. data/app/pb_kits/playbook/pb_filter/filter.html.erb +4 -4
  146. data/app/pb_kits/playbook/pb_filter/filter.rb +28 -0
  147. data/app/pb_kits/playbook/pb_filter/filter.test.js +41 -0
  148. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.json +4 -4
  149. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -2
  150. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/kit.schema.json +6 -3
  151. data/app/pb_kits/playbook/pb_flex/docs/_playground.json +3 -0
  152. data/app/pb_kits/playbook/pb_flex/kit.schema.json +27 -12
  153. data/app/pb_kits/playbook/pb_form/docs/_description_react.md +3 -0
  154. data/app/pb_kits/playbook/pb_form/docs/_form_default_values.jsx +898 -0
  155. data/app/pb_kits/playbook/pb_form/docs/_form_default_values_react.md +3 -0
  156. data/app/pb_kits/playbook/pb_form/docs/_form_defaults.jsx +879 -0
  157. data/app/pb_kits/playbook/pb_form/docs/_form_defaults_react.md +29 -0
  158. data/app/pb_kits/playbook/pb_form/docs/_form_loading.jsx +75 -0
  159. data/app/pb_kits/playbook/pb_form/docs/{_form_loading.md → _form_loading_rails.md} +1 -0
  160. data/app/pb_kits/playbook/pb_form/docs/_form_loading_react.md +1 -0
  161. data/app/pb_kits/playbook/pb_form/docs/_form_model_values.jsx +147 -0
  162. data/app/pb_kits/playbook/pb_form/docs/_form_model_values_react.md +16 -0
  163. data/app/pb_kits/playbook/pb_form/docs/_form_multi_column.jsx +164 -0
  164. data/app/pb_kits/playbook/pb_form/docs/_form_multi_column_react.md +3 -0
  165. data/app/pb_kits/playbook/pb_form/docs/_form_validation.jsx +1057 -0
  166. data/app/pb_kits/playbook/pb_form/docs/_form_validation_react.md +26 -0
  167. data/app/pb_kits/playbook/pb_form/docs/example.yml +7 -0
  168. data/app/pb_kits/playbook/pb_form/form.rb +1 -1
  169. data/app/pb_kits/playbook/pb_form/kit.schema.json +1 -6
  170. data/app/pb_kits/playbook/pb_form/pb_form_validation.js +1 -0
  171. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -4
  172. data/app/pb_kits/playbook/pb_form_pill/docs/_playground.json +3 -0
  173. data/app/pb_kits/playbook/pb_form_pill/kit.schema.json +6 -3
  174. data/app/pb_kits/playbook/pb_full_screen/_full_screen.scss +6 -0
  175. data/app/pb_kits/playbook/pb_full_screen/_full_screen.tsx +11 -2
  176. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_advanced_table_sticky_header.jsx +73 -0
  177. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_advanced_table_sticky_header.md +1 -0
  178. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.json +3 -3
  179. data/app/pb_kits/playbook/pb_full_screen/docs/example.yml +1 -0
  180. data/app/pb_kits/playbook/pb_full_screen/docs/index.js +1 -0
  181. data/app/pb_kits/playbook/pb_full_screen/full_screen.test.jsx +4 -2
  182. data/app/pb_kits/playbook/pb_full_screen/kit.schema.json +8 -4
  183. data/app/pb_kits/playbook/pb_hashtag/docs/_playground.json +2 -2
  184. data/app/pb_kits/playbook/pb_hashtag/kit.schema.json +2 -1
  185. data/app/pb_kits/playbook/pb_highlight/kit.schema.json +2 -1
  186. data/app/pb_kits/playbook/pb_icon/_icon.tsx +6 -1
  187. data/app/pb_kits/playbook/pb_icon/docs/_playground.json +2 -2
  188. data/app/pb_kits/playbook/pb_icon/kit.schema.json +31 -13
  189. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.tsx +3 -1
  190. data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.json +2 -2
  191. data/app/pb_kits/playbook/pb_icon_circle/kit.schema.json +3 -1
  192. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.json +3 -2
  193. data/app/pb_kits/playbook/pb_icon_stat_value/kit.schema.json +4 -2
  194. data/app/pb_kits/playbook/pb_image/_image.tsx +5 -3
  195. data/app/pb_kits/playbook/pb_image/docs/_playground.json +27 -27
  196. data/app/pb_kits/playbook/pb_image/kit.schema.json +57 -24
  197. data/app/pb_kits/playbook/pb_label_pill/_label_pill.tsx +3 -1
  198. data/app/pb_kits/playbook/pb_label_pill/kit.schema.json +1 -0
  199. data/app/pb_kits/playbook/pb_label_value/docs/_playground.json +2 -2
  200. data/app/pb_kits/playbook/pb_label_value/kit.schema.json +2 -1
  201. data/app/pb_kits/playbook/pb_layout/docs/_playground.json +2 -2
  202. data/app/pb_kits/playbook/pb_layout/kit.schema.json +43 -20
  203. data/app/pb_kits/playbook/pb_legend/_legend.tsx +3 -1
  204. data/app/pb_kits/playbook/pb_legend/docs/_playground.json +2 -2
  205. data/app/pb_kits/playbook/pb_legend/kit.schema.json +3 -1
  206. data/app/pb_kits/playbook/pb_lightbox/_lightbox.tsx +2 -2
  207. data/app/pb_kits/playbook/pb_lightbox/kit.schema.json +84 -0
  208. data/app/pb_kits/playbook/pb_link/docs/_playground.json +6 -3
  209. data/app/pb_kits/playbook/pb_link/kit.schema.json +14 -6
  210. data/app/pb_kits/playbook/pb_list/_list_item.tsx +6 -3
  211. data/app/pb_kits/playbook/pb_list/docs/_playground.json +2 -2
  212. data/app/pb_kits/playbook/pb_list/kit.schema.json +2 -1
  213. data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.json +0 -1
  214. data/app/pb_kits/playbook/pb_loading_inline/kit.schema.json +4 -1
  215. data/app/pb_kits/playbook/pb_map/docs/_map_default.md +22 -3
  216. data/app/pb_kits/playbook/pb_map/kit.schema.json +4 -6
  217. data/app/pb_kits/playbook/pb_message/kit.schema.json +2 -1
  218. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +4 -1
  219. data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.json +2 -1
  220. data/app/pb_kits/playbook/pb_multiple_users/kit.schema.json +19 -11
  221. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.json +1 -0
  222. data/app/pb_kits/playbook/pb_multiple_users_stacked/kit.schema.json +2 -1
  223. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +17 -0
  224. data/app/pb_kits/playbook/pb_nav/docs/_playground.json +2 -0
  225. data/app/pb_kits/playbook/pb_nav/kit.schema.json +4 -2
  226. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +3 -1
  227. data/app/pb_kits/playbook/pb_online_status/kit.schema.json +1 -0
  228. data/app/pb_kits/playbook/pb_overlay/docs/_playground.json +3 -3
  229. data/app/pb_kits/playbook/pb_overlay/kit.schema.json +22 -12
  230. data/app/pb_kits/playbook/pb_pagination/kit.schema.json +6 -3
  231. data/app/pb_kits/playbook/pb_passphrase/docs/_playground.json +6 -4
  232. data/app/pb_kits/playbook/pb_passphrase/kit.schema.json +10 -5
  233. data/app/pb_kits/playbook/pb_pb_bar_graph/pbbargraph.test.jsx +1 -2
  234. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +1 -2
  235. data/app/pb_kits/playbook/pb_pb_gauge_chart/kit.schema.json +2 -1
  236. data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.test.jsx +1 -2
  237. data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.test.jsx +1 -2
  238. data/app/pb_kits/playbook/pb_person/_person.tsx +3 -1
  239. data/app/pb_kits/playbook/pb_person/kit.schema.json +1 -0
  240. data/app/pb_kits/playbook/pb_person_contact/docs/_playground.json +3 -3
  241. data/app/pb_kits/playbook/pb_person_contact/kit.schema.json +2 -1
  242. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +3 -7
  243. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.html.erb +1 -1
  244. data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.json +3 -0
  245. data/app/pb_kits/playbook/pb_phone_number_input/img/flags.webp +0 -0
  246. data/app/pb_kits/playbook/pb_phone_number_input/img/flags@2x.webp +0 -0
  247. data/app/pb_kits/playbook/pb_phone_number_input/img/globe.webp +0 -0
  248. data/app/pb_kits/playbook/pb_phone_number_input/img/globe@2x.webp +0 -0
  249. data/app/pb_kits/playbook/pb_phone_number_input/intlTelInput.scss +13 -6
  250. data/app/pb_kits/playbook/pb_phone_number_input/kit.schema.json +6 -3
  251. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input_assets.test.js +61 -0
  252. data/app/pb_kits/playbook/pb_pill/_pill.tsx +3 -1
  253. data/app/pb_kits/playbook/pb_pill/kit.schema.json +1 -0
  254. data/app/pb_kits/playbook/pb_popover/docs/_playground.json +1 -2
  255. data/app/pb_kits/playbook/pb_popover/index.ts +47 -8
  256. data/app/pb_kits/playbook/pb_popover/kit.schema.json +18 -9
  257. data/app/pb_kits/playbook/pb_popover/popover_index.test.js +456 -0
  258. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.json +1 -0
  259. data/app/pb_kits/playbook/pb_progress_pills/kit.schema.json +2 -1
  260. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.json +3 -2
  261. data/app/pb_kits/playbook/pb_progress_simple/kit.schema.json +4 -2
  262. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.tsx +3 -1
  263. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.json +10 -3
  264. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.overrides.json +1 -1
  265. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_required_indicator.md +2 -2
  266. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_default.md +3 -4
  267. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_extensions.md +1 -1
  268. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_markdown_support.md +1 -1
  269. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_required_indicator.html.erb +9 -0
  270. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_required_indicator.md +3 -0
  271. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +1 -0
  272. data/app/pb_kits/playbook/pb_rich_text_editor/kit.schema.json +18 -9
  273. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.html.erb +3 -7
  274. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor_rails.js +26 -21
  275. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor_rails.test.js +85 -1
  276. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.json +1 -0
  277. data/app/pb_kits/playbook/pb_selectable_card/kit.schema.json +4 -2
  278. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +0 -9
  279. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.json +1 -0
  280. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_selectable_card_icon_custom.jsx +1 -1
  281. data/app/pb_kits/playbook/pb_selectable_card_icon/kit.schema.json +2 -1
  282. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +0 -7
  283. data/app/pb_kits/playbook/pb_source/_source.tsx +3 -1
  284. data/app/pb_kits/playbook/pb_source/docs/_playground.json +1 -0
  285. data/app/pb_kits/playbook/pb_source/kit.schema.json +3 -1
  286. data/app/pb_kits/playbook/pb_source/source.rb +1 -1
  287. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.json +1 -0
  288. data/app/pb_kits/playbook/pb_star_rating/kit.schema.json +15 -7
  289. data/app/pb_kits/playbook/pb_stat_change/_stat_change.tsx +3 -1
  290. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.json +1 -0
  291. data/app/pb_kits/playbook/pb_stat_change/kit.schema.json +3 -1
  292. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.json +3 -1
  293. data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +2 -1
  294. data/app/pb_kits/playbook/pb_table/docs/_playground.json +5 -1
  295. data/app/pb_kits/playbook/pb_table/kit.schema.json +28 -11
  296. data/app/pb_kits/playbook/pb_text_input/docs/_playground.json +3 -0
  297. data/app/pb_kits/playbook/pb_text_input/kit.schema.json +22 -9
  298. data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +4 -1
  299. data/app/pb_kits/playbook/pb_time/kit.schema.json +13 -5
  300. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.json +1 -0
  301. data/app/pb_kits/playbook/pb_time_picker/kit.schema.json +2 -1
  302. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +3 -1
  303. data/app/pb_kits/playbook/pb_time_range_inline/kit.schema.json +13 -5
  304. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +3 -1
  305. data/app/pb_kits/playbook/pb_time_stacked/kit.schema.json +1 -0
  306. data/app/pb_kits/playbook/pb_timeline/_item.tsx +3 -1
  307. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +3 -1
  308. data/app/pb_kits/playbook/pb_timestamp/kit.schema.json +1 -0
  309. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +1 -0
  310. data/app/pb_kits/playbook/pb_title/kit.schema.json +23 -10
  311. data/app/pb_kits/playbook/pb_title_count/docs/_playground.json +1 -0
  312. data/app/pb_kits/playbook/pb_title_count/kit.schema.json +2 -1
  313. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.json +5 -1
  314. data/app/pb_kits/playbook/pb_tooltip/kit.schema.json +10 -5
  315. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +73 -0
  316. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +285 -12
  317. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +22 -14
  318. data/app/pb_kits/playbook/pb_typeahead/components/PillRenderer.tsx +15 -11
  319. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +29 -30
  320. data/app/pb_kits/playbook/pb_typeahead/components/usePillDropIndicator.ts +155 -0
  321. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.json +5 -5
  322. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.overrides.json +2 -2
  323. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.html.erb +0 -1
  324. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.jsx +0 -1
  325. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills_rails.md +3 -3
  326. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills_react.md +7 -0
  327. data/app/pb_kits/playbook/pb_typeahead/kit.schema.json +3 -3
  328. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -3
  329. data/app/pb_kits/playbook/pb_user/_user.tsx +3 -1
  330. data/app/pb_kits/playbook/pb_user/docs/_playground.json +3 -1
  331. data/app/pb_kits/playbook/pb_user/kit.schema.json +20 -9
  332. data/app/pb_kits/playbook/pb_user_badge/_user_badge.tsx +3 -1
  333. data/app/pb_kits/playbook/pb_user_badge/kit.schema.json +1 -0
  334. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +3 -1
  335. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.json +1 -0
  336. data/app/pb_kits/playbook/pb_weekday_stacked/kit.schema.json +3 -1
  337. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +1 -0
  338. data/app/pb_kits/playbook/utilities/test/globalProps/onClick.test.js +471 -0
  339. data/app/pb_kits/playbook/utilities/test-utils.js +0 -1
  340. data/dist/ai/all-schemas.json +986 -388
  341. data/dist/ai/external-dependencies.json +1 -1
  342. data/dist/ai/forms.json +2 -2
  343. data/dist/ai/index.json +11 -3
  344. data/dist/ai/kits/advanced_table.schema.json +44 -16
  345. data/dist/ai/kits/avatar.schema.json +22 -9
  346. data/dist/ai/kits/background.schema.json +10 -3
  347. data/dist/ai/kits/badge.schema.json +26 -12
  348. data/dist/ai/kits/body.schema.json +14 -5
  349. data/dist/ai/kits/button.schema.json +29 -25
  350. data/dist/ai/kits/caption.schema.json +17 -7
  351. data/dist/ai/kits/card.schema.json +2 -1
  352. data/dist/ai/kits/checkbox.schema.json +10 -5
  353. data/dist/ai/kits/contact.schema.json +3 -1
  354. data/dist/ai/kits/copy_button.schema.json +10 -5
  355. data/dist/ai/kits/currency.schema.json +6 -2
  356. data/dist/ai/kits/dashboard_value.schema.json +4 -2
  357. data/dist/ai/kits/date.schema.json +16 -6
  358. data/dist/ai/kits/date_picker.schema.json +31 -13
  359. data/dist/ai/kits/date_range_inline.schema.json +3 -1
  360. data/dist/ai/kits/date_range_stacked.schema.json +1 -0
  361. data/dist/ai/kits/date_stacked.schema.json +1 -0
  362. data/dist/ai/kits/date_time.schema.json +3 -1
  363. data/dist/ai/kits/date_time_stacked.schema.json +3 -1
  364. data/dist/ai/kits/date_year_stacked.schema.json +1 -0
  365. data/dist/ai/kits/detail.schema.json +2 -1
  366. data/dist/ai/kits/dialog.schema.json +22 -9
  367. data/dist/ai/kits/distribution_bar.schema.json +2 -1
  368. data/dist/ai/kits/dropdown.schema.json +98 -18
  369. data/dist/ai/kits/empty_state.schema.json +2 -1
  370. data/dist/ai/kits/file_upload.schema.json +8 -3
  371. data/dist/ai/kits/fixed_confirmation_toast.schema.json +6 -3
  372. data/dist/ai/kits/flex.schema.json +27 -12
  373. data/dist/ai/kits/form.schema.json +1 -6
  374. data/dist/ai/kits/form_pill.schema.json +6 -3
  375. data/dist/ai/kits/full_screen.schema.json +8 -4
  376. data/dist/ai/kits/hashtag.schema.json +2 -1
  377. data/dist/ai/kits/highlight.schema.json +2 -1
  378. data/dist/ai/kits/icon.schema.json +31 -13
  379. data/dist/ai/kits/icon_circle.schema.json +3 -1
  380. data/dist/ai/kits/icon_stat_value.schema.json +4 -2
  381. data/dist/ai/kits/image.schema.json +57 -24
  382. data/dist/ai/kits/label_pill.schema.json +1 -0
  383. data/dist/ai/kits/label_value.schema.json +2 -1
  384. data/dist/ai/kits/layout.schema.json +43 -20
  385. data/dist/ai/kits/legend.schema.json +3 -1
  386. data/dist/ai/kits/lightbox.schema.json +86 -0
  387. data/dist/ai/kits/link.schema.json +14 -6
  388. data/dist/ai/kits/list.schema.json +2 -1
  389. data/dist/ai/kits/loading_inline.schema.json +4 -1
  390. data/dist/ai/kits/map.schema.json +4 -7
  391. data/dist/ai/kits/message.schema.json +2 -1
  392. data/dist/ai/kits/multiple_users.schema.json +19 -11
  393. data/dist/ai/kits/multiple_users_stacked.schema.json +2 -1
  394. data/dist/ai/kits/nav.schema.json +4 -2
  395. data/dist/ai/kits/online_status.schema.json +1 -0
  396. data/dist/ai/kits/overlay.schema.json +22 -12
  397. data/dist/ai/kits/pagination.schema.json +6 -3
  398. data/dist/ai/kits/passphrase.schema.json +10 -5
  399. data/dist/ai/kits/pb_gauge_chart.schema.json +2 -1
  400. data/dist/ai/kits/person.schema.json +1 -0
  401. data/dist/ai/kits/person_contact.schema.json +2 -1
  402. data/dist/ai/kits/phone_number_input.schema.json +6 -3
  403. data/dist/ai/kits/pill.schema.json +1 -0
  404. data/dist/ai/kits/popover.schema.json +17 -8
  405. data/dist/ai/kits/progress_pills.schema.json +2 -1
  406. data/dist/ai/kits/progress_simple.schema.json +4 -2
  407. data/dist/ai/kits/rich_text_editor.schema.json +19 -10
  408. data/dist/ai/kits/selectable_card.schema.json +4 -2
  409. data/dist/ai/kits/selectable_card_icon.schema.json +2 -1
  410. data/dist/ai/kits/source.schema.json +3 -1
  411. data/dist/ai/kits/star_rating.schema.json +15 -7
  412. data/dist/ai/kits/stat_change.schema.json +3 -1
  413. data/dist/ai/kits/stat_value.schema.json +2 -1
  414. data/dist/ai/kits/table.schema.json +28 -11
  415. data/dist/ai/kits/text_input.schema.json +22 -9
  416. data/dist/ai/kits/time.schema.json +12 -4
  417. data/dist/ai/kits/time_picker.schema.json +2 -1
  418. data/dist/ai/kits/time_range_inline.schema.json +13 -5
  419. data/dist/ai/kits/time_stacked.schema.json +1 -0
  420. data/dist/ai/kits/timestamp.schema.json +1 -0
  421. data/dist/ai/kits/title.schema.json +23 -10
  422. data/dist/ai/kits/title_count.schema.json +2 -1
  423. data/dist/ai/kits/tooltip.schema.json +10 -5
  424. data/dist/ai/kits/typeahead.schema.json +3 -3
  425. data/dist/ai/kits/user.schema.json +20 -9
  426. data/dist/ai/kits/user_badge.schema.json +1 -0
  427. data/dist/ai/kits/weekday_stacked.schema.json +3 -1
  428. data/dist/ai/playgrounds/advanced_table.json +1 -1
  429. data/dist/ai/playgrounds/dropdown.json +1 -1
  430. data/dist/ai/playgrounds/index.json +1 -1
  431. data/dist/ai/playgrounds/rich_text_editor.json +1 -1
  432. data/dist/ai/playgrounds/typeahead.json +1 -1
  433. data/dist/ai/visual-index.json +1 -1
  434. data/dist/chunks/_pagination-DZ0eQuH2.js +1 -0
  435. data/dist/chunks/{_pb_line_graph-Du7xE9vl.js → _pb_line_graph-DyvH5Zj1.js} +1 -1
  436. data/dist/chunks/{_detail-Bsvl694i.js → _tooltip-CFbtqu-E.js} +2 -2
  437. data/dist/chunks/_typeahead-CkiAf8zx.js +1 -0
  438. data/dist/chunks/{globalProps-B120NbSJ.js → globalProps-xfGTpdLP.js} +1 -1
  439. data/dist/chunks/index-4jrZjexD.js +1 -0
  440. data/dist/chunks/index-BAy61y8S.js +1 -0
  441. data/dist/chunks/index-Cb_SDipk.js +1 -0
  442. data/dist/chunks/index-D3RdsDp7.js +1 -0
  443. data/dist/chunks/index-D8PZIesy.js +1 -0
  444. data/dist/chunks/index-DIoc-aua.js +1 -0
  445. data/dist/chunks/index-qex65UMn.js +1 -0
  446. data/dist/chunks/lib-Cu_i0y0k.js +29 -0
  447. data/dist/chunks/{time_picker_helper-CYGg0UQ0.js → time_picker_helper-B82MORju.js} +1 -1
  448. data/dist/chunks/vendor.js +2 -2
  449. data/dist/menu.yml +3 -3
  450. data/dist/playbook-rails-react-bindings.js +1 -1
  451. data/dist/playbook-rails.js +1 -1
  452. data/dist/playbook.css +1 -1
  453. data/lib/playbook/changelog_generator.rb +47 -21
  454. data/lib/playbook/connect_message_generator.rb +15 -2
  455. data/lib/playbook/version.rb +2 -2
  456. metadata +99 -23
  457. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.md +0 -7
  458. data/dist/chunks/_table-Bf6LGyL9.js +0 -1
  459. data/dist/chunks/_typeahead-w6S5Vx4b.js +0 -1
  460. data/dist/chunks/lib-Buo6zHEw.js +0 -29
  461. /data/app/pb_kits/playbook/pb_form/docs/{_description.md → _description_rails.md} +0 -0
  462. /data/app/pb_kits/playbook/pb_form/docs/{_form_default_values.md → _form_default_values_rails.md} +0 -0
  463. /data/app/pb_kits/playbook/pb_form/docs/{_form_defaults.md → _form_defaults_rails.md} +0 -0
  464. /data/app/pb_kits/playbook/pb_form/docs/{_form_model_values.md → _form_model_values_rails.md} +0 -0
  465. /data/app/pb_kits/playbook/pb_form/docs/{_form_multi_column.md → _form_multi_column_rails.md} +0 -0
  466. /data/app/pb_kits/playbook/pb_form/docs/{_form_validation.md → _form_validation_rails.md} +0 -0
@@ -11,7 +11,8 @@
11
11
  "type": "boolean",
12
12
  "platforms": [
13
13
  "react"
14
- ]
14
+ ],
15
+ "default": false
15
16
  },
16
17
  "disabled": {
17
18
  "type": "boolean",
@@ -64,12 +65,22 @@
64
65
  "react",
65
66
  "rails"
66
67
  ],
67
- "values": [
68
- "currency",
69
- "zipCode",
70
- "postalCode",
71
- "ssn"
72
- ],
68
+ "values": {
69
+ "react": [
70
+ "currency",
71
+ "zipCode",
72
+ "postalCode",
73
+ "ssn"
74
+ ],
75
+ "rails": [
76
+ "currency",
77
+ "zip_code",
78
+ "postal_code",
79
+ "ssn",
80
+ "credit_card",
81
+ "cvv"
82
+ ]
83
+ },
73
84
  "default": null
74
85
  },
75
86
  "onChange": {
@@ -114,7 +125,8 @@
114
125
  "platforms": [
115
126
  "react",
116
127
  "rails"
117
- ]
128
+ ],
129
+ "default": ""
118
130
  },
119
131
  "addOn": {
120
132
  "type": {
@@ -130,7 +142,8 @@
130
142
  "type": "boolean | string",
131
143
  "platforms": [
132
144
  "react"
133
- ]
145
+ ],
146
+ "default": true
134
147
  },
135
148
  "autocomplete": {
136
149
  "platforms": [
@@ -46,10 +46,18 @@
46
46
  "react",
47
47
  "rails"
48
48
  ],
49
- "values": [
50
- "md",
51
- "sm"
52
- ],
49
+ "values": {
50
+ "react": [
51
+ "md",
52
+ "sm"
53
+ ],
54
+ "rails": [
55
+ "xs",
56
+ "sm",
57
+ "md",
58
+ "lg"
59
+ ]
60
+ },
53
61
  "default": "sm"
54
62
  },
55
63
  "showTimezone": {
@@ -42,7 +42,8 @@
42
42
  "platforms": [
43
43
  "react",
44
44
  "rails"
45
- ]
45
+ ],
46
+ "default": {}
46
47
  },
47
48
  "label": {
48
49
  "type": "string",
@@ -13,11 +13,18 @@
13
13
  "react",
14
14
  "rails"
15
15
  ],
16
- "values": [
17
- "left",
18
- "center",
19
- "vertical"
20
- ],
16
+ "values": {
17
+ "react": [
18
+ "left",
19
+ "center",
20
+ "vertical"
21
+ ],
22
+ "rails": [
23
+ "left",
24
+ "center",
25
+ "right"
26
+ ]
27
+ },
21
28
  "default": "left"
22
29
  },
23
30
  "size": {
@@ -72,6 +79,7 @@
72
79
  }
73
80
  },
74
81
  "globalProps": true,
82
+ "globalEventProps": true,
75
83
  "usage": {
76
84
  "react": {
77
85
  "import": "import { TimeRangeInline } from 'playbook-ui'",
@@ -53,6 +53,7 @@
53
53
  }
54
54
  },
55
55
  "globalProps": true,
56
+ "globalEventProps": true,
56
57
  "usage": {
57
58
  "react": {
58
59
  "import": "import { TimeStacked } from 'playbook-ui'",
@@ -121,6 +121,7 @@
121
121
  }
122
122
  },
123
123
  "globalProps": true,
124
+ "globalEventProps": true,
124
125
  "usage": {
125
126
  "react": {
126
127
  "import": "import { Timestamp } from 'playbook-ui'",
@@ -61,16 +61,29 @@
61
61
  "react",
62
62
  "rails"
63
63
  ],
64
- "values": [
65
- "h1",
66
- "h2",
67
- "h3",
68
- "h4",
69
- "h5",
70
- "h6",
71
- "div",
72
- "span"
73
- ],
64
+ "values": {
65
+ "react": [
66
+ "h1",
67
+ "h2",
68
+ "h3",
69
+ "h4",
70
+ "h5",
71
+ "h6",
72
+ "div",
73
+ "span"
74
+ ],
75
+ "rails": [
76
+ "h1",
77
+ "h2",
78
+ "h3",
79
+ "h4",
80
+ "h5",
81
+ "h6",
82
+ "p",
83
+ "div",
84
+ "span"
85
+ ]
86
+ },
74
87
  "default": "h3"
75
88
  },
76
89
  "text": {
@@ -31,7 +31,8 @@
31
31
  "type": "boolean",
32
32
  "platforms": [
33
33
  "react"
34
- ]
34
+ ],
35
+ "default": false
35
36
  },
36
37
  "title": {
37
38
  "type": "string",
@@ -19,7 +19,8 @@
19
19
  "type": "number | Partial<{open: number; close: number}>",
20
20
  "platforms": [
21
21
  "react"
22
- ]
22
+ ],
23
+ "default": 0
23
24
  },
24
25
  "height": {
25
26
  "type": "string",
@@ -32,7 +33,8 @@
32
33
  "type": "string",
33
34
  "platforms": [
34
35
  "react"
35
- ]
36
+ ],
37
+ "default": null
36
38
  },
37
39
  "interaction": {
38
40
  "type": "boolean",
@@ -85,7 +87,8 @@
85
87
  "values": [
86
88
  "absolute",
87
89
  "fixed"
88
- ]
90
+ ],
91
+ "default": "absolute"
89
92
  },
90
93
  "text": {
91
94
  "type": "string",
@@ -104,13 +107,15 @@
104
107
  "type": "boolean",
105
108
  "platforms": [
106
109
  "react"
107
- ]
110
+ ],
111
+ "default": true
108
112
  },
109
113
  "forceOpenTooltip": {
110
114
  "type": "boolean",
111
115
  "platforms": [
112
116
  "react"
113
- ]
117
+ ],
118
+ "default": false
114
119
  },
115
120
  "dark": {
116
121
  "platforms": [
@@ -222,7 +222,7 @@
222
222
  ],
223
223
  "default": false
224
224
  },
225
- "showPillIndex": {
225
+ "externalDragHandle": {
226
226
  "type": "boolean",
227
227
  "platforms": [
228
228
  "react",
@@ -230,13 +230,13 @@
230
230
  ],
231
231
  "default": false
232
232
  },
233
- "pillDragHandle": {
233
+ "showPillIndex": {
234
234
  "type": "boolean",
235
235
  "platforms": [
236
236
  "react",
237
237
  "rails"
238
238
  ],
239
- "default": true
239
+ "default": false
240
240
  },
241
241
  "styles": {
242
242
  "type": "TypeaheadStylesConfig",
@@ -47,7 +47,8 @@
47
47
  "type": "boolean",
48
48
  "platforms": [
49
49
  "react"
50
- ]
50
+ ],
51
+ "default": false
51
52
  },
52
53
  "avatarGrayscale": {
53
54
  "type": "boolean",
@@ -115,14 +116,16 @@
115
116
  "platforms": [
116
117
  "react",
117
118
  "rails"
118
- ]
119
+ ],
120
+ "default": ""
119
121
  },
120
122
  "title": {
121
123
  "type": "string",
122
124
  "platforms": [
123
125
  "react",
124
126
  "rails"
125
- ]
127
+ ],
128
+ "default": ""
126
129
  },
127
130
  "titleStyle": {
128
131
  "type": "enum",
@@ -130,16 +133,24 @@
130
133
  "react",
131
134
  "rails"
132
135
  ],
133
- "values": [
134
- "title",
135
- "body",
136
- "caption",
137
- "detail"
138
- ],
136
+ "values": {
137
+ "react": [
138
+ "title",
139
+ "body",
140
+ "caption",
141
+ "detail"
142
+ ],
143
+ "rails": [
144
+ "body",
145
+ "caption",
146
+ "detail"
147
+ ]
148
+ },
139
149
  "default": "body"
140
150
  }
141
151
  },
142
152
  "globalProps": true,
153
+ "globalEventProps": true,
143
154
  "usage": {
144
155
  "react": {
145
156
  "import": "import { User } from 'playbook-ui'",
@@ -34,6 +34,7 @@
34
34
  }
35
35
  },
36
36
  "globalProps": true,
37
+ "globalEventProps": true,
37
38
  "usage": {
38
39
  "react": {
39
40
  "import": "import { UserBadge } from 'playbook-ui'",
@@ -24,7 +24,8 @@
24
24
  "type": "boolean",
25
25
  "platforms": [
26
26
  "react"
27
- ]
27
+ ],
28
+ "default": false
28
29
  },
29
30
  "date": {
30
31
  "type": "Date",
@@ -56,6 +57,7 @@
56
57
  }
57
58
  },
58
59
  "globalProps": true,
60
+ "globalEventProps": true,
59
61
  "usage": {
60
62
  "react": {
61
63
  "import": "import { WeekdayStacked } from 'playbook-ui'",
@@ -1 +1 @@
1
- {"presets":[{"name":"Default","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPreset":"default"},{"name":"With Sorting","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"enableSorting":true},"dataPreset":"default"},{"name":"Selectable Rows","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"selectableRows":true,"showActionsBar":true}},{"name":"Subrow Headers","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"subRowHeaders":["Quarter","Month","Day"]},"dataPreset":"default"},{"name":"Loading State","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"loading":true,"initialLoadingRowsCount":5},"dataPreset":"default"},{"name":"Sorting by Column","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"enableSorting":true},"dataPreset":"column_sort"},{"name":"Column Styling","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPreset":"column_styling"}],"hints":{"advanced_table_import":{"when":{},"message":"AdvancedTable is imported from playbook-ui/advanced-table so apps can keep TanStack out of the main playbook-ui bundle until this kit is used.","type":"info"},"sorting_info":{"when":{"enableSortingRemoval":true},"message":"Click column headers to sort. Click again to remove sorting.","type":"info"},"header_sorting_info":{"when":{"enableSorting":true},"message":"Header sorting UI is only applied in \"Subcomponent Structure\" mode (explicit Header and Body). For sorting by column, pass columnDefinitions with enableSort: true to the columnDefinitions array. Click 'sorting by column' to see an example.","type":"info"},"selectable_info":{"when":{"selectableRows":true},"message":"Use onRowSelectionChange to handle selection changes. showActionsBar controls the action bar visibility.","type":"info"},"loading_info":{"when":{"loading":true},"message":"Use state to control the loading state.","type":"info"},"column_sort_info":{"when":{"columnDefinitions":{"enableSort":true}},"message":"For sorting by column, pass columnDefinitions with enableSort: true to the columnDefinitions array. Click 'sorting by column' to see an example.","type":"info"},"custom_sort_info":{"when":{"customSort":true},"message":"Use customSort to implement custom sorting logic. The customSort prop must be used in conjunction with the subRowHeaders prop. The customSort DOES NOT handle the sort logic, this must be handled on the frontend using the callback provided.","type":"info"},"cascade_collapse_info":{"when":{"cascadeCollapse":true},"message":"When cascadeCollapse is true, collapsing any parent row itself or by using the toggle expansion buttons in any header or subheader row also collapses all descendants and clears their expansion state. Re-expanding then shows only direct children until the user expands deeper levels again.","type":"info"},"column_styling_info":{"presetName":"Column Styling","message":"This sample uses columnStyling on column definitions. Year uses width for a fixed hierarchy column; other columns show background colors. See the Column Styling Width doc for minWidth and min/pref/max bands.","type":"info"}},"conditionals":{"initialLoadingRowsCount":{"requires":{"loading":true}},"onRowSelectionChange":{"requires":{"selectableRows":true}},"showActionsBar":{"requires":{"selectableRows":true}},"actions":{"requires":{"selectableRows":true,"showActionsBar":true}},"enableSorting":{"structureMode":"explicit"},"sortIcon":{"structureMode":"explicit","requires":{"enableSorting":true}},"collapsibleTrail":{"structureMode":"explicit"},"subRowHeaders":{"structureMode":"explicit"},"onExpandByDepthClick":{"requires":"expandByDepth"},"onCustomSortClick":{"requires":{"customSort":true}},"enableSortingRemoval":{"requires":{"enableSorting":true}},"sortControl":{"requires":{"enableSorting":true}},"customSort":{"requires":{"enableSorting":true}},"sortParentOnly":{"requires":{"enableSorting":true}}},"structureModes":{"default":"implicit","modes":{"implicit":{"label":"Default","template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}\n{{props}}\n/>","propTargets":{"collapsibleTrail":"props","subRowHeaders":"props"}},"explicit":{"label":"Subcomponent Structure","template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}{{props}}\n>\n <AdvancedTable.Header{{AdvancedTable.Header.props}} />\n <AdvancedTable.Body\n{{AdvancedTable.Body.props}}\n />\n</AdvancedTable>"}}},"template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}\n{{props}}\n/>","children":{"editable":false,"default":""},"propTargets":{"enableSorting":"AdvancedTable.Header.props","sortIcon":"AdvancedTable.Header.props","collapsibleTrail":"AdvancedTable.Body.props","subRowHeaders":"AdvancedTable.Body.props"},"externalImports":["import { AdvancedTable } from 'playbook-ui/advanced-table'"],"samples":{"description":"Tiny synthetic AdvancedTable datasets for AI codegen. Prefer these shapes over inventing column/row structures. Nested rows use a children array; cellAccessors list sub-row label fields for the first column.","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"columnDefinitionsSortable":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableDataNested":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"tableDataFlat":[{"year":"2021","newEnrollments":"20","attendanceRate":"51%"},{"year":"2022","newEnrollments":"35","attendanceRate":"64%"}]},"requiredProps":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPresets":{"note":"Full website mock datasets are not shipped. Each key maps to the tiny samples below (or samples.*).","keys":["default","flat_no_subrows","with_ids","inline_loading","grouped_headers","grouped_headers_double_nested","with_ids_standard","column_sort","column_styling"],"presets":{"default":{"label":"Default","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"flat_no_subrows":{"label":"Flat rows (no sub-rows)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","newEnrollments":"20","attendanceRate":"51%"},{"year":"2022","newEnrollments":"35","attendanceRate":"64%"}]},"with_ids":{"label":"Data with row IDs","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"inline_loading":{"label":"Inline row loading","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"grouped_headers":{"label":"Grouped headers (nested columns)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"grouped_headers_double_nested":{"label":"Grouped headers (double nested columns)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"with_ids_standard":{"label":"Column definitions with IDs","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"column_sort":{"label":"Column Definitions with Sorting","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"column_styling":{"label":"Column Styling","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]}}}}
1
+ {"presets":[{"name":"Default","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPreset":"default"},{"name":"With Sorting","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"enableSorting":true},"dataPreset":"default"},{"name":"Selectable Rows","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"selectableRows":true,"showActionsBar":true}},{"name":"Subrow Headers","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"subRowHeaders":["Quarter","Month","Day"]},"dataPreset":"default"},{"name":"Loading State","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"loading":true,"initialLoadingRowsCount":5},"dataPreset":"default"},{"name":"Sorting by Column","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"enableSorting":true},"dataPreset":"column_sort"},{"name":"Column Styling","structureMode":"explicit","props":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPreset":"column_styling"}],"hints":{"advanced_table_import":{"when":{},"message":"AdvancedTable is imported from playbook-ui/advanced-table so apps can keep TanStack out of the main playbook-ui bundle until this kit is used.","type":"info"},"sorting_info":{"when":{"enableSortingRemoval":true},"message":"Click column headers to sort. Click again to remove sorting.","type":"info"},"header_sorting_info":{"when":{"enableSorting":true},"message":"Header sorting UI is only applied in \"Subcomponent Structure\" mode (explicit Header and Body). For sorting by column, pass columnDefinitions with enableSort: true to the columnDefinitions array. Click 'sorting by column' to see an example.","type":"info"},"selectable_info":{"when":{"selectableRows":true},"message":"Use onRowSelectionChange to handle selection changes. showActionsBar controls the action bar visibility.","type":"info"},"loading_info":{"when":{"loading":true},"message":"Use state to control the loading state.","type":"info"},"column_sort_info":{"when":{"columnDefinitions":{"enableSort":true}},"message":"For sorting by column, pass columnDefinitions with enableSort: true to the columnDefinitions array. Click 'sorting by column' to see an example.","type":"info"},"custom_sort_info":{"when":{"customSort":true},"message":"Use customSort to implement custom sorting logic. The customSort prop must be used in conjunction with the subRowHeaders prop. The customSort DOES NOT handle the sort logic, this must be handled on the frontend using the callback provided.","type":"info"},"cascade_collapse_info":{"when":{"cascadeCollapse":true},"message":"When cascadeCollapse is true, collapsing any parent row itself or by using the toggle expansion buttons in any header or subheader row also collapses all descendants and clears their expansion state. Re-expanding then shows only direct children until the user expands deeper levels again.","type":"info"},"group_separators_info":{"when":{"groupSeparators":true},"message":"groupSeparators adds a 2px higher-contrast bottom border on the last visible row of each nested child group. Expand multi-level rows to see separators between sibling groups.","type":"info"},"column_styling_info":{"presetName":"Column Styling","message":"This sample uses columnStyling on column definitions. Year uses width for a fixed hierarchy column; other columns show background colors. See the Column Styling Width doc for minWidth and min/pref/max bands.","type":"info"}},"conditionals":{"initialLoadingRowsCount":{"requires":{"loading":true}},"onRowSelectionChange":{"requires":{"selectableRows":true}},"showActionsBar":{"requires":{"selectableRows":true}},"actions":{"requires":{"selectableRows":true,"showActionsBar":true}},"enableSorting":{"structureMode":"explicit"},"sortIcon":{"structureMode":"explicit","requires":{"enableSorting":true}},"collapsibleTrail":{"structureMode":"explicit"},"subRowHeaders":{"structureMode":"explicit"},"onExpandByDepthClick":{"requires":"expandByDepth"},"onCustomSortClick":{"requires":{"customSort":true}},"enableSortingRemoval":{"requires":{"enableSorting":true}},"sortControl":{"requires":{"enableSorting":true}},"customSort":{"requires":{"enableSorting":true}},"sortParentOnly":{"requires":{"enableSorting":true}}},"structureModes":{"default":"implicit","modes":{"implicit":{"label":"Default","template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}\n{{props}}\n/>","propTargets":{"collapsibleTrail":"props","subRowHeaders":"props"}},"explicit":{"label":"Subcomponent Structure","template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}{{props}}\n>\n <AdvancedTable.Header{{AdvancedTable.Header.props}} />\n <AdvancedTable.Body\n{{AdvancedTable.Body.props}}\n />\n</AdvancedTable>"}}},"template":"<AdvancedTable\n columnDefinitions={columnDefinitions}\n tableData={tableData}\n{{props}}\n/>","children":{"editable":false,"default":""},"propTargets":{"enableSorting":"AdvancedTable.Header.props","sortIcon":"AdvancedTable.Header.props","collapsibleTrail":"AdvancedTable.Body.props","subRowHeaders":"AdvancedTable.Body.props"},"externalImports":["import { AdvancedTable } from 'playbook-ui/advanced-table'"],"samples":{"description":"Tiny synthetic AdvancedTable datasets for AI codegen. Prefer these shapes over inventing column/row structures. Nested rows use a children array; cellAccessors list sub-row label fields for the first column.","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"columnDefinitionsSortable":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableDataNested":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}],"tableDataFlat":[{"year":"2021","newEnrollments":"20","attendanceRate":"51%"},{"year":"2022","newEnrollments":"35","attendanceRate":"64%"}]},"requiredProps":{"columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"dataPresets":{"note":"Full website mock datasets are not shipped. Each key maps to the tiny samples below (or samples.*).","keys":["default","flat_no_subrows","with_ids","inline_loading","grouped_headers","grouped_headers_double_nested","with_ids_standard","column_sort","column_styling"],"presets":{"default":{"label":"Default","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"flat_no_subrows":{"label":"Flat rows (no sub-rows)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","newEnrollments":"20","attendanceRate":"51%"},{"year":"2022","newEnrollments":"35","attendanceRate":"64%"}]},"with_ids":{"label":"Data with row IDs","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"inline_loading":{"label":"Inline row loading","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"grouped_headers":{"label":"Grouped headers (nested columns)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"grouped_headers_double_nested":{"label":"Grouped headers (double nested columns)","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"with_ids_standard":{"label":"Column definitions with IDs","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"column_sort":{"label":"Column Definitions with Sorting","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments","enableSort":true},{"accessor":"attendanceRate","label":"Attendance Rate","enableSort":true}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]},"column_styling":{"label":"Column Styling","columnDefinitions":[{"accessor":"year","label":"Year","cellAccessors":["quarter","month"]},{"accessor":"newEnrollments","label":"New Enrollments"},{"accessor":"attendanceRate","label":"Attendance Rate"}],"tableData":[{"year":"2021","quarter":null,"month":null,"newEnrollments":"20","attendanceRate":"51%","children":[{"year":"2021","quarter":"Q1","month":null,"newEnrollments":"2","attendanceRate":"32%","children":[{"year":"2021","quarter":"Q1","month":"January","newEnrollments":"16","attendanceRate":"11%"}]}]},{"year":"2022","quarter":null,"month":null,"newEnrollments":"35","attendanceRate":"64%"}]}}}}
@@ -1 +1 @@
1
- {"presets":[{"name":"Async search","structureMode":"async","props":{}},{"name":"Rich results and selection","structureMode":"rich","props":{}},{"name":"Controlled selection","structureMode":"controlled","props":{}},{"name":"External search","structureMode":"external","props":{}},{"name":"Default trigger","props":{"variant":"default","placeholder":"Select a country"}},{"name":"With label","props":{"label":"Select a Country","placeholder":"Choose a country"}},{"name":"Disabled options","props":{"label":"Select a Country","placeholder":"Choose a country"}},{"name":"Subtle Variant","props":{"variant":"subtle","separators":false}},{"name":"Quick pick","props":{"variant":"quickpick","label":"Date Range","placeholder":"Select a Date Range"}},{"name":"Quick pick custom","props":{"variant":"quickpick","label":"Date Range","customQuickPickDates":{"dates":[{"label":"Last 15 months","value":{"timePeriod":"months","amount":15}},{"label":"First Week of June 2022","value":["06/01/2022","06/07/2022"]}]}}},{"name":"Quick pick append defaults","props":{"variant":"quickpick","label":"Date Range","customQuickPickDates":{"dates":[{"label":"Last 15 months","value":{"timePeriod":"months","amount":15}},{"label":"First Week of June 2022","value":["06/01/2022","06/07/2022"]}],"override":false}}},{"name":"Multi-select","props":{"variant":"default","multiSelect":true,"placeholder":"Select countries"}},{"name":"Multi-select with pills","props":{"variant":"default","multiSelect":true,"placeholder":"Select countries","formPillProps":{"size":"small","color":"neutral"},"defaultValue":[{"label":"United States","value":"unitedStates"},{"label":"Italy","value":"italy"}]}},{"name":"With error","props":{"variant":"default","label":"Required field","placeholder":"Required field","error":"Please make a selection."}},{"name":"Search (autocomplete)","props":{"variant":"default","autocomplete":true,"placeholder":"Search..."}},{"name":"Constrained height","props":{"label":"Choose an Option","constrainHeight":true}}],"hints":{"async_search_info":{"when":{"async":true},"message":"Async examples search the public DummyJSON sample-user API. Try Emily or Michael, or an unmatched term for the empty state. defaultOptions preloads results; cacheOptions reuses successful searches. Use the Async search structure with autocomplete off and searchbar on to search inside the menu.","type":"info"},"external_search_info":{"presetName":"External search","message":"The wrapper owns a 250ms debounce, a three-character minimum, request cancellation, options, and loading. onInputChange reports input/clear; onSelect receives the complete option. Inspect the generated code for the integration.","type":"info"},"rich_results_info":{"presetName":"Rich results and selection","message":"renderOption customizes results; the existing Trigger customDisplay renders selected company details. The selected option shown below retains custom company data.","type":"info"},"quickpick_scope":{"when":{"variant":"quickpick"},"message":"Quick pick uses preset date-range options. Use customQuickPickDates to replace or extend them, and pair controlsStartId / controlsEndId with DatePicker when you need synced date inputs.","type":"info"},"multi_options":{"when":{"multiSelect":true},"message":"Multi-select returns arrays of selected options. Use formPillProps to adjust the selected-pill appearance and clearable to let users reset the selection.","type":"info"},"autocomplete_info":{"when":{"autocomplete":true,"async":false},"message":"Autocomplete filters the provided options list in place. It works especially well with longer option sets.","type":"info"},"quickpick_custom_info":{"presetName":"Quick pick custom","message":"When override is omitted or true, customQuickPickDates replaces the default quick-pick menu.","type":"info"},"quickpick_append_info":{"presetName":"Quick pick append defaults","message":"Set customQuickPickDates.override to false to append your custom ranges to the built-in quick-pick options.","type":"info"},"constrained_height_info":{"presetName":"Constrained height","message":"constrainHeight restricts the height of the dropdown menu and enables vertical scrolling when the content exceeds this height. This prevents long dropdown lists from rendering off-screen.","type":"info"},"disabled_options_info":{"presetName":"Disabled options","message":"Set disabled: true on individual option objects to keep them visible while preventing selection.","type":"info"},"subcomponent_structure_info":{"message":"Switch Structure to “With Subcomponents” to see the explicit Dropdown.Trigger, Dropdown.Container, and Dropdown.Option composition API.","type":"info"}},"conditionals":{"loadOptions":{"requires":"async"},"defaultOptions":{"requires":"async"},"cacheOptions":{"requires":"async"},"loading":{"requires":"async"},"searchbar":{"structureMode":"async"},"requiredIndicator":{"requires":"label"},"formPillProps":{"requires":"multiSelect"},"rangeEndsToday":{"requires":{"variant":"quickpick"}},"controlsStartId":{"requires":{"variant":"quickpick"}},"controlsEndId":{"requires":{"variant":"quickpick"}},"customQuickPickDates":{"requires":{"variant":"quickpick"}}},"structureModes":{"default":"simple","modes":{"simple":{"label":"Simple","template":"<Dropdown options={options}{{props}} />","children":""},"async":{"label":"Async search","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Try Emily or Michael","loadOptions":"loadUsers","defaultOptions":true,"cacheOptions":true},"wrapper":"const loadUsers = (term) => fetch(`https://dummyjson.com/users/search?${new URLSearchParams({ q: term, limit: '10', select: 'firstName,lastName,company' })}`, { credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })));\n\n{{component}}"},"rich":{"label":"Rich async results","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger customDisplay={selected && <Detail text={companyDetail(selected)} />} />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Try Emily or Michael","loadOptions":"loadUsers","renderOption":"renderUser","onSelect":"setSelected","value":{"__playgroundCode":"selected"}},"externalImports":["import React, { useState } from 'react'"],"wrapper":"const loadUsers = (term) => fetch(`https://dummyjson.com/users/search?${new URLSearchParams({ q: term, limit: '10', select: 'firstName,lastName,company' })}`, { credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })))\n\nconst companyDetail = (user) => [user.company?.title, user.company?.department].filter(Boolean).join(' · ')\n\nconst renderUser = (user) => (\n <div>\n <Body text={user.label} />\n <Detail text={companyDetail(user)} />\n </div>\n)\n\nconst RichDropdownPlayground = () => {\n const [selected, setSelected] = useState(null)\n return (\n <>\n {{component}}\n <Detail text={selected ? JSON.stringify(selected) : \"Select a user to inspect the complete option object.\"} />\n </>\n )\n};\n\n<RichDropdownPlayground />"},"controlled":{"label":"Controlled selection","template":"<Dropdown options={options}{{props}} />","children":"","props":{"multiSelect":true,"label":"Countries","value":{"__playgroundCode":"selected"},"onSelect":"setSelected"},"externalImports":["import React, { useState } from 'react'"],"wrapper":"const ControlledDropdownPlayground = () => {\n const [selected, setSelected] = useState([])\n return (\n <>\n {{component}}\n <Flex gap=\"xs\" marginTop=\"sm\">\n <Button text=\"Select all enabled\" onClick={() => setSelected(options.filter((option) => !option.disabled))} />\n <Button text=\"Clear\" variant=\"secondary\" onClick={() => setSelected([])} />\n </Flex>\n </>\n )\n};\n\n<ControlledDropdownPlayground />"},"external":{"label":"External async search","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Type at least 3 characters","loading":{"__playgroundCode":"loading"},"value":{"__playgroundCode":"selected"},"onInputChange":"(text, { reason }) => setQuery(reason === 'input' ? text : '')","onSelect":"(option) => { setSelected(option); setQuery('') }"},"externalImports":["import React, { useEffect, useState } from 'react'"],"wrapper":"const ExternalDropdownPlayground = () => {\n const [query, setQuery] = useState('')\n const [options, setOptions] = useState([])\n const [loading, setLoading] = useState(false)\n const [selected, setSelected] = useState(null)\n\n useEffect(() => {\n const controller = new AbortController()\n setOptions([])\n setLoading(false)\n if (query.length < 3) return () => controller.abort()\n setLoading(true)\n const timer = setTimeout(() => {\n const params = new URLSearchParams({ q: query, limit: '10', select: 'firstName,lastName' })\n fetch(`https://dummyjson.com/users/search?${params}`, { signal: controller.signal, credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => {\n if (!controller.signal.aborted) setOptions(users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })))\n })\n .catch(() => { if (!controller.signal.aborted) setOptions([]) })\n .finally(() => { if (!controller.signal.aborted) setLoading(false) })\n }, 250)\n return () => { clearTimeout(timer); controller.abort() }\n }, [query])\n\n return ({{component}})\n};\n\n<ExternalDropdownPlayground />"},"subcomponents":{"label":"With Subcomponents","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}}>\n {options.map((option) => (\n <Dropdown.Option key={option.id} option={option} />\n ))}\n </Dropdown.Container>\n</Dropdown>","children":""}}},"template":"<Dropdown{{props}} />","customProps":{"loadOptions":{"type":"function","platforms":["react"],"description":"Promise or callback loader. Receives the search term; return options with id, label, and value plus any custom data."},"searchbar":{"type":"boolean","default":false,"platforms":["react"],"description":"Show a search input inside Dropdown.Container. Turn autocomplete off to try this mode."},"options":{"type":"array","platforms":["react","rails"],"description":"Dropdown option data with label, value, id, and optional disabled state."}},"propTargets":{"searchbar":"Container.props","options":"Options.data"}}
1
+ {"presets":[{"name":"Create tags","props":{"allowOptionCreation":true,"multiSelect":true,"name":"tags[]","label":"Tags"}},{"name":"Async search","structureMode":"async","props":{}},{"name":"Rich results and selection","structureMode":"rich","props":{}},{"name":"Controlled selection","structureMode":"controlled","props":{}},{"name":"External search","structureMode":"external","props":{}},{"name":"Default trigger","props":{"variant":"default","placeholder":"Select a country"}},{"name":"With label","props":{"label":"Select a Country","placeholder":"Choose a country"}},{"name":"Disabled options","props":{"label":"Select a Country","placeholder":"Choose a country"}},{"name":"Subtle Variant","props":{"variant":"subtle","separators":false}},{"name":"Quick pick","props":{"variant":"quickpick","label":"Date Range","placeholder":"Select a Date Range"}},{"name":"Quick pick custom","props":{"variant":"quickpick","label":"Date Range","customQuickPickDates":{"dates":[{"label":"Last 15 months","value":{"timePeriod":"months","amount":15}},{"label":"First Week of June 2022","value":["06/01/2022","06/07/2022"]}]}}},{"name":"Quick pick append defaults","props":{"variant":"quickpick","label":"Date Range","customQuickPickDates":{"dates":[{"label":"Last 15 months","value":{"timePeriod":"months","amount":15}},{"label":"First Week of June 2022","value":["06/01/2022","06/07/2022"]}],"override":false}}},{"name":"Multi-select","props":{"variant":"default","multiSelect":true,"placeholder":"Select countries"}},{"name":"Multi-select with pills","props":{"variant":"default","multiSelect":true,"placeholder":"Select countries","formPillProps":{"size":"small","color":"neutral"},"defaultValue":[{"label":"United States","value":"unitedStates"},{"label":"Italy","value":"italy"}]}},{"name":"With error","props":{"variant":"default","label":"Required field","placeholder":"Required field","error":"Please make a selection."}},{"name":"Search (autocomplete)","props":{"variant":"default","autocomplete":true,"placeholder":"Search..."}},{"name":"Constrained height","props":{"label":"Choose an Option","constrainHeight":true}}],"hints":{"async_search_info":{"when":{"async":true},"message":"Async examples search the public DummyJSON sample-user API. Try Emily or Michael, or an unmatched term for the empty state. defaultOptions preloads results; cacheOptions reuses successful searches. Use the Async search structure with autocomplete off and searchbar on to search inside the menu.","type":"info"},"external_search_info":{"presetName":"External search","message":"The wrapper owns a 250ms debounce, a three-character minimum, request cancellation, options, and loading. onInputChange reports input/clear; onSelect receives the complete option. Inspect the generated code for the integration.","type":"info"},"rich_results_info":{"presetName":"Rich results and selection","message":"renderOption customizes results; the existing Trigger customDisplay renders selected company details. The selected option shown below retains custom company data.","type":"info"},"quickpick_scope":{"when":{"variant":"quickpick"},"message":"Quick pick uses preset date-range options. Use customQuickPickDates to replace or extend them, and pair controlsStartId / controlsEndId with DatePicker when you need synced date inputs.","type":"info"},"multi_options":{"when":{"multiSelect":true},"message":"Multi-select returns arrays of selected options. Use formPillProps to adjust the selected-pill appearance and clearable to let users reset the selection. Opt into enablePillReorder to drag pills into a new priority order.","type":"info"},"autocomplete_info":{"when":{"autocomplete":true,"async":false},"message":"Autocomplete filters the provided options list in place. It works especially well with longer option sets.","type":"info"},"quickpick_custom_info":{"presetName":"Quick pick custom","message":"When override is omitted or true, customQuickPickDates replaces the default quick-pick menu.","type":"info"},"quickpick_append_info":{"presetName":"Quick pick append defaults","message":"Set customQuickPickDates.override to false to append your custom ranges to the built-in quick-pick options.","type":"info"},"constrained_height_info":{"presetName":"Constrained height","message":"constrainHeight restricts the height of the dropdown menu and enables vertical scrolling when the content exceeds this height. This prevents long dropdown lists from rendering off-screen.","type":"info"},"disabled_options_info":{"presetName":"Disabled options","message":"Set disabled: true on individual option objects to keep them visible while preventing selection.","type":"info"},"subcomponent_structure_info":{"message":"Switch Structure to “With Subcomponents” to see the explicit Dropdown.Trigger, Dropdown.Container, and Dropdown.Option composition API.","type":"info"}},"conditionals":{"loadOptions":{"requires":"async"},"defaultOptions":{"requires":"async"},"cacheOptions":{"requires":"async"},"loading":{"requires":"async"},"searchbar":{"structureMode":"async"},"requiredIndicator":{"requires":"label"},"formPillProps":{"requires":"multiSelect"},"enablePillReorder":{"requires":"multiSelect"},"externalDragHandle":{"requires":"enablePillReorder"},"showPillIndex":{"requires":"multiSelect"},"rangeEndsToday":{"requires":{"variant":"quickpick"}},"controlsStartId":{"requires":{"variant":"quickpick"}},"controlsEndId":{"requires":{"variant":"quickpick"}},"customQuickPickDates":{"requires":{"variant":"quickpick"}}},"structureModes":{"default":"simple","modes":{"simple":{"label":"Simple","template":"<Dropdown options={options}{{props}} />","children":""},"async":{"label":"Async search","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Try Emily or Michael","loadOptions":"loadUsers","defaultOptions":true,"cacheOptions":true},"wrapper":"const loadUsers = (term) => fetch(`https://dummyjson.com/users/search?${new URLSearchParams({ q: term, limit: '10', select: 'firstName,lastName,company' })}`, { credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })));\n\n{{component}}"},"rich":{"label":"Rich async results","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger customDisplay={selected && <Detail text={companyDetail(selected)} />} />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Try Emily or Michael","loadOptions":"loadUsers","renderOption":"renderUser","onSelect":"setSelected","value":{"__playgroundCode":"selected"}},"externalImports":["import React, { useState } from 'react'"],"wrapper":"const loadUsers = (term) => fetch(`https://dummyjson.com/users/search?${new URLSearchParams({ q: term, limit: '10', select: 'firstName,lastName,company' })}`, { credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })))\n\nconst companyDetail = (user) => [user.company?.title, user.company?.department].filter(Boolean).join(' · ')\n\nconst renderUser = (user) => (\n <div>\n <Body text={user.label} />\n <Detail text={companyDetail(user)} />\n </div>\n)\n\nconst RichDropdownPlayground = () => {\n const [selected, setSelected] = useState(null)\n return (\n <>\n {{component}}\n <Detail text={selected ? JSON.stringify(selected) : \"Select a user to inspect the complete option object.\"} />\n </>\n )\n};\n\n<RichDropdownPlayground />"},"controlled":{"label":"Controlled selection","template":"<Dropdown options={options}{{props}} />","children":"","props":{"multiSelect":true,"label":"Countries","value":{"__playgroundCode":"selected"},"onSelect":"setSelected"},"externalImports":["import React, { useState } from 'react'"],"wrapper":"const ControlledDropdownPlayground = () => {\n const [selected, setSelected] = useState([])\n return (\n <>\n {{component}}\n <Flex gap=\"xs\" marginTop=\"sm\">\n <Button text=\"Select all enabled\" onClick={() => setSelected(options.filter((option) => !option.disabled))} />\n <Button text=\"Clear\" variant=\"secondary\" onClick={() => setSelected([])} />\n </Flex>\n </>\n )\n};\n\n<ControlledDropdownPlayground />"},"external":{"label":"External async search","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}} />\n</Dropdown>","children":"","props":{"async":true,"autocomplete":true,"options":[],"label":"User","placeholder":"Type at least 3 characters","loading":{"__playgroundCode":"loading"},"value":{"__playgroundCode":"selected"},"onInputChange":"(text, { reason }) => setQuery(reason === 'input' ? text : '')","onSelect":"(option) => { setSelected(option); setQuery('') }"},"externalImports":["import React, { useEffect, useState } from 'react'"],"wrapper":"const ExternalDropdownPlayground = () => {\n const [query, setQuery] = useState('')\n const [options, setOptions] = useState([])\n const [loading, setLoading] = useState(false)\n const [selected, setSelected] = useState(null)\n\n useEffect(() => {\n const controller = new AbortController()\n setOptions([])\n setLoading(false)\n if (query.length < 3) return () => controller.abort()\n setLoading(true)\n const timer = setTimeout(() => {\n const params = new URLSearchParams({ q: query, limit: '10', select: 'firstName,lastName' })\n fetch(`https://dummyjson.com/users/search?${params}`, { signal: controller.signal, credentials: 'omit' })\n .then((response) => {\n if (!response.ok) throw new Error('Search failed')\n return response.json()\n })\n .then(({ users }) => {\n if (!controller.signal.aborted) setOptions(users.map((user) => ({\n ...user,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n })))\n })\n .catch(() => { if (!controller.signal.aborted) setOptions([]) })\n .finally(() => { if (!controller.signal.aborted) setLoading(false) })\n }, 250)\n return () => { clearTimeout(timer); controller.abort() }\n }, [query])\n\n return ({{component}})\n};\n\n<ExternalDropdownPlayground />"},"subcomponents":{"label":"With Subcomponents","template":"<Dropdown options={options}{{props}}>\n <Dropdown.Trigger />\n <Dropdown.Container{{Container.props}}>\n {options.map((option) => (\n <Dropdown.Option key={option.id} option={option} />\n ))}\n </Dropdown.Container>\n</Dropdown>","children":""}}},"template":"<Dropdown{{props}} />","customProps":{"loadOptions":{"type":"function","platforms":["react"],"description":"Promise or callback loader. Receives the search term; return options with id, label, and value plus any custom data."},"searchbar":{"type":"boolean","default":false,"platforms":["react"],"description":"Show a search input inside Dropdown.Container. Turn autocomplete off to try this mode."},"options":{"type":"array","platforms":["react","rails"],"description":"Dropdown option data with label, value, id, and optional disabled state."}},"propTargets":{"searchbar":"Container.props","options":"Options.data"}}