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
@@ -1 +1 @@
1
- {"description":"Slim playground patterns for AI code generation in consuming apps. Full website playground configs are not shipped here.","fields":["presets","hints","conditionals","structureModes","template","children","customProps","wrapper","statefulProps","requiredCodeProps","propTargets","propAliases","codegenDefaultProps","externalImports","imports","externalDependencies"],"kits":{"advanced_table":{"path":"playgrounds/advanced_table.json","presetCount":7,"hintCount":9,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":true},"avatar":{"path":"playgrounds/avatar.json","presetCount":8,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"background":{"path":"playgrounds/background.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"badge":{"path":"playgrounds/badge.json","presetCount":7,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"body":{"path":"playgrounds/body.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"bread_crumbs":{"path":"playgrounds/bread_crumbs.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"button":{"path":"playgrounds/button.json","presetCount":7,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"button_toolbar":{"path":"playgrounds/button_toolbar.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"caption":{"path":"playgrounds/caption.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"card":{"path":"playgrounds/card.json","presetCount":6,"hintCount":1,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"checkbox":{"path":"playgrounds/checkbox.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"circle_icon_button":{"path":"playgrounds/circle_icon_button.json","presetCount":6,"hintCount":2,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"collapsible":{"path":"playgrounds/collapsible.json","presetCount":3,"hintCount":1,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"contact":{"path":"playgrounds/contact.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"container":{"path":"playgrounds/container.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"copy_button":{"path":"playgrounds/copy_button.json","presetCount":4,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"currency":{"path":"playgrounds/currency.json","presetCount":6,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"dashboard_value":{"path":"playgrounds/dashboard_value.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date":{"path":"playgrounds/date.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_picker":{"path":"playgrounds/date_picker.json","presetCount":11,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"date_range_inline":{"path":"playgrounds/date_range_inline.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_range_stacked":{"path":"playgrounds/date_range_stacked.json","presetCount":3,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_stacked":{"path":"playgrounds/date_stacked.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_time":{"path":"playgrounds/date_time.json","presetCount":7,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_time_stacked":{"path":"playgrounds/date_time_stacked.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_year_stacked":{"path":"playgrounds/date_year_stacked.json","presetCount":3,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"detail":{"path":"playgrounds/detail.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"dialog":{"path":"playgrounds/dialog.json","presetCount":6,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"distribution_bar":{"path":"playgrounds/distribution_bar.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"draggable":{"path":"playgrounds/draggable.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"dropdown":{"path":"playgrounds/dropdown.json","presetCount":16,"hintCount":11,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"empty_state":{"path":"playgrounds/empty_state.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"file_upload":{"path":"playgrounds/file_upload.json","presetCount":6,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"filter":{"path":"playgrounds/filter.json","presetCount":7,"hintCount":7,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"fixed_confirmation_toast":{"path":"playgrounds/fixed_confirmation_toast.json","presetCount":9,"hintCount":9,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"flex":{"path":"playgrounds/flex.json","presetCount":12,"hintCount":12,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"form_group":{"path":"playgrounds/form_group.json","presetCount":7,"hintCount":7,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"form_pill":{"path":"playgrounds/form_pill.json","presetCount":9,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"full_screen":{"path":"playgrounds/full_screen.json","presetCount":6,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"hashtag":{"path":"playgrounds/hashtag.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"highlight":{"path":"playgrounds/highlight.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"home_address_street":{"path":"playgrounds/home_address_street.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon":{"path":"playgrounds/icon.json","presetCount":7,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon_circle":{"path":"playgrounds/icon_circle.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"icon_stat_value":{"path":"playgrounds/icon_stat_value.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon_value":{"path":"playgrounds/icon_value.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"image":{"path":"playgrounds/image.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"label_pill":{"path":"playgrounds/label_pill.json","presetCount":6,"hintCount":2,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"label_value":{"path":"playgrounds/label_value.json","presetCount":6,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"layout":{"path":"playgrounds/layout.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"legend":{"path":"playgrounds/legend.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"link":{"path":"playgrounds/link.json","presetCount":10,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"list":{"path":"playgrounds/list.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"loading_inline":{"path":"playgrounds/loading_inline.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"map":{"path":"playgrounds/map.json","presetCount":4,"hintCount":5,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"message":{"path":"playgrounds/message.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"multi_level_select":{"path":"playgrounds/multi_level_select.json","presetCount":10,"hintCount":11,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"multiple_users":{"path":"playgrounds/multiple_users.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"multiple_users_stacked":{"path":"playgrounds/multiple_users_stacked.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"nav":{"path":"playgrounds/nav.json","presetCount":12,"hintCount":12,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"online_status":{"path":"playgrounds/online_status.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"overlay":{"path":"playgrounds/overlay.json","presetCount":6,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"pagination":{"path":"playgrounds/pagination.json","presetCount":4,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"passphrase":{"path":"playgrounds/passphrase.json","presetCount":7,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"pb_bar_graph":{"path":"playgrounds/pb_bar_graph.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_circle_chart":{"path":"playgrounds/pb_circle_chart.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_gauge_chart":{"path":"playgrounds/pb_gauge_chart.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_line_graph":{"path":"playgrounds/pb_line_graph.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"person":{"path":"playgrounds/person.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"person_contact":{"path":"playgrounds/person_contact.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"phone_number_input":{"path":"playgrounds/phone_number_input.json","presetCount":8,"hintCount":7,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"pill":{"path":"playgrounds/pill.json","presetCount":7,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"popover":{"path":"playgrounds/popover.json","presetCount":9,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"progress_pills":{"path":"playgrounds/progress_pills.json","presetCount":5,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"progress_simple":{"path":"playgrounds/progress_simple.json","presetCount":8,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"progress_step":{"path":"playgrounds/progress_step.json","presetCount":8,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"radio":{"path":"playgrounds/radio.json","presetCount":6,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"rich_text_editor":{"path":"playgrounds/rich_text_editor.json","presetCount":6,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"section_separator":{"path":"playgrounds/section_separator.json","presetCount":8,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"select":{"path":"playgrounds/select.json","presetCount":4,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"selectable_card":{"path":"playgrounds/selectable_card.json","presetCount":3,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_card_icon":{"path":"playgrounds/selectable_card_icon.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_icon":{"path":"playgrounds/selectable_icon.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_list":{"path":"playgrounds/selectable_list.json","presetCount":3,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"skeleton_loading":{"path":"playgrounds/skeleton_loading.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"source":{"path":"playgrounds/source.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"star_rating":{"path":"playgrounds/star_rating.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"stat_change":{"path":"playgrounds/stat_change.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"stat_value":{"path":"playgrounds/stat_value.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"table":{"path":"playgrounds/table.json","presetCount":7,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"text_input":{"path":"playgrounds/text_input.json","presetCount":4,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"textarea":{"path":"playgrounds/textarea.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"time":{"path":"playgrounds/time.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"time_picker":{"path":"playgrounds/time_picker.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"time_range_inline":{"path":"playgrounds/time_range_inline.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"time_stacked":{"path":"playgrounds/time_stacked.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"timeline":{"path":"playgrounds/timeline.json","presetCount":5,"hintCount":5,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"timestamp":{"path":"playgrounds/timestamp.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"title":{"path":"playgrounds/title.json","presetCount":8,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"title_count":{"path":"playgrounds/title_count.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"title_detail":{"path":"playgrounds/title_detail.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"toggle":{"path":"playgrounds/toggle.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"tooltip":{"path":"playgrounds/tooltip.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"typeahead":{"path":"playgrounds/typeahead.json","presetCount":7,"hintCount":7,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"user":{"path":"playgrounds/user.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"user_badge":{"path":"playgrounds/user_badge.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"weekday_stacked":{"path":"playgrounds/weekday_stacked.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false}}}
1
+ {"description":"Slim playground patterns for AI code generation in consuming apps. Full website playground configs are not shipped here.","fields":["presets","hints","conditionals","structureModes","template","children","customProps","wrapper","statefulProps","requiredCodeProps","propTargets","propAliases","codegenDefaultProps","externalImports","imports","externalDependencies"],"kits":{"advanced_table":{"path":"playgrounds/advanced_table.json","presetCount":7,"hintCount":10,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":true},"avatar":{"path":"playgrounds/avatar.json","presetCount":8,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"background":{"path":"playgrounds/background.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"badge":{"path":"playgrounds/badge.json","presetCount":7,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"body":{"path":"playgrounds/body.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"bread_crumbs":{"path":"playgrounds/bread_crumbs.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"button":{"path":"playgrounds/button.json","presetCount":7,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"button_toolbar":{"path":"playgrounds/button_toolbar.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"caption":{"path":"playgrounds/caption.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"card":{"path":"playgrounds/card.json","presetCount":6,"hintCount":1,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"checkbox":{"path":"playgrounds/checkbox.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"circle_icon_button":{"path":"playgrounds/circle_icon_button.json","presetCount":6,"hintCount":2,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"collapsible":{"path":"playgrounds/collapsible.json","presetCount":3,"hintCount":1,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"contact":{"path":"playgrounds/contact.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"container":{"path":"playgrounds/container.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"copy_button":{"path":"playgrounds/copy_button.json","presetCount":4,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"currency":{"path":"playgrounds/currency.json","presetCount":6,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"dashboard_value":{"path":"playgrounds/dashboard_value.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date":{"path":"playgrounds/date.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_picker":{"path":"playgrounds/date_picker.json","presetCount":11,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"date_range_inline":{"path":"playgrounds/date_range_inline.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_range_stacked":{"path":"playgrounds/date_range_stacked.json","presetCount":3,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_stacked":{"path":"playgrounds/date_stacked.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_time":{"path":"playgrounds/date_time.json","presetCount":7,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_time_stacked":{"path":"playgrounds/date_time_stacked.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"date_year_stacked":{"path":"playgrounds/date_year_stacked.json","presetCount":3,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"detail":{"path":"playgrounds/detail.json","presetCount":4,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"dialog":{"path":"playgrounds/dialog.json","presetCount":6,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"distribution_bar":{"path":"playgrounds/distribution_bar.json","presetCount":3,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"draggable":{"path":"playgrounds/draggable.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"dropdown":{"path":"playgrounds/dropdown.json","presetCount":17,"hintCount":11,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"empty_state":{"path":"playgrounds/empty_state.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"file_upload":{"path":"playgrounds/file_upload.json","presetCount":6,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"filter":{"path":"playgrounds/filter.json","presetCount":7,"hintCount":7,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"fixed_confirmation_toast":{"path":"playgrounds/fixed_confirmation_toast.json","presetCount":9,"hintCount":9,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"flex":{"path":"playgrounds/flex.json","presetCount":12,"hintCount":12,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"form_group":{"path":"playgrounds/form_group.json","presetCount":7,"hintCount":7,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"form_pill":{"path":"playgrounds/form_pill.json","presetCount":9,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"full_screen":{"path":"playgrounds/full_screen.json","presetCount":6,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"hashtag":{"path":"playgrounds/hashtag.json","presetCount":5,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"highlight":{"path":"playgrounds/highlight.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"home_address_street":{"path":"playgrounds/home_address_street.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon":{"path":"playgrounds/icon.json","presetCount":7,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon_circle":{"path":"playgrounds/icon_circle.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"icon_stat_value":{"path":"playgrounds/icon_stat_value.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"icon_value":{"path":"playgrounds/icon_value.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"image":{"path":"playgrounds/image.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"label_pill":{"path":"playgrounds/label_pill.json","presetCount":6,"hintCount":2,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"label_value":{"path":"playgrounds/label_value.json","presetCount":6,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"layout":{"path":"playgrounds/layout.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"legend":{"path":"playgrounds/legend.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"link":{"path":"playgrounds/link.json","presetCount":10,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"list":{"path":"playgrounds/list.json","presetCount":8,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"loading_inline":{"path":"playgrounds/loading_inline.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"map":{"path":"playgrounds/map.json","presetCount":4,"hintCount":5,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"message":{"path":"playgrounds/message.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"multi_level_select":{"path":"playgrounds/multi_level_select.json","presetCount":10,"hintCount":11,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"multiple_users":{"path":"playgrounds/multiple_users.json","presetCount":6,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"multiple_users_stacked":{"path":"playgrounds/multiple_users_stacked.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"nav":{"path":"playgrounds/nav.json","presetCount":12,"hintCount":12,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"online_status":{"path":"playgrounds/online_status.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"overlay":{"path":"playgrounds/overlay.json","presetCount":6,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"pagination":{"path":"playgrounds/pagination.json","presetCount":4,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"passphrase":{"path":"playgrounds/passphrase.json","presetCount":7,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"pb_bar_graph":{"path":"playgrounds/pb_bar_graph.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_circle_chart":{"path":"playgrounds/pb_circle_chart.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_gauge_chart":{"path":"playgrounds/pb_gauge_chart.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"pb_line_graph":{"path":"playgrounds/pb_line_graph.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"person":{"path":"playgrounds/person.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"person_contact":{"path":"playgrounds/person_contact.json","presetCount":5,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"phone_number_input":{"path":"playgrounds/phone_number_input.json","presetCount":8,"hintCount":7,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"pill":{"path":"playgrounds/pill.json","presetCount":7,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"popover":{"path":"playgrounds/popover.json","presetCount":9,"hintCount":6,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"progress_pills":{"path":"playgrounds/progress_pills.json","presetCount":5,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"progress_simple":{"path":"playgrounds/progress_simple.json","presetCount":8,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"progress_step":{"path":"playgrounds/progress_step.json","presetCount":8,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"radio":{"path":"playgrounds/radio.json","presetCount":6,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"rich_text_editor":{"path":"playgrounds/rich_text_editor.json","presetCount":6,"hintCount":2,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"section_separator":{"path":"playgrounds/section_separator.json","presetCount":8,"hintCount":1,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"select":{"path":"playgrounds/select.json","presetCount":4,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"selectable_card":{"path":"playgrounds/selectable_card.json","presetCount":3,"hintCount":4,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_card_icon":{"path":"playgrounds/selectable_card_icon.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_icon":{"path":"playgrounds/selectable_icon.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"selectable_list":{"path":"playgrounds/selectable_list.json","presetCount":3,"hintCount":3,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"skeleton_loading":{"path":"playgrounds/skeleton_loading.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"source":{"path":"playgrounds/source.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"star_rating":{"path":"playgrounds/star_rating.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"stat_change":{"path":"playgrounds/stat_change.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"stat_value":{"path":"playgrounds/stat_value.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"table":{"path":"playgrounds/table.json","presetCount":7,"hintCount":8,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"text_input":{"path":"playgrounds/text_input.json","presetCount":4,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"textarea":{"path":"playgrounds/textarea.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"time":{"path":"playgrounds/time.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"time_picker":{"path":"playgrounds/time_picker.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"time_range_inline":{"path":"playgrounds/time_range_inline.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"time_stacked":{"path":"playgrounds/time_stacked.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"timeline":{"path":"playgrounds/timeline.json","presetCount":5,"hintCount":5,"hasStructureModes":true,"hasHints":true,"hasConditionals":false,"hasCustomProps":true,"hasSamples":false},"timestamp":{"path":"playgrounds/timestamp.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":true,"hasCustomProps":false,"hasSamples":false},"title":{"path":"playgrounds/title.json","presetCount":8,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"title_count":{"path":"playgrounds/title_count.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"title_detail":{"path":"playgrounds/title_detail.json","presetCount":4,"hintCount":0,"hasStructureModes":false,"hasHints":false,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"toggle":{"path":"playgrounds/toggle.json","presetCount":3,"hintCount":3,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"tooltip":{"path":"playgrounds/tooltip.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"typeahead":{"path":"playgrounds/typeahead.json","presetCount":7,"hintCount":7,"hasStructureModes":true,"hasHints":true,"hasConditionals":true,"hasCustomProps":true,"hasSamples":false},"user":{"path":"playgrounds/user.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"user_badge":{"path":"playgrounds/user_badge.json","presetCount":4,"hintCount":4,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false},"weekday_stacked":{"path":"playgrounds/weekday_stacked.json","presetCount":5,"hintCount":5,"hasStructureModes":false,"hasHints":true,"hasConditionals":false,"hasCustomProps":false,"hasSamples":false}}}
@@ -1 +1 @@
1
- {"presets":[{"name":"Default","structureMode":"advanced","props":{"advancedEditorToolbar":true,"label":"Description","name":"description"}},{"name":"Simple","structureMode":"advanced","props":{"advancedEditorToolbar":true,"label":"Notes","name":"notes","simple":true}},{"name":"Focus Toolbar","structureMode":"advanced","props":{"advancedEditorToolbar":false,"focus":true,"label":"Focus editor"}},{"name":"Tall Editor","structureMode":"advanced","props":{"inputHeight":"lg","inputMinHeight":"md","label":"Tall editor"}},{"name":"Required","structureMode":"advanced","props":{"label":"Description","name":"description","requiredIndicator":true}},{"name":"Sticky","structureMode":"advanced","props":{"label":"Sticky editor","sticky":true}}],"hints":{"advanced":{"presetName":"Default","message":"The Advanced structure wraps RichTextEditor with TipTap useEditor and EditorContent.","type":"info"},"focus":{"when":{"focus":true},"message":"Focus Toolbar shows the toolbar when the advanced editor receives focus.","type":"info"}},"conditionals":{"advancedEditorToolbar":{"structureMode":"advanced"},"inputHeight":{"structureMode":"advanced"},"inputMinHeight":{"structureMode":"advanced"},"sticky":{"structureMode":"advanced"}},"structureModes":{"default":"advanced","modes":{"advanced":{"label":"Advanced","template":"<RichTextEditor\n advancedEditor={editor}{{props}}\n>\n <EditorContent editor={editor} />\n</RichTextEditor>","children":"","wrapper":"const RichTextEditorPlayground = () => {\n const editor = useEditor({\n extensions: [StarterKit.configure({ trailingNode: false })],\n content: 'Add your text here. You can format your text, add links, quotes, and bullets.',\n })\n\n if (!editor) return null\n\n return {{component}}\n}\n\n<RichTextEditorPlayground />","externalImports":["import { useEditor, EditorContent } from '@tiptap/react'","import StarterKit from '@tiptap/starter-kit'"]}}},"template":"<RichTextEditor{{props}} />","propTargets":{},"externalDependencies":{"packages":["react-trix","trix","@tiptap/react","@tiptap/starter-kit","@tiptap/extension-link","prosemirror-markdown","prosemirror-model"],"optional":true,"note":"Default React editor uses Trix (pass TrixEditor from react-trix). Advanced React editor uses TipTap, and the host app must already have the needed packages installed. Agents must not install packages — tell the user if they are missing. Rails loads TipTap from esm.sh and accepts only these extension strings: underline, text_align, horizontal_rule, image."}}
1
+ {"presets":[{"name":"Default","structureMode":"advanced","props":{"advancedEditorToolbar":true,"label":"Description","name":"description"}},{"name":"Simple","structureMode":"advanced","props":{"advancedEditorToolbar":true,"label":"Notes","name":"notes","simple":true}},{"name":"Focus Toolbar","structureMode":"advanced","props":{"advancedEditorToolbar":false,"focus":true,"label":"Focus editor"}},{"name":"Tall Editor","structureMode":"advanced","props":{"inputHeight":"lg","inputMinHeight":"md","label":"Tall editor"}},{"name":"Required","structureMode":"advanced","props":{"label":"Description","name":"description","requiredIndicator":true}},{"name":"Sticky","structureMode":"advanced","props":{"label":"Sticky editor","sticky":true}}],"hints":{"advanced":{"presetName":"Default","message":"The Advanced structure wraps RichTextEditor with TipTap useEditor and EditorContent.","type":"info"},"focus":{"when":{"focus":true},"message":"Focus Toolbar shows the toolbar when the advanced editor receives focus.","type":"info"}},"conditionals":{"advancedEditorToolbar":{"structureMode":"advanced"},"inputHeight":{"structureMode":"advanced"},"inputMinHeight":{"structureMode":"advanced"},"sticky":{"structureMode":"advanced"}},"structureModes":{"default":"advanced","modes":{"advanced":{"label":"Advanced","template":"<RichTextEditor\n advancedEditor={editor}{{props}}\n>\n <EditorContent editor={editor} />\n</RichTextEditor>","children":"","wrapper":"const RichTextEditorPlayground = () => {\n const editor = useEditor({\n extensions: [StarterKit.configure({ trailingNode: false })],\n content: 'Add your text here. You can format your text, add links, quotes, and bullets.',\n })\n\n if (!editor) return null\n\n return {{component}}\n}\n\n<RichTextEditorPlayground />","externalImports":["import { useEditor, EditorContent } from '@tiptap/react'","import StarterKit from '@tiptap/starter-kit'"]}}},"template":"<RichTextEditor{{props}} />","propTargets":{},"externalDependencies":{"packages":["react-trix","trix","@tiptap/react","@tiptap/starter-kit","@tiptap/extension-link","prosemirror-markdown","prosemirror-model"],"optional":true,"note":"Default React editor uses Trix (pass TrixEditor from react-trix). Advanced React editor uses TipTap, and the host app must already have the needed packages installed. Agents must not install packages — tell the user if they are missing. Rails bundles TipTap in playbook-rails.js (no host packages needed) and accepts only these extension strings: underline, text_align, horizontal_rule, image."}}
@@ -1 +1 @@
1
- {"presets":[{"name":"Default","props":{"label":"Colors","name":"color","options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"},{"label":"Blue","value":"#0000FF"}]}},{"name":"With Pills","props":{"label":"With Pills","name":"with_pills","isMulti":true,"options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"},{"label":"Blue","value":"#0000FF"}]}},{"name":"Count display","props":{"label":"Tags","name":"tags","inputDisplay":"none","isMulti":true,"options":[{"label":"Design","value":"design"},{"label":"Engineering","value":"engineering"},{"label":"Support","value":"support"}]}},{"name":"Required validation","props":{"label":"Assignee","name":"assignee","required":true,"requiredIndicator":true,"validation":{"message":"Choose an assignee."},"error":"Selection is required.","options":[{"label":"Ada","value":"ada"},{"label":"Grace","value":"grace"}]}},{"name":"Async users","structureMode":"advanced","props":{"async":true,"label":"Users","name":"users","loadOptions":"playgroundTypeahead.loadOptions","getOptionLabel":"playgroundTypeahead.getOptionLabel","getOptionValue":"playgroundTypeahead.getOptionValue","options":[]}},{"name":"Custom menu","structureMode":"advanced","props":{"label":"Colors","name":"custom_menu","components":{"__playgroundCode":"{ MenuList }"},"marginBottom":"none","options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"}]}},{"name":"Creatable handler","props":{"label":"Add labels","name":"labels","createable":true,"preserveSearchInput":true,"onChange":"(selected) => console.log(selected)","options":[{"label":"Bug","value":"bug"},{"label":"Feature","value":"feature"}]}}],"hints":{"default":{"presetName":"Default","message":"Default uses a local options array with label and value keys.","type":"info"},"count_display":{"presetName":"Count display","message":"Count display uses multi-select with inputDisplay set to none so selected values render as a count.","type":"info"},"required_validation":{"presetName":"Required validation","message":"Required validation pairs required, requiredIndicator, validation, and error copy.","type":"info"},"async_users":{"presetName":"Async users","message":"Async users demonstrates loadOptions plus custom option label/value resolvers.","type":"info"},"custom_menu":{"presetName":"Custom menu","message":"Custom menu passes a components map to replace Typeahead.MenuList content.","type":"info"},"creatable_handler":{"presetName":"Creatable handler","message":"Creatable handler shows custom option creation, preserved search input, and an onChange handler.","type":"info"},"with_pills":{"presetName":"With Pills","message":"With Pills uses multi-select with pills so selected values render as pills.","type":"info"}},"conditionals":{"loadOptions":{"requires":{"async":true}},"getOptionLabel":{"requires":{"async":true}},"getOptionValue":{"requires":{"async":true}},"requiredIndicator":{"requires":"label"},"validation":{"requires":{"required":true}},"optionsByContext":{"requires":"searchContextSelector"},"clearOnContextChange":{"requires":"searchContextSelector"},"enablePillReorder":{"requires":"isMulti"},"showPillIndex":{"requires":"isMulti"},"pillDragHandle":{"requires":"isMulti"}},"structureModes":{"default":"standard","modes":{"standard":{"label":"Standard","template":"<Typeahead{{props}} />","children":""},"advanced":{"label":"Advanced setup","template":"<Typeahead{{props}} />","children":"","wrapper":"const playgroundTypeaheadOptions = [\n { name: \"Ada Lovelace\", id: \"ada\" },\n { name: \"Grace Hopper\", id: \"grace\" },\n { name: \"Katherine Johnson\", id: \"katherine\" },\n { name: \"Margaret Hamilton\", id: \"margaret\" },\n]\n\nconst playgroundTypeahead = {\n loadOptions: (inputValue) => new Promise((resolve) => {\n const search = inputValue.toLowerCase()\n window.setTimeout(() => {\n resolve(playgroundTypeaheadOptions.filter((option) => option.name.toLowerCase().includes(search)))\n }, 250)\n }),\n getOptionLabel: (option) => option.name || option.label,\n getOptionValue: (option) => String(option.id || option.value),\n}\n\nif (typeof window !== \"undefined\") {\n window.playgroundTypeahead = playgroundTypeahead\n}\n\nconst MenuList = (props) => (\n <Typeahead.MenuList\n {...props}\n footer={<Button margin=\"sm\" text=\"Custom footer\" />}\n />\n)\n\nconst TypeaheadPlaygroundExample = () => (\n {{component}}\n)\n\n<TypeaheadPlaygroundExample />"}}},"template":"<Typeahead{{props}} />","customProps":{"isMulti":{"type":"boolean","platforms":["react"],"default":false}},"propTargets":{}}
1
+ {"presets":[{"name":"Default","props":{"label":"Colors","name":"color","options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"},{"label":"Blue","value":"#0000FF"}]}},{"name":"With Pills","props":{"label":"With Pills","name":"with_pills","isMulti":true,"options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"},{"label":"Blue","value":"#0000FF"}]}},{"name":"Count display","props":{"label":"Tags","name":"tags","inputDisplay":"none","isMulti":true,"options":[{"label":"Design","value":"design"},{"label":"Engineering","value":"engineering"},{"label":"Support","value":"support"}]}},{"name":"Required validation","props":{"label":"Assignee","name":"assignee","required":true,"requiredIndicator":true,"validation":{"message":"Choose an assignee."},"error":"Selection is required.","options":[{"label":"Ada","value":"ada"},{"label":"Grace","value":"grace"}]}},{"name":"Async users","structureMode":"advanced","props":{"async":true,"label":"Users","name":"users","loadOptions":"playgroundTypeahead.loadOptions","getOptionLabel":"playgroundTypeahead.getOptionLabel","getOptionValue":"playgroundTypeahead.getOptionValue","options":[]}},{"name":"Custom menu","structureMode":"advanced","props":{"label":"Colors","name":"custom_menu","components":{"__playgroundCode":"{ MenuList }"},"marginBottom":"none","options":[{"label":"Orange","value":"#FFA500"},{"label":"Red","value":"#FF0000"},{"label":"Green","value":"#00FF00"}]}},{"name":"Creatable handler","props":{"label":"Add labels","name":"labels","createable":true,"preserveSearchInput":true,"onChange":"(selected) => console.log(selected)","options":[{"label":"Bug","value":"bug"},{"label":"Feature","value":"feature"}]}}],"hints":{"default":{"presetName":"Default","message":"Default uses a local options array with label and value keys.","type":"info"},"count_display":{"presetName":"Count display","message":"Count display uses multi-select with inputDisplay set to none so selected values render as a count.","type":"info"},"required_validation":{"presetName":"Required validation","message":"Required validation pairs required, requiredIndicator, validation, and error copy.","type":"info"},"async_users":{"presetName":"Async users","message":"Async users demonstrates loadOptions plus custom option label/value resolvers.","type":"info"},"custom_menu":{"presetName":"Custom menu","message":"Custom menu passes a components map to replace Typeahead.MenuList content.","type":"info"},"creatable_handler":{"presetName":"Creatable handler","message":"Creatable handler shows custom option creation, preserved search input, and an onChange handler.","type":"info"},"with_pills":{"presetName":"With Pills","message":"With Pills uses multi-select with pills so selected values render as pills.","type":"info"}},"conditionals":{"loadOptions":{"requires":{"async":true}},"getOptionLabel":{"requires":{"async":true}},"getOptionValue":{"requires":{"async":true}},"requiredIndicator":{"requires":"label"},"validation":{"requires":{"required":true}},"optionsByContext":{"requires":"searchContextSelector"},"clearOnContextChange":{"requires":"searchContextSelector"},"enablePillReorder":{"requires":"isMulti"},"showPillIndex":{"requires":"isMulti"},"externalDragHandle":{"requires":"isMulti"}},"structureModes":{"default":"standard","modes":{"standard":{"label":"Standard","template":"<Typeahead{{props}} />","children":""},"advanced":{"label":"Advanced setup","template":"<Typeahead{{props}} />","children":"","wrapper":"const playgroundTypeaheadOptions = [\n { name: \"Ada Lovelace\", id: \"ada\" },\n { name: \"Grace Hopper\", id: \"grace\" },\n { name: \"Katherine Johnson\", id: \"katherine\" },\n { name: \"Margaret Hamilton\", id: \"margaret\" },\n]\n\nconst playgroundTypeahead = {\n loadOptions: (inputValue) => new Promise((resolve) => {\n const search = inputValue.toLowerCase()\n window.setTimeout(() => {\n resolve(playgroundTypeaheadOptions.filter((option) => option.name.toLowerCase().includes(search)))\n }, 250)\n }),\n getOptionLabel: (option) => option.name || option.label,\n getOptionValue: (option) => String(option.id || option.value),\n}\n\nif (typeof window !== \"undefined\") {\n window.playgroundTypeahead = playgroundTypeahead\n}\n\nconst MenuList = (props) => (\n <Typeahead.MenuList\n {...props}\n footer={<Button margin=\"sm\" text=\"Custom footer\" />}\n />\n)\n\nconst TypeaheadPlaygroundExample = () => (\n {{component}}\n)\n\n<TypeaheadPlaygroundExample />"}}},"template":"<Typeahead{{props}} />","customProps":{"isMulti":{"type":"boolean","platforms":["react"],"default":false}},"propTargets":{}}
@@ -1 +1 @@
1
- {"description":"Visual → Playbook kit map for screenshot and design handoffs. Use this before guessing kit names from visuals.","howToUse":["Decompose the screenshot top-down: page regions → sections → controls → text","Match each region to kits via looksLike / typographyByVisual / layoutCues","Resolve conflicts with not[] and gotchas","Map px spacing to spacingPxToToken; then open kits/<name>.schema.json + playgrounds/<name>.json"],"spacingPxToToken":{"0":"none","4":"xxs","8":"xs","16":"sm","24":"md","32":"lg","40":"xl","48":"xxl"},"typographyByVisual":[{"when":"Bold text, roughly ≥20px","kit":"title","props":{"size":3}},{"when":"Bold text, roughly 14–18px","kit":"title","props":{"size":4}},{"when":"Small muted text, roughly ≤12px","kit":"caption","props":{"size":"xs"}},{"when":"Bold small/medium label (not a heading)","kit":"detail"},{"when":"Default paragraph / body copy","kit":"body"}],"layoutCues":[{"when":"Horizontal or vertical auto-layout / flex row or column of siblings","kit":"flex"},{"when":"Surface with fill + border/radius containing content","kit":"card"},{"when":"Full-bleed page/section background color or image","kit":"background"},{"when":"Sidebar + main content regions","kit":"layout"},{"when":"Thin horizontal rule / divider between sections","kit":"section_separator"}],"categories":{"advanced_table":{"description":"The Advanced Table can be used to display complex, nested data in a way that allows for expansion and/or sorting."},"alerts_and_dialogs":{"description":"Components for displaying alerts, confirmations, and overlay content to users."},"buttons":{"description":"Buttons are used primarily for actions, such as “Save” and “Cancel”. Link Buttons are used for less important or less commonly used actions, such as “view shipping settings”."},"data_visualization":{"description":"Components for displaying data in tables, lists, charts, and graphs."},"date_and_time_text_patterns":{"description":"Components for displaying dates and times in various formats."},"form_and_dashboard_text_patterns":{"description":"Components for displaying structured data on forms and dashboards."},"form_elements":{"description":"Form wrapper components and specialized form controls."},"form_input":{"description":"Components for text-based user input in forms."},"form_selection":{"description":"Components for selecting options, dates, and making choices in forms."},"icons_and_images":{"description":"Components for displaying icons, images, and visual media."},"layout_and_structure":{"description":"Components for structuring and organizing page layouts and content containers."},"message_text_patterns":{"description":"Components for displaying messages and highlighting content."},"navigation":{"description":"Components for navigation, breadcrumbs, and pagination."},"state_and_progress_indicators":{"description":"Components for showing loading states, progress, and timelines."},"tags":{"description":"Components for tags, badges, pills, and status indicators."},"typography":{"description":"Text components for consistent typography throughout the application."},"user":{"description":"Components for displaying user information, avatars, and user-related data."}},"kits":{"advanced_table":{"category":"advanced_table","description":"The Advanced Table can be used to display complex, nested data in a way that allows for expansion and/or sorting.","status":"stable","sections":[{"name":"default","description":"Minimal table: required props and structure before adding features."},{"name":"sorting","description":"Sortable headers, controlled sort state, and custom compare logic."},{"name":"pagination_&_data_states","description":"Paged or infinite data plus loading and empty states."},{"name":"row_interaction","description":"Select, expand, subrows, pinning; row highlights and bulk actions."},{"name":"column_configuration","description":"Define columns: headers, visibility, grouping, borders, widths."},{"name":"cell_behavior","description":"What each cell shows and does: custom content, edit, loading."},{"name":"layout_&_positioning","description":"Scroll, sticky headers/columns, responsive layout, fullscreen modes."},{"name":"styling","description":"Styling per row or column: padding, color, and border."}],"looksLike":["Complex data grid with expand/collapse nested rows","Sortable headers, row selection, column visibility, sticky columns"],"not":["table"],"gotchas":["Requires columnDefinitions + tableData","Copy shapes from playgrounds/advanced_table.json samples","Nested rows use children arrays; first column often uses cellAccessors"],"cues":{"typicalProps":["columnDefinitions","tableData"]}},"avatar":{"category":"user","description":"User photo for recognition. Prefer User when showing a name; Avatar alone if names are hidden.","status":"stable","looksLike":["Circular user image or initials"],"not":["user_badge","multiple_users","image"],"gotchas":["Use name prop for initials — do not use layer/spec text as the person name"],"cues":{"typicalProps":["name","size","imageUrl"]}},"background":{"category":"layout_and_structure","description":"The Background component is used for adding a background to a page or to any container.","status":"stable"},"badge":{"category":"tags","description":"Badges can be used for notification, tags, and status. They are used for count and numbers.","status":"stable","looksLike":["Small numeric or count indicator, often on an icon or nav item"],"not":["pill","form_pill","user_badge"],"gotchas":["Prefer text prop for the displayed value"],"cues":{"typicalProps":["text","variant"]}},"body":{"category":"typography","description":"Default paragraph style. Step to light, then lighter, only to de-emphasize supporting lines.","status":"stable","looksLike":["Standard paragraph text"],"not":["title","caption","detail"],"cues":{"typicalProps":["text","color"]}},"bread_crumbs":{"category":"navigation","description":"BreadCrumbs can be used for keeping a user aware of their route location.","status":"stable"},"button":{"category":"buttons","description":"Primary Button for main tasks; secondary and danger variants for other actions.","status":"stable","looksLike":["Filled or outline rectangular action with a label","Primary blue CTA, secondary outline, or red danger action","Text that looks like a link-styled control for a lesser action"],"not":["circle_icon_button","icon_button","link","form_pill"],"variantsFromVisual":{"solid blue / filled primary":"primary","outline / ghost secondary":"secondary","red destructive":"danger","text-only link style":"link","emoji/reaction with count":"reaction"},"cues":{"typicalProps":["variant","text","size","icon"]}},"button_toolbar":{"category":"buttons","description":"This component should primarily hold the most commonly used buttons.","status":"stable"},"caption":{"category":"typography","description":"Supplementary text beside inputs or blocks; use large caption when the note spans more content.","status":"stable","looksLike":["Small supporting / helper / metadata text under a field or title"],"not":["body","detail","title"],"cues":{"typicalProps":["text","size"]}},"card":{"category":"layout_and_structure","description":"Content container with optional header, body sections, and various styling options.","status":"stable","looksLike":["White/light panel with border or shadow wrapping a content block"],"not":["background","selectable_card","dialog"],"cues":{"typicalProps":["padding","borderNone","shadow"]}},"checkbox":{"category":"form_selection","description":"Checkbox is used for a list of selections that are meant to have one or more options checked.","status":"stable","looksLike":["Square checkbox for multi-select"],"not":["radio","toggle","selectable_card"]},"circle_icon_button":{"category":"buttons","description":"Round icon-only button; the icon must clearly show the action because there is no label.","status":"stable","looksLike":["Round icon-only control with no text label"],"not":["button","icon_button","icon_circle"],"cues":{"typicalProps":["icon","variant"]}},"collapsible":{"category":"layout_and_structure","description":"Collapsible content that can be expanded or collapsed.","status":"stable"},"contact":{"category":"form_and_dashboard_text_patterns","description":"Use to display customer's or user's contact information.","status":"stable"},"container":{"category":"layout_and_structure","description":"The Container component is used as a wrapper for the content of a page or to any container.","status":"stable"},"copy_button":{"category":"buttons","description":"Button that copies text to clipboard with visual feedback.","status":"stable"},"currency":{"category":"form_and_dashboard_text_patterns","description":"Formats money for dashboards and summaries. Pair with labels so amounts stay clear.","status":"stable","looksLike":["Formatted money amount, often large on dashboards"],"not":["dashboard_value","stat_value"]},"dashboard_value":{"category":"form_and_dashboard_text_patterns","description":"Large dashboard number for quick metrics. Use Currency when the value is money.","status":"stable","looksLike":["Large non-currency metric number on a dashboard"],"not":["currency","stat_value"]},"date":{"category":"date_and_time_text_patterns","description":"Use to display the date. Year will not display by default if it is the current year.","status":"stable"},"date_picker":{"category":"form_selection","description":"Calendar date field powered by flatpickr; props cover common cases without custom JS.","status":"stable"},"date_range_inline":{"category":"date_and_time_text_patterns","description":"Use to display a date range. Year will not show by default if it is the current year.","status":"stable"},"date_range_stacked":{"category":"date_and_time_text_patterns","description":"Displays a date range in a vertical stacked format.","status":"stable"},"date_stacked":{"category":"date_and_time_text_patterns","description":"Displays the date stacked with the month and day. Default behavior does not show the current year.","status":"stable"},"date_time":{"category":"date_and_time_text_patterns","description":"Combined date and time. Respects time zones; defaults to America/New_York when not set.","status":"stable"},"date_time_stacked":{"category":"date_and_time_text_patterns","description":"Displays date and time in a vertical stacked format.","status":"stable"},"date_year_stacked":{"category":"date_and_time_text_patterns","description":"This component is a simple option for displaying dates in a month, day, and year format.","status":"stable"},"detail":{"category":"typography","description":"Used for tables or designs with large amounts of data or text.","status":"stable","looksLike":["Compact bold label text, denser than Body, not a Title"],"not":["body","caption","title"],"cues":{"typicalProps":["text"]}},"dialog":{"category":"alerts_and_dialogs","description":"Modal for confirmations, forms, or focus. Supports alert modals for various statuses.","status":"stable","looksLike":["Centered modal overlay with header/body/footer"],"not":["popover","tooltip","lightbox","fixed_confirmation_toast"],"cues":{"composedOf":["Dialog.Header","Dialog.Body","Dialog.Footer"]}},"distribution_bar":{"category":"data_visualization","description":"Part-to-whole comparison like a pie chart. Default mode stresses share without raw numbers.","status":"stable"},"draggable":{"category":"layout_and_structure","description":"Drag and drop functionality for reordering items.","status":"stable"},"dropdown":{"category":"form_selection","description":"Customizable dropdown menu with trigger element and various option configurations.","status":"stable","looksLike":["Custom menu triggered by a control, with Dropdown.Option children"],"not":["select","typeahead"],"cues":{"readPlayground":true}},"empty_state":{"category":"state_and_progress_indicators","description":"Empty state placeholder for when no content is available.","status":"stable","looksLike":["Centered empty-results illustration/message with optional CTA"],"not":["card","dialog"]},"file_upload":{"category":"form_elements","description":"Allows users to upload files via drag-and-drop or file browser.","status":"stable"},"filter":{"category":"data_visualization","description":"Search and filter UI. See production /dev_docs/search for real integration examples.","status":"stable","looksLike":["Search + filter controls bar above a results list/table"],"not":["typeahead","text_input"]},"fixed_confirmation_toast":{"category":"alerts_and_dialogs","description":"Fixed alerts: success after completion, error when blocked, neutral for informational context.","status":"stable","looksLike":["Fixed success/error/neutral banner toast, usually top of viewport"],"not":["dialog","pill"],"cues":{"typicalProps":["status","text"]}},"flex":{"category":"layout_and_structure","description":"Flexbox layout helper for responsive rows, columns, spacing, and alignment in UIs.","status":"stable","looksLike":["Row or column of aligned siblings with gap/spacing"],"not":["card","layout","list"],"gotchas":["justify \"spaceBetween\" from Figma → Playbook \"between\""],"cues":{"typicalProps":["orientation","justify","align","gap","spacing"]}},"form":{"category":"form_elements","description":"The Form component provides consumers with a convenient, consistently styled <form> wrapper.","status":"stable"},"form_group":{"category":"form_elements","description":"Groups related form fields together with optional labels.","status":"stable","looksLike":["Group of SelectableCards / radios / checkboxes sharing one choice group"],"not":["flex","card"],"gotchas":["Children must be direct SelectableCard/Radio/Checkbox — no wrapping Flex"]},"form_pill":{"category":"form_elements","description":"Pill-shaped form elements for tags, selections, or filters.","status":"stable","looksLike":["Removable filter/tag chip inside a form or filter bar, often with an ×"],"not":["pill","badge","label_pill"],"cues":{"typicalProps":["text"]}},"full_screen":{"category":"layout_and_structure","description":"Full Screen component","status":"stable"},"hashtag":{"category":"tags","description":"Hashtag is used to display home, project and other forms of IDs. They can be used as a link.","status":"stable"},"highlight":{"category":"message_text_patterns","description":"Highlight is used to pick out or emphasize content.","status":"stable"},"home_address_street":{"category":"form_and_dashboard_text_patterns","description":"Street address with unit, city, state, ZIP, and optional project hashtag linking to work.","status":"stable"},"icon":{"category":"icons_and_images","description":"Graphic symbol for an object, action, or status; add nearby text if meaning could be vague.","status":"stable"},"icon_circle":{"category":"icons_and_images","description":"Icon centered in a circle for emphasis, touch targets, or consistent visual weight.","status":"stable"},"icon_stat_value":{"category":"icons_and_images","description":"Displays a statistic value with an associated icon.","status":"stable"},"icon_value":{"category":"icons_and_images","description":"Icon paired with a value—often a number—for compact KPIs, stats, or dense summaries.","status":"stable"},"image":{"category":"icons_and_images","description":"A responsive image component.","status":"stable"},"label_pill":{"category":"form_and_dashboard_text_patterns","description":"This component combines the Caption and Pill components with all of their variants.","status":"stable","looksLike":["Caption label stacked with a Pill underneath"],"not":["pill","label_value"],"cues":{"composedOf":["caption","pill"]}},"label_value":{"category":"form_and_dashboard_text_patterns","description":"This component can be very versatile when used to display text data.","status":"stable"},"layout":{"category":"layout_and_structure","description":"Layouts used for positioning content inside of pages, cards, or containers.","status":"stable"},"legend":{"category":"data_visualization","description":"A key used to compare the variables and their value in any given graph.","status":"stable"},"link":{"category":"typography","description":"Text link for navigation to other pages or sections.","status":"stable","looksLike":["Inline text link in body copy, not a button-shaped control"],"not":["button"],"cues":{"typicalProps":["text","href"]}},"list":{"category":"data_visualization","description":"Lists display a vertical set of related content.","status":"stable"},"loading_inline":{"category":"state_and_progress_indicators","description":"Inline spinner while content loads or a background request is still processing.","status":"stable"},"map":{"category":"data_visualization","description":"This component provides a wrapping class to place around the MapLibre library.","status":"stable"},"message":{"category":"message_text_patterns","description":"Conversation-style block with optional avatar, status, caption, body, and timestamp.","status":"stable"},"multi_level_select":{"category":"form_selection","description":"The MultiLevelSelect component renders a multi leveled select dropdown based on data from the User.","status":"stable"},"multiple_users":{"category":"user","description":"Shows several people tied to one record when a single avatar would hide shared ownership.","status":"stable"},"multiple_users_stacked":{"category":"user","description":"Overlapping avatars in tight spaces to hint many collaborators without naming each.","status":"stable"},"nav":{"category":"navigation","description":"Grouped navigation links for pages or in-page sections; horizontal or vertical variants.","status":"stable","looksLike":["Vertical or horizontal navigation list of items"],"not":["list","bread_crumbs","button_toolbar"],"gotchas":["Sidebars are often variant=\"subtle\"; compose with NavItem children"],"cues":{"typicalProps":["orientation","variant"],"readPlayground":true}},"online_status":{"category":"tags","description":"Online Status is a small indicator that lets the user know the status of a person or item.","status":"stable"},"overlay":{"category":"layout_and_structure","description":"Full screen overlay for modals and dialogs.","status":"stable"},"pagination":{"category":"navigation","description":"Pagination for navigating through multiple pages of content.","status":"stable"},"passphrase":{"category":"form_input","description":"Secure password input with strength indicator and show/hide toggle.","status":"stable"},"pb_bar_graph":{"category":"data_visualization","description":"Bar graphs are used to compare data. Bar graphs are not typically used to show percentages.","status":"stable"},"pb_circle_chart":{"category":"data_visualization","description":"Circular chart for displaying proportional data.","status":"stable"},"pb_gauge_chart":{"category":"data_visualization","description":"Circular gauge chart for displaying a single value within a range.","status":"stable"},"pb_line_graph":{"category":"data_visualization","description":"Line graph for displaying data trends over time.","status":"stable"},"person":{"category":"form_and_dashboard_text_patterns","description":"This component is broken down into a first name last name format with normal and bold weighted text.","status":"stable"},"person_contact":{"category":"form_and_dashboard_text_patterns","description":"This component can be used to display a person contact information.","status":"stable"},"phone_number_input":{"category":"form_input","description":"International phone number input with country code selection and formatting.","status":"stable"},"pill":{"category":"tags","description":"A pill uses both a keyword and a specific color to categorize an item.","status":"stable","looksLike":["Small rounded capsule / chip with short status text","Colored tag next to a title (Active, Pending, etc.)"],"not":["badge","form_pill","label_pill"],"gotchas":["Omit text to render children such as an Icon. Passing text takes precedence over children","notification uses primary by default; set variant to error for the red treatment. Other variants are ignored when notification is true"],"cues":{"typicalProps":["text","variant"]}},"popover":{"category":"alerts_and_dialogs","description":"Anchored panel for short content, mini forms, or menus. Click the trigger to toggle it open.","status":"stable","looksLike":["Anchored floating panel near a trigger (not full-screen modal)"],"not":["dialog","tooltip","dropdown"]},"progress_pills":{"category":"state_and_progress_indicators","description":"Step chips along a sequence—shows completed, current, and upcoming stages over time.","status":"stable"},"progress_simple":{"category":"state_and_progress_indicators","description":"Linear progress for an operation; add labels or percentages so progress is obvious.","status":"stable"},"progress_step":{"category":"state_and_progress_indicators","description":"Wizard steps marked completed, active, or inactive for multi-phase flows.","status":"stable"},"radio":{"category":"form_selection","description":"Radio is a control that allows the user to only choose one predefined option.","status":"stable","looksLike":["Circular radio for single choice in a group"],"not":["checkbox","toggle","selectable_card"]},"rich_text_editor":{"category":"form_input","description":"Full-featured text editor with formatting options.","status":"stable"},"section_separator":{"category":"layout_and_structure","description":"A divider line that visually separates and organizes content into distinct sections.","status":"stable","looksLike":["Horizontal divider line between content blocks"],"not":["flex"],"gotchas":["Usually needs width=\"100%\" or it collapses"]},"select":{"category":"form_selection","description":"Dropdown where the user picks one option from a list, styled like other form fields.","status":"stable","looksLike":["Native-styled single-select dropdown form field"],"not":["dropdown","typeahead","multi_level_select"]},"selectable_card":{"category":"form_selection","description":"Selectable card with clear selected and unselected visuals; common for plans or tiers.","status":"stable","looksLike":["Card that looks selectable (radio/checkbox behavior), often in a plan/tier group"],"not":["card","selectable_card_icon"],"gotchas":["Must be a direct child of FormGroup for selection to work"],"cues":{"typicalProps":["checked","inputId"]}},"selectable_card_icon":{"category":"form_selection","description":"Selectable card variant with icon display for visual selection options.","status":"stable"},"selectable_icon":{"category":"form_selection","description":"Icon-based selection input for compact visual choices.","status":"stable"},"selectable_list":{"category":"form_selection","description":"List of items that can be selected, supporting single or multiple selection.","status":"stable"},"skeleton_loading":{"category":"state_and_progress_indicators","description":"Placeholder loading state that mimics the shape of content.","status":"stable"},"source":{"category":"form_and_dashboard_text_patterns","description":"Shows where a record or lead came from; flexible for other attribution labels too.","status":"stable"},"star_rating":{"category":"icons_and_images","description":"Star rating for opinions or scores; pair with reviews or labels for real meaning.","status":"stable"},"stat_change":{"category":"form_and_dashboard_text_patterns","description":"Displays the increase, decrease, or neutral change in data.","status":"stable"},"stat_value":{"category":"form_and_dashboard_text_patterns","description":"Prominent numeric stat for dashboards; optional label explains what the figure means.","status":"stable"},"table":{"category":"data_visualization","description":"Structured rows and columns of data, often with sorting, filtering, and pagination.","status":"stable","looksLike":["Simple HTML-like data table without nested expandable tree rows"],"not":["advanced_table"],"cues":{"composedOf":["Table.Head","Table.Body","Table.Row","Table.Cell"]}},"text_input":{"category":"form_input","description":"Area where user can enter small amount of text. Commonly used in forms.","status":"stable","looksLike":["Single-line labeled text field"],"not":["textarea","typeahead","phone_number_input","passphrase","select"],"gotchas":["required ≠ requiredIndicator — use both when the field is required"],"cues":{"typicalProps":["label","placeholder","required","requiredIndicator"]}},"textarea":{"category":"form_input","description":"Area where user can enter larger amounts of text. Commonly used in forms.","status":"stable","looksLike":["Multi-line text field"],"not":["text_input","rich_text_editor"]},"time":{"category":"date_and_time_text_patterns","description":"Displays a time of day with optional timezone and icon, in large or compact layouts.","status":"stable"},"time_picker":{"category":"form_selection","description":"A time picker component that allows users to select a time independently of the date.","status":"stable"},"time_range_inline":{"category":"date_and_time_text_patterns","description":"Displays a time range in an inline format.","status":"stable"},"time_stacked":{"category":"date_and_time_text_patterns","description":"Displays time in a vertical stacked format.","status":"stable"},"timeline":{"category":"state_and_progress_indicators","description":"A timeline with solid or dotted connectors to show sequences, phases, or gaps in time.","status":"stable"},"timestamp":{"category":"date_and_time_text_patterns","description":"Low profile component for displaying time; elapsed, current, future, or otherwise.","status":"stable","looksLike":["Relative or absolute time string (e.g. \"30 minutes ago\")"],"not":["time","date","date_time"],"gotchas":["Pass a Date / time object via timestamp prop — display string is not the prop value"]},"title":{"category":"typography","description":"Heading levels Title 1-4; keep semantic order and do not skip levels on a page.","status":"stable","looksLike":["Page or section heading — larger/bolder than body"],"not":["body","caption","detail","title_count","title_detail"],"cues":{"typicalProps":["text","size"]}},"title_count":{"category":"form_and_dashboard_text_patterns","description":"Title with a related count, in default or larger dashboard-friendly sizing.","status":"stable"},"title_detail":{"category":"form_and_dashboard_text_patterns","description":"This component can be used in many versatile ways. It's made up of a Title 4 and light Body component.","status":"stable"},"toggle":{"category":"form_elements","description":"On/off switch for settings, feature flags, or any binary choice in a form.","status":"stable","looksLike":["On/off switch control"],"not":["checkbox"]},"tooltip":{"category":"alerts_and_dialogs","description":"Small overlay providing contextual information on hover or focus.","status":"stable","looksLike":["Tiny hover/focus hint bubble"],"not":["popover","dialog"]},"typeahead":{"category":"form_input","description":"Autocomplete options that narrow as users type, cutting errors and extra typing.","status":"stable","looksLike":["Searchable autocomplete field that filters options as you type"],"not":["select","dropdown","text_input"]},"user":{"category":"user","description":"Avatar with name, title, territory, and optional extras—the standard rich user row.","status":"stable"},"user_badge":{"category":"icons_and_images","description":"Small badge on an avatar for programs or achievements so standout users read quickly.","status":"stable"},"weekday_stacked":{"category":"date_and_time_text_patterns","description":"Displays day of week and date in a stacked format.","status":"stable"}}}
1
+ {"description":"Visual → Playbook kit map for screenshot and design handoffs. Use this before guessing kit names from visuals.","howToUse":["Decompose the screenshot top-down: page regions → sections → controls → text","Match each region to kits via looksLike / typographyByVisual / layoutCues","Resolve conflicts with not[] and gotchas","Map px spacing to spacingPxToToken; then open kits/<name>.schema.json + playgrounds/<name>.json"],"spacingPxToToken":{"0":"none","4":"xxs","8":"xs","16":"sm","24":"md","32":"lg","40":"xl","48":"xxl"},"typographyByVisual":[{"when":"Bold text, roughly ≥20px","kit":"title","props":{"size":3}},{"when":"Bold text, roughly 14–18px","kit":"title","props":{"size":4}},{"when":"Small muted text, roughly ≤12px","kit":"caption","props":{"size":"xs"}},{"when":"Bold small/medium label (not a heading)","kit":"detail"},{"when":"Default paragraph / body copy","kit":"body"}],"layoutCues":[{"when":"Horizontal or vertical auto-layout / flex row or column of siblings","kit":"flex"},{"when":"Surface with fill + border/radius containing content","kit":"card"},{"when":"Full-bleed page/section background color or image","kit":"background"},{"when":"Sidebar + main content regions","kit":"layout"},{"when":"Thin horizontal rule / divider between sections","kit":"section_separator"}],"categories":{"advanced_table":{"description":"The Advanced Table can be used to display complex, nested data in a way that allows for expansion and/or sorting."},"alerts_and_dialogs":{"description":"Components for displaying alerts, confirmations, and overlay content to users."},"buttons":{"description":"Buttons are used primarily for actions, such as “Save” and “Cancel”. Link Buttons are used for less important or less commonly used actions, such as “view shipping settings”."},"data_visualization":{"description":"Components for displaying data in tables, lists, charts, and graphs."},"date_and_time_text_patterns":{"description":"Components for displaying dates and times in various formats."},"form_and_dashboard_text_patterns":{"description":"Components for displaying structured data on forms and dashboards."},"form_elements":{"description":"Form wrapper components and specialized form controls."},"form_input":{"description":"Components for text-based user input in forms."},"form_selection":{"description":"Components for selecting options, dates, and making choices in forms."},"icons_and_images":{"description":"Components for displaying icons, images, and visual media."},"layout_and_structure":{"description":"Components for structuring and organizing page layouts and content containers."},"message_text_patterns":{"description":"Components for displaying messages and highlighting content."},"navigation":{"description":"Components for navigation, breadcrumbs, and pagination."},"state_and_progress_indicators":{"description":"Components for showing loading states, progress, and timelines."},"tags":{"description":"Components for tags, badges, pills, and status indicators."},"typography":{"description":"Text components for consistent typography throughout the application."},"user":{"description":"Components for displaying user information, avatars, and user-related data."}},"kits":{"advanced_table":{"category":"advanced_table","description":"The Advanced Table can be used to display complex, nested data in a way that allows for expansion and/or sorting.","status":"stable","sections":[{"name":"default","description":"Minimal table: required props and structure before adding features."},{"name":"sorting","description":"Sortable headers, controlled sort state, and custom compare logic."},{"name":"pagination_&_data_states","description":"Paged or infinite data plus loading and empty states."},{"name":"row_interaction","description":"Select, expand, subrows, pinning; row highlights and bulk actions."},{"name":"column_configuration","description":"Define columns: headers, visibility, grouping, borders, widths."},{"name":"cell_behavior","description":"What each cell shows and does: custom content, edit, loading."},{"name":"layout_&_positioning","description":"Scroll, sticky headers/columns, responsive layout, fullscreen modes."},{"name":"styling","description":"Styling per row or column: padding, color, and border."}],"looksLike":["Complex data grid with expand/collapse nested rows","Sortable headers, row selection, column visibility, sticky columns"],"not":["table"],"gotchas":["Requires columnDefinitions + tableData","Copy shapes from playgrounds/advanced_table.json samples","Nested rows use children arrays; first column often uses cellAccessors"],"cues":{"typicalProps":["columnDefinitions","tableData"]}},"avatar":{"category":"user","description":"User photo for recognition. Prefer User when showing a name; Avatar alone if names are hidden.","status":"stable","looksLike":["Circular user image or initials"],"not":["user_badge","multiple_users","image"],"gotchas":["Use name prop for initials — do not use layer/spec text as the person name"],"cues":{"typicalProps":["name","size","imageUrl"]}},"background":{"category":"layout_and_structure","description":"The Background component is used for adding a background to a page or to any container.","status":"stable"},"badge":{"category":"tags","description":"Badges can be used for notification, tags, and status. They are used for count and numbers.","status":"stable","looksLike":["Small numeric or count indicator, often on an icon or nav item"],"not":["pill","form_pill","user_badge"],"gotchas":["Prefer text prop for the displayed value"],"cues":{"typicalProps":["text","variant"]}},"body":{"category":"typography","description":"Default paragraph style. Step to light, then lighter, only to de-emphasize supporting lines.","status":"stable","looksLike":["Standard paragraph text"],"not":["title","caption","detail"],"cues":{"typicalProps":["text","color"]}},"bread_crumbs":{"category":"navigation","description":"BreadCrumbs can be used for keeping a user aware of their route location.","status":"stable"},"button":{"category":"buttons","description":"Primary Button for main tasks; secondary and danger variants for other actions.","status":"stable","looksLike":["Filled or outline rectangular action with a label","Primary blue CTA, secondary outline, or red danger action","Text that looks like a link-styled control for a lesser action"],"not":["circle_icon_button","icon_button","link","form_pill"],"variantsFromVisual":{"solid blue / filled primary":"primary","outline / ghost secondary":"secondary","red destructive":"danger","text-only link style":"link","emoji/reaction with count":"reaction"},"cues":{"typicalProps":["variant","text","size","icon"]}},"button_toolbar":{"category":"buttons","description":"This component should primarily hold the most commonly used buttons.","status":"stable"},"caption":{"category":"typography","description":"Supplementary text beside inputs or blocks; use large caption when the note spans more content.","status":"stable","looksLike":["Small supporting / helper / metadata text under a field or title"],"not":["body","detail","title"],"cues":{"typicalProps":["text","size"]}},"card":{"category":"layout_and_structure","description":"Content container with optional header, body sections, and various styling options.","status":"stable","looksLike":["White/light panel with border or shadow wrapping a content block"],"not":["background","selectable_card","dialog"],"cues":{"typicalProps":["padding","borderNone","shadow"]}},"checkbox":{"category":"form_selection","description":"Checkbox is used for a list of selections that are meant to have one or more options checked.","status":"stable","looksLike":["Square checkbox for multi-select"],"not":["radio","toggle","selectable_card"]},"circle_icon_button":{"category":"buttons","description":"Round icon-only button; the icon must clearly show the action because there is no label.","status":"stable","looksLike":["Round icon-only control with no text label"],"not":["button","icon_button","icon_circle"],"cues":{"typicalProps":["icon","variant"]}},"collapsible":{"category":"layout_and_structure","description":"Collapsible content that can be expanded or collapsed.","status":"stable"},"contact":{"category":"form_and_dashboard_text_patterns","description":"Use to display customer's or user's contact information.","status":"stable"},"container":{"category":"layout_and_structure","description":"The Container component is used as a wrapper for the content of a page or to any container.","status":"stable"},"copy_button":{"category":"buttons","description":"Button that copies text to clipboard with visual feedback.","status":"stable"},"currency":{"category":"form_and_dashboard_text_patterns","description":"Formats money for dashboards and summaries. Pair with labels so amounts stay clear.","status":"stable","looksLike":["Formatted money amount, often large on dashboards"],"not":["dashboard_value","stat_value"]},"dashboard_value":{"category":"form_and_dashboard_text_patterns","description":"Large dashboard number for quick metrics. Use Currency when the value is money.","status":"stable","looksLike":["Large non-currency metric number on a dashboard"],"not":["currency","stat_value"]},"date":{"category":"date_and_time_text_patterns","description":"Use to display the date. Year will not display by default if it is the current year.","status":"stable"},"date_picker":{"category":"form_selection","description":"Calendar date field powered by flatpickr; props cover common cases without custom JS.","status":"stable"},"date_range_inline":{"category":"date_and_time_text_patterns","description":"Use to display a date range. Year will not show by default if it is the current year.","status":"stable"},"date_range_stacked":{"category":"date_and_time_text_patterns","description":"Displays a date range in a vertical stacked format.","status":"stable"},"date_stacked":{"category":"date_and_time_text_patterns","description":"Displays the date stacked with the month and day. Default behavior does not show the current year.","status":"stable"},"date_time":{"category":"date_and_time_text_patterns","description":"Combined date and time. Respects time zones; defaults to America/New_York when not set.","status":"stable"},"date_time_stacked":{"category":"date_and_time_text_patterns","description":"Displays date and time in a vertical stacked format.","status":"stable"},"date_year_stacked":{"category":"date_and_time_text_patterns","description":"This component is a simple option for displaying dates in a month, day, and year format.","status":"stable"},"detail":{"category":"typography","description":"Used for tables or designs with large amounts of data or text.","status":"stable","looksLike":["Compact bold label text, denser than Body, not a Title"],"not":["body","caption","title"],"cues":{"typicalProps":["text"]}},"dialog":{"category":"alerts_and_dialogs","description":"Modal for confirmations, forms, or focus. Supports alert modals for various statuses.","status":"stable","looksLike":["Centered modal overlay with header/body/footer"],"not":["popover","tooltip","lightbox","fixed_confirmation_toast"],"cues":{"composedOf":["Dialog.Header","Dialog.Body","Dialog.Footer"]}},"distribution_bar":{"category":"data_visualization","description":"Part-to-whole comparison like a pie chart. Default mode stresses share without raw numbers.","status":"stable"},"draggable":{"category":"layout_and_structure","description":"Drag and drop functionality for reordering items.","status":"stable"},"dropdown":{"category":"form_selection","description":"Customizable dropdown menu with trigger element and various option configurations.","status":"stable","looksLike":["Custom menu triggered by a control, with Dropdown.Option children"],"not":["select","typeahead"],"cues":{"readPlayground":true}},"empty_state":{"category":"state_and_progress_indicators","description":"Empty state placeholder for when no content is available.","status":"stable","looksLike":["Centered empty-results illustration/message with optional CTA"],"not":["card","dialog"]},"file_upload":{"category":"form_elements","description":"Allows users to upload files via drag-and-drop or file browser.","status":"stable"},"filter":{"category":"data_visualization","description":"Search and filter UI. See production /dev_docs/search for real integration examples.","status":"stable","looksLike":["Search + filter controls bar above a results list/table"],"not":["typeahead","text_input"]},"fixed_confirmation_toast":{"category":"alerts_and_dialogs","description":"Fixed alerts: success after completion, error when blocked, neutral for informational context.","status":"stable","looksLike":["Fixed success/error/neutral banner toast, usually top of viewport"],"not":["dialog","pill"],"cues":{"typicalProps":["status","text"]}},"flex":{"category":"layout_and_structure","description":"Flexbox layout helper for responsive rows, columns, spacing, and alignment in UIs.","status":"stable","looksLike":["Row or column of aligned siblings with gap/spacing"],"not":["card","layout","list"],"gotchas":["justify \"spaceBetween\" from Figma → Playbook \"between\""],"cues":{"typicalProps":["orientation","justify","align","gap","spacing"]}},"form":{"category":"form_elements","description":"The Form component provides consumers with a convenient, consistently styled <form> wrapper.","status":"stable"},"form_group":{"category":"form_elements","description":"Groups related form fields together with optional labels.","status":"stable","looksLike":["Group of SelectableCards / radios / checkboxes sharing one choice group"],"not":["flex","card"],"gotchas":["Children must be direct SelectableCard/Radio/Checkbox — no wrapping Flex"]},"form_pill":{"category":"form_elements","description":"Pill-shaped form elements for tags, selections, or filters.","status":"stable","looksLike":["Removable filter/tag chip inside a form or filter bar, often with an ×"],"not":["pill","badge","label_pill"],"cues":{"typicalProps":["text"]}},"full_screen":{"category":"layout_and_structure","description":"Full Screen component","status":"stable"},"hashtag":{"category":"tags","description":"Hashtag is used to display home, project and other forms of IDs. They can be used as a link.","status":"stable"},"highlight":{"category":"message_text_patterns","description":"Highlight is used to pick out or emphasize content.","status":"stable"},"home_address_street":{"category":"form_and_dashboard_text_patterns","description":"Street address with unit, city, state, ZIP, and optional project hashtag linking to work.","status":"stable"},"icon":{"category":"icons_and_images","description":"Graphic symbol for an object, action, or status; add nearby text if meaning could be vague.","status":"stable"},"icon_circle":{"category":"icons_and_images","description":"Icon centered in a circle for emphasis, touch targets, or consistent visual weight.","status":"stable"},"icon_stat_value":{"category":"icons_and_images","description":"Displays a statistic value with an associated icon.","status":"stable"},"icon_value":{"category":"icons_and_images","description":"Icon paired with a value—often a number—for compact KPIs, stats, or dense summaries.","status":"stable"},"image":{"category":"icons_and_images","description":"A responsive image component.","status":"stable"},"label_pill":{"category":"form_and_dashboard_text_patterns","description":"This component combines the Caption and Pill components with all of their variants.","status":"stable","looksLike":["Caption label stacked with a Pill underneath"],"not":["pill","label_value"],"cues":{"composedOf":["caption","pill"]}},"label_value":{"category":"form_and_dashboard_text_patterns","description":"This component can be very versatile when used to display text data.","status":"stable"},"layout":{"category":"layout_and_structure","description":"Layouts used for positioning content inside of pages, cards, or containers.","status":"stable"},"legend":{"category":"data_visualization","description":"A key used to compare the variables and their value in any given graph.","status":"stable"},"lightbox":{"category":"icons_and_images","description":"Fullscreen dimmed overlay for enlarged images or media that covers the viewport.","status":"stable"},"link":{"category":"typography","description":"Text link for navigation to other pages or sections.","status":"stable","looksLike":["Inline text link in body copy, not a button-shaped control"],"not":["button"],"cues":{"typicalProps":["text","href"]}},"list":{"category":"data_visualization","description":"Lists display a vertical set of related content.","status":"stable"},"loading_inline":{"category":"state_and_progress_indicators","description":"Inline spinner while content loads or a background request is still processing.","status":"stable"},"map":{"category":"data_visualization","description":"This component provides a wrapping class to place around the MapLibre library.","status":"stable"},"message":{"category":"message_text_patterns","description":"Conversation-style block with optional avatar, status, caption, body, and timestamp.","status":"stable"},"multi_level_select":{"category":"form_selection","description":"The MultiLevelSelect component renders a multi leveled select dropdown based on data from the User.","status":"stable"},"multiple_users":{"category":"user","description":"Shows several people tied to one record when a single avatar would hide shared ownership.","status":"stable"},"multiple_users_stacked":{"category":"user","description":"Overlapping avatars in tight spaces to hint many collaborators without naming each.","status":"stable"},"nav":{"category":"navigation","description":"Grouped navigation links for pages or in-page sections; horizontal or vertical variants.","status":"stable","looksLike":["Vertical or horizontal navigation list of items"],"not":["list","bread_crumbs","button_toolbar"],"gotchas":["Sidebars are often variant=\"subtle\"; compose with NavItem children"],"cues":{"typicalProps":["orientation","variant"],"readPlayground":true}},"online_status":{"category":"tags","description":"Online Status is a small indicator that lets the user know the status of a person or item.","status":"stable"},"overlay":{"category":"layout_and_structure","description":"Full screen overlay for modals and dialogs.","status":"stable"},"pagination":{"category":"navigation","description":"Pagination for navigating through multiple pages of content.","status":"stable"},"passphrase":{"category":"form_input","description":"Secure password input with strength indicator and show/hide toggle.","status":"stable"},"pb_bar_graph":{"category":"data_visualization","description":"Bar graphs are used to compare data. Bar graphs are not typically used to show percentages.","status":"stable"},"pb_circle_chart":{"category":"data_visualization","description":"Circular chart for displaying proportional data.","status":"stable"},"pb_gauge_chart":{"category":"data_visualization","description":"Circular gauge chart for displaying a single value within a range.","status":"stable"},"pb_line_graph":{"category":"data_visualization","description":"Line graph for displaying data trends over time.","status":"stable"},"person":{"category":"form_and_dashboard_text_patterns","description":"This component is broken down into a first name last name format with normal and bold weighted text.","status":"stable"},"person_contact":{"category":"form_and_dashboard_text_patterns","description":"This component can be used to display a person contact information.","status":"stable"},"phone_number_input":{"category":"form_input","description":"International phone number input with country code selection and formatting.","status":"stable"},"pill":{"category":"tags","description":"A pill uses both a keyword and a specific color to categorize an item.","status":"stable","looksLike":["Small rounded capsule / chip with short status text","Colored tag next to a title (Active, Pending, etc.)"],"not":["badge","form_pill","label_pill"],"gotchas":["Omit text to render children such as an Icon. Passing text takes precedence over children","notification uses primary by default; set variant to error for the red treatment. Other variants are ignored when notification is true"],"cues":{"typicalProps":["text","variant"]}},"popover":{"category":"alerts_and_dialogs","description":"Anchored panel for short content, mini forms, or menus. Click the trigger to toggle it open.","status":"stable","looksLike":["Anchored floating panel near a trigger (not full-screen modal)"],"not":["dialog","tooltip","dropdown"]},"progress_pills":{"category":"state_and_progress_indicators","description":"Step chips along a sequence—shows completed, current, and upcoming stages over time.","status":"stable"},"progress_simple":{"category":"state_and_progress_indicators","description":"Linear progress for an operation; add labels or percentages so progress is obvious.","status":"stable"},"progress_step":{"category":"state_and_progress_indicators","description":"Wizard steps marked completed, active, or inactive for multi-phase flows.","status":"stable"},"radio":{"category":"form_selection","description":"Radio is a control that allows the user to only choose one predefined option.","status":"stable","looksLike":["Circular radio for single choice in a group"],"not":["checkbox","toggle","selectable_card"]},"rich_text_editor":{"category":"form_input","description":"Full-featured text editor with formatting options.","status":"stable"},"section_separator":{"category":"layout_and_structure","description":"A divider line that visually separates and organizes content into distinct sections.","status":"stable","looksLike":["Horizontal divider line between content blocks"],"not":["flex"],"gotchas":["Usually needs width=\"100%\" or it collapses"]},"select":{"category":"form_selection","description":"Dropdown where the user picks one option from a list, styled like other form fields.","status":"stable","looksLike":["Native-styled single-select dropdown form field"],"not":["dropdown","typeahead","multi_level_select"]},"selectable_card":{"category":"form_selection","description":"Selectable card with clear selected and unselected visuals; common for plans or tiers.","status":"stable","looksLike":["Card that looks selectable (radio/checkbox behavior), often in a plan/tier group"],"not":["card","selectable_card_icon"],"gotchas":["Must be a direct child of FormGroup for selection to work"],"cues":{"typicalProps":["checked","inputId"]}},"selectable_card_icon":{"category":"form_selection","description":"Selectable card variant with icon display for visual selection options.","status":"stable"},"selectable_icon":{"category":"form_selection","description":"Icon-based selection input for compact visual choices.","status":"stable"},"selectable_list":{"category":"form_selection","description":"List of items that can be selected, supporting single or multiple selection.","status":"stable"},"skeleton_loading":{"category":"state_and_progress_indicators","description":"Placeholder loading state that mimics the shape of content.","status":"stable"},"source":{"category":"form_and_dashboard_text_patterns","description":"Shows where a record or lead came from; flexible for other attribution labels too.","status":"stable"},"star_rating":{"category":"icons_and_images","description":"Star rating for opinions or scores; pair with reviews or labels for real meaning.","status":"stable"},"stat_change":{"category":"form_and_dashboard_text_patterns","description":"Displays the increase, decrease, or neutral change in data.","status":"stable"},"stat_value":{"category":"form_and_dashboard_text_patterns","description":"Prominent numeric stat for dashboards; optional label explains what the figure means.","status":"stable"},"table":{"category":"data_visualization","description":"Structured rows and columns of data, often with sorting, filtering, and pagination.","status":"stable","looksLike":["Simple HTML-like data table without nested expandable tree rows"],"not":["advanced_table"],"cues":{"composedOf":["Table.Head","Table.Body","Table.Row","Table.Cell"]}},"text_input":{"category":"form_input","description":"Area where user can enter small amount of text. Commonly used in forms.","status":"stable","looksLike":["Single-line labeled text field"],"not":["textarea","typeahead","phone_number_input","passphrase","select"],"gotchas":["required ≠ requiredIndicator — use both when the field is required"],"cues":{"typicalProps":["label","placeholder","required","requiredIndicator"]}},"textarea":{"category":"form_input","description":"Area where user can enter larger amounts of text. Commonly used in forms.","status":"stable","looksLike":["Multi-line text field"],"not":["text_input","rich_text_editor"]},"time":{"category":"date_and_time_text_patterns","description":"Displays a time of day with optional timezone and icon, in large or compact layouts.","status":"stable"},"time_picker":{"category":"form_selection","description":"A time picker component that allows users to select a time independently of the date.","status":"stable"},"time_range_inline":{"category":"date_and_time_text_patterns","description":"Displays a time range in an inline format.","status":"stable"},"time_stacked":{"category":"date_and_time_text_patterns","description":"Displays time in a vertical stacked format.","status":"stable"},"timeline":{"category":"state_and_progress_indicators","description":"A timeline with solid or dotted connectors to show sequences, phases, or gaps in time.","status":"stable"},"timestamp":{"category":"date_and_time_text_patterns","description":"Low profile component for displaying time; elapsed, current, future, or otherwise.","status":"stable","looksLike":["Relative or absolute time string (e.g. \"30 minutes ago\")"],"not":["time","date","date_time"],"gotchas":["Pass a Date / time object via timestamp prop — display string is not the prop value"]},"title":{"category":"typography","description":"Heading levels Title 1-4; keep semantic order and do not skip levels on a page.","status":"stable","looksLike":["Page or section heading — larger/bolder than body"],"not":["body","caption","detail","title_count","title_detail"],"cues":{"typicalProps":["text","size"]}},"title_count":{"category":"form_and_dashboard_text_patterns","description":"Title with a related count, in default or larger dashboard-friendly sizing.","status":"stable"},"title_detail":{"category":"form_and_dashboard_text_patterns","description":"This component can be used in many versatile ways. It's made up of a Title 4 and light Body component.","status":"stable"},"toggle":{"category":"form_elements","description":"On/off switch for settings, feature flags, or any binary choice in a form.","status":"stable","looksLike":["On/off switch control"],"not":["checkbox"]},"tooltip":{"category":"alerts_and_dialogs","description":"Small overlay providing contextual information on hover or focus.","status":"stable","looksLike":["Tiny hover/focus hint bubble"],"not":["popover","dialog"]},"typeahead":{"category":"form_input","description":"Autocomplete options that narrow as users type, cutting errors and extra typing.","status":"stable","looksLike":["Searchable autocomplete field that filters options as you type"],"not":["select","dropdown","text_input"]},"user":{"category":"user","description":"Avatar with name, title, territory, and optional extras—the standard rich user row.","status":"stable"},"user_badge":{"category":"icons_and_images","description":"Small badge on an avatar for programs or achievements so standout users read quickly.","status":"stable"},"weekday_stacked":{"category":"date_and_time_text_patterns","description":"Displays day of week and date in a stacked format.","status":"stable"}}}