@airtable/blocks 0.0.0-experimental-d5ee5e823-20250501 → 0.0.0-experimental-15dc8a3ea-20250616

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 (375) hide show
  1. package/dist/cjs/base/models/linked_records_query_result.js +2 -2
  2. package/dist/cjs/base/models/models.js +5 -5
  3. package/dist/cjs/base/models/mutations.js +86 -264
  4. package/dist/cjs/base/models/record_query_result.js +5 -5
  5. package/dist/cjs/base/models/table.js +1 -1070
  6. package/dist/cjs/base/types/field.js +1 -0
  7. package/dist/cjs/base/types/mutations.js +0 -27
  8. package/dist/cjs/base/ui/cell_renderer.js +2 -2
  9. package/dist/cjs/base/ui/field_picker.js +2 -2
  10. package/dist/cjs/base/ui/initialize_block.js +2 -0
  11. package/dist/cjs/base/ui/record_card.js +13 -13
  12. package/dist/cjs/base/ui/select_and_select_buttons_helpers.js +2 -0
  13. package/dist/cjs/base/ui/system/utils/ensure_numbers_are_within_scale.js +2 -0
  14. package/dist/cjs/base/ui/ui.js +8 -0
  15. package/dist/cjs/base/unstable_testing_utils.js +3 -2
  16. package/dist/cjs/interface/models/models.js +5 -5
  17. package/dist/cjs/interface/models/mutations.js +40 -26
  18. package/dist/cjs/interface/models/record.js +27 -2
  19. package/dist/cjs/interface/models/table.js +45 -0
  20. package/dist/cjs/interface/types/airtable_interface.js +1 -0
  21. package/dist/cjs/interface/types/field.js +1 -0
  22. package/dist/cjs/interface/ui/initialize_block.js +2 -0
  23. package/dist/cjs/interface/ui/ui.js +7 -0
  24. package/dist/cjs/shared/models/field_core.js +3 -3
  25. package/dist/cjs/shared/models/mutations_core.js +268 -0
  26. package/dist/cjs/shared/models/record_core.js +4 -4
  27. package/dist/cjs/shared/models/table_core.js +1070 -0
  28. package/dist/cjs/shared/sdk_core.js +1 -1
  29. package/dist/cjs/shared/types/mutations_core.js +28 -1
  30. package/dist/cjs/shared/ui/use_color_scheme.js +60 -0
  31. package/dist/types/src/base/models/base.d.ts +1 -1
  32. package/dist/types/src/base/models/base.d.ts.map +1 -1
  33. package/dist/types/src/base/models/field.d.ts +1 -1
  34. package/dist/types/src/base/models/field.d.ts.map +1 -1
  35. package/dist/types/src/base/models/models.d.ts +1 -1
  36. package/dist/types/src/base/models/models.d.ts.map +1 -1
  37. package/dist/types/src/base/models/mutations.d.ts.map +1 -1
  38. package/dist/types/src/base/models/record.d.ts +5 -1
  39. package/dist/types/src/base/models/record.d.ts.map +1 -1
  40. package/dist/types/src/base/models/table.d.ts +3 -836
  41. package/dist/types/src/base/models/table.d.ts.map +1 -1
  42. package/dist/types/src/base/types/airtable_interface.d.ts +1 -1
  43. package/dist/types/src/base/types/airtable_interface.d.ts.map +1 -1
  44. package/dist/types/src/base/types/base.d.ts +5 -2
  45. package/dist/types/src/base/types/base.d.ts.map +1 -1
  46. package/dist/types/src/base/types/field.d.ts +8 -0
  47. package/dist/types/src/base/types/field.d.ts.map +1 -0
  48. package/dist/types/src/base/types/mutations.d.ts +7 -90
  49. package/dist/types/src/base/types/mutations.d.ts.map +1 -1
  50. package/dist/types/src/base/types/table.d.ts +8 -2
  51. package/dist/types/src/base/types/table.d.ts.map +1 -1
  52. package/dist/types/src/base/ui/field_picker.d.ts +1 -1
  53. package/dist/types/src/base/ui/field_picker.d.ts.map +1 -1
  54. package/dist/types/src/base/ui/initialize_block.d.ts.map +1 -1
  55. package/dist/types/src/base/ui/select_and_select_buttons_helpers.d.ts.map +1 -1
  56. package/dist/types/src/base/ui/ui.d.ts +1 -0
  57. package/dist/types/src/base/ui/ui.d.ts.map +1 -1
  58. package/dist/types/src/base/unstable_testing_utils.d.ts +2 -1
  59. package/dist/types/src/base/unstable_testing_utils.d.ts.map +1 -1
  60. package/dist/types/src/interface/models/models.d.ts +1 -1
  61. package/dist/types/src/interface/models/models.d.ts.map +1 -1
  62. package/dist/types/src/interface/models/mutations.d.ts.map +1 -1
  63. package/dist/types/src/interface/models/record.d.ts +17 -0
  64. package/dist/types/src/interface/models/record.d.ts.map +1 -1
  65. package/dist/types/src/interface/models/table.d.ts +30 -0
  66. package/dist/types/src/interface/models/table.d.ts.map +1 -1
  67. package/dist/types/src/interface/types/airtable_interface.d.ts +12 -2
  68. package/dist/types/src/interface/types/airtable_interface.d.ts.map +1 -1
  69. package/dist/types/src/interface/types/base.d.ts +5 -2
  70. package/dist/types/src/interface/types/base.d.ts.map +1 -1
  71. package/dist/types/src/interface/types/field.d.ts +10 -0
  72. package/dist/types/src/interface/types/field.d.ts.map +1 -0
  73. package/dist/types/src/interface/types/mutations.d.ts +3 -0
  74. package/dist/types/src/interface/types/mutations.d.ts.map +1 -1
  75. package/dist/types/src/interface/types/table.d.ts +15 -2
  76. package/dist/types/src/interface/types/table.d.ts.map +1 -1
  77. package/dist/types/src/interface/ui/initialize_block.d.ts.map +1 -1
  78. package/dist/types/src/interface/ui/ui.d.ts +1 -0
  79. package/dist/types/src/interface/ui/ui.d.ts.map +1 -1
  80. package/dist/types/src/sdk_mode.d.ts +8 -2
  81. package/dist/types/src/sdk_mode.d.ts.map +1 -1
  82. package/dist/types/src/shared/models/field_core.d.ts +2 -2
  83. package/dist/types/src/shared/models/field_core.d.ts.map +1 -1
  84. package/dist/types/src/shared/models/mutations_core.d.ts.map +1 -1
  85. package/dist/types/src/shared/models/table_core.d.ts +835 -2
  86. package/dist/types/src/shared/models/table_core.d.ts.map +1 -1
  87. package/dist/types/src/shared/types/airtable_interface_core.d.ts +9 -9
  88. package/dist/types/src/shared/types/airtable_interface_core.d.ts.map +1 -1
  89. package/dist/types/src/shared/types/base_core.d.ts +3 -3
  90. package/dist/types/src/shared/types/base_core.d.ts.map +1 -1
  91. package/dist/types/src/shared/types/{field.d.ts → field_core.d.ts} +3 -3
  92. package/dist/types/src/shared/types/field_core.d.ts.map +1 -0
  93. package/dist/types/src/shared/types/mutations_core.d.ts +90 -2
  94. package/dist/types/src/shared/types/mutations_core.d.ts.map +1 -1
  95. package/dist/types/src/shared/types/table_core.d.ts +3 -8
  96. package/dist/types/src/shared/types/table_core.d.ts.map +1 -1
  97. package/dist/types/src/shared/ui/use_color_scheme.d.ts +28 -0
  98. package/dist/types/src/shared/ui/use_color_scheme.d.ts.map +1 -0
  99. package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts +1 -1
  100. package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +1 -1
  101. package/package.json +2 -16
  102. package/dist/types/src/shared/types/field.d.ts.map +0 -1
  103. package/dist/types/stories/all_controls.stories.d.ts +0 -10
  104. package/dist/types/stories/all_controls.stories.d.ts.map +0 -1
  105. package/dist/types/stories/box/appearance.stories.d.ts +0 -21
  106. package/dist/types/stories/box/appearance.stories.d.ts.map +0 -1
  107. package/dist/types/stories/box/box.stories.d.ts +0 -45
  108. package/dist/types/stories/box/box.stories.d.ts.map +0 -1
  109. package/dist/types/stories/box/dimensions.stories.d.ts +0 -24
  110. package/dist/types/stories/box/dimensions.stories.d.ts.map +0 -1
  111. package/dist/types/stories/box/flex_container.stories.d.ts +0 -24
  112. package/dist/types/stories/box/flex_container.stories.d.ts.map +0 -1
  113. package/dist/types/stories/box/flex_item.stories.d.ts +0 -25
  114. package/dist/types/stories/box/flex_item.stories.d.ts.map +0 -1
  115. package/dist/types/stories/box/position.stories.d.ts +0 -25
  116. package/dist/types/stories/box/position.stories.d.ts.map +0 -1
  117. package/dist/types/stories/box/spacing.stories.d.ts +0 -39
  118. package/dist/types/stories/box/spacing.stories.d.ts.map +0 -1
  119. package/dist/types/stories/box/typography.stories.d.ts +0 -33
  120. package/dist/types/stories/box/typography.stories.d.ts.map +0 -1
  121. package/dist/types/stories/button.stories.d.ts +0 -48
  122. package/dist/types/stories/button.stories.d.ts.map +0 -1
  123. package/dist/types/stories/cell_renderer.stories.d.ts +0 -11
  124. package/dist/types/stories/cell_renderer.stories.d.ts.map +0 -1
  125. package/dist/types/stories/choice_token.stories.d.ts +0 -24
  126. package/dist/types/stories/choice_token.stories.d.ts.map +0 -1
  127. package/dist/types/stories/collaborator_token.stories.d.ts +0 -29
  128. package/dist/types/stories/collaborator_token.stories.d.ts.map +0 -1
  129. package/dist/types/stories/color_palette.stories.d.ts +0 -12
  130. package/dist/types/stories/color_palette.stories.d.ts.map +0 -1
  131. package/dist/types/stories/confirmation_dialog.stories.d.ts +0 -10
  132. package/dist/types/stories/confirmation_dialog.stories.d.ts.map +0 -1
  133. package/dist/types/stories/dialog.stories.d.ts +0 -10
  134. package/dist/types/stories/dialog.stories.d.ts.map +0 -1
  135. package/dist/types/stories/field_icon.stories.d.ts +0 -10
  136. package/dist/types/stories/field_icon.stories.d.ts.map +0 -1
  137. package/dist/types/stories/field_picker.stories.d.ts +0 -12
  138. package/dist/types/stories/field_picker.stories.d.ts.map +0 -1
  139. package/dist/types/stories/form_field.stories.d.ts +0 -33
  140. package/dist/types/stories/form_field.stories.d.ts.map +0 -1
  141. package/dist/types/stories/heading.size.stories.d.ts +0 -19
  142. package/dist/types/stories/heading.size.stories.d.ts.map +0 -1
  143. package/dist/types/stories/heading.stories.d.ts +0 -33
  144. package/dist/types/stories/heading.stories.d.ts.map +0 -1
  145. package/dist/types/stories/helpers/attachments.d.ts +0 -4
  146. package/dist/types/stories/helpers/attachments.d.ts.map +0 -1
  147. package/dist/types/stories/helpers/categorize_style_props.d.ts +0 -14
  148. package/dist/types/stories/helpers/categorize_style_props.d.ts.map +0 -1
  149. package/dist/types/stories/helpers/choice_options.d.ts +0 -7
  150. package/dist/types/stories/helpers/choice_options.d.ts.map +0 -1
  151. package/dist/types/stories/helpers/code_block.d.ts +0 -5
  152. package/dist/types/stories/helpers/code_block.d.ts.map +0 -1
  153. package/dist/types/stories/helpers/code_utils.d.ts +0 -32
  154. package/dist/types/stories/helpers/code_utils.d.ts.map +0 -1
  155. package/dist/types/stories/helpers/collaborator_options.d.ts +0 -7
  156. package/dist/types/stories/helpers/collaborator_options.d.ts.map +0 -1
  157. package/dist/types/stories/helpers/example.d.ts +0 -39
  158. package/dist/types/stories/helpers/example.d.ts.map +0 -1
  159. package/dist/types/stories/helpers/example_code_panel.d.ts +0 -10
  160. package/dist/types/stories/helpers/example_code_panel.d.ts.map +0 -1
  161. package/dist/types/stories/helpers/fake_cell_renderer.d.ts +0 -7
  162. package/dist/types/stories/helpers/fake_cell_renderer.d.ts.map +0 -1
  163. package/dist/types/stories/helpers/fake_foreign_record.d.ts +0 -5
  164. package/dist/types/stories/helpers/fake_foreign_record.d.ts.map +0 -1
  165. package/dist/types/stories/helpers/fake_record_card.d.ts +0 -13
  166. package/dist/types/stories/helpers/fake_record_card.d.ts.map +0 -1
  167. package/dist/types/stories/helpers/field_type.d.ts +0 -6
  168. package/dist/types/stories/helpers/field_type.d.ts.map +0 -1
  169. package/dist/types/stories/helpers/raf_throttle.d.ts +0 -5
  170. package/dist/types/stories/helpers/raf_throttle.d.ts.map +0 -1
  171. package/dist/types/stories/helpers/style_prop_list.d.ts +0 -9
  172. package/dist/types/stories/helpers/style_prop_list.d.ts.map +0 -1
  173. package/dist/types/stories/helpers/sync_source_options.d.ts +0 -7
  174. package/dist/types/stories/helpers/sync_source_options.d.ts.map +0 -1
  175. package/dist/types/stories/helpers/use_resizable_panel.d.ts +0 -27
  176. package/dist/types/stories/helpers/use_resizable_panel.d.ts.map +0 -1
  177. package/dist/types/stories/icon.stories.d.ts +0 -18
  178. package/dist/types/stories/icon.stories.d.ts.map +0 -1
  179. package/dist/types/stories/icon_example.d.ts +0 -3
  180. package/dist/types/stories/icon_example.d.ts.map +0 -1
  181. package/dist/types/stories/input.stories.d.ts +0 -27
  182. package/dist/types/stories/input.stories.d.ts.map +0 -1
  183. package/dist/types/stories/label.stories.d.ts +0 -36
  184. package/dist/types/stories/label.stories.d.ts.map +0 -1
  185. package/dist/types/stories/link.stories.d.ts +0 -45
  186. package/dist/types/stories/link.stories.d.ts.map +0 -1
  187. package/dist/types/stories/loader.stories.d.ts +0 -21
  188. package/dist/types/stories/loader.stories.d.ts.map +0 -1
  189. package/dist/types/stories/progress_bar.stories.d.ts +0 -27
  190. package/dist/types/stories/progress_bar.stories.d.ts.map +0 -1
  191. package/dist/types/stories/record_card.stories.d.ts +0 -9
  192. package/dist/types/stories/record_card.stories.d.ts.map +0 -1
  193. package/dist/types/stories/record_card_list.stories.d.ts +0 -9
  194. package/dist/types/stories/record_card_list.stories.d.ts.map +0 -1
  195. package/dist/types/stories/select.stories.d.ts +0 -30
  196. package/dist/types/stories/select.stories.d.ts.map +0 -1
  197. package/dist/types/stories/select_buttons.stories.d.ts +0 -30
  198. package/dist/types/stories/select_buttons.stories.d.ts.map +0 -1
  199. package/dist/types/stories/switch.stories.d.ts +0 -48
  200. package/dist/types/stories/switch.stories.d.ts.map +0 -1
  201. package/dist/types/stories/table_picker.stories.d.ts +0 -12
  202. package/dist/types/stories/table_picker.stories.d.ts.map +0 -1
  203. package/dist/types/stories/text.size.stories.d.ts +0 -16
  204. package/dist/types/stories/text.size.stories.d.ts.map +0 -1
  205. package/dist/types/stories/text.stories.d.ts +0 -36
  206. package/dist/types/stories/text.stories.d.ts.map +0 -1
  207. package/dist/types/stories/text_button.stories.d.ts +0 -45
  208. package/dist/types/stories/text_button.stories.d.ts.map +0 -1
  209. package/dist/types/stories/tooltip.stories.d.ts +0 -10
  210. package/dist/types/stories/tooltip.stories.d.ts.map +0 -1
  211. package/dist/types/stories/view_picker.stories.d.ts +0 -12
  212. package/dist/types/stories/view_picker.stories.d.ts.map +0 -1
  213. package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts +0 -122
  214. package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts.map +0 -1
  215. package/dist/types/test/airtable_interface_mocks/linked_records.d.ts +0 -4
  216. package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +0 -1
  217. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts +0 -60
  218. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts.map +0 -1
  219. package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts +0 -4
  220. package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +0 -1
  221. package/dist/types/test/error_utils.test.d.ts +0 -2
  222. package/dist/types/test/error_utils.test.d.ts.map +0 -1
  223. package/dist/types/test/get_style_props_for_responsive_prop.test.d.ts +0 -2
  224. package/dist/types/test/get_style_props_for_responsive_prop.test.d.ts.map +0 -1
  225. package/dist/types/test/index.test.d.ts +0 -2
  226. package/dist/types/test/index.test.d.ts.map +0 -1
  227. package/dist/types/test/models/base.test.d.ts +0 -2
  228. package/dist/types/test/models/base.test.d.ts.map +0 -1
  229. package/dist/types/test/models/cursor.test.d.ts +0 -2
  230. package/dist/types/test/models/cursor.test.d.ts.map +0 -1
  231. package/dist/types/test/models/field.test.d.ts +0 -2
  232. package/dist/types/test/models/field.test.d.ts.map +0 -1
  233. package/dist/types/test/models/linked_records_query_result.test.d.ts +0 -2
  234. package/dist/types/test/models/linked_records_query_result.test.d.ts.map +0 -1
  235. package/dist/types/test/models/mutations.test.d.ts +0 -2
  236. package/dist/types/test/models/mutations.test.d.ts.map +0 -1
  237. package/dist/types/test/models/object_pool.test.d.ts +0 -2
  238. package/dist/types/test/models/object_pool.test.d.ts.map +0 -1
  239. package/dist/types/test/models/record.test.d.ts +0 -2
  240. package/dist/types/test/models/record.test.d.ts.map +0 -1
  241. package/dist/types/test/models/session.test.d.ts +0 -2
  242. package/dist/types/test/models/session.test.d.ts.map +0 -1
  243. package/dist/types/test/models/table.test.d.ts +0 -2
  244. package/dist/types/test/models/table.test.d.ts.map +0 -1
  245. package/dist/types/test/models/table_mutations.test.d.ts +0 -2
  246. package/dist/types/test/models/table_mutations.test.d.ts.map +0 -1
  247. package/dist/types/test/models/table_or_view_query_result.test.d.ts +0 -2
  248. package/dist/types/test/models/table_or_view_query_result.test.d.ts.map +0 -1
  249. package/dist/types/test/models/view.test.d.ts +0 -2
  250. package/dist/types/test/models/view.test.d.ts.map +0 -1
  251. package/dist/types/test/models/view_metadata_query_result.test.d.ts +0 -2
  252. package/dist/types/test/models/view_metadata_query_result.test.d.ts.map +0 -1
  253. package/dist/types/test/private_utils.test.d.ts +0 -2
  254. package/dist/types/test/private_utils.test.d.ts.map +0 -1
  255. package/dist/types/test/sdk.test.d.ts +0 -2
  256. package/dist/types/test/sdk.test.d.ts.map +0 -1
  257. package/dist/types/test/setup_enzyme.d.ts +0 -2
  258. package/dist/types/test/setup_enzyme.d.ts.map +0 -1
  259. package/dist/types/test/test_helpers.d.ts +0 -11
  260. package/dist/types/test/test_helpers.d.ts.map +0 -1
  261. package/dist/types/test/ui/base_provider.test.d.ts +0 -2
  262. package/dist/types/test/ui/base_provider.test.d.ts.map +0 -1
  263. package/dist/types/test/ui/block_wrapper.test.d.ts +0 -2
  264. package/dist/types/test/ui/block_wrapper.test.d.ts.map +0 -1
  265. package/dist/types/test/ui/box.test.d.ts +0 -2
  266. package/dist/types/test/ui/box.test.d.ts.map +0 -1
  267. package/dist/types/test/ui/button.test.d.ts +0 -2
  268. package/dist/types/test/ui/button.test.d.ts.map +0 -1
  269. package/dist/types/test/ui/cell_renderer.test.d.ts +0 -2
  270. package/dist/types/test/ui/cell_renderer.test.d.ts.map +0 -1
  271. package/dist/types/test/ui/choice_token.test.d.ts +0 -2
  272. package/dist/types/test/ui/choice_token.test.d.ts.map +0 -1
  273. package/dist/types/test/ui/collaborator_token.test.d.ts +0 -2
  274. package/dist/types/test/ui/collaborator_token.test.d.ts.map +0 -1
  275. package/dist/types/test/ui/color_palette.test.d.ts +0 -2
  276. package/dist/types/test/ui/color_palette.test.d.ts.map +0 -1
  277. package/dist/types/test/ui/color_palette_synced.test.d.ts +0 -2
  278. package/dist/types/test/ui/color_palette_synced.test.d.ts.map +0 -1
  279. package/dist/types/test/ui/confirmation_dialog.test.d.ts +0 -2
  280. package/dist/types/test/ui/confirmation_dialog.test.d.ts.map +0 -1
  281. package/dist/types/test/ui/dialog.test.d.ts +0 -2
  282. package/dist/types/test/ui/dialog.test.d.ts.map +0 -1
  283. package/dist/types/test/ui/expand_record.test.d.ts +0 -2
  284. package/dist/types/test/ui/expand_record.test.d.ts.map +0 -1
  285. package/dist/types/test/ui/expand_record_list.test.d.ts +0 -2
  286. package/dist/types/test/ui/expand_record_list.test.d.ts.map +0 -1
  287. package/dist/types/test/ui/expand_record_picker_async.test.d.ts +0 -2
  288. package/dist/types/test/ui/expand_record_picker_async.test.d.ts.map +0 -1
  289. package/dist/types/test/ui/field_icon.test.d.ts +0 -2
  290. package/dist/types/test/ui/field_icon.test.d.ts.map +0 -1
  291. package/dist/types/test/ui/field_picker.test.d.ts +0 -2
  292. package/dist/types/test/ui/field_picker.test.d.ts.map +0 -1
  293. package/dist/types/test/ui/field_picker_synced.test.d.ts +0 -2
  294. package/dist/types/test/ui/field_picker_synced.test.d.ts.map +0 -1
  295. package/dist/types/test/ui/form_field.test.d.ts +0 -2
  296. package/dist/types/test/ui/form_field.test.d.ts.map +0 -1
  297. package/dist/types/test/ui/global_alert.test.d.ts +0 -2
  298. package/dist/types/test/ui/global_alert.test.d.ts.map +0 -1
  299. package/dist/types/test/ui/heading.test.d.ts +0 -2
  300. package/dist/types/test/ui/heading.test.d.ts.map +0 -1
  301. package/dist/types/test/ui/icon.test.d.ts +0 -2
  302. package/dist/types/test/ui/icon.test.d.ts.map +0 -1
  303. package/dist/types/test/ui/initialize_block.test.d.ts +0 -2
  304. package/dist/types/test/ui/initialize_block.test.d.ts.map +0 -1
  305. package/dist/types/test/ui/input.test.d.ts +0 -2
  306. package/dist/types/test/ui/input.test.d.ts.map +0 -1
  307. package/dist/types/test/ui/input_synced.test.d.ts +0 -2
  308. package/dist/types/test/ui/input_synced.test.d.ts.map +0 -1
  309. package/dist/types/test/ui/label.test.d.ts +0 -2
  310. package/dist/types/test/ui/label.test.d.ts.map +0 -1
  311. package/dist/types/test/ui/link.test.d.ts +0 -2
  312. package/dist/types/test/ui/link.test.d.ts.map +0 -1
  313. package/dist/types/test/ui/loader.test.d.ts +0 -2
  314. package/dist/types/test/ui/loader.test.d.ts.map +0 -1
  315. package/dist/types/test/ui/modal.test.d.ts +0 -2
  316. package/dist/types/test/ui/modal.test.d.ts.map +0 -1
  317. package/dist/types/test/ui/popover.test.d.ts +0 -2
  318. package/dist/types/test/ui/popover.test.d.ts.map +0 -1
  319. package/dist/types/test/ui/progress_bar.test.d.ts +0 -2
  320. package/dist/types/test/ui/progress_bar.test.d.ts.map +0 -1
  321. package/dist/types/test/ui/record_card.test.d.ts +0 -2
  322. package/dist/types/test/ui/record_card.test.d.ts.map +0 -1
  323. package/dist/types/test/ui/record_card_list.test.d.ts +0 -2
  324. package/dist/types/test/ui/record_card_list.test.d.ts.map +0 -1
  325. package/dist/types/test/ui/remote_utils.test.d.ts +0 -2
  326. package/dist/types/test/ui/remote_utils.test.d.ts.map +0 -1
  327. package/dist/types/test/ui/select.test.d.ts +0 -2
  328. package/dist/types/test/ui/select.test.d.ts.map +0 -1
  329. package/dist/types/test/ui/select_buttons.test.d.ts +0 -2
  330. package/dist/types/test/ui/select_buttons.test.d.ts.map +0 -1
  331. package/dist/types/test/ui/select_buttons_synced.test.d.ts +0 -2
  332. package/dist/types/test/ui/select_buttons_synced.test.d.ts.map +0 -1
  333. package/dist/types/test/ui/select_synced.test.d.ts +0 -2
  334. package/dist/types/test/ui/select_synced.test.d.ts.map +0 -1
  335. package/dist/types/test/ui/switch.test.d.ts +0 -2
  336. package/dist/types/test/ui/switch.test.d.ts.map +0 -1
  337. package/dist/types/test/ui/switch_synced.test.d.ts +0 -2
  338. package/dist/types/test/ui/switch_synced.test.d.ts.map +0 -1
  339. package/dist/types/test/ui/synced.test.d.ts +0 -2
  340. package/dist/types/test/ui/synced.test.d.ts.map +0 -1
  341. package/dist/types/test/ui/table_picker.test.d.ts +0 -2
  342. package/dist/types/test/ui/table_picker.test.d.ts.map +0 -1
  343. package/dist/types/test/ui/table_picker_synced.test.d.ts +0 -2
  344. package/dist/types/test/ui/table_picker_synced.test.d.ts.map +0 -1
  345. package/dist/types/test/ui/text.test.d.ts +0 -2
  346. package/dist/types/test/ui/text.test.d.ts.map +0 -1
  347. package/dist/types/test/ui/text_button.test.d.ts +0 -2
  348. package/dist/types/test/ui/text_button.test.d.ts.map +0 -1
  349. package/dist/types/test/ui/tooltip.test.d.ts +0 -2
  350. package/dist/types/test/ui/tooltip.test.d.ts.map +0 -1
  351. package/dist/types/test/ui/ui.test.d.ts +0 -2
  352. package/dist/types/test/ui/ui.test.d.ts.map +0 -1
  353. package/dist/types/test/ui/unstable_standalone_ui.test.d.ts +0 -1
  354. package/dist/types/test/ui/unstable_standalone_ui.test.d.ts.map +0 -1
  355. package/dist/types/test/ui/use_array_identity.test.d.ts +0 -2
  356. package/dist/types/test/ui/use_array_identity.test.d.ts.map +0 -1
  357. package/dist/types/test/ui/use_loadable.test.d.ts +0 -2
  358. package/dist/types/test/ui/use_loadable.test.d.ts.map +0 -1
  359. package/dist/types/test/ui/use_record_action_data.test.d.ts +0 -2
  360. package/dist/types/test/ui/use_record_action_data.test.d.ts.map +0 -1
  361. package/dist/types/test/ui/use_records.test.d.ts +0 -2
  362. package/dist/types/test/ui/use_records.test.d.ts.map +0 -1
  363. package/dist/types/test/ui/use_view_metadata.test.d.ts +0 -2
  364. package/dist/types/test/ui/use_view_metadata.test.d.ts.map +0 -1
  365. package/dist/types/test/ui/use_watchable.test.d.ts +0 -2
  366. package/dist/types/test/ui/use_watchable.test.d.ts.map +0 -1
  367. package/dist/types/test/ui/view_picker.test.d.ts +0 -2
  368. package/dist/types/test/ui/view_picker.test.d.ts.map +0 -1
  369. package/dist/types/test/ui/view_picker_synced.test.d.ts +0 -2
  370. package/dist/types/test/ui/view_picker_synced.test.d.ts.map +0 -1
  371. package/dist/types/test/ui/viewport_constraint.test.d.ts +0 -2
  372. package/dist/types/test/ui/viewport_constraint.test.d.ts.map +0 -1
  373. package/dist/types/test/unstable_private_utils.test.d.ts +0 -1
  374. package/dist/types/test/unstable_private_utils.test.d.ts.map +0 -1
  375. /package/dist/cjs/shared/types/{field.js → field_core.js} +0 -0
