@airtable/blocks 0.0.0-experimental-f52bc4e5e-20250709 → 0.0.0-experimental-3649c7162-20250904
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.
- package/dist/esm/base/assert_run_context.js +12 -0
- package/dist/{cjs → esm}/base/index.js +30 -32
- package/dist/esm/base/models/abstract_model_with_async_data.js +190 -0
- package/dist/esm/base/models/base.js +252 -0
- package/dist/esm/base/models/create_aggregators.js +90 -0
- package/dist/esm/base/models/cursor.js +305 -0
- package/dist/esm/base/models/field.js +338 -0
- package/dist/esm/base/models/grouped_record_query_result.js +280 -0
- package/dist/esm/base/models/linked_records_query_result.js +553 -0
- package/dist/{cjs → esm}/base/models/models.js +19 -40
- package/dist/esm/base/models/mutations.js +312 -0
- package/dist/esm/base/models/object_pool.js +145 -0
- package/dist/esm/base/models/record.js +239 -0
- package/dist/{cjs → esm}/base/models/record_coloring.js +6 -6
- package/dist/esm/base/models/record_query_result.js +657 -0
- package/dist/esm/base/models/record_store.js +475 -0
- package/dist/esm/base/models/session.js +154 -0
- package/dist/esm/base/models/table.js +520 -0
- package/dist/esm/base/models/table_or_view_query_result.js +749 -0
- package/dist/esm/base/models/view.js +326 -0
- package/dist/esm/base/models/view_data_store.js +265 -0
- package/dist/esm/base/models/view_metadata_query_result.js +176 -0
- package/dist/esm/base/perform_record_action.js +215 -0
- package/dist/esm/base/sdk.js +178 -0
- package/dist/esm/base/settings_button.js +118 -0
- package/dist/{cjs → esm}/base/types/airtable_interface.js +1 -1
- package/dist/{cjs → esm}/base/types/mutations.js +5 -11
- package/dist/{cjs → esm}/base/types/undo_redo.js +1 -1
- package/dist/{cjs → esm}/base/types/view.js +1 -1
- package/dist/{cjs → esm}/base/ui/base_provider.js +6 -8
- package/dist/esm/base/ui/baymax_utils.js +461 -0
- package/dist/esm/base/ui/block_wrapper.js +118 -0
- package/dist/esm/base/ui/box.js +84 -0
- package/dist/esm/base/ui/button.js +152 -0
- package/dist/esm/base/ui/cell_renderer.js +198 -0
- package/dist/esm/base/ui/choice_token.js +93 -0
- package/dist/esm/base/ui/collaborator_token.js +123 -0
- package/dist/esm/base/ui/color_palette.js +196 -0
- package/dist/esm/base/ui/color_palette_synced.js +69 -0
- package/dist/esm/base/ui/confirmation_dialog.js +103 -0
- package/dist/{cjs → esm}/base/ui/control_sizes.js +24 -22
- package/dist/{cjs → esm}/base/ui/create_detect_element_resize.js +6 -10
- package/dist/{cjs → esm}/base/ui/css_helpers.js +1 -1
- package/dist/esm/base/ui/dialog.js +101 -0
- package/dist/esm/base/ui/dialog_close_button.js +106 -0
- package/dist/{cjs → esm}/base/ui/expand_record.js +1 -2
- package/dist/{cjs → esm}/base/ui/expand_record_list.js +3 -4
- package/dist/esm/base/ui/expand_record_picker_async.js +71 -0
- package/dist/esm/base/ui/field_icon.js +44 -0
- package/dist/esm/base/ui/field_picker.js +98 -0
- package/dist/esm/base/ui/field_picker_synced.js +66 -0
- package/dist/esm/base/ui/form_field.js +109 -0
- package/dist/{cjs → esm}/base/ui/geometry/geometry.js +5 -5
- package/dist/esm/base/ui/geometry/point.js +19 -0
- package/dist/esm/base/ui/geometry/rect.js +51 -0
- package/dist/esm/base/ui/geometry/size.js +19 -0
- package/dist/esm/base/ui/global_alert.js +71 -0
- package/dist/esm/base/ui/heading.js +132 -0
- package/dist/esm/base/ui/icon.js +109 -0
- package/dist/{cjs → esm}/base/ui/icon_config.js +6 -12
- package/dist/{cjs → esm}/base/ui/initialize_block.js +16 -35
- package/dist/esm/base/ui/input.js +161 -0
- package/dist/esm/base/ui/input_synced.js +66 -0
- package/dist/{cjs → esm}/base/ui/key_codes.js +2 -3
- package/dist/esm/base/ui/label.js +80 -0
- package/dist/esm/base/ui/link.js +196 -0
- package/dist/esm/base/ui/loader.js +61 -0
- package/dist/esm/base/ui/modal.js +145 -0
- package/dist/esm/base/ui/model_picker_select.js +57 -0
- package/dist/esm/base/ui/popover.js +315 -0
- package/dist/esm/base/ui/progress_bar.js +115 -0
- package/dist/esm/base/ui/record_card.js +564 -0
- package/dist/esm/base/ui/record_card_list.js +303 -0
- package/dist/esm/base/ui/select.js +191 -0
- package/dist/esm/base/ui/select_and_select_buttons_helpers.js +63 -0
- package/dist/esm/base/ui/select_buttons.js +159 -0
- package/dist/esm/base/ui/select_buttons_synced.js +62 -0
- package/dist/esm/base/ui/select_synced.js +65 -0
- package/dist/esm/base/ui/switch.js +167 -0
- package/dist/esm/base/ui/switch_synced.js +53 -0
- package/dist/esm/base/ui/synced.js +49 -0
- package/dist/{cjs → esm}/base/ui/system/all_styles_set.js +4 -12
- package/dist/esm/base/ui/system/appearance/appearance_set.js +27 -0
- package/dist/esm/base/ui/system/appearance/background_color.js +18 -0
- package/dist/{cjs → esm}/base/ui/system/appearance/border.js +3 -6
- package/dist/esm/base/ui/system/appearance/border_radius.js +18 -0
- package/dist/esm/base/ui/system/appearance/box_shadow.js +18 -0
- package/dist/esm/base/ui/system/appearance/opacity.js +18 -0
- package/dist/esm/base/ui/system/dimensions/dimensions_set.js +29 -0
- package/dist/esm/base/ui/system/dimensions/height.js +18 -0
- package/dist/esm/base/ui/system/dimensions/max_height.js +18 -0
- package/dist/esm/base/ui/system/dimensions/max_width.js +18 -0
- package/dist/esm/base/ui/system/dimensions/min_height.js +18 -0
- package/dist/esm/base/ui/system/dimensions/min_width.js +18 -0
- package/dist/esm/base/ui/system/dimensions/width.js +18 -0
- package/dist/esm/base/ui/system/display.js +19 -0
- package/dist/esm/base/ui/system/flex_container/align_content.js +15 -0
- package/dist/esm/base/ui/system/flex_container/align_items.js +15 -0
- package/dist/esm/base/ui/system/flex_container/flex_container_set.js +29 -0
- package/dist/esm/base/ui/system/flex_container/flex_direction.js +15 -0
- package/dist/esm/base/ui/system/flex_container/flex_wrap.js +15 -0
- package/dist/esm/base/ui/system/flex_container/justify_content.js +15 -0
- package/dist/esm/base/ui/system/flex_container/justify_items.js +16 -0
- package/dist/esm/base/ui/system/flex_item/align_self.js +15 -0
- package/dist/esm/base/ui/system/flex_item/flex.js +15 -0
- package/dist/esm/base/ui/system/flex_item/flex_basis.js +15 -0
- package/dist/esm/base/ui/system/flex_item/flex_grow.js +15 -0
- package/dist/esm/base/ui/system/flex_item/flex_item_set.js +31 -0
- package/dist/esm/base/ui/system/flex_item/flex_shrink.js +15 -0
- package/dist/esm/base/ui/system/flex_item/justify_self.js +16 -0
- package/dist/esm/base/ui/system/flex_item/order.js +15 -0
- package/dist/{cjs → esm}/base/ui/system/index.js +104 -416
- package/dist/esm/base/ui/system/overflow.js +21 -0
- package/dist/{cjs → esm}/base/ui/system/position/bottom.js +4 -6
- package/dist/{cjs → esm}/base/ui/system/position/left.js +4 -6
- package/dist/esm/base/ui/system/position/position.js +15 -0
- package/dist/esm/base/ui/system/position/position_set.js +29 -0
- package/dist/{cjs → esm}/base/ui/system/position/right.js +4 -6
- package/dist/{cjs → esm}/base/ui/system/position/top.js +4 -6
- package/dist/esm/base/ui/system/position/z_index.js +18 -0
- package/dist/{cjs → esm}/base/ui/system/spacing/margin.js +4 -6
- package/dist/{cjs → esm}/base/ui/system/spacing/padding.js +4 -6
- package/dist/esm/base/ui/system/spacing/spacing_set.js +21 -0
- package/dist/esm/base/ui/system/typography/font_family.js +18 -0
- package/dist/esm/base/ui/system/typography/font_size.js +18 -0
- package/dist/esm/base/ui/system/typography/font_style.js +15 -0
- package/dist/esm/base/ui/system/typography/font_weight.js +18 -0
- package/dist/esm/base/ui/system/typography/letter_spacing.js +18 -0
- package/dist/esm/base/ui/system/typography/line_height.js +15 -0
- package/dist/esm/base/ui/system/typography/text_align.js +15 -0
- package/dist/esm/base/ui/system/typography/text_color.js +18 -0
- package/dist/esm/base/ui/system/typography/text_decoration.js +15 -0
- package/dist/esm/base/ui/system/typography/text_transform.js +15 -0
- package/dist/esm/base/ui/system/typography/typography_set.js +37 -0
- package/dist/{cjs → esm}/base/ui/system/utils/ensure_numbers_are_within_scale.js +3 -4
- package/dist/esm/base/ui/system/utils/get_style_props_for_responsive_prop.js +73 -0
- package/dist/esm/base/ui/table_picker.js +71 -0
- package/dist/esm/base/ui/table_picker_synced.js +62 -0
- package/dist/esm/base/ui/text.js +117 -0
- package/dist/esm/base/ui/text_button.js +196 -0
- package/dist/{cjs → esm}/base/ui/theme/default_theme/button_variants.js +3 -3
- package/dist/esm/base/ui/theme/default_theme/control_sizes.js +102 -0
- package/dist/{cjs → esm}/base/ui/theme/default_theme/heading_styles.js +1 -1
- package/dist/{cjs → esm}/base/ui/theme/default_theme/index.js +9 -15
- package/dist/{cjs → esm}/base/ui/theme/default_theme/input_variants.js +3 -3
- package/dist/{cjs → esm}/base/ui/theme/default_theme/link_variants.js +3 -3
- package/dist/{cjs → esm}/base/ui/theme/default_theme/select_buttons_variants.js +4 -4
- package/dist/esm/base/ui/theme/default_theme/select_variants.js +50 -0
- package/dist/esm/base/ui/theme/default_theme/switch_variants.js +85 -0
- package/dist/{cjs → esm}/base/ui/theme/default_theme/text_button_variants.js +5 -5
- package/dist/{cjs → esm}/base/ui/theme/default_theme/text_styles.js +1 -1
- package/dist/{cjs → esm}/base/ui/theme/default_theme/tokens.js +14 -14
- package/dist/{cjs → esm}/base/ui/theme/theme_context.js +2 -2
- package/dist/{cjs → esm}/base/ui/theme/use_theme.js +2 -2
- package/dist/esm/base/ui/tooltip.js +175 -0
- package/dist/{cjs → esm}/base/ui/ui.js +48 -49
- package/dist/{cjs → esm}/base/ui/unstable_standalone_ui.js +27 -27
- package/dist/{cjs → esm}/base/ui/use_base.js +1 -1
- package/dist/{cjs → esm}/base/ui/use_cursor.js +5 -4
- package/dist/{cjs → esm}/base/ui/use_form_field.js +1 -1
- package/dist/{cjs → esm}/base/ui/use_loadable.js +25 -91
- package/dist/{cjs → esm}/base/ui/use_record_action_data.js +4 -3
- package/dist/{cjs → esm}/base/ui/use_records.js +9 -13
- package/dist/{cjs → esm}/base/ui/use_session.js +1 -1
- package/dist/{cjs → esm}/base/ui/use_settings_button.js +4 -3
- package/dist/esm/base/ui/use_styled_system.js +25 -0
- package/dist/{cjs → esm}/base/ui/use_text_color_for_background_color.js +4 -3
- package/dist/{cjs → esm}/base/ui/use_view_metadata.js +4 -4
- package/dist/{cjs → esm}/base/ui/use_viewport.js +2 -2
- package/dist/esm/base/ui/view_picker.js +89 -0
- package/dist/esm/base/ui/view_picker_synced.js +66 -0
- package/dist/esm/base/ui/viewport_constraint.js +129 -0
- package/dist/esm/base/ui/with_styled_system.js +129 -0
- package/dist/esm/base/undo_redo.js +37 -0
- package/dist/{cjs → esm}/base/unstable_testing_utils.js +27 -27
- package/dist/esm/base/viewport.js +353 -0
- package/dist/esm/injected/airtable_interface.js +22 -0
- package/dist/esm/interface/assert_run_context.js +12 -0
- package/dist/esm/interface/index.js +22 -0
- package/dist/esm/interface/models/base.js +35 -0
- package/dist/esm/interface/models/field.js +28 -0
- package/dist/{cjs → esm}/interface/models/models.js +8 -7
- package/dist/esm/interface/models/mutations.js +63 -0
- package/dist/esm/interface/models/record.js +51 -0
- package/dist/esm/interface/models/record_store.js +51 -0
- package/dist/esm/interface/models/session.js +28 -0
- package/dist/esm/interface/models/table.js +97 -0
- package/dist/esm/interface/sdk.js +78 -0
- package/dist/{cjs → esm}/interface/types/airtable_interface.js +2 -2
- package/dist/esm/interface/types/mutations.js +17 -0
- package/dist/esm/interface/ui/block_wrapper.js +69 -0
- package/dist/{cjs → esm}/interface/ui/initialize_block.js +13 -28
- package/dist/{cjs → esm}/interface/ui/ui.js +20 -19
- package/dist/{cjs → esm}/interface/ui/use_base.js +1 -1
- package/dist/{cjs → esm}/interface/ui/use_custom_properties.js +19 -35
- package/dist/{cjs → esm}/interface/ui/use_records.js +6 -5
- package/dist/{cjs → esm}/interface/ui/use_run_info.js +2 -2
- package/dist/{cjs → esm}/interface/ui/use_session.js +1 -1
- package/dist/{cjs → esm}/shared/color_utils.js +9 -16
- package/dist/{cjs → esm}/shared/colors.js +2 -2
- package/dist/{cjs → esm}/shared/error_utils.js +9 -11
- package/dist/{cjs → esm}/shared/event_tracker.js +3 -3
- package/dist/esm/shared/global_config.js +399 -0
- package/dist/esm/shared/models/abstract_model.js +94 -0
- package/dist/esm/shared/models/base_core.js +482 -0
- package/dist/esm/shared/models/field_core.js +288 -0
- package/dist/esm/shared/models/mutations_core.js +343 -0
- package/dist/esm/shared/models/record_core.js +215 -0
- package/dist/esm/shared/models/record_store_core.js +160 -0
- package/dist/esm/shared/models/session_core.js +160 -0
- package/dist/esm/shared/models/table_core.js +1318 -0
- package/dist/{cjs → esm}/shared/private_utils.js +54 -124
- package/dist/esm/shared/sdk_core.js +113 -0
- package/dist/{cjs → esm}/shared/types/field_core.js +1 -1
- package/dist/esm/shared/types/mutation_constants.js +11 -0
- package/dist/{cjs → esm}/shared/types/mutations_core.js +1 -1
- package/dist/{cjs → esm}/shared/types/permission_levels.js +1 -1
- package/dist/esm/shared/types/record.js +1 -0
- package/dist/esm/shared/types/stat.js +1 -0
- package/dist/esm/shared/types/table_core.js +1 -0
- package/dist/{cjs → esm}/shared/ui/global_config_synced_component_helpers.js +9 -9
- package/dist/esm/shared/ui/loader.js +47 -0
- package/dist/{cjs → esm}/shared/ui/remote_utils.js +5 -7
- package/dist/{cjs → esm}/shared/ui/sdk_context.js +4 -8
- package/dist/{cjs → esm}/shared/ui/use_array_identity.js +2 -2
- package/dist/{cjs → esm}/shared/ui/use_base.js +6 -5
- package/dist/{cjs → esm}/shared/ui/use_color_scheme.js +3 -8
- package/dist/{cjs → esm}/shared/ui/use_global_config.js +5 -4
- package/dist/{cjs → esm}/shared/ui/use_session.js +6 -5
- package/dist/{cjs → esm}/shared/ui/use_synced.js +7 -5
- package/dist/{cjs → esm}/shared/ui/use_watchable.js +13 -42
- package/dist/{cjs → esm}/shared/ui/with_hooks.js +6 -13
- package/dist/{cjs → esm}/shared/unstable_private_utils.js +4 -6
- package/dist/{cjs → esm}/shared/warning.js +5 -5
- package/dist/esm/shared/watchable.js +150 -0
- package/dist/esm/stats/block_stats.js +73 -0
- package/dist/esm/testing/base/abstract_mock_airtable_interface.js +208 -0
- package/dist/esm/testing/interface/abstract_mock_airtable_interface.js +124 -0
- package/dist/types/src/base/assert_run_context.d.ts +2 -0
- package/dist/types/src/base/assert_run_context.d.ts.map +1 -0
- package/dist/types/src/base/index.d.ts +1 -0
- package/dist/types/src/base/index.d.ts.map +1 -1
- package/dist/types/src/base/models/base.d.ts +19 -0
- package/dist/types/src/base/models/base.d.ts.map +1 -1
- package/dist/types/src/base/models/create_aggregators.d.ts +3 -4
- package/dist/types/src/base/models/create_aggregators.d.ts.map +1 -1
- package/dist/types/src/base/models/field.d.ts +3 -2
- package/dist/types/src/base/models/field.d.ts.map +1 -1
- package/dist/types/src/base/models/models.d.ts +1 -2
- package/dist/types/src/base/models/models.d.ts.map +1 -1
- package/dist/types/src/base/models/mutations.d.ts.map +1 -1
- package/dist/types/src/base/sdk.d.ts.map +1 -1
- package/dist/types/src/base/ui/block_wrapper.d.ts +1 -1
- package/dist/types/src/base/ui/box.d.ts.map +1 -1
- package/dist/types/src/base/ui/button.d.ts +0 -5
- package/dist/types/src/base/ui/button.d.ts.map +1 -1
- package/dist/types/src/base/ui/cell_renderer.d.ts +1 -22
- package/dist/types/src/base/ui/cell_renderer.d.ts.map +1 -1
- package/dist/types/src/base/ui/choice_token.d.ts +1 -21
- package/dist/types/src/base/ui/choice_token.d.ts.map +1 -1
- package/dist/types/src/base/ui/collaborator_token.d.ts +0 -20
- package/dist/types/src/base/ui/collaborator_token.d.ts.map +1 -1
- package/dist/types/src/base/ui/color_palette.d.ts +1 -32
- package/dist/types/src/base/ui/color_palette.d.ts.map +1 -1
- package/dist/types/src/base/ui/color_palette_synced.d.ts +0 -14
- package/dist/types/src/base/ui/color_palette_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/confirmation_dialog.d.ts +0 -17
- package/dist/types/src/base/ui/confirmation_dialog.d.ts.map +1 -1
- package/dist/types/src/base/ui/control_sizes.d.ts +0 -1
- package/dist/types/src/base/ui/control_sizes.d.ts.map +1 -1
- package/dist/types/src/base/ui/dialog.d.ts +1 -23
- package/dist/types/src/base/ui/dialog.d.ts.map +1 -1
- package/dist/types/src/base/ui/dialog_close_button.d.ts +2 -24
- package/dist/types/src/base/ui/dialog_close_button.d.ts.map +1 -1
- package/dist/types/src/base/ui/field_icon.d.ts +1 -17
- package/dist/types/src/base/ui/field_icon.d.ts.map +1 -1
- package/dist/types/src/base/ui/field_picker.d.ts +0 -23
- package/dist/types/src/base/ui/field_picker.d.ts.map +1 -1
- package/dist/types/src/base/ui/field_picker_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/form_field.d.ts +0 -4
- package/dist/types/src/base/ui/form_field.d.ts.map +1 -1
- package/dist/types/src/base/ui/heading.d.ts +1 -1
- package/dist/types/src/base/ui/heading.d.ts.map +1 -1
- package/dist/types/src/base/ui/icon.d.ts +0 -16
- package/dist/types/src/base/ui/icon.d.ts.map +1 -1
- package/dist/types/src/base/ui/icon_config.d.ts +50 -51
- package/dist/types/src/base/ui/icon_config.d.ts.map +1 -1
- package/dist/types/src/base/ui/initialize_block.d.ts.map +1 -1
- package/dist/types/src/base/ui/input.d.ts +12 -46
- package/dist/types/src/base/ui/input.d.ts.map +1 -1
- package/dist/types/src/base/ui/input_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/label.d.ts.map +1 -1
- package/dist/types/src/base/ui/link.d.ts +1 -5
- package/dist/types/src/base/ui/link.d.ts.map +1 -1
- package/dist/types/src/base/ui/loader.d.ts +3 -20
- package/dist/types/src/base/ui/loader.d.ts.map +1 -1
- package/dist/types/src/base/ui/modal.d.ts +1 -14
- package/dist/types/src/base/ui/modal.d.ts.map +1 -1
- package/dist/types/src/base/ui/model_picker_select.d.ts.map +1 -1
- package/dist/types/src/base/ui/popover.d.ts +1 -17
- package/dist/types/src/base/ui/popover.d.ts.map +1 -1
- package/dist/types/src/base/ui/progress_bar.d.ts +1 -24
- package/dist/types/src/base/ui/progress_bar.d.ts.map +1 -1
- package/dist/types/src/base/ui/record_card.d.ts +1 -23
- package/dist/types/src/base/ui/record_card.d.ts.map +1 -1
- package/dist/types/src/base/ui/record_card_list.d.ts +1 -18
- package/dist/types/src/base/ui/record_card_list.d.ts.map +1 -1
- package/dist/types/src/base/ui/select.d.ts +0 -44
- package/dist/types/src/base/ui/select.d.ts.map +1 -1
- package/dist/types/src/base/ui/select_and_select_buttons_helpers.d.ts +0 -2
- package/dist/types/src/base/ui/select_and_select_buttons_helpers.d.ts.map +1 -1
- package/dist/types/src/base/ui/select_buttons.d.ts +0 -22
- package/dist/types/src/base/ui/select_buttons.d.ts.map +1 -1
- package/dist/types/src/base/ui/select_buttons_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/select_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/switch.d.ts +0 -22
- package/dist/types/src/base/ui/switch.d.ts.map +1 -1
- package/dist/types/src/base/ui/switch_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/synced.d.ts +2 -8
- package/dist/types/src/base/ui/synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/all_styles_set.d.ts +0 -3
- package/dist/types/src/base/ui/system/all_styles_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/appearance_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/appearance_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/background_color.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/background_color.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/border.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/border.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/border_radius.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/border_radius.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/box_shadow.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/box_shadow.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/appearance/opacity.d.ts +0 -1
- package/dist/types/src/base/ui/system/appearance/opacity.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/dimensions_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/dimensions_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/height.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/height.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/max_height.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/max_height.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/max_width.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/max_width.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/min_height.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/min_height.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/min_width.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/min_width.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/dimensions/width.d.ts +0 -1
- package/dist/types/src/base/ui/system/dimensions/width.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/display.d.ts +0 -1
- package/dist/types/src/base/ui/system/display.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/align_content.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/align_content.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/align_items.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/align_items.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/flex_container_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/flex_container_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/flex_direction.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/flex_direction.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/flex_wrap.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/flex_wrap.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/justify_content.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/justify_content.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_container/justify_items.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_container/justify_items.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/align_self.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/align_self.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/flex.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/flex.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/flex_basis.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/flex_basis.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/flex_grow.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/flex_grow.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/flex_item_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/flex_item_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/flex_shrink.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/flex_shrink.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/justify_self.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/justify_self.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/flex_item/order.d.ts +0 -1
- package/dist/types/src/base/ui/system/flex_item/order.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/index.d.ts +52 -52
- package/dist/types/src/base/ui/system/index.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/overflow.d.ts +0 -1
- package/dist/types/src/base/ui/system/overflow.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/bottom.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/bottom.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/left.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/left.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/position.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/position.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/position_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/position_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/right.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/right.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/top.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/top.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/position/z_index.d.ts +0 -1
- package/dist/types/src/base/ui/system/position/z_index.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/spacing/margin.d.ts +0 -1
- package/dist/types/src/base/ui/system/spacing/margin.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/spacing/padding.d.ts +0 -1
- package/dist/types/src/base/ui/system/spacing/padding.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/spacing/spacing_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/spacing/spacing_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/font_family.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/font_family.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/font_size.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/font_size.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/font_style.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/font_style.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/font_weight.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/font_weight.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/letter_spacing.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/letter_spacing.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/line_height.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/line_height.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/text_align.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/text_align.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/text_color.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/text_color.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/text_decoration.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/text_decoration.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/text_transform.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/text_transform.d.ts.map +1 -1
- package/dist/types/src/base/ui/system/typography/typography_set.d.ts +0 -1
- package/dist/types/src/base/ui/system/typography/typography_set.d.ts.map +1 -1
- package/dist/types/src/base/ui/table_picker.d.ts +0 -21
- package/dist/types/src/base/ui/table_picker.d.ts.map +1 -1
- package/dist/types/src/base/ui/table_picker_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/text.d.ts +0 -3
- package/dist/types/src/base/ui/text.d.ts.map +1 -1
- package/dist/types/src/base/ui/text_button.d.ts +1 -5
- package/dist/types/src/base/ui/text_button.d.ts.map +1 -1
- package/dist/types/src/base/ui/theme/default_theme/index.d.ts +1 -1
- package/dist/types/src/base/ui/theme/theme_context.d.ts +1 -1
- package/dist/types/src/base/ui/theme/use_theme.d.ts +1 -1
- package/dist/types/src/base/ui/tooltip.d.ts +0 -16
- package/dist/types/src/base/ui/tooltip.d.ts.map +1 -1
- package/dist/types/src/base/ui/types/aria_props.d.ts.map +1 -1
- package/dist/types/src/base/ui/types/data_attributes_prop.d.ts +0 -4
- package/dist/types/src/base/ui/types/data_attributes_prop.d.ts.map +1 -1
- package/dist/types/src/base/ui/types/tooltip_anchor_props.d.ts +0 -7
- package/dist/types/src/base/ui/types/tooltip_anchor_props.d.ts.map +1 -1
- package/dist/types/src/base/ui/ui.d.ts +1 -0
- package/dist/types/src/base/ui/ui.d.ts.map +1 -1
- package/dist/types/src/base/ui/view_picker.d.ts +0 -23
- package/dist/types/src/base/ui/view_picker.d.ts.map +1 -1
- package/dist/types/src/base/ui/view_picker_synced.d.ts.map +1 -1
- package/dist/types/src/base/ui/viewport_constraint.d.ts +1 -14
- package/dist/types/src/base/ui/viewport_constraint.d.ts.map +1 -1
- package/dist/types/src/base/unstable_testing_utils.d.ts +1 -1
- package/dist/types/src/base/unstable_testing_utils.d.ts.map +1 -1
- package/dist/types/src/interface/assert_run_context.d.ts +2 -0
- package/dist/types/src/interface/assert_run_context.d.ts.map +1 -0
- package/dist/types/src/interface/index.d.ts +1 -6
- package/dist/types/src/interface/index.d.ts.map +1 -1
- package/dist/types/src/interface/models/models.d.ts +1 -0
- package/dist/types/src/interface/models/models.d.ts.map +1 -1
- package/dist/types/src/interface/models/mutations.d.ts.map +1 -1
- package/dist/types/src/interface/ui/initialize_block.d.ts.map +1 -1
- package/dist/types/src/interface/ui/ui.d.ts +1 -0
- package/dist/types/src/interface/ui/ui.d.ts.map +1 -1
- package/dist/types/src/interface/ui/use_custom_properties.d.ts +1 -1
- package/dist/types/src/shared/models/mutations_core.d.ts.map +1 -1
- package/dist/types/src/shared/private_utils.d.ts +0 -9
- package/dist/types/src/shared/private_utils.d.ts.map +1 -1
- package/dist/types/src/shared/ui/global_config_synced_component_helpers.d.ts +0 -2
- package/dist/types/src/shared/ui/global_config_synced_component_helpers.d.ts.map +1 -1
- package/dist/types/src/shared/ui/loader.d.ts.map +1 -1
- package/dist/types/src/shared/ui/with_hooks.d.ts +2 -2
- package/dist/types/src/shared/ui/with_hooks.d.ts.map +1 -1
- package/dist/types/src/testing/{abstract_mock_airtable_interface.d.ts → base/abstract_mock_airtable_interface.d.ts} +13 -13
- package/dist/types/src/testing/base/abstract_mock_airtable_interface.d.ts.map +1 -0
- package/dist/types/src/testing/interface/abstract_mock_airtable_interface.d.ts +51 -0
- package/dist/types/src/testing/interface/abstract_mock_airtable_interface.d.ts.map +1 -0
- package/models.js +1 -1
- package/package.json +24 -23
- package/types.js +1 -1
- package/dist/cjs/base/models/abstract_model_with_async_data.js +0 -273
- package/dist/cjs/base/models/base.js +0 -306
- package/dist/cjs/base/models/create_aggregators.js +0 -115
- package/dist/cjs/base/models/cursor.js +0 -393
- package/dist/cjs/base/models/field.js +0 -427
- package/dist/cjs/base/models/grouped_record_query_result.js +0 -399
- package/dist/cjs/base/models/linked_records_query_result.js +0 -728
- package/dist/cjs/base/models/mutations.js +0 -338
- package/dist/cjs/base/models/object_pool.js +0 -184
- package/dist/cjs/base/models/record.js +0 -304
- package/dist/cjs/base/models/record_query_result.js +0 -741
- package/dist/cjs/base/models/record_store.js +0 -825
- package/dist/cjs/base/models/session.js +0 -182
- package/dist/cjs/base/models/table.js +0 -668
- package/dist/cjs/base/models/table_or_view_query_result.js +0 -1013
- package/dist/cjs/base/models/view.js +0 -431
- package/dist/cjs/base/models/view_data_store.js +0 -403
- package/dist/cjs/base/models/view_metadata_query_result.js +0 -224
- package/dist/cjs/base/perform_record_action.js +0 -257
- package/dist/cjs/base/sdk.js +0 -233
- package/dist/cjs/base/settings_button.js +0 -138
- package/dist/cjs/base/ui/baymax_utils.js +0 -133
- package/dist/cjs/base/ui/block_wrapper.js +0 -143
- package/dist/cjs/base/ui/box.js +0 -110
- package/dist/cjs/base/ui/button.js +0 -182
- package/dist/cjs/base/ui/cell_renderer.js +0 -255
- package/dist/cjs/base/ui/choice_token.js +0 -110
- package/dist/cjs/base/ui/collaborator_token.js +0 -145
- package/dist/cjs/base/ui/color_palette.js +0 -239
- package/dist/cjs/base/ui/color_palette_synced.js +0 -98
- package/dist/cjs/base/ui/confirmation_dialog.js +0 -153
- package/dist/cjs/base/ui/dialog.js +0 -142
- package/dist/cjs/base/ui/dialog_close_button.js +0 -152
- package/dist/cjs/base/ui/expand_record_picker_async.js +0 -100
- package/dist/cjs/base/ui/field_icon.js +0 -62
- package/dist/cjs/base/ui/field_picker.js +0 -143
- package/dist/cjs/base/ui/field_picker_synced.js +0 -88
- package/dist/cjs/base/ui/form_field.js +0 -137
- package/dist/cjs/base/ui/geometry/point.js +0 -21
- package/dist/cjs/base/ui/geometry/rect.js +0 -67
- package/dist/cjs/base/ui/geometry/size.js +0 -21
- package/dist/cjs/base/ui/global_alert.js +0 -92
- package/dist/cjs/base/ui/heading.js +0 -181
- package/dist/cjs/base/ui/icon.js +0 -129
- package/dist/cjs/base/ui/input.js +0 -200
- package/dist/cjs/base/ui/input_synced.js +0 -89
- package/dist/cjs/base/ui/label.js +0 -105
- package/dist/cjs/base/ui/link.js +0 -229
- package/dist/cjs/base/ui/loader.js +0 -82
- package/dist/cjs/base/ui/modal.js +0 -184
- package/dist/cjs/base/ui/model_picker_select.js +0 -83
- package/dist/cjs/base/ui/popover.js +0 -407
- package/dist/cjs/base/ui/progress_bar.js +0 -128
- package/dist/cjs/base/ui/record_card.js +0 -653
- package/dist/cjs/base/ui/record_card_list.js +0 -377
- package/dist/cjs/base/ui/select.js +0 -247
- package/dist/cjs/base/ui/select_and_select_buttons_helpers.js +0 -87
- package/dist/cjs/base/ui/select_buttons.js +0 -192
- package/dist/cjs/base/ui/select_buttons_synced.js +0 -84
- package/dist/cjs/base/ui/select_synced.js +0 -87
- package/dist/cjs/base/ui/switch.js +0 -196
- package/dist/cjs/base/ui/switch_synced.js +0 -75
- package/dist/cjs/base/ui/synced.js +0 -70
- package/dist/cjs/base/ui/system/appearance/appearance_set.js +0 -30
- package/dist/cjs/base/ui/system/appearance/background_color.js +0 -21
- package/dist/cjs/base/ui/system/appearance/border_radius.js +0 -21
- package/dist/cjs/base/ui/system/appearance/box_shadow.js +0 -21
- package/dist/cjs/base/ui/system/appearance/opacity.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/dimensions_set.js +0 -31
- package/dist/cjs/base/ui/system/dimensions/height.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/max_height.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/max_width.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/min_height.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/min_width.js +0 -21
- package/dist/cjs/base/ui/system/dimensions/width.js +0 -21
- package/dist/cjs/base/ui/system/display.js +0 -22
- package/dist/cjs/base/ui/system/flex_container/align_content.js +0 -18
- package/dist/cjs/base/ui/system/flex_container/align_items.js +0 -18
- package/dist/cjs/base/ui/system/flex_container/flex_container_set.js +0 -31
- package/dist/cjs/base/ui/system/flex_container/flex_direction.js +0 -18
- package/dist/cjs/base/ui/system/flex_container/flex_wrap.js +0 -18
- package/dist/cjs/base/ui/system/flex_container/justify_content.js +0 -18
- package/dist/cjs/base/ui/system/flex_container/justify_items.js +0 -19
- package/dist/cjs/base/ui/system/flex_item/align_self.js +0 -18
- package/dist/cjs/base/ui/system/flex_item/flex.js +0 -18
- package/dist/cjs/base/ui/system/flex_item/flex_basis.js +0 -18
- package/dist/cjs/base/ui/system/flex_item/flex_grow.js +0 -18
- package/dist/cjs/base/ui/system/flex_item/flex_item_set.js +0 -32
- package/dist/cjs/base/ui/system/flex_item/flex_shrink.js +0 -18
- package/dist/cjs/base/ui/system/flex_item/justify_self.js +0 -19
- package/dist/cjs/base/ui/system/flex_item/order.js +0 -18
- package/dist/cjs/base/ui/system/overflow.js +0 -24
- package/dist/cjs/base/ui/system/position/position.js +0 -18
- package/dist/cjs/base/ui/system/position/position_set.js +0 -31
- package/dist/cjs/base/ui/system/position/z_index.js +0 -21
- package/dist/cjs/base/ui/system/spacing/spacing_set.js +0 -27
- package/dist/cjs/base/ui/system/typography/font_family.js +0 -21
- package/dist/cjs/base/ui/system/typography/font_size.js +0 -21
- package/dist/cjs/base/ui/system/typography/font_style.js +0 -18
- package/dist/cjs/base/ui/system/typography/font_weight.js +0 -21
- package/dist/cjs/base/ui/system/typography/letter_spacing.js +0 -21
- package/dist/cjs/base/ui/system/typography/line_height.js +0 -18
- package/dist/cjs/base/ui/system/typography/text_align.js +0 -18
- package/dist/cjs/base/ui/system/typography/text_color.js +0 -21
- package/dist/cjs/base/ui/system/typography/text_decoration.js +0 -18
- package/dist/cjs/base/ui/system/typography/text_transform.js +0 -18
- package/dist/cjs/base/ui/system/typography/typography_set.js +0 -35
- package/dist/cjs/base/ui/system/utils/create_responsive_prop_type.js +0 -19
- package/dist/cjs/base/ui/system/utils/create_style_prop_types.js +0 -24
- package/dist/cjs/base/ui/system/utils/enum_prop_type_utils.js +0 -35
- package/dist/cjs/base/ui/system/utils/get_style_props_for_responsive_prop.js +0 -113
- package/dist/cjs/base/ui/table_picker.js +0 -95
- package/dist/cjs/base/ui/table_picker_synced.js +0 -84
- package/dist/cjs/base/ui/text.js +0 -150
- package/dist/cjs/base/ui/text_button.js +0 -228
- package/dist/cjs/base/ui/theme/default_theme/control_sizes.js +0 -96
- package/dist/cjs/base/ui/theme/default_theme/select_variants.js +0 -59
- package/dist/cjs/base/ui/theme/default_theme/switch_variants.js +0 -91
- package/dist/cjs/base/ui/tooltip.js +0 -215
- package/dist/cjs/base/ui/types/aria_props.js +0 -23
- package/dist/cjs/base/ui/types/data_attributes_prop.js +0 -18
- package/dist/cjs/base/ui/types/tooltip_anchor_props.js +0 -17
- package/dist/cjs/base/ui/use_styled_system.js +0 -32
- package/dist/cjs/base/ui/view_picker.js +0 -133
- package/dist/cjs/base/ui/view_picker_synced.js +0 -88
- package/dist/cjs/base/ui/viewport_constraint.js +0 -176
- package/dist/cjs/base/ui/with_styled_system.js +0 -165
- package/dist/cjs/base/undo_redo.js +0 -48
- package/dist/cjs/base/viewport.js +0 -397
- package/dist/cjs/injected/airtable_interface.js +0 -22
- package/dist/cjs/interface/index.js +0 -36
- package/dist/cjs/interface/models/base.js +0 -54
- package/dist/cjs/interface/models/field.js +0 -42
- package/dist/cjs/interface/models/mutations.js +0 -79
- package/dist/cjs/interface/models/record.js +0 -71
- package/dist/cjs/interface/models/record_store.js +0 -83
- package/dist/cjs/interface/models/session.js +0 -42
- package/dist/cjs/interface/models/table.js +0 -126
- package/dist/cjs/interface/sdk.js +0 -104
- package/dist/cjs/interface/types/mutations.js +0 -24
- package/dist/cjs/interface/ui/block_wrapper.js +0 -61
- package/dist/cjs/shared/global_config.js +0 -511
- package/dist/cjs/shared/models/abstract_model.js +0 -119
- package/dist/cjs/shared/models/base_core.js +0 -602
- package/dist/cjs/shared/models/field_core.js +0 -331
- package/dist/cjs/shared/models/mutations_core.js +0 -439
- package/dist/cjs/shared/models/record_core.js +0 -272
- package/dist/cjs/shared/models/record_store_core.js +0 -213
- package/dist/cjs/shared/models/session_core.js +0 -214
- package/dist/cjs/shared/models/table_core.js +0 -1561
- package/dist/cjs/shared/sdk_core.js +0 -115
- package/dist/cjs/shared/types/mutation_constants.js +0 -11
- package/dist/cjs/shared/ui/loader.js +0 -68
- package/dist/cjs/shared/watchable.js +0 -216
- package/dist/cjs/stats/block_stats.js +0 -96
- package/dist/cjs/testing/abstract_mock_airtable_interface.js +0 -277
- package/dist/types/src/base/ui/system/utils/create_responsive_prop_type.d.ts +0 -2
- package/dist/types/src/base/ui/system/utils/create_responsive_prop_type.d.ts.map +0 -1
- package/dist/types/src/base/ui/system/utils/create_style_prop_types.d.ts +0 -4
- package/dist/types/src/base/ui/system/utils/create_style_prop_types.d.ts.map +0 -1
- package/dist/types/src/base/ui/system/utils/enum_prop_type_utils.d.ts +0 -21
- package/dist/types/src/base/ui/system/utils/enum_prop_type_utils.d.ts.map +0 -1
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +0 -1
- /package/dist/{cjs → esm}/base/types/aggregators.js +0 -0
- /package/dist/{cjs → esm}/base/types/backend_fetch_types.js +0 -0
- /package/dist/{cjs → esm}/base/types/base.js +0 -0
- /package/dist/{cjs → esm}/base/types/cursor.js +0 -0
- /package/dist/{cjs → esm}/base/types/field.js +0 -0
- /package/dist/{cjs → esm}/base/types/record.js +0 -0
- /package/dist/{cjs → esm}/base/types/record_action_data.js +0 -0
- /package/dist/{cjs → esm}/base/types/table.js +0 -0
- /package/dist/{cjs → esm}/base/types/viewport.js +0 -0
- /package/dist/{cjs → esm}/base/ui/system/utils/csstype.js +0 -0
- /package/dist/{cjs → esm}/base/ui/system/utils/types.js +0 -0
- /package/dist/{cjs/interface/types/base.js → esm/base/ui/types/aria_props.js} +0 -0
- /package/dist/{cjs/interface/types/field.js → esm/base/ui/types/data_attributes_prop.js} +0 -0
- /package/dist/{cjs/interface/types/record.js → esm/base/ui/types/tooltip_anchor_props.js} +0 -0
- /package/dist/{cjs/interface/types/table.js → esm/interface/types/base.js} +0 -0
- /package/dist/{cjs/sdk_mode.js → esm/interface/types/field.js} +0 -0
- /package/dist/{cjs/shared → esm/interface}/types/record.js +0 -0
- /package/dist/{cjs/shared/types/airtable_interface_core.js → esm/interface/types/table.js} +0 -0
- /package/dist/{cjs → esm}/interface/ui/expand_record.js +0 -0
- /package/dist/{cjs/shared/types/attachment.js → esm/sdk_mode.js} +0 -0
- /package/dist/{cjs/shared/types/base_core.js → esm/shared/types/airtable_interface_core.js} +0 -0
- /package/dist/{cjs/shared/types/collaborator.js → esm/shared/types/attachment.js} +0 -0
- /package/dist/{cjs/shared/types/global_config.js → esm/shared/types/base_core.js} +0 -0
- /package/dist/{cjs/shared/types/hyper_ids.js → esm/shared/types/collaborator.js} +0 -0
- /package/dist/{cjs/shared/types/stat.js → esm/shared/types/global_config.js} +0 -0
- /package/dist/{cjs/shared/types/table_core.js → esm/shared/types/hyper_ids.js} +0 -0
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.WatchableRecordStoreKeys = void 0;
|
|
7
|
+
var _private_utils = require("../../shared/private_utils");
|
|
8
|
+
var _error_utils = require("../../shared/error_utils");
|
|
9
|
+
var _record_store_core = _interopRequireWildcard(require("../../shared/models/record_store_core"));
|
|
10
|
+
var _abstract_model_with_async_data = _interopRequireDefault(require("./abstract_model_with_async_data"));
|
|
11
|
+
var _record = _interopRequireDefault(require("./record"));
|
|
12
|
+
var _view_data_store = _interopRequireDefault(require("./view_data_store"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
const WatchableRecordStoreKeys = exports.WatchableRecordStoreKeys = Object.freeze({
|
|
17
|
+
..._record_store_core.WatchableRecordStoreKeysCore
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The string case is to accommodate prefix keys
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* One RecordStore exists per table, and contains all the record data associated with that table.
|
|
28
|
+
* Table itself is for schema information only, so isn't the appropriate place for this data.
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
class RecordStore extends _record_store_core.default {
|
|
33
|
+
static _className = 'RecordStore';
|
|
34
|
+
static _isWatchableKey(key) {
|
|
35
|
+
return (0, _private_utils.isEnumValue)(WatchableRecordStoreKeys, key) || key.startsWith(_record_store_core.WatchableCellValuesInFieldKeyPrefix);
|
|
36
|
+
}
|
|
37
|
+
_viewDataStoresByViewId = {};
|
|
38
|
+
constructor(sdk, tableId) {
|
|
39
|
+
super(sdk, tableId);
|
|
40
|
+
const onChange = this._onChange.bind(this);
|
|
41
|
+
const clearRecordModels = () => {
|
|
42
|
+
this._recordModelsById = {};
|
|
43
|
+
};
|
|
44
|
+
this._loader = new RecordStoreAsyncLoader(sdk, tableId, onChange, clearRecordModels);
|
|
45
|
+
}
|
|
46
|
+
_constructRecord(recordId, parentTable) {
|
|
47
|
+
return new _record.default(this._sdk, this, parentTable, recordId);
|
|
48
|
+
}
|
|
49
|
+
get _dataOrNullIfDeleted() {
|
|
50
|
+
return this._loader._dataOrNullIfDeleted;
|
|
51
|
+
}
|
|
52
|
+
getViewDataStore(viewId) {
|
|
53
|
+
if (this._viewDataStoresByViewId[viewId]) {
|
|
54
|
+
return this._viewDataStoresByViewId[viewId];
|
|
55
|
+
}
|
|
56
|
+
(0, _error_utils.invariant)(this._data.viewsById[viewId], 'view must exist');
|
|
57
|
+
const viewDataStore = new _view_data_store.default(this._sdk, this, viewId);
|
|
58
|
+
this._viewDataStoresByViewId[viewId] = viewDataStore;
|
|
59
|
+
return viewDataStore;
|
|
60
|
+
}
|
|
61
|
+
watch(keys, callback, context) {
|
|
62
|
+
const validKeys = super.watch(keys, callback, context);
|
|
63
|
+
const fieldIdsToLoad = this._loader._getFieldIdsToLoadFromWatchableKeys(validKeys);
|
|
64
|
+
if (fieldIdsToLoad.length > 0) {
|
|
65
|
+
(0, _private_utils.fireAndForgetPromise)(async () => {
|
|
66
|
+
await this._loader.loadCellValuesInFieldIdsAsync(fieldIdsToLoad, this._onChange.bind(this));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return validKeys;
|
|
70
|
+
}
|
|
71
|
+
unwatch(keys, callback, context) {
|
|
72
|
+
const validKeys = super.unwatch(keys, callback, context);
|
|
73
|
+
const fieldIdsToUnload = this._loader._getFieldIdsToLoadFromWatchableKeys(validKeys);
|
|
74
|
+
if (fieldIdsToUnload.length > 0) {
|
|
75
|
+
this._loader.unloadCellValuesInFieldIds(fieldIdsToUnload);
|
|
76
|
+
}
|
|
77
|
+
return validKeys;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The record IDs in this table. The order is arbitrary since records are
|
|
82
|
+
* only ordered in the context of a specific view.
|
|
83
|
+
*/
|
|
84
|
+
get recordIds() {
|
|
85
|
+
const recordsById = this._data.recordsById;
|
|
86
|
+
(0, _error_utils.invariant)(recordsById, 'Record metadata is not loaded');
|
|
87
|
+
return Object.keys(recordsById);
|
|
88
|
+
}
|
|
89
|
+
__onDataDeletion() {
|
|
90
|
+
// also need to call unloadCellValuesInFieldIds because otherwise
|
|
91
|
+
// on the hyperbase side, the old record store would still be subscribed
|
|
92
|
+
// to the cell values and it will refuse a request for new subscription
|
|
93
|
+
for (const fieldId of Object.keys(this._loader._cellValuesRetainCountByFieldId)) {
|
|
94
|
+
while (this._loader._cellValuesRetainCountByFieldId[fieldId] && this._loader._cellValuesRetainCountByFieldId[fieldId] > 0) {
|
|
95
|
+
this._loader.unloadCellValuesInFieldIds([fieldId]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this._loader._forceUnload();
|
|
99
|
+
|
|
100
|
+
// similarly unsubscribe from the view data.
|
|
101
|
+
// this comes after _forceUnload to avoid over releasing the table data.
|
|
102
|
+
for (const viewDataStore of (0, _private_utils.values)(this._viewDataStoresByViewId)) {
|
|
103
|
+
viewDataStore.__onDataDeletion();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// #region async data loading
|
|
108
|
+
// wrapper methods over RecordStoreAsyncLoader
|
|
109
|
+
get isDeleted() {
|
|
110
|
+
return this._loader.isDeleted || super.isDeleted;
|
|
111
|
+
}
|
|
112
|
+
get isDataLoaded() {
|
|
113
|
+
return !this.isDeleted && this._loader.isDataLoaded;
|
|
114
|
+
}
|
|
115
|
+
async loadDataAsync() {
|
|
116
|
+
return await this._loader.loadDataAsync();
|
|
117
|
+
}
|
|
118
|
+
unloadData() {
|
|
119
|
+
return this._loader.unloadData();
|
|
120
|
+
}
|
|
121
|
+
get isRecordMetadataLoaded() {
|
|
122
|
+
return this._loader.isRecordMetadataLoaded;
|
|
123
|
+
}
|
|
124
|
+
async loadRecordMetadataAsync() {
|
|
125
|
+
return await this._loader.loadRecordMetadataAsync(this._onChange.bind(this));
|
|
126
|
+
}
|
|
127
|
+
unloadRecordMetadata() {
|
|
128
|
+
return this._loader.unloadRecordMetadata();
|
|
129
|
+
}
|
|
130
|
+
areCellValuesLoadedForFieldId(fieldId) {
|
|
131
|
+
return this._loader.areCellValuesLoadedForFieldId(fieldId);
|
|
132
|
+
}
|
|
133
|
+
async loadCellValuesInFieldIdsAsync(fieldIds) {
|
|
134
|
+
return await this._loader.loadCellValuesInFieldIdsAsync(fieldIds, this._onChange.bind(this));
|
|
135
|
+
}
|
|
136
|
+
unloadCellValuesInFieldIds(fieldIds) {
|
|
137
|
+
return this._loader.unloadCellValuesInFieldIds(fieldIds);
|
|
138
|
+
}
|
|
139
|
+
// #endregion
|
|
140
|
+
|
|
141
|
+
triggerOnChangeForDirtyPaths(dirtyPaths) {
|
|
142
|
+
if (this.isRecordMetadataLoaded && dirtyPaths.recordsById) {
|
|
143
|
+
super.triggerOnChangeForDirtyPaths(dirtyPaths);
|
|
144
|
+
}
|
|
145
|
+
if (dirtyPaths.viewOrder) {
|
|
146
|
+
// clean up deleted views
|
|
147
|
+
for (const [viewId, viewDataStore] of (0, _private_utils.entries)(this._viewDataStoresByViewId)) {
|
|
148
|
+
if (viewDataStore.isDeleted) {
|
|
149
|
+
viewDataStore.__onDataDeletion();
|
|
150
|
+
delete this._viewDataStoresByViewId[viewId];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** @internal */
|
|
158
|
+
class RecordStoreAsyncLoader extends _abstract_model_with_async_data.default {
|
|
159
|
+
static _shouldLoadDataForKey(key) {
|
|
160
|
+
// "Data" means *all* cell values in the table. If only watching records/recordIds,
|
|
161
|
+
// we'll just load record metadata (id, createdTime, commentCount).
|
|
162
|
+
// If only watching specific fields, we'll just load cell values in those
|
|
163
|
+
// fields. Both of those scenarios are handled manually by this class,
|
|
164
|
+
// instead of relying on AbstractModelWithAsyncData.
|
|
165
|
+
return key === WatchableRecordStoreKeys.cellValues;
|
|
166
|
+
}
|
|
167
|
+
// There is a lot of duplication here and in AbstractModelWithAsyncData.
|
|
168
|
+
// Alternatively, phase out AbstractModelWithAsyncData as a superclass
|
|
169
|
+
// and instead create a helper class for managing each part of the data
|
|
170
|
+
// tree that is loaded.
|
|
171
|
+
_areCellValuesLoadedByFieldId = {};
|
|
172
|
+
_pendingCellValuesLoadPromiseByFieldId = {};
|
|
173
|
+
_cellValuesRetainCountByFieldId = {};
|
|
174
|
+
_timeoutForRemovingFieldIds = null;
|
|
175
|
+
constructor(sdk, tableId, onChange, clearRecordModels) {
|
|
176
|
+
super(sdk, `${tableId}-RecordStore`);
|
|
177
|
+
this._airtableInterface = sdk.__airtableInterface;
|
|
178
|
+
this.tableId = tableId;
|
|
179
|
+
this._onChange = onChange;
|
|
180
|
+
this._clearRecordModels = clearRecordModels;
|
|
181
|
+
// A bit of a hack, but we use the primary field ID to load record
|
|
182
|
+
// metadata (see _getFieldIdForCausingRecordMetadataToLoad). We copy the
|
|
183
|
+
// ID here instead of calling this.primaryField.id since that would crash
|
|
184
|
+
// when the table is getting unloaded after being deleted.
|
|
185
|
+
this._primaryFieldId = this._data.primaryFieldId;
|
|
186
|
+
}
|
|
187
|
+
_onChangeIsDataLoaded() {
|
|
188
|
+
// noop
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Record metadata means record IDs, createdTime, and commentCount are loaded.
|
|
193
|
+
* Record metadata must be loaded before creating, deleting, or updating records.
|
|
194
|
+
*/
|
|
195
|
+
get isRecordMetadataLoaded() {
|
|
196
|
+
return !!this._data.recordsById;
|
|
197
|
+
}
|
|
198
|
+
async loadRecordMetadataAsync(onChange) {
|
|
199
|
+
return await this.loadCellValuesInFieldIdsAsync([this._getFieldIdForCausingRecordMetadataToLoad()], onChange);
|
|
200
|
+
}
|
|
201
|
+
unloadRecordMetadata() {
|
|
202
|
+
this.unloadCellValuesInFieldIds([this._getFieldIdForCausingRecordMetadataToLoad()]);
|
|
203
|
+
}
|
|
204
|
+
_getFieldIdsToLoadFromWatchableKeys(keys) {
|
|
205
|
+
const fieldIdsToLoad = [];
|
|
206
|
+
for (const key of keys) {
|
|
207
|
+
if (key.startsWith(_record_store_core.WatchableCellValuesInFieldKeyPrefix)) {
|
|
208
|
+
const fieldId = key.substring(_record_store_core.WatchableCellValuesInFieldKeyPrefix.length);
|
|
209
|
+
fieldIdsToLoad.push(fieldId);
|
|
210
|
+
} else if (key === WatchableRecordStoreKeys.records || key === WatchableRecordStoreKeys.recordIds) {
|
|
211
|
+
fieldIdsToLoad.push(this._getFieldIdForCausingRecordMetadataToLoad());
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return fieldIdsToLoad;
|
|
215
|
+
}
|
|
216
|
+
_getFieldIdForCausingRecordMetadataToLoad() {
|
|
217
|
+
// As a shortcut, we'll load the primary field cell values to
|
|
218
|
+
// cause record metadata (id, createdTime, commentCount) to be loaded
|
|
219
|
+
// and subscribed to. In the future, we could add an explicit model
|
|
220
|
+
// bridge to fetch and subscribe to row metadata.
|
|
221
|
+
return this._primaryFieldId;
|
|
222
|
+
}
|
|
223
|
+
areCellValuesLoadedForFieldId(fieldId) {
|
|
224
|
+
return this.isDataLoaded || this._areCellValuesLoadedByFieldId[fieldId] || false;
|
|
225
|
+
}
|
|
226
|
+
async loadCellValuesInFieldIdsAsync(fieldIds, onChange) {
|
|
227
|
+
this._assertNotForceUnloaded();
|
|
228
|
+
const fieldIdsWhichAreNotAlreadyLoadedOrLoading = [];
|
|
229
|
+
const pendingLoadPromises = [];
|
|
230
|
+
for (const fieldId of fieldIds) {
|
|
231
|
+
if (this._cellValuesRetainCountByFieldId[fieldId] !== undefined) {
|
|
232
|
+
this._cellValuesRetainCountByFieldId[fieldId]++;
|
|
233
|
+
} else {
|
|
234
|
+
this._cellValuesRetainCountByFieldId[fieldId] = 1;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// NOTE: we don't use this.areCellValuesLoadedForFieldId() here because
|
|
238
|
+
// that will return true if the cell values are loaded as a result
|
|
239
|
+
// of the entire table being loaded. In that scenario, we still
|
|
240
|
+
// want to separately load the cell values for the field so there
|
|
241
|
+
// is a separate subscription. Otherwise, when the table data unloads,
|
|
242
|
+
// the field data would unload as well. This can be improved by just
|
|
243
|
+
// subscribing to the field data without fetching it, since the cell
|
|
244
|
+
// values are already in the block frame.
|
|
245
|
+
if (!this._areCellValuesLoadedByFieldId[fieldId]) {
|
|
246
|
+
const pendingLoadPromise = this._pendingCellValuesLoadPromiseByFieldId[fieldId];
|
|
247
|
+
if (pendingLoadPromise) {
|
|
248
|
+
pendingLoadPromises.push(pendingLoadPromise);
|
|
249
|
+
} else {
|
|
250
|
+
fieldIdsWhichAreNotAlreadyLoadedOrLoading.push(fieldId);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (fieldIdsWhichAreNotAlreadyLoadedOrLoading.length > 0) {
|
|
255
|
+
// Could inline _loadCellValuesInFieldIdsAsync, but following the
|
|
256
|
+
// pattern from AbstractModelWithAsyncData where the public method
|
|
257
|
+
// is responsible for updating retain counts and the private method
|
|
258
|
+
// actually fetches data.
|
|
259
|
+
const loadFieldsWhichAreNotAlreadyLoadedOrLoadingPromise = this._loadCellValuesInFieldIdsAsync(fieldIdsWhichAreNotAlreadyLoadedOrLoading);
|
|
260
|
+
pendingLoadPromises.push(loadFieldsWhichAreNotAlreadyLoadedOrLoadingPromise);
|
|
261
|
+
for (const fieldId of fieldIdsWhichAreNotAlreadyLoadedOrLoading) {
|
|
262
|
+
this._pendingCellValuesLoadPromiseByFieldId[fieldId] = loadFieldsWhichAreNotAlreadyLoadedOrLoadingPromise;
|
|
263
|
+
}
|
|
264
|
+
// Doing `.then` instead of performing these actions directly in
|
|
265
|
+
// _loadCellValuesInFieldIdsAsync so this is similar to
|
|
266
|
+
// AbstractModelWithAsyncData. The idea is to refactor to avoid code
|
|
267
|
+
// duplication, so keeping them similar for now hopefully will make the
|
|
268
|
+
// refactor simpler.
|
|
269
|
+
loadFieldsWhichAreNotAlreadyLoadedOrLoadingPromise.then(changedKeys => {
|
|
270
|
+
for (const fieldId of fieldIdsWhichAreNotAlreadyLoadedOrLoading) {
|
|
271
|
+
this._areCellValuesLoadedByFieldId[fieldId] = true;
|
|
272
|
+
this._pendingCellValuesLoadPromiseByFieldId[fieldId] = undefined;
|
|
273
|
+
}
|
|
274
|
+
for (const key of changedKeys) {
|
|
275
|
+
onChange(key);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Since we are incrementing fieldIds, it's necessary to restart any pending timeouts
|
|
280
|
+
// to unload data. This is because it's possible for a timeout to fire while a queryResult
|
|
281
|
+
// is actively unloading, and erroneously unload data. Data must be unloaded _after_ the queryResult.
|
|
282
|
+
this._restartTimeoutToUnloadFieldIdsIfTimeoutIsActive();
|
|
283
|
+
await Promise.all(pendingLoadPromises);
|
|
284
|
+
}
|
|
285
|
+
async _loadCellValuesInFieldIdsAsync(fieldIds) {
|
|
286
|
+
const {
|
|
287
|
+
recordsById: newRecordsById
|
|
288
|
+
} = await this._airtableInterface.fetchAndSubscribeToCellValuesInFieldsAsync(this.tableId, fieldIds);
|
|
289
|
+
|
|
290
|
+
// Merge with existing data.
|
|
291
|
+
if (!this._data.recordsById) {
|
|
292
|
+
this._data.recordsById = {};
|
|
293
|
+
}
|
|
294
|
+
const {
|
|
295
|
+
recordsById: existingRecordsById
|
|
296
|
+
} = this._data;
|
|
297
|
+
for (const [recordId, newRecordObj] of (0, _private_utils.entries)((0, _private_utils.cast)(newRecordsById))) {
|
|
298
|
+
if (!(0, _private_utils.has)(existingRecordsById, recordId)) {
|
|
299
|
+
existingRecordsById[recordId] = newRecordObj;
|
|
300
|
+
} else {
|
|
301
|
+
const existingRecordObj = existingRecordsById[recordId];
|
|
302
|
+
|
|
303
|
+
// Metadata (createdTime, commentCount) should generally be up to date,
|
|
304
|
+
// but can be out of date in the rare scenario where realtime
|
|
305
|
+
// data has not yet been delivered to the SDK, but is populated in hyperbase
|
|
306
|
+
// at the time this new fetch is executed.
|
|
307
|
+
// istanbul ignore next
|
|
308
|
+
if (existingRecordObj.commentCount !== newRecordObj.commentCount) {
|
|
309
|
+
const isCommentCountTypesSame = typeof existingRecordObj.commentCount !== typeof newRecordObj.commentCount;
|
|
310
|
+
(0, _error_utils.logErrorToSentry)('comment count out of sync - types are same: %s', {
|
|
311
|
+
isCommentCountTypesSame
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// istanbul ignore next
|
|
316
|
+
if (existingRecordObj.createdTime !== newRecordObj.createdTime) {
|
|
317
|
+
const isCreatedTimeTypesSame = typeof existingRecordObj.createdTime !== typeof newRecordObj.createdTime;
|
|
318
|
+
(0, _error_utils.logErrorToSentry)('created time out of sync - types are same: %s', {
|
|
319
|
+
isCreatedTimeTypesSame
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
if (!existingRecordObj.cellValuesByFieldId) {
|
|
323
|
+
existingRecordObj.cellValuesByFieldId = {};
|
|
324
|
+
}
|
|
325
|
+
const existingCellValuesByFieldId = existingRecordObj.cellValuesByFieldId;
|
|
326
|
+
for (let i = 0; i < fieldIds.length; i++) {
|
|
327
|
+
const fieldId = fieldIds[i];
|
|
328
|
+
existingCellValuesByFieldId[fieldId] = newRecordObj.cellValuesByFieldId ? newRecordObj.cellValuesByFieldId[fieldId] : undefined;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
const changedKeys = fieldIds.map(fieldId => _record_store_core.WatchableCellValuesInFieldKeyPrefix + fieldId);
|
|
333
|
+
// Need to trigger onChange for records and recordIds since watching either
|
|
334
|
+
// of those causes record metadata to be loaded (via _getFieldIdForCausingRecordMetadataToLoad)
|
|
335
|
+
// and by convention we trigger a change event when data loads.
|
|
336
|
+
changedKeys.push(WatchableRecordStoreKeys.records);
|
|
337
|
+
changedKeys.push(WatchableRecordStoreKeys.recordIds);
|
|
338
|
+
// Also trigger cellValues changes since the cell values in the fields
|
|
339
|
+
// are now loaded.
|
|
340
|
+
changedKeys.push(WatchableRecordStoreKeys.cellValues);
|
|
341
|
+
return changedKeys;
|
|
342
|
+
}
|
|
343
|
+
unloadCellValuesInFieldIds(fieldIds) {
|
|
344
|
+
if (this._isForceUnloaded) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
for (const fieldId of fieldIds) {
|
|
348
|
+
let fieldRetainCount = this._cellValuesRetainCountByFieldId[fieldId] || 0;
|
|
349
|
+
fieldRetainCount--;
|
|
350
|
+
if (fieldRetainCount < 0) {
|
|
351
|
+
console.log('Field data over-released'); // eslint-disable-line no-console
|
|
352
|
+
fieldRetainCount = 0;
|
|
353
|
+
}
|
|
354
|
+
this._cellValuesRetainCountByFieldId[fieldId] = fieldRetainCount;
|
|
355
|
+
}
|
|
356
|
+
// Don't unload immediately. Wait a while in case something else
|
|
357
|
+
// requests the data, so we can avoid going back to liveapp or
|
|
358
|
+
// the network.
|
|
359
|
+
this._startTimeoutToUnloadForFieldIdsIfNeeded();
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// This unloads all fields where the retain count is at zero, and if any other
|
|
363
|
+
// request to unload fields is pending - cancels it and restarts it.
|
|
364
|
+
// This is important because fields must always be unloaded at least __DATA_UNLOAD_DELAY_MS
|
|
365
|
+
// after the unload is requested so that any QueryResults relying on them properly
|
|
366
|
+
// unload either first, or at the same time
|
|
367
|
+
_startTimeoutToUnloadForFieldIdsIfNeeded() {
|
|
368
|
+
const fieldIdsWithZeroRetainCount = [];
|
|
369
|
+
for (const [fieldId, retainCount] of Object.entries(this._cellValuesRetainCountByFieldId)) {
|
|
370
|
+
if (retainCount === 0) {
|
|
371
|
+
fieldIdsWithZeroRetainCount.push(fieldId);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Cancel any pending timeouts before proceeding
|
|
376
|
+
// This should be canceled even if there aren't any fields to unload as that means
|
|
377
|
+
// that there has been loading that's occured that makes the pending request invalid
|
|
378
|
+
if (this._timeoutForRemovingFieldIds) {
|
|
379
|
+
clearTimeout(this._timeoutForRemovingFieldIds);
|
|
380
|
+
this._timeoutForRemovingFieldIds = null;
|
|
381
|
+
}
|
|
382
|
+
if (fieldIdsWithZeroRetainCount.length > 0) {
|
|
383
|
+
this._timeoutForRemovingFieldIds = setTimeout(() => {
|
|
384
|
+
// Make sure the retain count is still zero, since it may
|
|
385
|
+
// have been incremented before the timeout fired.
|
|
386
|
+
const fieldIdsToUnload = fieldIdsWithZeroRetainCount.filter(fieldId => {
|
|
387
|
+
// It's necessary to also check that the field is loaded, as it's possible
|
|
388
|
+
// for an unload to trigger with fields that have already been removed.
|
|
389
|
+
return this._cellValuesRetainCountByFieldId[fieldId] === 0 && this._areCellValuesLoadedByFieldId[fieldId];
|
|
390
|
+
});
|
|
391
|
+
// istanbul ignore else
|
|
392
|
+
if (fieldIdsToUnload.length > 0) {
|
|
393
|
+
// Set _areCellValuesLoadedByFieldId to false before calling _unloadCellValuesInFieldIds
|
|
394
|
+
// since _unloadCellValuesInFieldIds will check if *any* fields are still loaded.
|
|
395
|
+
for (const fieldId of fieldIdsToUnload) {
|
|
396
|
+
this._areCellValuesLoadedByFieldId[fieldId] = false;
|
|
397
|
+
}
|
|
398
|
+
this._unloadCellValuesInFieldIds(fieldIdsToUnload);
|
|
399
|
+
} else {
|
|
400
|
+
// This shouldn't be possible because we always cancel the timer if fieldIds loadedness
|
|
401
|
+
// status ever changes
|
|
402
|
+
(0, _error_utils.logErrorToSentry)('fieldIdsToUnload is empty, this likely means the unload timer is not properly reset.');
|
|
403
|
+
}
|
|
404
|
+
this._timeoutForRemovingFieldIds = null;
|
|
405
|
+
}, _abstract_model_with_async_data.default.__DATA_UNLOAD_DELAY_MS);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
_restartTimeoutToUnloadFieldIdsIfTimeoutIsActive() {
|
|
409
|
+
if (this._timeoutForRemovingFieldIds) {
|
|
410
|
+
this._startTimeoutToUnloadForFieldIdsIfNeeded();
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
_unloadCellValuesInFieldIds(fieldIds) {
|
|
414
|
+
this._airtableInterface.unsubscribeFromCellValuesInFields(this.tableId, fieldIds);
|
|
415
|
+
this._afterUnloadDataOrUnloadCellValuesInFieldIds(fieldIds);
|
|
416
|
+
}
|
|
417
|
+
async _loadDataAsync() {
|
|
418
|
+
const tableData = await this._airtableInterface.fetchAndSubscribeToTableDataAsync(this.tableId);
|
|
419
|
+
this._data.recordsById = tableData.recordsById;
|
|
420
|
+
const changedKeys = [WatchableRecordStoreKeys.records, WatchableRecordStoreKeys.recordIds, WatchableRecordStoreKeys.cellValues];
|
|
421
|
+
for (const fieldId of (0, _private_utils.keys)(this._data.fieldsById)) {
|
|
422
|
+
changedKeys.push(_record_store_core.WatchableCellValuesInFieldKeyPrefix + fieldId);
|
|
423
|
+
}
|
|
424
|
+
return changedKeys;
|
|
425
|
+
}
|
|
426
|
+
_unloadData() {
|
|
427
|
+
this._airtableInterface.unsubscribeFromTableData(this.tableId);
|
|
428
|
+
this._afterUnloadDataOrUnloadCellValuesInFieldIds();
|
|
429
|
+
}
|
|
430
|
+
_afterUnloadDataOrUnloadCellValuesInFieldIds(unloadedFieldIds) {
|
|
431
|
+
const areAnyFieldsLoaded = this.isDataLoaded || (0, _private_utils.values)(this._areCellValuesLoadedByFieldId).some(isLoaded => isLoaded);
|
|
432
|
+
if (!this.isDeleted) {
|
|
433
|
+
if (!areAnyFieldsLoaded) {
|
|
434
|
+
this._data.recordsById = undefined;
|
|
435
|
+
} else if (!this.isDataLoaded) {
|
|
436
|
+
let fieldIdsToClear;
|
|
437
|
+
// This should be impossible - for fields should always be loaded
|
|
438
|
+
// when attempting to unload specific fields. This codepath was previously possible
|
|
439
|
+
// due to a bug. It could be converted to an invariant, but that is higher risk.
|
|
440
|
+
// istanbul ignore if
|
|
441
|
+
if (unloadedFieldIds) {
|
|
442
|
+
// Specific fields were unloaded, so clear out the cell values for those fields.
|
|
443
|
+
fieldIdsToClear = unloadedFieldIds;
|
|
444
|
+
(0, _error_utils.logErrorToSentry)('Field Ids are being unloaded when record_store is unloaded');
|
|
445
|
+
} else {
|
|
446
|
+
// The entire table was unloaded, but some individual fields are still loaded.
|
|
447
|
+
// We need to clear out the cell values of every field that was unloaded.
|
|
448
|
+
// This is kind of slow, but hopefully uncommon.
|
|
449
|
+
const fieldIds = Object.keys(this._data.fieldsById);
|
|
450
|
+
fieldIdsToClear = fieldIds.filter(fieldId => !this._areCellValuesLoadedByFieldId[fieldId]);
|
|
451
|
+
}
|
|
452
|
+
const {
|
|
453
|
+
recordsById
|
|
454
|
+
} = this._data;
|
|
455
|
+
for (const recordObj of (0, _private_utils.values)(recordsById || {})) {
|
|
456
|
+
for (let i = 0; i < fieldIdsToClear.length; i++) {
|
|
457
|
+
const fieldId = fieldIdsToClear[i];
|
|
458
|
+
if (recordObj.cellValuesByFieldId) {
|
|
459
|
+
recordObj.cellValuesByFieldId[fieldId] = undefined;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
if (!areAnyFieldsLoaded) {
|
|
466
|
+
this._clearRecordModels();
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
get _dataOrNullIfDeleted() {
|
|
470
|
+
return this._baseData.tablesById[this.tableId] ?? null;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** @internal */
|
|
475
|
+
var _default = exports.default = RecordStore;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _session_core = require("../../shared/models/session_core");
|
|
8
|
+
var _mutations = require("../types/mutations");
|
|
9
|
+
/**
|
|
10
|
+
* Model class representing the current user's session.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```js
|
|
14
|
+
* import {useSession} from '@airtable/blocks/base/ui';
|
|
15
|
+
*
|
|
16
|
+
* function Username() {
|
|
17
|
+
* const session = useSession();
|
|
18
|
+
*
|
|
19
|
+
* if (session.currentUser !== null) {
|
|
20
|
+
* return <span>The current user's name is {session.currentUser.name}</span>;
|
|
21
|
+
* } else {
|
|
22
|
+
* return <span>This extension is being viewed in a public share</span>;
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
* @docsPath models/Session
|
|
27
|
+
*/
|
|
28
|
+
class Session extends _session_core.SessionCore {
|
|
29
|
+
/** @internal */
|
|
30
|
+
static _className = 'Session';
|
|
31
|
+
/**
|
|
32
|
+
* Checks whether the current user has permission to update any records in the current base. For
|
|
33
|
+
* more granular permission checks, see {@link Table.checkPermissionsForUpdateRecords}.
|
|
34
|
+
*
|
|
35
|
+
* Returns `{hasPermission: true}` if the current user can update records,
|
|
36
|
+
* `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may
|
|
37
|
+
* be used to display an error message to the user.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```js
|
|
41
|
+
* import {useSession} from '@airtable/blocks/base/ui';
|
|
42
|
+
*
|
|
43
|
+
* function UpdateButton({onClick}) {
|
|
44
|
+
* const session = useSession();
|
|
45
|
+
* const updateRecordsCheckResult = session.checkPermissionsForUpdateRecords();
|
|
46
|
+
* const deniedReason = updateRecordsCheckResult.hasPermission
|
|
47
|
+
* ? <span>{updateRecordsCheckResult.reasonDisplayString}</span>
|
|
48
|
+
* : null;
|
|
49
|
+
*
|
|
50
|
+
* return <div>
|
|
51
|
+
* {deniedReason}
|
|
52
|
+
* <button onClick={onClick} disabled={!!deniedReason}>
|
|
53
|
+
* Update
|
|
54
|
+
* </button>
|
|
55
|
+
* </div>;
|
|
56
|
+
* }
|
|
57
|
+
*/
|
|
58
|
+
checkPermissionsForUpdateRecords() {
|
|
59
|
+
return this._sdk.__mutations.checkPermissionsForMutation({
|
|
60
|
+
type: _mutations.MutationTypes.SET_MULTIPLE_RECORDS_CELL_VALUES,
|
|
61
|
+
tableId: undefined,
|
|
62
|
+
records: undefined
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* An alias for `session.checkPermissionsForUpdateRecords().hasPermission`. For more granular
|
|
67
|
+
* permission checks, see {@link Table.hasPermissionToUpdateRecords}.
|
|
68
|
+
*/
|
|
69
|
+
hasPermissionToUpdateRecords() {
|
|
70
|
+
return this.checkPermissionsForUpdateRecords().hasPermission;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Checks whether the current user has permission to create any records in the current base. For
|
|
74
|
+
* more granular permission checks, see {@link Table.checkPermissionsForCreateRecords}.
|
|
75
|
+
*
|
|
76
|
+
* Returns `{hasPermission: true}` if the current user can create records,
|
|
77
|
+
* `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
|
|
78
|
+
* used to display an error message to the user.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```js
|
|
82
|
+
* import {useSession} from '@airtable/blocks/base/ui';
|
|
83
|
+
*
|
|
84
|
+
* function CreateButton({onClick}) {
|
|
85
|
+
* const session = useSession();
|
|
86
|
+
* const updateRecordsCheckResult = session.checkPermissionsForCreateRecords();
|
|
87
|
+
* const deniedReason = updateRecordsCheckResult.hasPermission
|
|
88
|
+
* ? <span>{updateRecordsCheckResult.reasonDisplayString}</span>
|
|
89
|
+
* : null;
|
|
90
|
+
*
|
|
91
|
+
* return <div>
|
|
92
|
+
* {deniedReason}
|
|
93
|
+
* <button onClick={onClick} disabled={!!deniedReason}>
|
|
94
|
+
* Create
|
|
95
|
+
* </button>
|
|
96
|
+
* </div>;
|
|
97
|
+
* }
|
|
98
|
+
*/
|
|
99
|
+
checkPermissionsForCreateRecords() {
|
|
100
|
+
return this._sdk.__mutations.checkPermissionsForMutation({
|
|
101
|
+
type: _mutations.MutationTypes.CREATE_MULTIPLE_RECORDS,
|
|
102
|
+
tableId: undefined,
|
|
103
|
+
records: undefined
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* An alias for `session.checkPermissionsForCreateRecords().hasPermission`. For more granular
|
|
108
|
+
* permission checks, see {@link Table.hasPermissionToCreateRecords}.
|
|
109
|
+
*/
|
|
110
|
+
hasPermissionToCreateRecords() {
|
|
111
|
+
return this.checkPermissionsForCreateRecords().hasPermission;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Checks whether the current user has permission to delete any records in the current base. For
|
|
115
|
+
* more granular permission checks, see {@link Table.checkPermissionsForDeleteRecords}.
|
|
116
|
+
*
|
|
117
|
+
* Returns `{hasPermission: true}` if the current user can delete records,
|
|
118
|
+
* `{hasPermission: false, reasonDisplayString: string}` otherwise. `reasonDisplayString` may be
|
|
119
|
+
* used to display an error message to the user.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```js
|
|
123
|
+
* import {useSession} from '@airtable/blocks/base/ui';
|
|
124
|
+
*
|
|
125
|
+
* function DeleteButton({onClick}) {
|
|
126
|
+
* const session = useSession();
|
|
127
|
+
* const updateRecordsCheckResult = session.checkPermissionsForDeleteRecords();
|
|
128
|
+
* const deniedReason = updateRecordsCheckResult.hasPermission
|
|
129
|
+
* ? <span>{updateRecordsCheckResult.reasonDisplayString}</span>
|
|
130
|
+
* : null;
|
|
131
|
+
*
|
|
132
|
+
* return <div>
|
|
133
|
+
* {deniedReason}
|
|
134
|
+
* <button onClick={onClick} disabled={!!deniedReason}>
|
|
135
|
+
* Delete
|
|
136
|
+
* </button>
|
|
137
|
+
* </div>;
|
|
138
|
+
*/
|
|
139
|
+
checkPermissionsForDeleteRecords() {
|
|
140
|
+
return this._sdk.__mutations.checkPermissionsForMutation({
|
|
141
|
+
type: _mutations.MutationTypes.DELETE_MULTIPLE_RECORDS,
|
|
142
|
+
tableId: undefined,
|
|
143
|
+
recordIds: undefined
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* An alias for `session.checkPermissionsForDeleteRecords().hasPermission`. For more granular
|
|
148
|
+
* permission checks, see {@link Table.hasPermissionToDeleteRecords}.
|
|
149
|
+
*/
|
|
150
|
+
hasPermissionToDeleteRecords() {
|
|
151
|
+
return this.checkPermissionsForDeleteRecords().hasPermission;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
var _default = exports.default = Session;
|