@airtable/blocks 0.0.0-experimental-3e47d4d04-20250909 → 0.0.0-experimental-446b49015-20251008

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 (449) hide show
  1. package/dist/esm/base/models/base.js +1 -35
  2. package/dist/esm/base/types/airtable_interface.js +1 -3
  3. package/dist/esm/base/ui/block_wrapper.js +131 -96
  4. package/dist/esm/base/ui/cell_renderer.js +5 -176
  5. package/dist/esm/base/ui/global_alert.js +7 -3
  6. package/dist/esm/base/ui/global_css_helpers.js +28 -0
  7. package/dist/esm/base/ui/ui.js +1 -21
  8. package/dist/esm/base/ui/unstable_standalone_ui.js +28 -26
  9. package/dist/esm/base/ui/use_loadable.js +2 -3
  10. package/dist/esm/interface/models/base.js +0 -5
  11. package/dist/esm/interface/models/record_store.js +3 -0
  12. package/dist/esm/interface/types/airtable_interface.js +2 -3
  13. package/dist/esm/interface/ui/block_wrapper.js +45 -54
  14. package/dist/esm/interface/ui/cell_renderer.js +19 -0
  15. package/dist/esm/interface/ui/global_css_helpers.js +17 -0
  16. package/dist/esm/interface/ui/ui.js +1 -1
  17. package/dist/esm/interface/ui/use_custom_properties.js +43 -14
  18. package/dist/esm/shared/models/base_core.js +18 -3
  19. package/dist/esm/shared/private_utils.js +51 -1
  20. package/dist/esm/shared/sdk_core.js +1 -1
  21. package/dist/esm/shared/ui/cell_renderer.js +137 -0
  22. package/dist/esm/shared/ui/use_watchable.js +2 -3
  23. package/dist/types/src/base/models/base.d.ts.map +1 -1
  24. package/dist/types/src/base/types/airtable_interface.d.ts +1 -3
  25. package/dist/types/src/base/types/airtable_interface.d.ts.map +1 -1
  26. package/dist/types/src/base/types/base.d.ts +0 -1
  27. package/dist/types/src/base/types/base.d.ts.map +1 -1
  28. package/dist/types/src/base/ui/block_wrapper.d.ts +2 -16
  29. package/dist/types/src/base/ui/block_wrapper.d.ts.map +1 -1
  30. package/dist/types/src/base/ui/cell_renderer.d.ts +6 -58
  31. package/dist/types/src/base/ui/cell_renderer.d.ts.map +1 -1
  32. package/dist/types/src/base/ui/global_css_helpers.d.ts +4 -0
  33. package/dist/types/src/base/ui/global_css_helpers.d.ts.map +1 -0
  34. package/dist/types/src/base/ui/ui.d.ts +1 -21
  35. package/dist/types/src/base/ui/ui.d.ts.map +1 -1
  36. package/dist/types/src/base/ui/unstable_standalone_ui.d.ts +2 -22
  37. package/dist/types/src/base/ui/unstable_standalone_ui.d.ts.map +1 -1
  38. package/dist/types/src/base/ui/use_loadable.d.ts.map +1 -1
  39. package/dist/types/src/interface/models/base.d.ts.map +1 -1
  40. package/dist/types/src/interface/types/airtable_interface.d.ts +6 -4
  41. package/dist/types/src/interface/types/airtable_interface.d.ts.map +1 -1
  42. package/dist/types/src/interface/ui/block_wrapper.d.ts +1 -4
  43. package/dist/types/src/interface/ui/block_wrapper.d.ts.map +1 -1
  44. package/dist/types/src/interface/ui/cell_renderer.d.ts +19 -0
  45. package/dist/types/src/interface/ui/cell_renderer.d.ts.map +1 -0
  46. package/dist/types/src/interface/ui/global_css_helpers.d.ts +3 -0
  47. package/dist/types/src/interface/ui/global_css_helpers.d.ts.map +1 -0
  48. package/dist/types/src/interface/ui/ui.d.ts +1 -1
  49. package/dist/types/src/interface/ui/ui.d.ts.map +1 -1
  50. package/dist/types/src/interface/ui/use_custom_properties.d.ts +7 -0
  51. package/dist/types/src/interface/ui/use_custom_properties.d.ts.map +1 -1
  52. package/dist/types/src/shared/models/base_core.d.ts.map +1 -1
  53. package/dist/types/src/shared/private_utils.d.ts +9 -1
  54. package/dist/types/src/shared/private_utils.d.ts.map +1 -1
  55. package/dist/types/src/shared/types/base_core.d.ts +1 -0
  56. package/dist/types/src/shared/types/base_core.d.ts.map +1 -1
  57. package/dist/types/src/shared/ui/cell_renderer.d.ts +32 -0
  58. package/dist/types/src/shared/ui/cell_renderer.d.ts.map +1 -0
  59. package/dist/types/src/shared/ui/use_watchable.d.ts.map +1 -1
  60. package/package.json +5 -39
  61. package/dist/esm/base/ui/baymax_utils.js +0 -455
  62. package/dist/esm/base/ui/box.js +0 -77
  63. package/dist/esm/base/ui/button.js +0 -143
  64. package/dist/esm/base/ui/choice_token.js +0 -84
  65. package/dist/esm/base/ui/collaborator_token.js +0 -115
  66. package/dist/esm/base/ui/color_palette.js +0 -185
  67. package/dist/esm/base/ui/color_palette_synced.js +0 -62
  68. package/dist/esm/base/ui/confirmation_dialog.js +0 -96
  69. package/dist/esm/base/ui/control_sizes.js +0 -92
  70. package/dist/esm/base/ui/create_detect_element_resize.js +0 -197
  71. package/dist/esm/base/ui/css_helpers.js +0 -17
  72. package/dist/esm/base/ui/dialog.js +0 -93
  73. package/dist/esm/base/ui/dialog_close_button.js +0 -96
  74. package/dist/esm/base/ui/field_icon.js +0 -37
  75. package/dist/esm/base/ui/field_picker.js +0 -91
  76. package/dist/esm/base/ui/field_picker_synced.js +0 -59
  77. package/dist/esm/base/ui/form_field.js +0 -102
  78. package/dist/esm/base/ui/geometry/geometry.js +0 -9
  79. package/dist/esm/base/ui/geometry/point.js +0 -12
  80. package/dist/esm/base/ui/geometry/rect.js +0 -44
  81. package/dist/esm/base/ui/geometry/size.js +0 -12
  82. package/dist/esm/base/ui/heading.js +0 -125
  83. package/dist/esm/base/ui/icon.js +0 -102
  84. package/dist/esm/base/ui/icon_config.js +0 -423
  85. package/dist/esm/base/ui/input.js +0 -152
  86. package/dist/esm/base/ui/input_synced.js +0 -59
  87. package/dist/esm/base/ui/key_codes.js +0 -66
  88. package/dist/esm/base/ui/label.js +0 -73
  89. package/dist/esm/base/ui/link.js +0 -189
  90. package/dist/esm/base/ui/loader.js +0 -52
  91. package/dist/esm/base/ui/modal.js +0 -135
  92. package/dist/esm/base/ui/model_picker_select.js +0 -50
  93. package/dist/esm/base/ui/popover.js +0 -312
  94. package/dist/esm/base/ui/progress_bar.js +0 -106
  95. package/dist/esm/base/ui/record_card.js +0 -556
  96. package/dist/esm/base/ui/record_card_list.js +0 -292
  97. package/dist/esm/base/ui/select.js +0 -182
  98. package/dist/esm/base/ui/select_and_select_buttons_helpers.js +0 -53
  99. package/dist/esm/base/ui/select_buttons.js +0 -150
  100. package/dist/esm/base/ui/select_buttons_synced.js +0 -55
  101. package/dist/esm/base/ui/select_synced.js +0 -58
  102. package/dist/esm/base/ui/switch.js +0 -160
  103. package/dist/esm/base/ui/switch_synced.js +0 -46
  104. package/dist/esm/base/ui/synced.js +0 -39
  105. package/dist/esm/base/ui/system/all_styles_set.js +0 -86
  106. package/dist/esm/base/ui/system/appearance/appearance_set.js +0 -21
  107. package/dist/esm/base/ui/system/appearance/background_color.js +0 -12
  108. package/dist/esm/base/ui/system/appearance/border.js +0 -48
  109. package/dist/esm/base/ui/system/appearance/border_radius.js +0 -12
  110. package/dist/esm/base/ui/system/appearance/box_shadow.js +0 -12
  111. package/dist/esm/base/ui/system/appearance/opacity.js +0 -12
  112. package/dist/esm/base/ui/system/dimensions/dimensions_set.js +0 -23
  113. package/dist/esm/base/ui/system/dimensions/height.js +0 -12
  114. package/dist/esm/base/ui/system/dimensions/max_height.js +0 -12
  115. package/dist/esm/base/ui/system/dimensions/max_width.js +0 -12
  116. package/dist/esm/base/ui/system/dimensions/min_height.js +0 -12
  117. package/dist/esm/base/ui/system/dimensions/min_width.js +0 -12
  118. package/dist/esm/base/ui/system/dimensions/width.js +0 -12
  119. package/dist/esm/base/ui/system/display.js +0 -13
  120. package/dist/esm/base/ui/system/flex_container/align_content.js +0 -9
  121. package/dist/esm/base/ui/system/flex_container/align_items.js +0 -9
  122. package/dist/esm/base/ui/system/flex_container/flex_container_set.js +0 -23
  123. package/dist/esm/base/ui/system/flex_container/flex_direction.js +0 -9
  124. package/dist/esm/base/ui/system/flex_container/flex_wrap.js +0 -9
  125. package/dist/esm/base/ui/system/flex_container/justify_content.js +0 -9
  126. package/dist/esm/base/ui/system/flex_container/justify_items.js +0 -10
  127. package/dist/esm/base/ui/system/flex_item/align_self.js +0 -9
  128. package/dist/esm/base/ui/system/flex_item/flex.js +0 -9
  129. package/dist/esm/base/ui/system/flex_item/flex_basis.js +0 -9
  130. package/dist/esm/base/ui/system/flex_item/flex_grow.js +0 -9
  131. package/dist/esm/base/ui/system/flex_item/flex_item_set.js +0 -25
  132. package/dist/esm/base/ui/system/flex_item/flex_shrink.js +0 -9
  133. package/dist/esm/base/ui/system/flex_item/justify_self.js +0 -10
  134. package/dist/esm/base/ui/system/flex_item/order.js +0 -9
  135. package/dist/esm/base/ui/system/index.js +0 -96
  136. package/dist/esm/base/ui/system/overflow.js +0 -15
  137. package/dist/esm/base/ui/system/position/bottom.js +0 -17
  138. package/dist/esm/base/ui/system/position/left.js +0 -17
  139. package/dist/esm/base/ui/system/position/position.js +0 -9
  140. package/dist/esm/base/ui/system/position/position_set.js +0 -23
  141. package/dist/esm/base/ui/system/position/right.js +0 -17
  142. package/dist/esm/base/ui/system/position/top.js +0 -17
  143. package/dist/esm/base/ui/system/position/z_index.js +0 -12
  144. package/dist/esm/base/ui/system/spacing/margin.js +0 -65
  145. package/dist/esm/base/ui/system/spacing/padding.js +0 -58
  146. package/dist/esm/base/ui/system/spacing/spacing_set.js +0 -15
  147. package/dist/esm/base/ui/system/typography/font_family.js +0 -12
  148. package/dist/esm/base/ui/system/typography/font_size.js +0 -12
  149. package/dist/esm/base/ui/system/typography/font_style.js +0 -9
  150. package/dist/esm/base/ui/system/typography/font_weight.js +0 -12
  151. package/dist/esm/base/ui/system/typography/letter_spacing.js +0 -12
  152. package/dist/esm/base/ui/system/typography/line_height.js +0 -9
  153. package/dist/esm/base/ui/system/typography/text_align.js +0 -9
  154. package/dist/esm/base/ui/system/typography/text_color.js +0 -12
  155. package/dist/esm/base/ui/system/typography/text_decoration.js +0 -9
  156. package/dist/esm/base/ui/system/typography/text_transform.js +0 -9
  157. package/dist/esm/base/ui/system/typography/typography_set.js +0 -31
  158. package/dist/esm/base/ui/system/utils/csstype.js +0 -1
  159. package/dist/esm/base/ui/system/utils/ensure_numbers_are_within_scale.js +0 -36
  160. package/dist/esm/base/ui/system/utils/get_style_props_for_responsive_prop.js +0 -67
  161. package/dist/esm/base/ui/system/utils/types.js +0 -1
  162. package/dist/esm/base/ui/table_picker.js +0 -64
  163. package/dist/esm/base/ui/table_picker_synced.js +0 -55
  164. package/dist/esm/base/ui/text.js +0 -109
  165. package/dist/esm/base/ui/text_button.js +0 -189
  166. package/dist/esm/base/ui/theme/default_theme/button_variants.js +0 -53
  167. package/dist/esm/base/ui/theme/default_theme/control_sizes.js +0 -96
  168. package/dist/esm/base/ui/theme/default_theme/heading_styles.js +0 -93
  169. package/dist/esm/base/ui/theme/default_theme/index.js +0 -31
  170. package/dist/esm/base/ui/theme/default_theme/input_variants.js +0 -32
  171. package/dist/esm/base/ui/theme/default_theme/link_variants.js +0 -29
  172. package/dist/esm/base/ui/theme/default_theme/select_buttons_variants.js +0 -66
  173. package/dist/esm/base/ui/theme/default_theme/select_variants.js +0 -44
  174. package/dist/esm/base/ui/theme/default_theme/switch_variants.js +0 -78
  175. package/dist/esm/base/ui/theme/default_theme/text_button_variants.js +0 -38
  176. package/dist/esm/base/ui/theme/default_theme/text_styles.js +0 -75
  177. package/dist/esm/base/ui/theme/default_theme/tokens.js +0 -205
  178. package/dist/esm/base/ui/theme/theme_context.js +0 -7
  179. package/dist/esm/base/ui/theme/use_theme.js +0 -4
  180. package/dist/esm/base/ui/tooltip.js +0 -165
  181. package/dist/esm/base/ui/types/aria_props.js +0 -1
  182. package/dist/esm/base/ui/types/data_attributes_prop.js +0 -1
  183. package/dist/esm/base/ui/types/tooltip_anchor_props.js +0 -1
  184. package/dist/esm/base/ui/use_form_field.js +0 -14
  185. package/dist/esm/base/ui/use_styled_system.js +0 -19
  186. package/dist/esm/base/ui/use_text_color_for_background_color.js +0 -9
  187. package/dist/esm/base/ui/view_picker.js +0 -82
  188. package/dist/esm/base/ui/view_picker_synced.js +0 -59
  189. package/dist/esm/base/ui/viewport_constraint.js +0 -120
  190. package/dist/esm/base/ui/with_styled_system.js +0 -120
  191. package/dist/types/src/base/ui/baymax_utils.d.ts +0 -2
  192. package/dist/types/src/base/ui/baymax_utils.d.ts.map +0 -1
  193. package/dist/types/src/base/ui/box.d.ts +0 -35
  194. package/dist/types/src/base/ui/box.d.ts.map +0 -1
  195. package/dist/types/src/base/ui/button.d.ts +0 -86
  196. package/dist/types/src/base/ui/button.d.ts.map +0 -1
  197. package/dist/types/src/base/ui/choice_token.d.ts +0 -49
  198. package/dist/types/src/base/ui/choice_token.d.ts.map +0 -1
  199. package/dist/types/src/base/ui/collaborator_token.d.ts +0 -45
  200. package/dist/types/src/base/ui/collaborator_token.d.ts.map +0 -1
  201. package/dist/types/src/base/ui/color_palette.d.ts +0 -77
  202. package/dist/types/src/base/ui/color_palette.d.ts.map +0 -1
  203. package/dist/types/src/base/ui/color_palette_synced.d.ts +0 -30
  204. package/dist/types/src/base/ui/color_palette_synced.d.ts.map +0 -1
  205. package/dist/types/src/base/ui/confirmation_dialog.d.ts +0 -66
  206. package/dist/types/src/base/ui/confirmation_dialog.d.ts.map +0 -1
  207. package/dist/types/src/base/ui/control_sizes.d.ts +0 -16
  208. package/dist/types/src/base/ui/control_sizes.d.ts.map +0 -1
  209. package/dist/types/src/base/ui/css_helpers.d.ts +0 -6
  210. package/dist/types/src/base/ui/css_helpers.d.ts.map +0 -1
  211. package/dist/types/src/base/ui/dialog.d.ts +0 -58
  212. package/dist/types/src/base/ui/dialog.d.ts.map +0 -1
  213. package/dist/types/src/base/ui/dialog_close_button.d.ts +0 -40
  214. package/dist/types/src/base/ui/dialog_close_button.d.ts.map +0 -1
  215. package/dist/types/src/base/ui/field_icon.d.ts +0 -25
  216. package/dist/types/src/base/ui/field_icon.d.ts.map +0 -1
  217. package/dist/types/src/base/ui/field_picker.d.ts +0 -34
  218. package/dist/types/src/base/ui/field_picker.d.ts.map +0 -1
  219. package/dist/types/src/base/ui/field_picker_synced.d.ts +0 -18
  220. package/dist/types/src/base/ui/field_picker_synced.d.ts.map +0 -1
  221. package/dist/types/src/base/ui/form_field.d.ts +0 -42
  222. package/dist/types/src/base/ui/form_field.d.ts.map +0 -1
  223. package/dist/types/src/base/ui/geometry/geometry.d.ts +0 -3
  224. package/dist/types/src/base/ui/geometry/geometry.d.ts.map +0 -1
  225. package/dist/types/src/base/ui/geometry/point.d.ts +0 -2
  226. package/dist/types/src/base/ui/geometry/point.d.ts.map +0 -1
  227. package/dist/types/src/base/ui/geometry/rect.d.ts +0 -2
  228. package/dist/types/src/base/ui/geometry/rect.d.ts.map +0 -1
  229. package/dist/types/src/base/ui/geometry/size.d.ts +0 -2
  230. package/dist/types/src/base/ui/geometry/size.d.ts.map +0 -1
  231. package/dist/types/src/base/ui/heading.d.ts +0 -64
  232. package/dist/types/src/base/ui/heading.d.ts.map +0 -1
  233. package/dist/types/src/base/ui/icon.d.ts +0 -45
  234. package/dist/types/src/base/ui/icon.d.ts.map +0 -1
  235. package/dist/types/src/base/ui/icon_config.d.ts +0 -424
  236. package/dist/types/src/base/ui/icon_config.d.ts.map +0 -1
  237. package/dist/types/src/base/ui/input.d.ts +0 -120
  238. package/dist/types/src/base/ui/input.d.ts.map +0 -1
  239. package/dist/types/src/base/ui/input_synced.d.ts +0 -18
  240. package/dist/types/src/base/ui/input_synced.d.ts.map +0 -1
  241. package/dist/types/src/base/ui/key_codes.d.ts +0 -2
  242. package/dist/types/src/base/ui/key_codes.d.ts.map +0 -1
  243. package/dist/types/src/base/ui/label.d.ts +0 -35
  244. package/dist/types/src/base/ui/label.d.ts.map +0 -1
  245. package/dist/types/src/base/ui/link.d.ts +0 -84
  246. package/dist/types/src/base/ui/link.d.ts.map +0 -1
  247. package/dist/types/src/base/ui/loader.d.ts +0 -38
  248. package/dist/types/src/base/ui/loader.d.ts.map +0 -1
  249. package/dist/types/src/base/ui/modal.d.ts +0 -54
  250. package/dist/types/src/base/ui/modal.d.ts.map +0 -1
  251. package/dist/types/src/base/ui/model_picker_select.d.ts +0 -19
  252. package/dist/types/src/base/ui/model_picker_select.d.ts.map +0 -1
  253. package/dist/types/src/base/ui/popover.d.ts +0 -106
  254. package/dist/types/src/base/ui/popover.d.ts.map +0 -1
  255. package/dist/types/src/base/ui/progress_bar.d.ts +0 -60
  256. package/dist/types/src/base/ui/progress_bar.d.ts.map +0 -1
  257. package/dist/types/src/base/ui/record_card.d.ts +0 -80
  258. package/dist/types/src/base/ui/record_card.d.ts.map +0 -1
  259. package/dist/types/src/base/ui/record_card_list.d.ts +0 -88
  260. package/dist/types/src/base/ui/record_card_list.d.ts.map +0 -1
  261. package/dist/types/src/base/ui/select.d.ts +0 -82
  262. package/dist/types/src/base/ui/select.d.ts.map +0 -1
  263. package/dist/types/src/base/ui/select_and_select_buttons_helpers.d.ts +0 -25
  264. package/dist/types/src/base/ui/select_and_select_buttons_helpers.d.ts.map +0 -1
  265. package/dist/types/src/base/ui/select_buttons.d.ts +0 -56
  266. package/dist/types/src/base/ui/select_buttons.d.ts.map +0 -1
  267. package/dist/types/src/base/ui/select_buttons_synced.d.ts +0 -18
  268. package/dist/types/src/base/ui/select_buttons_synced.d.ts.map +0 -1
  269. package/dist/types/src/base/ui/select_synced.d.ts +0 -18
  270. package/dist/types/src/base/ui/select_synced.d.ts.map +0 -1
  271. package/dist/types/src/base/ui/switch.d.ts +0 -82
  272. package/dist/types/src/base/ui/switch.d.ts.map +0 -1
  273. package/dist/types/src/base/ui/switch_synced.d.ts +0 -18
  274. package/dist/types/src/base/ui/switch_synced.d.ts.map +0 -1
  275. package/dist/types/src/base/ui/synced.d.ts +0 -23
  276. package/dist/types/src/base/ui/synced.d.ts.map +0 -1
  277. package/dist/types/src/base/ui/system/all_styles_set.d.ts +0 -85
  278. package/dist/types/src/base/ui/system/all_styles_set.d.ts.map +0 -1
  279. package/dist/types/src/base/ui/system/appearance/appearance_set.d.ts +0 -14
  280. package/dist/types/src/base/ui/system/appearance/appearance_set.d.ts.map +0 -1
  281. package/dist/types/src/base/ui/system/appearance/background_color.d.ts +0 -12
  282. package/dist/types/src/base/ui/system/appearance/background_color.d.ts.map +0 -1
  283. package/dist/types/src/base/ui/system/appearance/border.d.ts +0 -30
  284. package/dist/types/src/base/ui/system/appearance/border.d.ts.map +0 -1
  285. package/dist/types/src/base/ui/system/appearance/border_radius.d.ts +0 -12
  286. package/dist/types/src/base/ui/system/appearance/border_radius.d.ts.map +0 -1
  287. package/dist/types/src/base/ui/system/appearance/box_shadow.d.ts +0 -12
  288. package/dist/types/src/base/ui/system/appearance/box_shadow.d.ts.map +0 -1
  289. package/dist/types/src/base/ui/system/appearance/opacity.d.ts +0 -12
  290. package/dist/types/src/base/ui/system/appearance/opacity.d.ts.map +0 -1
  291. package/dist/types/src/base/ui/system/dimensions/dimensions_set.d.ts +0 -15
  292. package/dist/types/src/base/ui/system/dimensions/dimensions_set.d.ts.map +0 -1
  293. package/dist/types/src/base/ui/system/dimensions/height.d.ts +0 -12
  294. package/dist/types/src/base/ui/system/dimensions/height.d.ts.map +0 -1
  295. package/dist/types/src/base/ui/system/dimensions/max_height.d.ts +0 -12
  296. package/dist/types/src/base/ui/system/dimensions/max_height.d.ts.map +0 -1
  297. package/dist/types/src/base/ui/system/dimensions/max_width.d.ts +0 -12
  298. package/dist/types/src/base/ui/system/dimensions/max_width.d.ts.map +0 -1
  299. package/dist/types/src/base/ui/system/dimensions/min_height.d.ts +0 -12
  300. package/dist/types/src/base/ui/system/dimensions/min_height.d.ts.map +0 -1
  301. package/dist/types/src/base/ui/system/dimensions/min_width.d.ts +0 -12
  302. package/dist/types/src/base/ui/system/dimensions/min_width.d.ts.map +0 -1
  303. package/dist/types/src/base/ui/system/dimensions/width.d.ts +0 -12
  304. package/dist/types/src/base/ui/system/dimensions/width.d.ts.map +0 -1
  305. package/dist/types/src/base/ui/system/display.d.ts +0 -13
  306. package/dist/types/src/base/ui/system/display.d.ts.map +0 -1
  307. package/dist/types/src/base/ui/system/flex_container/align_content.d.ts +0 -12
  308. package/dist/types/src/base/ui/system/flex_container/align_content.d.ts.map +0 -1
  309. package/dist/types/src/base/ui/system/flex_container/align_items.d.ts +0 -12
  310. package/dist/types/src/base/ui/system/flex_container/align_items.d.ts.map +0 -1
  311. package/dist/types/src/base/ui/system/flex_container/flex_container_set.d.ts +0 -15
  312. package/dist/types/src/base/ui/system/flex_container/flex_container_set.d.ts.map +0 -1
  313. package/dist/types/src/base/ui/system/flex_container/flex_direction.d.ts +0 -12
  314. package/dist/types/src/base/ui/system/flex_container/flex_direction.d.ts.map +0 -1
  315. package/dist/types/src/base/ui/system/flex_container/flex_wrap.d.ts +0 -12
  316. package/dist/types/src/base/ui/system/flex_container/flex_wrap.d.ts.map +0 -1
  317. package/dist/types/src/base/ui/system/flex_container/justify_content.d.ts +0 -12
  318. package/dist/types/src/base/ui/system/flex_container/justify_content.d.ts.map +0 -1
  319. package/dist/types/src/base/ui/system/flex_container/justify_items.d.ts +0 -12
  320. package/dist/types/src/base/ui/system/flex_container/justify_items.d.ts.map +0 -1
  321. package/dist/types/src/base/ui/system/flex_item/align_self.d.ts +0 -12
  322. package/dist/types/src/base/ui/system/flex_item/align_self.d.ts.map +0 -1
  323. package/dist/types/src/base/ui/system/flex_item/flex.d.ts +0 -12
  324. package/dist/types/src/base/ui/system/flex_item/flex.d.ts.map +0 -1
  325. package/dist/types/src/base/ui/system/flex_item/flex_basis.d.ts +0 -12
  326. package/dist/types/src/base/ui/system/flex_item/flex_basis.d.ts.map +0 -1
  327. package/dist/types/src/base/ui/system/flex_item/flex_grow.d.ts +0 -12
  328. package/dist/types/src/base/ui/system/flex_item/flex_grow.d.ts.map +0 -1
  329. package/dist/types/src/base/ui/system/flex_item/flex_item_set.d.ts +0 -16
  330. package/dist/types/src/base/ui/system/flex_item/flex_item_set.d.ts.map +0 -1
  331. package/dist/types/src/base/ui/system/flex_item/flex_shrink.d.ts +0 -12
  332. package/dist/types/src/base/ui/system/flex_item/flex_shrink.d.ts.map +0 -1
  333. package/dist/types/src/base/ui/system/flex_item/justify_self.d.ts +0 -12
  334. package/dist/types/src/base/ui/system/flex_item/justify_self.d.ts.map +0 -1
  335. package/dist/types/src/base/ui/system/flex_item/order.d.ts +0 -12
  336. package/dist/types/src/base/ui/system/flex_item/order.d.ts.map +0 -1
  337. package/dist/types/src/base/ui/system/index.d.ts +0 -106
  338. package/dist/types/src/base/ui/system/index.d.ts.map +0 -1
  339. package/dist/types/src/base/ui/system/overflow.d.ts +0 -17
  340. package/dist/types/src/base/ui/system/overflow.d.ts.map +0 -1
  341. package/dist/types/src/base/ui/system/position/bottom.d.ts +0 -12
  342. package/dist/types/src/base/ui/system/position/bottom.d.ts.map +0 -1
  343. package/dist/types/src/base/ui/system/position/left.d.ts +0 -12
  344. package/dist/types/src/base/ui/system/position/left.d.ts.map +0 -1
  345. package/dist/types/src/base/ui/system/position/position.d.ts +0 -12
  346. package/dist/types/src/base/ui/system/position/position.d.ts.map +0 -1
  347. package/dist/types/src/base/ui/system/position/position_set.d.ts +0 -15
  348. package/dist/types/src/base/ui/system/position/position_set.d.ts.map +0 -1
  349. package/dist/types/src/base/ui/system/position/right.d.ts +0 -12
  350. package/dist/types/src/base/ui/system/position/right.d.ts.map +0 -1
  351. package/dist/types/src/base/ui/system/position/top.d.ts +0 -12
  352. package/dist/types/src/base/ui/system/position/top.d.ts.map +0 -1
  353. package/dist/types/src/base/ui/system/position/z_index.d.ts +0 -12
  354. package/dist/types/src/base/ui/system/position/z_index.d.ts.map +0 -1
  355. package/dist/types/src/base/ui/system/spacing/margin.d.ts +0 -24
  356. package/dist/types/src/base/ui/system/spacing/margin.d.ts.map +0 -1
  357. package/dist/types/src/base/ui/system/spacing/padding.d.ts +0 -24
  358. package/dist/types/src/base/ui/system/spacing/padding.d.ts.map +0 -1
  359. package/dist/types/src/base/ui/system/spacing/spacing_set.d.ts +0 -11
  360. package/dist/types/src/base/ui/system/spacing/spacing_set.d.ts.map +0 -1
  361. package/dist/types/src/base/ui/system/typography/font_family.d.ts +0 -12
  362. package/dist/types/src/base/ui/system/typography/font_family.d.ts.map +0 -1
  363. package/dist/types/src/base/ui/system/typography/font_size.d.ts +0 -12
  364. package/dist/types/src/base/ui/system/typography/font_size.d.ts.map +0 -1
  365. package/dist/types/src/base/ui/system/typography/font_style.d.ts +0 -12
  366. package/dist/types/src/base/ui/system/typography/font_style.d.ts.map +0 -1
  367. package/dist/types/src/base/ui/system/typography/font_weight.d.ts +0 -12
  368. package/dist/types/src/base/ui/system/typography/font_weight.d.ts.map +0 -1
  369. package/dist/types/src/base/ui/system/typography/letter_spacing.d.ts +0 -12
  370. package/dist/types/src/base/ui/system/typography/letter_spacing.d.ts.map +0 -1
  371. package/dist/types/src/base/ui/system/typography/line_height.d.ts +0 -12
  372. package/dist/types/src/base/ui/system/typography/line_height.d.ts.map +0 -1
  373. package/dist/types/src/base/ui/system/typography/text_align.d.ts +0 -12
  374. package/dist/types/src/base/ui/system/typography/text_align.d.ts.map +0 -1
  375. package/dist/types/src/base/ui/system/typography/text_color.d.ts +0 -16
  376. package/dist/types/src/base/ui/system/typography/text_color.d.ts.map +0 -1
  377. package/dist/types/src/base/ui/system/typography/text_decoration.d.ts +0 -14
  378. package/dist/types/src/base/ui/system/typography/text_decoration.d.ts.map +0 -1
  379. package/dist/types/src/base/ui/system/typography/text_transform.d.ts +0 -12
  380. package/dist/types/src/base/ui/system/typography/text_transform.d.ts.map +0 -1
  381. package/dist/types/src/base/ui/system/typography/typography_set.d.ts +0 -19
  382. package/dist/types/src/base/ui/system/typography/typography_set.d.ts.map +0 -1
  383. package/dist/types/src/base/ui/system/utils/csstype.d.ts +0 -3977
  384. package/dist/types/src/base/ui/system/utils/csstype.d.ts.map +0 -1
  385. package/dist/types/src/base/ui/system/utils/ensure_numbers_are_within_scale.d.ts +0 -2
  386. package/dist/types/src/base/ui/system/utils/ensure_numbers_are_within_scale.d.ts.map +0 -1
  387. package/dist/types/src/base/ui/system/utils/get_style_props_for_responsive_prop.d.ts +0 -2
  388. package/dist/types/src/base/ui/system/utils/get_style_props_for_responsive_prop.d.ts.map +0 -1
  389. package/dist/types/src/base/ui/system/utils/types.d.ts +0 -31
  390. package/dist/types/src/base/ui/system/utils/types.d.ts.map +0 -1
  391. package/dist/types/src/base/ui/table_picker.d.ts +0 -28
  392. package/dist/types/src/base/ui/table_picker.d.ts.map +0 -1
  393. package/dist/types/src/base/ui/table_picker_synced.d.ts +0 -18
  394. package/dist/types/src/base/ui/table_picker_synced.d.ts.map +0 -1
  395. package/dist/types/src/base/ui/text.d.ts +0 -66
  396. package/dist/types/src/base/ui/text.d.ts.map +0 -1
  397. package/dist/types/src/base/ui/text_button.d.ts +0 -83
  398. package/dist/types/src/base/ui/text_button.d.ts.map +0 -1
  399. package/dist/types/src/base/ui/theme/default_theme/button_variants.d.ts +0 -8
  400. package/dist/types/src/base/ui/theme/default_theme/button_variants.d.ts.map +0 -1
  401. package/dist/types/src/base/ui/theme/default_theme/control_sizes.d.ts +0 -107
  402. package/dist/types/src/base/ui/theme/default_theme/control_sizes.d.ts.map +0 -1
  403. package/dist/types/src/base/ui/theme/default_theme/heading_styles.d.ts +0 -11
  404. package/dist/types/src/base/ui/theme/default_theme/heading_styles.d.ts.map +0 -1
  405. package/dist/types/src/base/ui/theme/default_theme/index.d.ts +0 -342
  406. package/dist/types/src/base/ui/theme/default_theme/index.d.ts.map +0 -1
  407. package/dist/types/src/base/ui/theme/default_theme/input_variants.d.ts +0 -5
  408. package/dist/types/src/base/ui/theme/default_theme/input_variants.d.ts.map +0 -1
  409. package/dist/types/src/base/ui/theme/default_theme/link_variants.d.ts +0 -7
  410. package/dist/types/src/base/ui/theme/default_theme/link_variants.d.ts.map +0 -1
  411. package/dist/types/src/base/ui/theme/default_theme/select_buttons_variants.d.ts +0 -8
  412. package/dist/types/src/base/ui/theme/default_theme/select_buttons_variants.d.ts.map +0 -1
  413. package/dist/types/src/base/ui/theme/default_theme/select_variants.d.ts +0 -5
  414. package/dist/types/src/base/ui/theme/default_theme/select_variants.d.ts.map +0 -1
  415. package/dist/types/src/base/ui/theme/default_theme/switch_variants.d.ts +0 -16
  416. package/dist/types/src/base/ui/theme/default_theme/switch_variants.d.ts.map +0 -1
  417. package/dist/types/src/base/ui/theme/default_theme/text_button_variants.d.ts +0 -7
  418. package/dist/types/src/base/ui/theme/default_theme/text_button_variants.d.ts.map +0 -1
  419. package/dist/types/src/base/ui/theme/default_theme/text_styles.d.ts +0 -76
  420. package/dist/types/src/base/ui/theme/default_theme/text_styles.d.ts.map +0 -1
  421. package/dist/types/src/base/ui/theme/default_theme/tokens.d.ts +0 -111
  422. package/dist/types/src/base/ui/theme/default_theme/tokens.d.ts.map +0 -1
  423. package/dist/types/src/base/ui/theme/theme_context.d.ts +0 -342
  424. package/dist/types/src/base/ui/theme/theme_context.d.ts.map +0 -1
  425. package/dist/types/src/base/ui/theme/use_theme.d.ts +0 -342
  426. package/dist/types/src/base/ui/theme/use_theme.d.ts.map +0 -1
  427. package/dist/types/src/base/ui/tooltip.d.ts +0 -64
  428. package/dist/types/src/base/ui/tooltip.d.ts.map +0 -1
  429. package/dist/types/src/base/ui/types/aria_props.d.ts +0 -22
  430. package/dist/types/src/base/ui/types/aria_props.d.ts.map +0 -1
  431. package/dist/types/src/base/ui/types/data_attributes_prop.d.ts +0 -10
  432. package/dist/types/src/base/ui/types/data_attributes_prop.d.ts.map +0 -1
  433. package/dist/types/src/base/ui/types/tooltip_anchor_props.d.ts +0 -13
  434. package/dist/types/src/base/ui/types/tooltip_anchor_props.d.ts.map +0 -1
  435. package/dist/types/src/base/ui/use_form_field.d.ts +0 -2
  436. package/dist/types/src/base/ui/use_form_field.d.ts.map +0 -1
  437. package/dist/types/src/base/ui/use_styled_system.d.ts +0 -2
  438. package/dist/types/src/base/ui/use_styled_system.d.ts.map +0 -1
  439. package/dist/types/src/base/ui/use_text_color_for_background_color.d.ts +0 -2
  440. package/dist/types/src/base/ui/use_text_color_for_background_color.d.ts.map +0 -1
  441. package/dist/types/src/base/ui/view_picker.d.ts +0 -34
  442. package/dist/types/src/base/ui/view_picker.d.ts.map +0 -1
  443. package/dist/types/src/base/ui/view_picker_synced.d.ts +0 -18
  444. package/dist/types/src/base/ui/view_picker_synced.d.ts.map +0 -1
  445. package/dist/types/src/base/ui/viewport_constraint.d.ts +0 -57
  446. package/dist/types/src/base/ui/viewport_constraint.d.ts.map +0 -1
  447. package/dist/types/src/base/ui/with_styled_system.d.ts +0 -2
  448. package/dist/types/src/base/ui/with_styled_system.d.ts.map +0 -1
  449. package/types/styled-system__core.d.ts +0 -41
