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