@@ -1,6 +1,7 @@
1
- import { FieldId } from '../types/hyper_ids';
2
- import { ObjectValues } from '../private_utils';
1
+ import { FieldId, RecordId } from '../types/hyper_ids';
2
+ import { ObjectValues, ObjectMap } from '../private_utils';
3
3
  import { SdkMode } from '../../sdk_mode';
4
+ import { PermissionCheckResult } from '../types/mutations_core';
4
5
  import AbstractModel from './abstract_model';
5
6
  export declare const WatchableTableKeysCore: Readonly<{
6
7
  name: "name";
@@ -138,6 +139,838 @@ export declare abstract class TableCore<SdkModeT extends SdkMode, WatchableKeys
138
139
  * @param fieldIdOrName The ID or name of the field you're looking for.
139
140
  */
140
141
  getField(fieldIdOrName: FieldId | string): SdkModeT['FieldT'];
142
+ /**
143
+ * Updates cell values for a record.
144
+ *
145
+ * Throws an error if the user does not have permission to update the given cell values in
146
+ * the record, or if invalid input is provided (eg. invalid cell values).
147
+ *
148
+ * Refer to {@link FieldType} for cell value write formats.
149
+ *
150
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the updated
151
+ * cell values to be persisted to Airtable servers.
152
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
153
+ * before the promise resolves.
154
+ *
155
+ * @param recordOrRecordId the record to update
156
+ * @param fields cell values to update in that record, specified as object mapping `FieldId` or field name to value for that field.
157
+ * @example
158
+ * ```js
159
+ * function updateRecord(record, recordFields) {
160
+ * if (table.hasPermissionToUpdateRecord(record, recordFields)) {
161
+ * table.updateRecordAsync(record, recordFields);
162
+ * }
163
+ * // The updated values will now show in your extension (eg in
164
+ * // `table.selectRecords()` result) but are still being saved to Airtable
165
+ * // servers (e.g. other users may not be able to see them yet).
166
+ * }
167
+ *
168
+ * async function updateRecordAsync(record, recordFields) {
169
+ * if (table.hasPermissionToUpdateRecord(record, recordFields)) {
170
+ * await table.updateRecordAsync(record, recordFields);
171
+ * }
172
+ * // New record has been saved to Airtable servers.
173
+ * alert(`record with ID ${record.id} has been updated`);
174
+ * }
175
+ *
176
+ * // Fields can be specified by name or ID
177
+ * updateRecord(record1, {
178
+ * 'Post Title': 'How to make: orange-mango pound cake',
179
+ * 'Publication Date': '2020-01-01',
180
+ * });
181
+ * updateRecord(record2, {
182
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
183
+ * [publicationDateField.id]: '2020-02-02',
184
+ * });
185
+ *
186
+ * // Cell values should generally have format matching the output of
187
+ * // record.getCellValue() for the field being updated
188
+ * updateRecord(record1, {
189
+ * 'Category (single select)': {name: 'Recipe'},
190
+ * 'Tags (multiple select)': [{name: 'Desserts'}, {id: 'someChoiceId'}],
191
+ * 'Images (attachment)': [{url: 'http://mywebsite.com/cake.png'}],
192
+ * 'Related posts (linked records)': [{id: 'someRecordId'}],
193
+ * });
194
+ * ```
195
+ */
196
+ updateRecordAsync(recordOrRecordId: SdkModeT['RecordT'] | RecordId, fields: ObjectMap<FieldId | string, unknown>): Promise<void>;
197
+ /**
198
+ * Checks whether the current user has permission to perform the given record update.
199
+ *
200
+ * Accepts partial input, in the same format as {@link updateRecordAsync}.
201
+ * The more information provided, the more accurate the permissions check will be.
202
+ *
203
+ * Returns `{hasPermission: true}` if the current user can update the specified record,
204
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
205
+ * used to display an error message to the user.
206
+ *
207
+ * @param recordOrRecordId the record to update
208
+ * @param fields cell values to update in that record, specified as object mapping `FieldId` or field name to value for that field.
209
+ * @example
210
+ * ```js
211
+ * // Check if user can update specific fields for a specific record.
212
+ * const updateRecordCheckResult =
213
+ * table.checkPermissionsForUpdateRecord(record, {
214
+ * 'Post Title': 'How to make: orange-mango pound cake',
215
+ * 'Publication Date': '2020-01-01',
216
+ * });
217
+ * if (!updateRecordCheckResult.hasPermission) {
218
+ * alert(updateRecordCheckResult.reasonDisplayString);
219
+ * }
220
+ *
221
+ * // Like updateRecordAsync, you can use either field names or field IDs.
222
+ * const updateRecordCheckResultWithFieldIds =
223
+ * table.checkPermissionsForUpdateRecord(record, {
224
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
225
+ * [publicationDateField.id]: '2020-02-02',
226
+ * });
227
+ *
228
+ * // Check if user could update a given record, when you don't know the
229
+ * // specific fields that will be updated yet (e.g. to check whether you should
230
+ * // allow a user to select a certain record to update).
231
+ * const updateUnknownFieldsCheckResult =
232
+ * table.checkPermissionsForUpdateRecord(record);
233
+ *
234
+ * // Check if user could update specific fields, when you don't know the
235
+ * // specific record that will be updated yet. (for example, if the field is
236
+ * // selected by the user and you want to check if your extension can write to it).
237
+ * const updateUnknownRecordCheckResult =
238
+ * table.checkPermissionsForUpdateRecord(undefined, {
239
+ * 'My field name': 'updated value',
240
+ * // You can use undefined if you know you're going to update a field,
241
+ * // but don't know the new cell value yet.
242
+ * 'Another field name': undefined,
243
+ * });
244
+ *
245
+ * // Check if user could perform updates within the table, without knowing the
246
+ * // specific record or fields that will be updated yet (e.g., to render your
247
+ * // extension in "read only" mode).
248
+ * const updateUnknownRecordAndFieldsCheckResult =
249
+ * table.checkPermissionsForUpdateRecord();
250
+ * ```
251
+ */
252
+ checkPermissionsForUpdateRecord(recordOrRecordId?: SdkModeT['RecordT'] | RecordId, fields?: ObjectMap<FieldId | string, unknown | void>): PermissionCheckResult;
253
+ /**
254
+ * An alias for `checkPermissionsForUpdateRecord(recordOrRecordId, fields).hasPermission`.
255
+ *
256
+ * Checks whether the current user has permission to perform the given record update.
257
+ *
258
+ * Accepts partial input, in the same format as {@link updateRecordAsync}.
259
+ * The more information provided, the more accurate the permissions check will be.
260
+ *
261
+ * @param recordOrRecordId the record to update
262
+ * @param fields cell values to update in that record, specified as object mapping `FieldId` or field name to value for that field.
263
+ * @example
264
+ * ```js
265
+ * // Check if user can update specific fields for a specific record.
266
+ * const canUpdateRecord = table.hasPermissionToUpdateRecord(record, {
267
+ * 'Post Title': 'How to make: orange-mango pound cake',
268
+ * 'Publication Date': '2020-01-01',
269
+ * });
270
+ * if (!canUpdateRecord) {
271
+ * alert('not allowed!');
272
+ * }
273
+ *
274
+ * // Like updateRecordAsync, you can use either field names or field IDs.
275
+ * const canUpdateRecordWithFieldIds =
276
+ * table.hasPermissionToUpdateRecord(record, {
277
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
278
+ * [publicationDateField.id]: '2020-02-02',
279
+ * });
280
+ *
281
+ * // Check if user could update a given record, when you don't know the
282
+ * // specific fields that will be updated yet (e.g. to check whether you should
283
+ * // allow a user to select a certain record to update).
284
+ * const canUpdateUnknownFields = table.hasPermissionToUpdateRecord(record);
285
+ *
286
+ * // Check if user could update specific fields, when you don't know the
287
+ * // specific record that will be updated yet (e.g. if the field is selected
288
+ * // by the user and you want to check if your extension can write to it).
289
+ * const canUpdateUnknownRecord =
290
+ * table.hasPermissionToUpdateRecord(undefined, {
291
+ * 'My field name': 'updated value',
292
+ * // You can use undefined if you know you're going to update a field,
293
+ * // but don't know the new cell value yet.
294
+ * 'Another field name': undefined,
295
+ * });
296
+ *
297
+ * // Check if user could perform updates within the table, without knowing the
298
+ * // specific record or fields that will be updated yet. (for example, to
299
+ * // render your extension in "read only" mode)
300
+ * const canUpdateUnknownRecordAndFields = table.hasPermissionToUpdateRecord();
301
+ * ```
302
+ */
303
+ hasPermissionToUpdateRecord(recordOrRecordId?: SdkModeT['RecordT'] | RecordId, fields?: ObjectMap<FieldId | string, unknown | void>): boolean;
304
+ /**
305
+ * Updates cell values for records.
306
+ *
307
+ * Throws an error if the user does not have permission to update the given cell values in
308
+ * the records, or if invalid input is provided (eg. invalid cell values).
309
+ *
310
+ * Refer to {@link FieldType} for cell value write formats.
311
+ *
312
+ * You may only update up to 50 records in one call to `updateRecordsAsync`.
313
+ * See [Write back to Airtable](/guides/write-back-to-airtable) for more information
314
+ * about write limits.
315
+ *
316
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the
317
+ * updates to be persisted to Airtable servers.
318
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
319
+ * before the promise resolves.
320
+ *
321
+ * @param records Array of objects containing recordId and fields/cellValues to update for that record (specified as an object mapping `FieldId` or field name to cell value)
322
+ * @example
323
+ * ```js
324
+ * const recordsToUpdate = [
325
+ * // Fields can be specified by name or ID
326
+ * {
327
+ * id: record1.id,
328
+ * fields: {
329
+ * 'Post Title': 'How to make: orange-mango pound cake',
330
+ * 'Publication Date': '2020-01-01',
331
+ * },
332
+ * },
333
+ * {
334
+ * id: record2.id,
335
+ * fields: {
336
+ * // Sets the cell values to be empty.
337
+ * 'Post Title': '',
338
+ * 'Publication Date': '',
339
+ * },
340
+ * },
341
+ * {
342
+ * id: record3.id,
343
+ * fields: {
344
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
345
+ * [publicationDateField.id]: '2020-02-02',
346
+ * },
347
+ * },
348
+ * // Cell values should generally have format matching the output of
349
+ * // record.getCellValue() for the field being updated
350
+ * {
351
+ * id: record4.id,
352
+ * fields: {
353
+ * 'Category (single select)': {name: 'Recipe'},
354
+ * 'Tags (multiple select)': [{name: 'Desserts'}, {id: 'choiceId'}],
355
+ * 'Images (attachment)': [{url: 'http://mywebsite.com/cake.png'}],
356
+ * 'Related posts (linked records)': [{id: 'someRecordId'}],
357
+ * },
358
+ * },
359
+ * ];
360
+ *
361
+ * function updateRecords() {
362
+ * if (table.hasPermissionToUpdateRecords(recordsToUpdate)) {
363
+ * table.updateRecordsAsync(recordsToUpdate);
364
+ * }
365
+ * // The records are now updated within your extension (eg will be reflected in
366
+ * // `table.selectRecords()`) but are still being saved to Airtable servers
367
+ * // (e.g. they may not be updated for other users yet).
368
+ * }
369
+ *
370
+ * async function updateRecordsAsync() {
371
+ * if (table.hasPermissionToUpdateRecords(recordsToUpdate)) {
372
+ * await table.updateRecordsAsync(recordsToUpdate);
373
+ * }
374
+ * // Record updates have been saved to Airtable servers.
375
+ * alert('records have been updated');
376
+ * }
377
+ * ```
378
+ */
379
+ updateRecordsAsync(records: ReadonlyArray<{
380
+ readonly id: RecordId;
381
+ readonly fields: ObjectMap<FieldId | string, unknown>;
382
+ }>): Promise<void>;
383
+ /**
384
+ * Checks whether the current user has permission to perform the given record updates.
385
+ *
386
+ * Accepts partial input, in the same format as {@link updateRecordsAsync}.
387
+ * The more information provided, the more accurate the permissions check will be.
388
+ *
389
+ * Returns `{hasPermission: true}` if the current user can update the specified records,
390
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
391
+ * used to display an error message to the user.
392
+ *
393
+ * @param records Array of objects containing recordId and fields/cellValues to update for that record (specified as an object mapping `FieldId` or field name to cell value)
394
+ * @example
395
+ * ```js
396
+ * const recordsToUpdate = [
397
+ * {
398
+ * // Validating a complete record update
399
+ * id: record1.id,
400
+ * fields: {
401
+ * 'Post Title': 'How to make: orange-mango pound cake',
402
+ * 'Publication Date': '2020-01-01',
403
+ * },
404
+ * },
405
+ * {
406
+ * // Like updateRecordsAsync, fields can be specified by name or ID
407
+ * id: record2.id,
408
+ * fields: {
409
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
410
+ * [publicationDateField.id]: '2020-02-02',
411
+ * },
412
+ * },
413
+ * {
414
+ * // Validating an update to a specific record, not knowing what
415
+ * // fields will be updated
416
+ * id: record3.id,
417
+ * },
418
+ * {
419
+ * // Validating an update to specific cell values, not knowing what
420
+ * // record will be updated
421
+ * fields: {
422
+ * 'My field name': 'updated value for unknown record',
423
+ * // You can use undefined if you know you're going to update a
424
+ * // field, but don't know the new cell value yet.
425
+ * 'Another field name': undefined,
426
+ * },
427
+ * },
428
+ * ];
429
+ *
430
+ * const updateRecordsCheckResult =
431
+ * table.checkPermissionsForUpdateRecords(recordsToUpdate);
432
+ * if (!updateRecordsCheckResult.hasPermission) {
433
+ * alert(updateRecordsCheckResult.reasonDisplayString);
434
+ * }
435
+ *
436
+ * // Check if user could potentially update records.
437
+ * // Equivalent to table.checkPermissionsForUpdateRecord()
438
+ * const updateUnknownRecordAndFieldsCheckResult =
439
+ * table.checkPermissionsForUpdateRecords();
440
+ * ```
441
+ */
442
+ checkPermissionsForUpdateRecords(records?: ReadonlyArray<{
443
+ readonly id?: RecordId | void;
444
+ readonly fields?: ObjectMap<FieldId | string, unknown | void> | void;
445
+ }>): PermissionCheckResult;
446
+ /**
447
+ * An alias for `checkPermissionsForUpdateRecords(records).hasPermission`.
448
+ *
449
+ * Checks whether the current user has permission to perform the given record updates.
450
+ *
451
+ * Accepts partial input, in the same format as {@link updateRecordsAsync}.
452
+ * The more information provided, the more accurate the permissions check will be.
453
+ *
454
+ * @param records Array of objects containing recordId and fields/cellValues to update for that record (specified as an object mapping `FieldId` or field name to cell value)
455
+ * @example
456
+ * ```js
457
+ * const recordsToUpdate = [
458
+ * {
459
+ * // Validating a complete record update
460
+ * id: record1.id,
461
+ * fields: {
462
+ * 'Post Title': 'How to make: orange-mango pound cake',
463
+ * 'Publication Date': '2020-01-01',
464
+ * },
465
+ * },
466
+ * {
467
+ * // Like updateRecordsAsync, fields can be specified by name or ID
468
+ * id: record2.id,
469
+ * fields: {
470
+ * [postTitleField.id]: 'Cake decorating tips & tricks',
471
+ * [publicationDateField.id]: '2020-02-02',
472
+ * },
473
+ * },
474
+ * {
475
+ * // Validating an update to a specific record, not knowing what
476
+ * // fields will be updated
477
+ * id: record3.id,
478
+ * },
479
+ * {
480
+ * // Validating an update to specific cell values, not knowing what
481
+ * // record will be updated
482
+ * fields: {
483
+ * 'My field name': 'updated value for unknown record',
484
+ * // You can use undefined if you know you're going to update a
485
+ * // field, but don't know the new cell value yet.
486
+ * 'Another field name': undefined,
487
+ * },
488
+ * },
489
+ * ];
490
+ *
491
+ * const canUpdateRecords = table.hasPermissionToUpdateRecords(recordsToUpdate);
492
+ * if (!canUpdateRecords) {
493
+ * alert('not allowed');
494
+ * }
495
+ *
496
+ * // Check if user could potentially update records.
497
+ * // Equivalent to table.hasPermissionToUpdateRecord()
498
+ * const canUpdateUnknownRecordsAndFields =
499
+ * table.hasPermissionToUpdateRecords();
500
+ * ```
501
+ */
502
+ hasPermissionToUpdateRecords(records?: ReadonlyArray<{
503
+ readonly id?: RecordId | void;
504
+ readonly fields?: ObjectMap<FieldId | string, unknown | void> | void;
505
+ }>): boolean;
506
+ /**
507
+ * Delete the given record.
508
+ *
509
+ * Throws an error if the user does not have permission to delete the given record.
510
+ *
511
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the
512
+ * delete to be persisted to Airtable servers.
513
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
514
+ * before the promise resolves.
515
+ *
516
+ * @param recordOrRecordId the record to be deleted
517
+ * @example
518
+ * ```js
519
+ * function deleteRecord(record) {
520
+ * if (table.hasPermissionToDeleteRecord(record)) {
521
+ * table.deleteRecordAsync(record);
522
+ * }
523
+ * // The record is now deleted within your extension (eg will not be returned
524
+ * // in `table.selectRecords`) but it is still being saved to Airtable
525
+ * // servers (e.g. it may not look deleted to other users yet).
526
+ * }
527
+ *
528
+ * async function deleteRecordAsync(record) {
529
+ * if (table.hasPermissionToDeleteRecord(record)) {
530
+ * await table.deleteRecordAsync(record);
531
+ * }
532
+ * // Record deletion has been saved to Airtable servers.
533
+ * alert('record has been deleted');
534
+ * }
535
+ * ```
536
+ */
537
+ deleteRecordAsync(recordOrRecordId: SdkModeT['RecordT'] | RecordId): Promise<void>;
538
+ /**
539
+ * Checks whether the current user has permission to delete the specified record.
540
+ *
541
+ * Accepts optional input, in the same format as {@link deleteRecordAsync}.
542
+ * The more information provided, the more accurate the permissions check will be.
543
+ *
544
+ * Returns `{hasPermission: true}` if the current user can delete the specified record,
545
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
546
+ * used to display an error message to the user.
547
+ *
548
+ * @param recordOrRecordId the record to be deleted
549
+ * @example
550
+ * ```js
551
+ * // Check if user can delete a specific record
552
+ * const deleteRecordCheckResult =
553
+ * table.checkPermissionsForDeleteRecord(record);
554
+ * if (!deleteRecordCheckResult.hasPermission) {
555
+ * alert(deleteRecordCheckResult.reasonDisplayString);
556
+ * }
557
+ *
558
+ * // Check if user could potentially delete a record.
559
+ * // Use when you don't know the specific record you want to delete yet (for
560
+ * // example, to show/hide UI controls that let you select a record to delete).
561
+ * const deleteUnknownRecordCheckResult =
562
+ * table.checkPermissionsForDeleteRecord();
563
+ * ```
564
+ */
565
+ checkPermissionsForDeleteRecord(recordOrRecordId?: SdkModeT['RecordT'] | RecordId): PermissionCheckResult;
566
+ /**
567
+ * An alias for `checkPermissionsForDeleteRecord(recordOrRecordId).hasPermission`.
568
+ *
569
+ * Checks whether the current user has permission to delete the specified record.
570
+ *
571
+ * Accepts optional input, in the same format as {@link deleteRecordAsync}.
572
+ * The more information provided, the more accurate the permissions check will be.
573
+ *
574
+ * @param recordOrRecordId the record to be deleted
575
+ * @example
576
+ * ```js
577
+ * // Check if user can delete a specific record
578
+ * const canDeleteRecord = table.hasPermissionToDeleteRecord(record);
579
+ * if (!canDeleteRecord) {
580
+ * alert('not allowed');
581
+ * }
582
+ *
583
+ * // Check if user could potentially delete a record.
584
+ * // Use when you don't know the specific record you want to delete yet (for
585
+ * // example, to show/hide UI controls that let you select a record to delete).
586
+ * const canDeleteUnknownRecord = table.hasPermissionToDeleteRecord();
587
+ * ```
588
+ */
589
+ hasPermissionToDeleteRecord(recordOrRecordId?: SdkModeT['RecordT'] | RecordId): boolean;
590
+ /**
591
+ * Delete the given records.
592
+ *
593
+ * Throws an error if the user does not have permission to delete the given records.
594
+ *
595
+ * You may only delete up to 50 records in one call to `deleteRecordsAsync`.
596
+ * See [Write back to Airtable](/guides/write-back-to-airtable#size-limits-rate-limits) for
597
+ * more information about write limits.
598
+ *
599
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the
600
+ * delete to be persisted to Airtable servers.
601
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
602
+ * before the promise resolves.
603
+ *
604
+ * @param recordsOrRecordIds Array of Records and RecordIds
605
+ * @example
606
+ * ```js
607
+ *
608
+ * function deleteRecords(records) {
609
+ * if (table.hasPermissionToDeleteRecords(records)) {
610
+ * table.deleteRecordsAsync(records);
611
+ * }
612
+ * // The records are now deleted within your extension (eg will not be
613
+ * // returned in `table.selectRecords()`) but are still being saved to
614
+ * // Airtable servers (e.g. they may not look deleted to other users yet).
615
+ * }
616
+ *
617
+ * async function deleteRecordsAsync(records) {
618
+ * if (table.hasPermissionToDeleteRecords(records)) {
619
+ * await table.deleteRecordsAsync(records);
620
+ * }
621
+ * // Record deletions have been saved to Airtable servers.
622
+ * alert('records have been deleted');
623
+ * }
624
+ * ```
625
+ */
626
+ deleteRecordsAsync(recordsOrRecordIds: ReadonlyArray<SdkModeT['RecordT'] | RecordId>): Promise<void>;
627
+ /**
628
+ * Checks whether the current user has permission to delete the specified records.
629
+ *
630
+ * Accepts optional input, in the same format as {@link deleteRecordsAsync}.
631
+ * The more information provided, the more accurate the permissions check will be.
632
+ *
633
+ * Returns `{hasPermission: true}` if the current user can delete the specified records,
634
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
635
+ * used to display an error message to the user.
636
+ *
637
+ * @param recordsOrRecordIds the records to be deleted
638
+ * @example
639
+ * ```js
640
+ * // Check if user can delete specific records
641
+ * const deleteRecordsCheckResult =
642
+ * table.checkPermissionsForDeleteRecords([record1, record2]);
643
+ * if (!deleteRecordsCheckResult.hasPermission) {
644
+ * alert(deleteRecordsCheckResult.reasonDisplayString);
645
+ * }
646
+ *
647
+ * // Check if user could potentially delete records.
648
+ * // Use when you don't know the specific records you want to delete yet (for
649
+ * // example, to show/hide UI controls that let you select records to delete).
650
+ * // Equivalent to table.hasPermissionToDeleteRecord()
651
+ * const deleteUnknownRecordsCheckResult =
652
+ * table.checkPermissionsForDeleteRecords();
653
+ * ```
654
+ */
655
+ checkPermissionsForDeleteRecords(recordsOrRecordIds?: ReadonlyArray<SdkModeT['RecordT'] | RecordId>): PermissionCheckResult;
656
+ /**
657
+ * An alias for `checkPermissionsForDeleteRecords(recordsOrRecordIds).hasPermission`.
658
+ *
659
+ * Checks whether the current user has permission to delete the specified records.
660
+ *
661
+ * Accepts optional input, in the same format as {@link deleteRecordsAsync}.
662
+ * The more information provided, the more accurate the permissions check will be.
663
+ *
664
+ * @param recordsOrRecordIds the records to be deleted
665
+ * @example
666
+ * ```js
667
+ * // Check if user can delete specific records
668
+ * const canDeleteRecords =
669
+ * table.hasPermissionToDeleteRecords([record1, record2]);
670
+ * if (!canDeleteRecords) {
671
+ * alert('not allowed!');
672
+ * }
673
+ *
674
+ * // Check if user could potentially delete records.
675
+ * // Use when you don't know the specific records you want to delete yet (for
676
+ * // example, to show/hide UI controls that let you select records to delete).
677
+ * // Equivalent to table.hasPermissionToDeleteRecord()
678
+ * const canDeleteUnknownRecords = table.hasPermissionToDeleteRecords();
679
+ * ```
680
+ */
681
+ hasPermissionToDeleteRecords(recordsOrRecordIds?: ReadonlyArray<SdkModeT['RecordT'] | RecordId>): boolean;
682
+ /**
683
+ * Creates a new record with the specified cell values.
684
+ *
685
+ * Throws an error if the user does not have permission to create the given records, or
686
+ * if invalid input is provided (eg. invalid cell values).
687
+ *
688
+ * Refer to {@link FieldType} for cell value write formats.
689
+ *
690
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the new
691
+ * record to be persisted to Airtable servers.
692
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
693
+ * before the promise resolves.
694
+ *
695
+ * The returned promise will resolve to the RecordId of the new record once it is persisted.
696
+ *
697
+ * @param fields object mapping `FieldId` or field name to value for that field.
698
+ * @example
699
+ * ```js
700
+ * function createNewRecord(recordFields) {
701
+ * if (table.hasPermissionToCreateRecord(recordFields)) {
702
+ * table.createRecordAsync(recordFields);
703
+ * }
704
+ * // You can now access the new record in your extension (eg
705
+ * // `table.selectRecords()`) but it is still being saved to Airtable
706
+ * // servers (e.g. other users may not be able to see it yet).
707
+ * }
708
+ *
709
+ * async function createNewRecordAsync(recordFields) {
710
+ * if (table.hasPermissionToCreateRecord(recordFields)) {
711
+ * const newRecordId = await table.createRecordAsync(recordFields);
712
+ * }
713
+ * // New record has been saved to Airtable servers.
714
+ * alert(`new record with ID ${newRecordId} has been created`);
715
+ * }
716
+ *
717
+ * // Fields can be specified by name or ID
718
+ * createNewRecord({
719
+ * 'Project Name': 'Advertising campaign',
720
+ * 'Budget': 100,
721
+ * });
722
+ * createNewRecord({
723
+ * [projectNameField.id]: 'Cat video',
724
+ * [budgetField.id]: 200,
725
+ * });
726
+ *
727
+ * // Cell values should generally have format matching the output of
728
+ * // record.getCellValue() for the field being updated
729
+ * createNewRecord({
730
+ * 'Project Name': 'Cat video 2'
731
+ * 'Category (single select)': {name: 'Video'},
732
+ * 'Tags (multiple select)': [{name: 'Cats'}, {id: 'someChoiceId'}],
733
+ * 'Assets (attachment)': [{url: 'http://mywebsite.com/cats.mp4'}],
734
+ * 'Related projects (linked records)': [{id: 'someRecordId'}],
735
+ * });
736
+ * ```
737
+ */
738
+ createRecordAsync(fields?: ObjectMap<FieldId | string, unknown>): Promise<RecordId>;
739
+ /**
740
+ * Checks whether the current user has permission to create the specified record.
741
+ *
742
+ * Accepts partial input, in the same format as {@link createRecordAsync}.
743
+ * The more information provided, the more accurate the permissions check will be.
744
+ *
745
+ * Returns `{hasPermission: true}` if the current user can create the specified record,
746
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
747
+ * used to display an error message to the user.
748
+ *
749
+ * @param fields object mapping `FieldId` or field name to value for that field.
750
+ * @example
751
+ * ```js
752
+ * // Check if user can create a specific record, when you already know what
753
+ * // fields/cell values will be set for the record.
754
+ * const createRecordCheckResult = table.checkPermissionsForCreateRecord({
755
+ * 'Project Name': 'Advertising campaign',
756
+ * 'Budget': 100,
757
+ * });
758
+ * if (!createRecordCheckResult.hasPermission) {
759
+ * alert(createRecordCheckResult.reasonDisplayString);
760
+ * }
761
+ *
762
+ * // Like createRecordAsync, you can use either field names or field IDs.
763
+ * const checkResultWithFieldIds = table.checkPermissionsForCreateRecord({
764
+ * [projectNameField.id]: 'Cat video',
765
+ * [budgetField.id]: 200,
766
+ * });
767
+ *
768
+ * // Check if user could potentially create a record.
769
+ * // Use when you don't know the specific fields/cell values yet (for example,
770
+ * // to show or hide UI controls that let you start creating a record.)
771
+ * const createUnknownRecordCheckResult =
772
+ * table.checkPermissionsForCreateRecord();
773
+ * ```
774
+ */
775
+ checkPermissionsForCreateRecord(fields?: ObjectMap<FieldId | string, unknown | void>): PermissionCheckResult;
776
+ /**
777
+ * An alias for `checkPermissionsForCreateRecord(fields).hasPermission`.
778
+ *
779
+ * Checks whether the current user has permission to create the specified record.
780
+ *
781
+ * Accepts partial input, in the same format as {@link createRecordAsync}.
782
+ * The more information provided, the more accurate the permissions check will be.
783
+ *
784
+ * @param fields object mapping `FieldId` or field name to value for that field.
785
+ * @example
786
+ * ```js
787
+ * // Check if user can create a specific record, when you already know what
788
+ * // fields/cell values will be set for the record.
789
+ * const canCreateRecord = table.hasPermissionToCreateRecord({
790
+ * 'Project Name': 'Advertising campaign',
791
+ * 'Budget': 100,
792
+ * });
793
+ * if (!canCreateRecord) {
794
+ * alert('not allowed!');
795
+ * }
796
+ *
797
+ * // Like createRecordAsync, you can use either field names or field IDs.
798
+ * const canCreateRecordWithFieldIds = table.hasPermissionToCreateRecord({
799
+ * [projectNameField.id]: 'Cat video',
800
+ * [budgetField.id]: 200,
801
+ * });
802
+ *
803
+ * // Check if user could potentially create a record.
804
+ * // Use when you don't know the specific fields/cell values yet (for example,
805
+ * // to show or hide UI controls that let you start creating a record.)
806
+ * const canCreateUnknownRecord = table.hasPermissionToCreateRecord();
807
+ * ```
808
+ */
809
+ hasPermissionToCreateRecord(fields?: ObjectMap<FieldId | string, unknown | void>): boolean;
810
+ /**
811
+ * Creates new records with the specified cell values.
812
+ *
813
+ * Throws an error if the user does not have permission to create the given records, or
814
+ * if invalid input is provided (eg. invalid cell values).
815
+ *
816
+ * Refer to {@link FieldType} for cell value write formats.
817
+ *
818
+ * You may only create up to 50 records in one call to `createRecordsAsync`.
819
+ * See [Write back to Airtable](/guides/write-back-to-airtable#size-limits-rate-limits) for
820
+ * more information about write limits.
821
+ *
822
+ * This action is asynchronous: `await` the returned promise if you wish to wait for the new
823
+ * record to be persisted to Airtable servers.
824
+ * Updates are applied optimistically locally, so your changes will be reflected in your extension
825
+ * before the promise resolves.
826
+ *
827
+ * The returned promise will resolve to an array of RecordIds of the new records once the new
828
+ * records are persisted.
829
+ *
830
+ * @param records Array of objects with a `fields` key mapping `FieldId` or field name to value for that field.
831
+ * @example
832
+ * ```js
833
+ * const recordDefs = [
834
+ * // Fields can be specified by name or ID
835
+ * {
836
+ * fields: {
837
+ * 'Project Name': 'Advertising campaign',
838
+ * 'Budget': 100,
839
+ * },
840
+ * },
841
+ * {
842
+ * fields: {
843
+ * [projectNameField.id]: 'Cat video',
844
+ * [budgetField.id]: 200,
845
+ * },
846
+ * },
847
+ * // Specifying no fields will create a new record with no cell values set
848
+ * {
849
+ * fields: {},
850
+ * },
851
+ * // Cell values should generally have format matching the output of
852
+ * // record.getCellValue() for the field being updated
853
+ * {
854
+ * fields: {
855
+ * 'Project Name': 'Cat video 2'
856
+ * 'Category (single select)': {name: 'Video'},
857
+ * 'Tags (multiple select)': [{name: 'Cats'}, {id: 'choiceId'}],
858
+ * 'Assets (attachment)': [{url: 'http://mywebsite.com/cats.mp4'}],
859
+ * 'Related projects (linked records)': [{id: 'someRecordId'}],
860
+ * },
861
+ * },
862
+ * ];
863
+ *
864
+ * function createNewRecords() {
865
+ * if (table.hasPermissionToCreateRecords(recordDefs)) {
866
+ * table.createRecordsAsync(recordDefs);
867
+ * }
868
+ * // You can now access the new records in your extension (e.g.
869
+ * // `table.selectRecords()`) but they are still being saved to Airtable
870
+ * // servers (e.g. other users may not be able to see them yet.)
871
+ * }
872
+ *
873
+ * async function createNewRecordsAsync() {
874
+ * if (table.hasPermissionToCreateRecords(recordDefs)) {
875
+ * const newRecordIds = await table.createRecordsAsync(recordDefs);
876
+ * }
877
+ * // New records have been saved to Airtable servers.
878
+ * alert(`new records with IDs ${newRecordIds} have been created`);
879
+ * }
880
+ * ```
881
+ */
882
+ createRecordsAsync(records: ReadonlyArray<{
883
+ fields: ObjectMap<FieldId | string, unknown>;
884
+ }>): Promise<Array<RecordId>>;
885
+ /**
886
+ * Checks whether the current user has permission to create the specified records.
887
+ *
888
+ * Accepts partial input, in the same format as {@link createRecordsAsync}.
889
+ * The more information provided, the more accurate the permissions check will be.
890
+ *
891
+ * Returns `{hasPermission: true}` if the current user can create the specified records,
892
+ * `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
893
+ * used to display an error message to the user.
894
+ *
895
+ * @param records Array of objects mapping `FieldId` or field name to value for that field.
896
+ * @example
897
+ * ```js
898
+ * // Check if user can create specific records, when you already know what
899
+ * // fields/cell values will be set for the records.
900
+ * const createRecordsCheckResult = table.checkPermissionsForCreateRecords([
901
+ * // Like createRecordsAsync, fields can be specified by name or ID
902
+ * {
903
+ * fields: {
904
+ * 'Project Name': 'Advertising campaign',
905
+ * 'Budget': 100,
906
+ * },
907
+ * },
908
+ * {
909
+ * fields: {
910
+ * [projectNameField.id]: 'Cat video',
911
+ * [budgetField.id]: 200,
912
+ * },
913
+ * },
914
+ * {},
915
+ * ]);
916
+ * if (!createRecordsCheckResult.hasPermission) {
917
+ * alert(createRecordsCheckResult.reasonDisplayString);
918
+ * }
919
+ *
920
+ * // Check if user could potentially create records.
921
+ * // Use when you don't know the specific fields/cell values yet (for example,
922
+ * // to show or hide UI controls that let you start creating records.)
923
+ * // Equivalent to table.checkPermissionsForCreateRecord()
924
+ * const createUnknownRecordCheckResult =
925
+ * table.checkPermissionsForCreateRecords();
926
+ * ```
927
+ */
928
+ checkPermissionsForCreateRecords(records?: ReadonlyArray<{
929
+ readonly fields?: ObjectMap<FieldId | string, unknown | void> | void;
930
+ }>): PermissionCheckResult;
931
+ /**
932
+ * An alias for `checkPermissionsForCreateRecords(records).hasPermission`.
933
+ *
934
+ * Checks whether the current user has permission to create the specified records.
935
+ *
936
+ * Accepts partial input, in the same format as {@link createRecordsAsync}.
937
+ * The more information provided, the more accurate the permissions check will be.
938
+ *
939
+ * @param records Array of objects mapping `FieldId` or field name to value for that field.
940
+ * @example
941
+ * ```js
942
+ * // Check if user can create specific records, when you already know what fields/cell values
943
+ * // will be set for the records.
944
+ * const canCreateRecords = table.hasPermissionToCreateRecords([
945
+ * // Like createRecordsAsync, fields can be specified by name or ID
946
+ * {
947
+ * fields: {
948
+ * 'Project Name': 'Advertising campaign',
949
+ * 'Budget': 100,
950
+ * }
951
+ * },
952
+ * {
953
+ * fields: {
954
+ * [projectNameField.id]: 'Cat video',
955
+ * [budgetField.id]: 200,
956
+ * }
957
+ * },
958
+ * {},
959
+ * ]);
960
+ * if (!canCreateRecords) {
961
+ * alert('not allowed');
962
+ * }
963
+ *
964
+ * // Check if user could potentially create records.
965
+ * // Use when you don't know the specific fields/cell values yet (for example,
966
+ * // to show or hide UI controls that let you start creating records).
967
+ * // Equivalent to table.hasPermissionToCreateRecord()
968
+ * const canCreateUnknownRecords = table.hasPermissionToCreateRecords();
969
+ * ```
970
+ */
971
+ hasPermissionToCreateRecords(records?: ReadonlyArray<{
972
+ readonly fields?: ObjectMap<FieldId | string, unknown | void> | void;
973
+ }>): boolean;
141
974
  }
142
975
  export {};
143
976
  //# sourceMappingURL=table_core.d.ts.map