@@ -1,292 +0,0 @@
1
- /** @module @airtable/blocks/ui: RecordCardList */ /** */
2
- import * as React from 'react';
3
- import { FixedSizeList } from 'react-window';
4
- import { compose } from '@styled-system/core';
5
- import { invariant, spawnError } from '../../shared/error_utils';
6
- import Record from '../models/record';
7
- import Box from './box';
8
- import createDetectElementResize from './create_detect_element_resize';
9
- import withStyledSystem from './with_styled_system';
10
- import { dimensionsSet, flexItemSet, positionSet, margin } from './system';
11
- import RecordCard from './record_card';
12
- const RECORD_CARD_ROW_HEIGHT = 80;
13
- const RECORD_CARD_SPACING = 10;
14
-
15
- /** @internal */
16
-
17
- /** @internal */
18
-
19
- /**
20
- * Item renderer component for react-window FixedSizeList. Responsible for rendering each
21
- * individual record card item, identified by the index prop.
22
- *
23
- * @param props
24
- * @internal
25
- */
26
- function RecordCardItemRenderer(props) {
27
- const {
28
- records,
29
- fields,
30
- view,
31
- width,
32
- attachmentCoverField,
33
- onClick,
34
- onMouseEnter,
35
- onMouseLeave
36
- } = props.data;
37
- const {
38
- index: itemIndex,
39
- style,
40
- className
41
- } = props;
42
- const record = records[itemIndex];
43
- // Ensure that expandRecordOptions.records only contains Records, not RecordDefs. RecordCardList
44
- // can be given either Records or RecordDefs, but the `opts` argument in `expandRecord` only
45
- // accepts an array of Records.
46
- const filteredRecords = [];
47
- for (const currentRecord of records) {
48
- if (currentRecord instanceof Record) {
49
- filteredRecords.push(currentRecord);
50
- }
51
- }
52
- if (filteredRecords.length !== records.length && filteredRecords.length !== 0) {
53
- throw spawnError("RecordCardList's props.records should not contain a mix of Record and RecordDef");
54
- }
55
-
56
- // RecordCard handles null and undefined differently for `onClick`. Treat other
57
- // falsey values (e.g. "", false) like null.
58
- let _onClick;
59
- if (onClick) {
60
- _onClick = () => onClick(record, itemIndex);
61
- } else if (onClick === undefined) {
62
- _onClick = undefined;
63
- } else {
64
- _onClick = null;
65
- }
66
- return /*#__PURE__*/React.createElement(RecordCard, {
67
- record: record,
68
- fields: fields,
69
- view: view,
70
- attachmentCoverField: attachmentCoverField,
71
- onClick: _onClick,
72
- expandRecordOptions: filteredRecords.length > 0 ? {
73
- records: filteredRecords
74
- } : null,
75
- onMouseEnter: onMouseEnter ? () => onMouseEnter(record, itemIndex) : undefined,
76
- onMouseLeave: onMouseLeave ? () => onMouseLeave(record, itemIndex) : undefined,
77
- width: width,
78
- height: RECORD_CARD_ROW_HEIGHT,
79
- className: className
80
- // Adjustments to top and left made to properly position the cards in the list. FixedSizeList doesn't
81
- // differentiate between content & gutter for each "item" it renders. See https://github.com/bvaughn/react-window#can-i-add-gutter-or-padding-between-items
82
- ,
83
- style: {
84
- ...style,
85
- left: Number(style.left) + RECORD_CARD_SPACING,
86
- top: Number(style.top) + RECORD_CARD_SPACING
87
- }
88
- });
89
- }
90
-
91
- /**
92
- * Utility function to measure scrollbar size.
93
- * Used to correctly calculate the width for record cards in the container.
94
- *
95
- * @internal
96
- */
97
- function getScrollbarWidth() {
98
- const scrollDiv = document.createElement('div');
99
- scrollDiv.style.position = 'absolute';
100
- scrollDiv.style.top = '-9999px';
101
- scrollDiv.style.width = '50px';
102
- scrollDiv.style.height = '50px';
103
- scrollDiv.style.overflow = 'scroll';
104
- const body = document.body;
105
- invariant(body, 'no document body to measure scrollbar');
106
- body.appendChild(scrollDiv);
107
- const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
108
- body.removeChild(scrollDiv);
109
- return scrollbarWidth;
110
- }
111
-
112
- /**
113
- * @internal
114
- */
115
-
116
- /**
117
- * Wrapper component for RecordCardList's window (passed to FixedSizeList).
118
- *
119
- * This is used to force FixedSizeList (`react-window`) to include padding at both top and bottom
120
- * of the record card list. The FixedSizeList accounts for card padding on every card (baked into
121
- * `itemSize`), but this doesn't account for the 1 extra padding required beneath the last card.
122
- * (ie, if we have 10 cards, the height needs to be (10 * card_height) + (11 * card_padding)).
123
- *
124
- * @internal
125
- */
126
- const innerRecordCardListWindow = /*#__PURE__*/React.forwardRef((props, ref) => {
127
- const {
128
- style,
129
- children
130
- } = props;
131
- return /*#__PURE__*/React.createElement("div", {
132
- ref: ref
133
- // Height adjustment required to account for the spacing between the last item and the bottom of the list container.
134
- // See https://github.com/bvaughn/react-window#can-i-add-padding-to-the-top-and-bottom-of-a-list
135
- ,
136
- style: {
137
- ...style,
138
- height: Number(style.height) + RECORD_CARD_SPACING
139
- }
140
- }, children);
141
- });
142
-
143
- /**
144
- * Scroll event for {@link RecordCardList}.
145
- */
146
-
147
- /**
148
- * Props for the {@link RecordCardList} component. Also accepts:
149
- * * {@link RecordCardListStyleProps}
150
- *
151
- * @docsPath UI/components/RecordCardList
152
- */
153
- // This doesn't actually extend RecordCardListStyleProps since withStyledSystem
154
- // expects non-style props and style props as separate generic type variables.
155
-
156
- /**
157
- * Style props for the {@link RecordCardList} component. Accepts:
158
- * * {@link DimensionsSetProps}
159
- * * {@link FlexItemSetProps}
160
- * * {@link MarginProps}
161
- * * {@link PositionSetProps}
162
- *
163
- * @noInheritDoc
164
- */
165
-
166
- const styleParser = compose(dimensionsSet, flexItemSet, positionSet, margin);
167
-
168
- /** @hidden */
169
-
170
- /**
171
- * Scrollable list of record cards.
172
- *
173
- * [[ Story id="recordcardlist--example" title="RecordCardList example" height="560px" ]]
174
- *
175
- * @docsPath UI/components/RecordCardList
176
- * @component
177
- */
178
- export class RecordCardList extends React.Component {
179
- /** @internal */
180
-
181
- /** @internal */
182
-
183
- /** @internal */
184
-
185
- /** @internal */
186
-
187
- /** @internal */
188
-
189
- /** @hidden */
190
- constructor(props) {
191
- super(props);
192
- this._container = /*#__PURE__*/React.createRef();
193
- this._cardList = /*#__PURE__*/React.createRef();
194
- this._cardListInnerWindow = /*#__PURE__*/React.createRef();
195
- this._detectElementResize = createDetectElementResize();
196
- this._scrollbarWidth = getScrollbarWidth();
197
- this.state = {
198
- cardListWidth: 0,
199
- cardListHeight: 0,
200
- isScrollbarVisible: false
201
- };
202
- }
203
- /** @hidden */
204
- componentDidMount() {
205
- invariant(this._container.current, 'No container to detect resize on');
206
- this._detectElementResize.addResizeListener(this._container.current, this._updateCardListSizeIfNeeded);
207
- this._updateCardListSizeIfNeeded();
208
- }
209
- /** @hidden */
210
- componentWillUnmount() {
211
- if (this._container.current) {
212
- this._detectElementResize.removeResizeListener(this._container.current, this._updateCardListSizeIfNeeded);
213
- }
214
- }
215
- /** @hidden */
216
- componentDidUpdate(prevProps) {
217
- // If the number of records change, we may need to adjust card widths if a scrollbar
218
- // now exists (or no longer exists)
219
- if (this.props.records.length !== prevProps.records.length) {
220
- this._updateCardListSizeIfNeeded();
221
- }
222
- }
223
- // Functionality for `getScrollTopForRecordAtIndex` and `scrollTop` getter/setter was
224
- // removed when migrating from DynamicDraw => react-window, which were not being used
225
- // by any consuming component at the time of migration.
226
- /** @hidden */
227
- scrollToRecordAtIndex(recordIndex) {
228
- invariant(this._cardList.current, 'No card list to scroll');
229
- this._cardList.current.scrollToItem(recordIndex);
230
- }
231
- /** @internal */
232
- _updateCardListSizeIfNeeded = () => {
233
- invariant(this._container.current, 'No container to update card list size');
234
- const {
235
- width: cardListWidth,
236
- height: cardListHeight
237
- } = this._container.current.getBoundingClientRect();
238
- invariant(this._cardListInnerWindow.current, 'No card list inner window to measure scroll height');
239
- const isScrollbarVisible = this._cardListInnerWindow.current.scrollHeight > cardListHeight;
240
- if (this.state.cardListWidth !== cardListWidth || this.state.cardListHeight !== cardListHeight || this.state.isScrollbarVisible !== isScrollbarVisible) {
241
- this.setState({
242
- cardListWidth,
243
- cardListHeight,
244
- isScrollbarVisible
245
- });
246
- }
247
- };
248
- /** @hidden */
249
- render() {
250
- const {
251
- records,
252
- fields,
253
- view,
254
- attachmentCoverField,
255
- className,
256
- style
257
- } = this.props;
258
- const itemData = {
259
- records,
260
- fields,
261
- view,
262
- width: this.state.cardListWidth - 2 * RECORD_CARD_SPACING - (this.state.isScrollbarVisible ? this._scrollbarWidth : 0),
263
- attachmentCoverField,
264
- onClick: this.props.onRecordClick,
265
- onMouseEnter: this.props.onRecordMouseEnter ?? null,
266
- onMouseLeave: this.props.onRecordMouseLeave ?? null,
267
- style: {},
268
- className: ''
269
- };
270
- return /*#__PURE__*/React.createElement(Box, {
271
- ref: this._container,
272
- className: className,
273
- overflow: "hidden",
274
- height: "100%",
275
- style: style
276
- }, /*#__PURE__*/React.createElement(FixedSizeList, {
277
- outerRef: this._cardList,
278
- width: this.state.cardListWidth,
279
- height: this.state.cardListHeight,
280
- innerElementType: innerRecordCardListWindow,
281
- innerRef: this._cardListInnerWindow,
282
- itemData: itemData,
283
- itemCount: this.props.records.length,
284
- itemKey: (index, data) => data.records[index].id,
285
- itemSize: RECORD_CARD_ROW_HEIGHT + RECORD_CARD_SPACING,
286
- onScroll: this.props.onScroll
287
- },
288
- // TODO(alex): figure out why this needs a cast to any - something to do with prop-types?
289
- RecordCardItemRenderer));
290
- }
291
- }
292
- export default withStyledSystem(RecordCardList, styleParser);
@@ -1,182 +0,0 @@
1
- /** @module @airtable/blocks/ui: Select */ /** */
2
- import { cx } from 'emotion';
3
- import * as React from 'react';
4
- import { compose } from '@styled-system/core';
5
- import { createEnum } from '../../shared/private_utils';
6
- import { spawnError } from '../../shared/error_utils';
7
- import useFormField from './use_form_field';
8
- import { maxWidth, minWidth, width, flexItemSet, positionSet, margin } from './system';
9
- import useTheme from './theme/use_theme';
10
- import { validateOptions, optionValueToString, stringToOptionValue } from './select_and_select_buttons_helpers';
11
- import useStyledSystem from './use_styled_system';
12
- import { useSelectSize, ControlSize } from './control_sizes';
13
-
14
- /** @hidden */
15
-
16
- const SelectVariant = createEnum('default');
17
-
18
- /** @internal */
19
- function useSelectVariant() {
20
- let variant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SelectVariant.default;
21
- const {
22
- selectVariants
23
- } = useTheme();
24
- return selectVariants[variant];
25
- }
26
-
27
- // This component isn't great right now. It's just a styled <select> with a really hacky
28
- // way of getting the chevron arrow to show up. It also behaves weirdly when you give it
29
- // a margin (I think this is a limitation of <select>). We should probably replace it with
30
- // something like react-select, which would give us nice features like rendering custom
31
- // elements for options (e.g. for field type icons) and typeahead search.
32
-
33
- /**
34
- * Style props shared between the following components.
35
- * * {@link Select}, {@link SelectSynced}
36
- * * {@link TablePicker}, {@link TablePickerSynced}
37
- * * {@link ViewPicker}, {@link ViewPickerSynced}
38
- * * {@link FieldPicker}, {@link FieldPickerSynced}
39
- *
40
- * Also accepts:
41
- * * {@link FlexItemSetProps}
42
- * * {@link MarginProps}
43
- * * {@link MaxWidthProps}
44
- * * {@link MinWidthProps}
45
- * * {@link PositionSetProps}
46
- * * {@link MaxWidthProps}
47
- *
48
- * @noInheritDoc
49
- */
50
-
51
- /**
52
- * Props shared between the following components:
53
- * * {@link Select}, {@link SelectSynced}
54
- * * {@link TablePicker}, {@link TablePickerSynced}
55
- * * {@link ViewPicker}, {@link ViewPickerSynced}
56
- * * {@link FieldPicker}, {@link FieldPickerSynced}
57
- *
58
- * @noInheritDoc
59
- */
60
-
61
- /**
62
- * Props shared between the {@link Select} and {@link SelectSynced} components.
63
- */
64
-
65
- /**
66
- * Props for the {@link Select} component. Also accepts:
67
- * * {@link SelectStyleProps}
68
- *
69
- * @docsPath UI/components/Select
70
- */
71
-
72
- const styleParser = compose(maxWidth, minWidth, width, flexItemSet, positionSet, margin);
73
-
74
- /**
75
- * Dropdown menu component. A wrapper around `<select>` that fits in with Airtable's user interface.
76
- *
77
- * [[ Story id="select--example" title="Select example" ]]
78
- *
79
- * @component
80
- * @docsPath UI/components/Select
81
- */
82
- const Select = (props, ref) => {
83
- const {
84
- size = ControlSize.default,
85
- value,
86
- options: originalOptions = [],
87
- autoFocus,
88
- disabled,
89
- id,
90
- name,
91
- tabIndex,
92
- onChange,
93
- // TODO (stephen): remove tooltip anchor props
94
- onMouseEnter,
95
- onMouseLeave,
96
- onClick,
97
- // This hasOnClick prop is set by the Tooltip wrapper. Destructure it here just to get it out of `props`.
98
- // See 7a80fefd0a0bc871c31e0c063662c6100b0ca77d
99
- // TODO(stephen): clean this up.
100
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
101
- hasOnClick,
102
- className,
103
- style,
104
- 'aria-label': ariaLabel,
105
- 'aria-describedby': ariaDescribedByProp,
106
- 'aria-labelledby': ariaLabelledBy,
107
- ...styleProps
108
- } = props;
109
- const formFieldContextValue = useFormField();
110
- const controlId = formFieldContextValue ? formFieldContextValue.controlId : undefined;
111
- const descriptionId = formFieldContextValue ? formFieldContextValue.descriptionId : undefined;
112
- const ariaDescribedBy = [ariaDescribedByProp, descriptionId].filter(Boolean).join(' ') || undefined;
113
- // There is only a single default variant.
114
- const classNameForSelectVariant = useSelectVariant();
115
- const classNameForSelectSize = useSelectSize(size);
116
- const classNameForStyleProps = useStyledSystem({
117
- width: '100%',
118
- ...styleProps
119
- }, styleParser);
120
- function _onChange(e) {
121
- if (onChange) {
122
- const newValue = stringToOptionValue(e.currentTarget.value);
123
- onChange(newValue);
124
- }
125
- }
126
-
127
- // Check options here for a cleaner stack trace.
128
- // Also, even though options are required, still check if it's set because
129
- // the error is really ugly and covers up the prop type check.
130
- const validationResult = validateOptions(originalOptions);
131
- if (!validationResult.isValid) {
132
- throw spawnError('<Select> %s', validationResult.reason);
133
- }
134
- let didFindOptionMatchingValue = false;
135
- for (const option of originalOptions) {
136
- if (option.value === value) {
137
- didFindOptionMatchingValue = true;
138
- break;
139
- }
140
- }
141
- const options = [];
142
- if (!didFindOptionMatchingValue) {
143
- // Since there's no option that matches the given value, let's add an
144
- // empty option at the top and log a warning.
145
- options.push({
146
- label: '',
147
- value,
148
- disabled: true
149
- });
150
- // eslint-disable-next-line no-console
151
- console.warn(`No option for selected value in <Select>: ${String(value)}`.substr(0, 100));
152
- }
153
- options.push(...originalOptions);
154
- return /*#__PURE__*/React.createElement("select", {
155
- ref: ref,
156
- value: optionValueToString(value),
157
- onChange: _onChange,
158
- onMouseEnter: onMouseEnter,
159
- onMouseLeave: onMouseLeave,
160
- onClick: onClick,
161
- autoFocus: autoFocus,
162
- disabled: disabled,
163
- id: id || controlId,
164
- name: name,
165
- tabIndex: tabIndex,
166
- className: cx(classNameForSelectVariant, classNameForSelectSize, classNameForStyleProps, className),
167
- style: style,
168
- "aria-label": ariaLabel,
169
- "aria-labelledby": ariaLabelledBy,
170
- "aria-describedby": ariaDescribedBy
171
- }, options.map((option, index) => {
172
- const valueJson = optionValueToString(option.value);
173
- return /*#__PURE__*/React.createElement("option", {
174
- key: `${valueJson}-${option.label}-${index}`,
175
- value: valueJson,
176
- disabled: option.disabled ? option.disabled : false
177
- }, option.label);
178
- }));
179
- };
180
- const ForwardedRefSelect = /*#__PURE__*/React.forwardRef(Select);
181
- ForwardedRefSelect.displayName = 'Select';
182
- export default ForwardedRefSelect;
@@ -1,53 +0,0 @@
1
- /** @module @airtable/blocks/ui: Select */ /** */
2
-
3
- // JSON stringify the value so you can use any primitive.
4
- // Regular <select> coerces all values to string, which is confusing.
5
- /**
6
- * Supported value types for {@link SelectOption}.
7
- */
8
-
9
- /** @internal */
10
- // Old eslint rule doesn't understand type guards
11
- // eslint-disable-next-line airtable/is-returns-boolean
12
- export function isSelectOptionValue(value) {
13
- return value === null || value === undefined || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
14
- }
15
-
16
- /**
17
- * A select option for {@link Select}, {@link TablePicker}, {@link ViewPicker}, {@link FieldPicker}, and their `Synced` counterparts.
18
- */
19
-
20
- export const validateOptions = options => {
21
- if (options) {
22
- for (const option of options) {
23
- // These are hard errors because we can't guarantee that other values
24
- // will be JSON-encodable. And undefined gets coerced to the string
25
- // "undefined" which is confusing.
26
- if (typeof option.value === 'object' && option.value !== null) {
27
- return {
28
- isValid: false,
29
- reason: 'option value must be a string, number, boolean, null, or undefined. Got an object.'
30
- };
31
- }
32
- }
33
- }
34
- return {
35
- isValid: true
36
- };
37
- };
38
-
39
- /** @internal */
40
- export function optionValueToString(value) {
41
- const valueJson = JSON.stringify(value === undefined ? {
42
- isUndefined: true
43
- } : {
44
- notUndefinedValue: value
45
- });
46
- return valueJson;
47
- }
48
- /** @internal */
49
- export function stringToOptionValue(valueJson) {
50
- const parsed = JSON.parse(valueJson);
51
- const value = parsed.isUndefined ? null : parsed.notUndefinedValue;
52
- return value;
53
- }
@@ -1,150 +0,0 @@
1
- /** @module @airtable/blocks/ui: SelectButtons */ /** */
2
- import { cx } from 'emotion';
3
- import React, { useEffect, useState } from 'react';
4
- import { compose } from '@styled-system/core';
5
- import { spawnError } from '../../shared/error_utils';
6
- import { createEnum, getLocallyUniqueId } from '../../shared/private_utils';
7
- import { validateOptions, optionValueToString } from './select_and_select_buttons_helpers';
8
- import useStyledSystem from './use_styled_system';
9
- import useTheme from './theme/use_theme';
10
- import cssHelpers from './css_helpers';
11
- import { maxWidth, minWidth, width, flexItemSet, positionSet, margin } from './system';
12
- import { ControlSize, useSelectButtonsSize } from './control_sizes';
13
-
14
- /** @internal */
15
-
16
- const SelectButtonsVariant = createEnum('default');
17
-
18
- /** @internal */
19
- function useSelectButtonsVariant() {
20
- let variant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SelectButtonsVariant.default;
21
- const {
22
- selectButtonsVariants
23
- } = useTheme();
24
- return selectButtonsVariants[variant];
25
- }
26
-
27
- /**
28
- * Style props shared between the {@link SelectButtons} and {@link SelectButtonsSynced} components. Accepts:
29
- * * {@link FlexItemSetProps}
30
- * * {@link MarginProps}
31
- * * {@link MaxWidthProps}
32
- * * {@link MinWidthProps}
33
- * * {@link PositionSetProps}
34
- * * {@link WidthProps}
35
- *
36
- * @noInheritDoc
37
- */
38
-
39
- const styleParser = compose(maxWidth, minWidth, width, flexItemSet, positionSet, margin);
40
-
41
- /**
42
- * Props shared between the {@link SelectButtons} and {@link SelectButtonsSynced} components.
43
- *
44
- * @noInheritDoc
45
- */
46
-
47
- /**
48
- * Props for the {@link SelectButtons} component. Also accepts:
49
- * * {@link SelectButtonsStyleProps}
50
- *
51
- * @docsPath UI/components/SelectButtons
52
- */
53
-
54
- /**
55
- * A segmented control for selecting one value from a set of options.
56
- *
57
- * [[ Story id="selectbuttons--example" title="Select buttons example" ]]
58
- *
59
- * @docsPath UI/components/SelectButtons
60
- * @component
61
- */
62
- const SelectButtons = (props, ref) => {
63
- const {
64
- className,
65
- style,
66
- options,
67
- disabled,
68
- value,
69
- size = ControlSize.default,
70
- onChange,
71
- onMouseEnter,
72
- onMouseLeave,
73
- onClick,
74
- // This hasOnClick prop is set by the Tooltip wrapper. Destructure it here just to get it out of `props`.
75
- // See 7a80fefd0a0bc871c31e0c063662c6100b0ca77d
76
- // TODO(stephen): clean this up.
77
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
78
- hasOnClick,
79
- 'aria-describedby': ariaDescribedBy,
80
- 'aria-labelledby': ariaLabelledBy,
81
- ...styleProps
82
- } = props;
83
- // There is only a single default variant.
84
- const {
85
- containerClassNameForVariant,
86
- optionClassNameForVariant
87
- } = useSelectButtonsVariant();
88
- const containerClassNameForSize = useSelectButtonsSize(size);
89
- const classNameForStyleProps = useStyledSystem({
90
- width: '100%',
91
- ...styleProps
92
- }, styleParser);
93
- const [generatedId] = useState(getLocallyUniqueId('sb-'));
94
- const [isFocused, setIsFocused] = useState(false);
95
- useEffect(() => {
96
- // Check options here for a cleaner stack trace.
97
- // Also, even though options are required, still check if it's set because
98
- // the error is really ugly and covers up the prop type check.
99
- const validationResult = validateOptions(options);
100
- if (!validationResult.isValid) {
101
- throw spawnError('<SelectButtons> %s', validationResult.reason);
102
- }
103
- }, [options]);
104
- function _onChange(newValue) {
105
- if (onChange) {
106
- if (newValue !== value) {
107
- onChange(newValue);
108
- }
109
- }
110
- }
111
- return /*#__PURE__*/React.createElement("div", {
112
- // TODO (stephen): remove tooltip anchor props
113
- ref: ref,
114
- onMouseEnter: onMouseEnter,
115
- onMouseLeave: onMouseLeave,
116
- onClick: onClick,
117
- onFocus: () => setIsFocused(true),
118
- onBlur: () => setIsFocused(false),
119
- className: cx(containerClassNameForSize, containerClassNameForVariant, classNameForStyleProps, className),
120
- style: style,
121
- "data-disabled": disabled,
122
- "data-focused": isFocused,
123
- "aria-labelledby": ariaLabelledBy,
124
- "aria-describedby": ariaDescribedBy
125
- }, options.map((option, index) => {
126
- const isSelected = option.value === value;
127
- const isOptionDisabled = disabled || option.disabled;
128
- const radioId = `${generatedId}-${index}`;
129
- const valueJson = optionValueToString(option.value);
130
- return /*#__PURE__*/React.createElement("div", {
131
- key: `${valueJson}-${option.label}-${index}`,
132
- className: optionClassNameForVariant
133
- }, /*#__PURE__*/React.createElement("input", {
134
- type: "radio",
135
- onChange: isOptionDisabled ? undefined : () => _onChange(option.value),
136
- disabled: !!isOptionDisabled,
137
- checked: isSelected,
138
- className: cssHelpers.VISUALLY_HIDDEN,
139
- id: radioId,
140
- name: generatedId
141
- }), /*#__PURE__*/React.createElement("label", {
142
- htmlFor: radioId
143
- }, /*#__PURE__*/React.createElement("span", {
144
- className: cssHelpers.TRUNCATE
145
- }, option.label)));
146
- }));
147
- };
148
- const ForwardedRefSelectButtons = /*#__PURE__*/React.forwardRef(SelectButtons);
149
- ForwardedRefSelectButtons.displayName = 'SelectButtons';
150
- export default ForwardedRefSelectButtons;