playbook_ui 18.2.0 → 18.3.0.pre.alpha.PLAY3342advancedtablereactmulticolumnselectablerow21082
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/Components/CollapsibleTrail.tsx +8 -1
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +39 -8
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +62 -2
- data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +24 -4
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +105 -66
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +29 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +83 -5
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1100 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.jsx +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility.md +5 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_custom.md +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi_select_all.jsx +82 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_multi_select_all.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_visibility_with_state.md +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators.jsx +67 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators.md +7 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators_rails.html.erb +78 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_group_separators_rails.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows.jsx +177 -58
- data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.json +17 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_playground.overrides.json +8 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_group_separators.json +328 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/index.js +39 -2
- data/app/pb_kits/playbook/pb_advanced_table/kit.schema.json +44 -16
- data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +53 -23
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
- data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +3 -1
- data/app/pb_kits/playbook/pb_avatar/kit.schema.json +23 -10
- data/app/pb_kits/playbook/pb_background/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_background/kit.schema.json +10 -3
- data/app/pb_kits/playbook/pb_badge/docs/_playground.json +2 -0
- data/app/pb_kits/playbook/pb_badge/kit.schema.json +27 -13
- data/app/pb_kits/playbook/pb_body/docs/_playground.json +3 -3
- data/app/pb_kits/playbook/pb_body/kit.schema.json +14 -5
- data/app/pb_kits/playbook/pb_button/_button.tsx +3 -1
- data/app/pb_kits/playbook/pb_button/button.rb +3 -0
- data/app/pb_kits/playbook/pb_button/button.test.js +154 -0
- data/app/pb_kits/playbook/pb_button/docs/_button_options_rails.md +5 -0
- data/app/pb_kits/playbook/pb_button/docs/_button_options_react.md +9 -0
- data/app/pb_kits/playbook/pb_button/docs/_playground.json +4 -2
- data/app/pb_kits/playbook/pb_button/docs/_playground.overrides.json +1 -1
- data/app/pb_kits/playbook/pb_button/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_button/kit.schema.json +31 -27
- data/app/pb_kits/playbook/pb_caption/kit.schema.json +17 -7
- data/app/pb_kits/playbook/pb_card/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_card/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/_playground.json +6 -1
- data/app/pb_kits/playbook/pb_checkbox/kit.schema.json +10 -5
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +4 -4
- data/app/pb_kits/playbook/pb_collapsible/collapsible.test.js +81 -2
- data/app/pb_kits/playbook/pb_contact/_contact.tsx +4 -1
- data/app/pb_kits/playbook/pb_contact/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_contact/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_copy_button/docs/_playground.json +5 -1
- data/app/pb_kits/playbook/pb_copy_button/kit.schema.json +10 -5
- data/app/pb_kits/playbook/pb_currency/docs/_playground.json +1 -1
- data/app/pb_kits/playbook/pb_currency/kit.schema.json +6 -2
- data/app/pb_kits/playbook/pb_dashboard_value/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_dashboard_value/kit.schema.json +4 -2
- data/app/pb_kits/playbook/pb_date/_date.tsx +3 -1
- data/app/pb_kits/playbook/pb_date/date.test.js +1 -1
- data/app/pb_kits/playbook/pb_date/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_date/kit.schema.json +17 -7
- data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +4 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_playground.json +4 -1
- data/app/pb_kits/playbook/pb_date_picker/kit.schema.json +32 -14
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +3 -1
- data/app/pb_kits/playbook/pb_date_range_inline/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_date_range_inline/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +4 -1
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +1 -0
- data/app/pb_kits/playbook/pb_date_stacked/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +3 -1
- data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -0
- data/app/pb_kits/playbook/pb_date_time/docs/_playground.json +2 -1
- data/app/pb_kits/playbook/pb_date_time/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -1
- data/app/pb_kits/playbook/pb_date_time_stacked/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_date_time_stacked/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +3 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -0
- data/app/pb_kits/playbook/pb_date_year_stacked/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_detail/docs/_playground.json +2 -1
- data/app/pb_kits/playbook/pb_detail/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_dialog/docs/_playground.json +1 -1
- data/app/pb_kits/playbook/pb_dialog/kit.schema.json +22 -9
- data/app/pb_kits/playbook/pb_distribution_bar/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_distribution_bar/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_draggable/utilities/touchDrag.ts +10 -0
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +112 -0
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +121 -15
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills.html.erb +51 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills.jsx +62 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills_rails.md +9 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_draggable_pills_react.md +9 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_form.jsx +50 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_form_react.md +9 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation.html.erb +16 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation.jsx +27 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation_rails.md +9 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_option_creation_react.md +9 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_playground.json +39 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_playground.overrides.json +13 -2
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +4 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +2 -2
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +24 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +235 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown_creation.test.jsx +414 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown_form.test.jsx +173 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown_index.test.js +545 -0
- data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +22 -5
- data/app/pb_kits/playbook/pb_dropdown/index.js +260 -37
- data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +3 -1
- data/app/pb_kits/playbook/pb_dropdown/kit.schema.json +59 -9
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownContainer.tsx +43 -25
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownFormFields.tsx +83 -0
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +13 -5
- data/app/pb_kits/playbook/pb_dropdown/subcomponents/MultiSelectTriggerDisplay.tsx +336 -31
- data/app/pb_kits/playbook/pb_dropdown/utilities/optionCreation.ts +21 -0
- data/app/pb_kits/playbook/pb_dropdown/utilities/pillReorder.js +281 -0
- data/app/pb_kits/playbook/pb_dropdown/utilities/quickpickDateSync.test.ts +24 -0
- data/app/pb_kits/playbook/pb_dropdown/utilities/usePillDropIndicator.ts +144 -0
- data/app/pb_kits/playbook/pb_empty_state/docs/_playground.json +1 -1
- data/app/pb_kits/playbook/pb_empty_state/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_file_upload/docs/_playground.json +3 -2
- data/app/pb_kits/playbook/pb_file_upload/kit.schema.json +8 -3
- data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +8 -1
- data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.html.erb +38 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.jsx +69 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_one_click.md +1 -0
- data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_filter/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_filter/filter.html.erb +4 -4
- data/app/pb_kits/playbook/pb_filter/filter.rb +28 -0
- data/app/pb_kits/playbook/pb_filter/filter.test.js +41 -0
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_playground.json +4 -4
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -2
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/kit.schema.json +6 -3
- data/app/pb_kits/playbook/pb_flex/docs/_playground.json +3 -0
- data/app/pb_kits/playbook/pb_flex/kit.schema.json +27 -12
- data/app/pb_kits/playbook/pb_form/docs/_description_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_default_values.jsx +898 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_default_values_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_defaults.jsx +879 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_defaults_react.md +29 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_loading.jsx +75 -0
- data/app/pb_kits/playbook/pb_form/docs/{_form_loading.md → _form_loading_rails.md} +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_loading_react.md +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_model_values.jsx +147 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_model_values_react.md +16 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_multi_column.jsx +164 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_multi_column_react.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_validation.jsx +1057 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_validation_react.md +26 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +7 -0
- data/app/pb_kits/playbook/pb_form/form.rb +1 -1
- data/app/pb_kits/playbook/pb_form/kit.schema.json +1 -6
- data/app/pb_kits/playbook/pb_form/pb_form_validation.js +1 -0
- data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -4
- data/app/pb_kits/playbook/pb_form_pill/docs/_playground.json +3 -0
- data/app/pb_kits/playbook/pb_form_pill/kit.schema.json +6 -3
- data/app/pb_kits/playbook/pb_full_screen/_full_screen.scss +6 -0
- data/app/pb_kits/playbook/pb_full_screen/_full_screen.tsx +11 -2
- data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_advanced_table_sticky_header.jsx +73 -0
- data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_advanced_table_sticky_header.md +1 -0
- data/app/pb_kits/playbook/pb_full_screen/docs/_playground.json +3 -3
- data/app/pb_kits/playbook/pb_full_screen/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_full_screen/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_full_screen/full_screen.test.jsx +4 -2
- data/app/pb_kits/playbook/pb_full_screen/kit.schema.json +8 -4
- data/app/pb_kits/playbook/pb_hashtag/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_hashtag/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_highlight/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_icon/_icon.tsx +6 -1
- data/app/pb_kits/playbook/pb_icon/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_icon/kit.schema.json +31 -13
- data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.tsx +3 -1
- data/app/pb_kits/playbook/pb_icon_circle/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_icon_circle/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/docs/_playground.json +3 -2
- data/app/pb_kits/playbook/pb_icon_stat_value/kit.schema.json +4 -2
- data/app/pb_kits/playbook/pb_image/_image.tsx +5 -3
- data/app/pb_kits/playbook/pb_image/docs/_playground.json +27 -27
- data/app/pb_kits/playbook/pb_image/kit.schema.json +57 -24
- data/app/pb_kits/playbook/pb_label_pill/_label_pill.tsx +3 -1
- data/app/pb_kits/playbook/pb_label_pill/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_label_value/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_label_value/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_layout/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_layout/kit.schema.json +43 -20
- data/app/pb_kits/playbook/pb_legend/_legend.tsx +3 -1
- data/app/pb_kits/playbook/pb_legend/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_legend/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_lightbox/_lightbox.tsx +2 -2
- data/app/pb_kits/playbook/pb_lightbox/kit.schema.json +84 -0
- data/app/pb_kits/playbook/pb_link/docs/_playground.json +6 -3
- data/app/pb_kits/playbook/pb_link/kit.schema.json +14 -6
- data/app/pb_kits/playbook/pb_list/_list_item.tsx +6 -3
- data/app/pb_kits/playbook/pb_list/docs/_playground.json +2 -2
- data/app/pb_kits/playbook/pb_list/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_loading_inline/docs/_playground.json +0 -1
- data/app/pb_kits/playbook/pb_loading_inline/kit.schema.json +4 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_default.md +22 -3
- data/app/pb_kits/playbook/pb_map/kit.schema.json +4 -6
- data/app/pb_kits/playbook/pb_message/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +4 -1
- data/app/pb_kits/playbook/pb_multiple_users/docs/_playground.json +2 -1
- data/app/pb_kits/playbook/pb_multiple_users/kit.schema.json +19 -11
- data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_multiple_users_stacked/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +17 -0
- data/app/pb_kits/playbook/pb_nav/docs/_playground.json +2 -0
- data/app/pb_kits/playbook/pb_nav/kit.schema.json +4 -2
- data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +3 -1
- data/app/pb_kits/playbook/pb_online_status/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_playground.json +3 -3
- data/app/pb_kits/playbook/pb_overlay/kit.schema.json +22 -12
- data/app/pb_kits/playbook/pb_pagination/kit.schema.json +6 -3
- data/app/pb_kits/playbook/pb_passphrase/docs/_playground.json +6 -4
- data/app/pb_kits/playbook/pb_passphrase/kit.schema.json +10 -5
- data/app/pb_kits/playbook/pb_pb_bar_graph/pbbargraph.test.jsx +1 -2
- data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +1 -2
- data/app/pb_kits/playbook/pb_pb_gauge_chart/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.test.jsx +1 -2
- data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.test.jsx +1 -2
- data/app/pb_kits/playbook/pb_person/_person.tsx +3 -1
- data/app/pb_kits/playbook/pb_person/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_person_contact/docs/_playground.json +3 -3
- data/app/pb_kits/playbook/pb_person_contact/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +3 -7
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_validation.html.erb +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/docs/_playground.json +3 -0
- data/app/pb_kits/playbook/pb_phone_number_input/img/flags.webp +0 -0
- data/app/pb_kits/playbook/pb_phone_number_input/img/flags@2x.webp +0 -0
- data/app/pb_kits/playbook/pb_phone_number_input/img/globe.webp +0 -0
- data/app/pb_kits/playbook/pb_phone_number_input/img/globe@2x.webp +0 -0
- data/app/pb_kits/playbook/pb_phone_number_input/intlTelInput.scss +13 -6
- data/app/pb_kits/playbook/pb_phone_number_input/kit.schema.json +6 -3
- data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input_assets.test.js +61 -0
- data/app/pb_kits/playbook/pb_pill/_pill.tsx +3 -1
- data/app/pb_kits/playbook/pb_pill/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_popover/docs/_playground.json +1 -2
- data/app/pb_kits/playbook/pb_popover/index.ts +47 -8
- data/app/pb_kits/playbook/pb_popover/kit.schema.json +18 -9
- data/app/pb_kits/playbook/pb_popover/popover_index.test.js +456 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.json +3 -2
- data/app/pb_kits/playbook/pb_progress_simple/kit.schema.json +4 -2
- data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.tsx +3 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.json +10 -3
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.overrides.json +1 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_required_indicator.md +2 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_default.md +3 -4
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_extensions.md +1 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_markdown_support.md +1 -1
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_required_indicator.html.erb +9 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_rails_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/kit.schema.json +18 -9
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.html.erb +3 -7
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor_rails.js +26 -21
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor_rails.test.js +85 -1
- data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_selectable_card/kit.schema.json +4 -2
- data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +0 -9
- data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_selectable_card_icon_custom.jsx +1 -1
- data/app/pb_kits/playbook/pb_selectable_card_icon/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +0 -7
- data/app/pb_kits/playbook/pb_source/_source.tsx +3 -1
- data/app/pb_kits/playbook/pb_source/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_source/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_source/source.rb +1 -1
- data/app/pb_kits/playbook/pb_star_rating/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_star_rating/kit.schema.json +15 -7
- data/app/pb_kits/playbook/pb_stat_change/_stat_change.tsx +3 -1
- data/app/pb_kits/playbook/pb_stat_change/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_stat_change/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_stat_value/docs/_playground.json +3 -1
- data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_table/docs/_playground.json +5 -1
- data/app/pb_kits/playbook/pb_table/kit.schema.json +28 -11
- data/app/pb_kits/playbook/pb_text_input/docs/_playground.json +3 -0
- data/app/pb_kits/playbook/pb_text_input/kit.schema.json +22 -9
- data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +4 -1
- data/app/pb_kits/playbook/pb_time/kit.schema.json +13 -5
- data/app/pb_kits/playbook/pb_time_picker/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_time_picker/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +3 -1
- data/app/pb_kits/playbook/pb_time_range_inline/kit.schema.json +13 -5
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +3 -1
- data/app/pb_kits/playbook/pb_time_stacked/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_timeline/_item.tsx +3 -1
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +3 -1
- data/app/pb_kits/playbook/pb_timestamp/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +1 -0
- data/app/pb_kits/playbook/pb_title/kit.schema.json +23 -10
- data/app/pb_kits/playbook/pb_title_count/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_title_count/kit.schema.json +2 -1
- data/app/pb_kits/playbook/pb_tooltip/docs/_playground.json +5 -1
- data/app/pb_kits/playbook/pb_tooltip/kit.schema.json +10 -5
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +73 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +285 -12
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +22 -14
- data/app/pb_kits/playbook/pb_typeahead/components/PillRenderer.tsx +15 -11
- data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +29 -30
- data/app/pb_kits/playbook/pb_typeahead/components/usePillDropIndicator.ts +155 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_playground.json +5 -5
- data/app/pb_kits/playbook/pb_typeahead/docs/_playground.overrides.json +2 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.html.erb +0 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.jsx +0 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills_rails.md +3 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills_react.md +7 -0
- data/app/pb_kits/playbook/pb_typeahead/kit.schema.json +3 -3
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -3
- data/app/pb_kits/playbook/pb_user/_user.tsx +3 -1
- data/app/pb_kits/playbook/pb_user/docs/_playground.json +3 -1
- data/app/pb_kits/playbook/pb_user/kit.schema.json +20 -9
- data/app/pb_kits/playbook/pb_user_badge/_user_badge.tsx +3 -1
- data/app/pb_kits/playbook/pb_user_badge/kit.schema.json +1 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +3 -1
- data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.json +1 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/kit.schema.json +3 -1
- data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +1 -0
- data/app/pb_kits/playbook/utilities/test/globalProps/onClick.test.js +471 -0
- data/app/pb_kits/playbook/utilities/test-utils.js +0 -1
- data/dist/ai/all-schemas.json +986 -388
- data/dist/ai/external-dependencies.json +1 -1
- data/dist/ai/forms.json +2 -2
- data/dist/ai/index.json +11 -3
- data/dist/ai/kits/advanced_table.schema.json +44 -16
- data/dist/ai/kits/avatar.schema.json +22 -9
- data/dist/ai/kits/background.schema.json +10 -3
- data/dist/ai/kits/badge.schema.json +26 -12
- data/dist/ai/kits/body.schema.json +14 -5
- data/dist/ai/kits/button.schema.json +29 -25
- data/dist/ai/kits/caption.schema.json +17 -7
- data/dist/ai/kits/card.schema.json +2 -1
- data/dist/ai/kits/checkbox.schema.json +10 -5
- data/dist/ai/kits/contact.schema.json +3 -1
- data/dist/ai/kits/copy_button.schema.json +10 -5
- data/dist/ai/kits/currency.schema.json +6 -2
- data/dist/ai/kits/dashboard_value.schema.json +4 -2
- data/dist/ai/kits/date.schema.json +16 -6
- data/dist/ai/kits/date_picker.schema.json +31 -13
- data/dist/ai/kits/date_range_inline.schema.json +3 -1
- data/dist/ai/kits/date_range_stacked.schema.json +1 -0
- data/dist/ai/kits/date_stacked.schema.json +1 -0
- data/dist/ai/kits/date_time.schema.json +3 -1
- data/dist/ai/kits/date_time_stacked.schema.json +3 -1
- data/dist/ai/kits/date_year_stacked.schema.json +1 -0
- data/dist/ai/kits/detail.schema.json +2 -1
- data/dist/ai/kits/dialog.schema.json +22 -9
- data/dist/ai/kits/distribution_bar.schema.json +2 -1
- data/dist/ai/kits/dropdown.schema.json +98 -18
- data/dist/ai/kits/empty_state.schema.json +2 -1
- data/dist/ai/kits/file_upload.schema.json +8 -3
- data/dist/ai/kits/fixed_confirmation_toast.schema.json +6 -3
- data/dist/ai/kits/flex.schema.json +27 -12
- data/dist/ai/kits/form.schema.json +1 -6
- data/dist/ai/kits/form_pill.schema.json +6 -3
- data/dist/ai/kits/full_screen.schema.json +8 -4
- data/dist/ai/kits/hashtag.schema.json +2 -1
- data/dist/ai/kits/highlight.schema.json +2 -1
- data/dist/ai/kits/icon.schema.json +31 -13
- data/dist/ai/kits/icon_circle.schema.json +3 -1
- data/dist/ai/kits/icon_stat_value.schema.json +4 -2
- data/dist/ai/kits/image.schema.json +57 -24
- data/dist/ai/kits/label_pill.schema.json +1 -0
- data/dist/ai/kits/label_value.schema.json +2 -1
- data/dist/ai/kits/layout.schema.json +43 -20
- data/dist/ai/kits/legend.schema.json +3 -1
- data/dist/ai/kits/lightbox.schema.json +86 -0
- data/dist/ai/kits/link.schema.json +14 -6
- data/dist/ai/kits/list.schema.json +2 -1
- data/dist/ai/kits/loading_inline.schema.json +4 -1
- data/dist/ai/kits/map.schema.json +4 -7
- data/dist/ai/kits/message.schema.json +2 -1
- data/dist/ai/kits/multiple_users.schema.json +19 -11
- data/dist/ai/kits/multiple_users_stacked.schema.json +2 -1
- data/dist/ai/kits/nav.schema.json +4 -2
- data/dist/ai/kits/online_status.schema.json +1 -0
- data/dist/ai/kits/overlay.schema.json +22 -12
- data/dist/ai/kits/pagination.schema.json +6 -3
- data/dist/ai/kits/passphrase.schema.json +10 -5
- data/dist/ai/kits/pb_gauge_chart.schema.json +2 -1
- data/dist/ai/kits/person.schema.json +1 -0
- data/dist/ai/kits/person_contact.schema.json +2 -1
- data/dist/ai/kits/phone_number_input.schema.json +6 -3
- data/dist/ai/kits/pill.schema.json +1 -0
- data/dist/ai/kits/popover.schema.json +17 -8
- data/dist/ai/kits/progress_pills.schema.json +2 -1
- data/dist/ai/kits/progress_simple.schema.json +4 -2
- data/dist/ai/kits/rich_text_editor.schema.json +19 -10
- data/dist/ai/kits/selectable_card.schema.json +4 -2
- data/dist/ai/kits/selectable_card_icon.schema.json +2 -1
- data/dist/ai/kits/source.schema.json +3 -1
- data/dist/ai/kits/star_rating.schema.json +15 -7
- data/dist/ai/kits/stat_change.schema.json +3 -1
- data/dist/ai/kits/stat_value.schema.json +2 -1
- data/dist/ai/kits/table.schema.json +28 -11
- data/dist/ai/kits/text_input.schema.json +22 -9
- data/dist/ai/kits/time.schema.json +12 -4
- data/dist/ai/kits/time_picker.schema.json +2 -1
- data/dist/ai/kits/time_range_inline.schema.json +13 -5
- data/dist/ai/kits/time_stacked.schema.json +1 -0
- data/dist/ai/kits/timestamp.schema.json +1 -0
- data/dist/ai/kits/title.schema.json +23 -10
- data/dist/ai/kits/title_count.schema.json +2 -1
- data/dist/ai/kits/tooltip.schema.json +10 -5
- data/dist/ai/kits/typeahead.schema.json +3 -3
- data/dist/ai/kits/user.schema.json +20 -9
- data/dist/ai/kits/user_badge.schema.json +1 -0
- data/dist/ai/kits/weekday_stacked.schema.json +3 -1
- data/dist/ai/playgrounds/advanced_table.json +1 -1
- data/dist/ai/playgrounds/dropdown.json +1 -1
- data/dist/ai/playgrounds/index.json +1 -1
- data/dist/ai/playgrounds/rich_text_editor.json +1 -1
- data/dist/ai/playgrounds/typeahead.json +1 -1
- data/dist/ai/visual-index.json +1 -1
- data/dist/chunks/_pagination-DZ0eQuH2.js +1 -0
- data/dist/chunks/{_pb_line_graph-Du7xE9vl.js → _pb_line_graph-DyvH5Zj1.js} +1 -1
- data/dist/chunks/{_detail-Bsvl694i.js → _tooltip-CFbtqu-E.js} +2 -2
- data/dist/chunks/_typeahead-CkiAf8zx.js +1 -0
- data/dist/chunks/{globalProps-B120NbSJ.js → globalProps-xfGTpdLP.js} +1 -1
- data/dist/chunks/index-4jrZjexD.js +1 -0
- data/dist/chunks/index-BAy61y8S.js +1 -0
- data/dist/chunks/index-Cb_SDipk.js +1 -0
- data/dist/chunks/index-D3RdsDp7.js +1 -0
- data/dist/chunks/index-D8PZIesy.js +1 -0
- data/dist/chunks/index-DIoc-aua.js +1 -0
- data/dist/chunks/index-qex65UMn.js +1 -0
- data/dist/chunks/lib-Cu_i0y0k.js +29 -0
- data/dist/chunks/{time_picker_helper-CYGg0UQ0.js → time_picker_helper-B82MORju.js} +1 -1
- data/dist/chunks/vendor.js +2 -2
- data/dist/menu.yml +3 -3
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/changelog_generator.rb +47 -21
- data/lib/playbook/connect_message_generator.rb +15 -2
- data/lib/playbook/version.rb +2 -2
- metadata +99 -23
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_draggable_pills.md +0 -7
- data/dist/chunks/_table-Bf6LGyL9.js +0 -1
- data/dist/chunks/_typeahead-w6S5Vx4b.js +0 -1
- data/dist/chunks/lib-Buo6zHEw.js +0 -29
- /data/app/pb_kits/playbook/pb_form/docs/{_description.md → _description_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_default_values.md → _form_default_values_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_defaults.md → _form_defaults_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_model_values.md → _form_model_values_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_multi_column.md → _form_multi_column_rails.md} +0 -0
- /data/app/pb_kits/playbook/pb_form/docs/{_form_validation.md → _form_validation_rails.md} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 106354f9d720a7693c85b275f1de67cb17a21e3e28f28f90a758ee9b19942367
|
|
4
|
+
data.tar.gz: 9a5fbcd069bdaf722663195395f810d351e72e322a527e0157d666609363cc60
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8a13eb3272cf0c06bb2defa816ca14a48f2cb2fffd1185516f6ff40556fab6e9c9766d3929929680ea18511efc952ebefa5a1d836e554c99df384a1d9ef88ea4
|
|
7
|
+
data.tar.gz: d754688073c058e93739e273d4f6d8f54fa26f5a86869c7e764a3dddfb492f6c63efb86b914b6d9d45424f859e0996269f416b8ab38411268a8b89b23b17915c
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import React from "react"
|
|
1
|
+
import React, { useContext } from "react"
|
|
2
|
+
|
|
3
|
+
import AdvancedTableContext from "../Context/AdvancedTableContext"
|
|
2
4
|
|
|
3
5
|
//CollapsibleTrail component
|
|
4
6
|
const CollapsibleTrail = ({ leftOffset }: { leftOffset: number }) => {
|
|
7
|
+
const { groupSeparators } = useContext(AdvancedTableContext)
|
|
5
8
|
const style: { [key: string]: string | number } = {
|
|
6
9
|
left: `${leftOffset}em`,
|
|
7
10
|
}
|
|
11
|
+
// Read by groupSeparators CSS to decide which trails stop at the stroke
|
|
12
|
+
if (groupSeparators) {
|
|
13
|
+
style["--collapsible-trail-left"] = `${leftOffset}em`
|
|
14
|
+
}
|
|
8
15
|
|
|
9
16
|
return (
|
|
10
17
|
<div
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useEffect } from "react"
|
|
1
|
+
import React, { useContext, useEffect, useMemo } from "react"
|
|
2
2
|
import classnames from "classnames"
|
|
3
3
|
import { flexRender, Row, Cell } from "@tanstack/react-table"
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ import { GenericObject } from "../../types"
|
|
|
6
6
|
import { isChrome } from "../Utilities/BrowserCheck"
|
|
7
7
|
import { findColumnDefByAccessor } from "../Utilities/ColumnStylingHelper"
|
|
8
8
|
import { playbookColumnLayoutStylesFromMeta } from "../Utilities/ColumnLayoutHelper"
|
|
9
|
-
import { getFontWeight, getRowColorClass, getRowStyle, shouldShowLoadingIndicator } from "../Utilities/RowUtils"
|
|
9
|
+
import { buildGroupSeparatorInsets, getFontWeight, getRowColorClass, getRowStyle, shouldShowLoadingIndicator } from "../Utilities/RowUtils"
|
|
10
10
|
|
|
11
11
|
import LoadingInline from "../../pb_loading_inline/_loading_inline"
|
|
12
12
|
import Checkbox from "../../pb_checkbox/_checkbox"
|
|
@@ -125,6 +125,7 @@ export const RegularTableView = ({
|
|
|
125
125
|
}: RegularTableViewProps) => {
|
|
126
126
|
const {
|
|
127
127
|
enableToggleExpansion,
|
|
128
|
+
groupSeparators,
|
|
128
129
|
handleExpandOrCollapse,
|
|
129
130
|
inlineRowLoading,
|
|
130
131
|
loading,
|
|
@@ -158,14 +159,30 @@ export const RegularTableView = ({
|
|
|
158
159
|
(obj: Record<string, unknown>) => "columns" in obj
|
|
159
160
|
);
|
|
160
161
|
|
|
161
|
-
//
|
|
162
|
-
|
|
162
|
+
// One map from the full row model so pinning a non-last sibling cannot
|
|
163
|
+
// invent a second separator just because that section only sees that row.
|
|
164
|
+
const rowModelRows = table.getRowModel().rows
|
|
165
|
+
const groupSeparatorInsets = useMemo(
|
|
166
|
+
() => (groupSeparators ? buildGroupSeparatorInsets(rowModelRows) : new Map<string, number>()),
|
|
167
|
+
[groupSeparators, rowModelRows]
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
function PinnedRow({
|
|
171
|
+
position,
|
|
172
|
+
row,
|
|
173
|
+
}: {
|
|
174
|
+
position: 'top' | 'bottom'
|
|
175
|
+
row: Row<any>
|
|
176
|
+
}) {
|
|
163
177
|
const customRowStyle = getRowStyle(rowStyling, row);
|
|
164
178
|
const bottomRowsCount = table.getBottomRows().length;
|
|
179
|
+
const groupSeparatorInsetEm = groupSeparatorInsets.get(row.id)
|
|
180
|
+
const showGroupSeparator = groupSeparatorInsetEm !== undefined
|
|
165
181
|
|
|
166
182
|
return (
|
|
167
183
|
<tr
|
|
168
184
|
className={classnames('pinned-row', {
|
|
185
|
+
'group-separator-row': showGroupSeparator,
|
|
169
186
|
'pinned-row-bottom': position === 'bottom',
|
|
170
187
|
})}
|
|
171
188
|
style={{
|
|
@@ -182,6 +199,9 @@ export const RegularTableView = ({
|
|
|
182
199
|
: undefined,
|
|
183
200
|
zIndex: '3',
|
|
184
201
|
fontWeight: getFontWeight(customRowStyle),
|
|
202
|
+
...(showGroupSeparator && {
|
|
203
|
+
["--group-separator-inset" as string]: `${groupSeparatorInsetEm}em`,
|
|
204
|
+
}),
|
|
185
205
|
}}
|
|
186
206
|
>
|
|
187
207
|
<TableCellRenderer
|
|
@@ -198,11 +218,13 @@ export const RegularTableView = ({
|
|
|
198
218
|
)
|
|
199
219
|
}
|
|
200
220
|
|
|
201
|
-
const totalRows = pinnedRows ? table.getCenterRows() :
|
|
221
|
+
const totalRows = pinnedRows ? table.getCenterRows() : rowModelRows
|
|
222
|
+
const topRows = pinnedRows ? table.getTopRows() : []
|
|
223
|
+
const bottomRows = pinnedRows ? table.getBottomRows() : []
|
|
202
224
|
|
|
203
225
|
return (
|
|
204
226
|
<>
|
|
205
|
-
{
|
|
227
|
+
{topRows.map((row: Row<GenericObject>) => (
|
|
206
228
|
<PinnedRow key={row.id}
|
|
207
229
|
position="top"
|
|
208
230
|
row={row}
|
|
@@ -219,6 +241,8 @@ export const RegularTableView = ({
|
|
|
219
241
|
// Use functions from RowUtils for consistent cell coloring
|
|
220
242
|
const rowColor = getRowColorClass(row, inlineRowLoading || false);
|
|
221
243
|
const isDataLoading = shouldShowLoadingIndicator(row, inlineRowLoading || false, columnDefinitions[0]?.cellAccessors?.length || 0);
|
|
244
|
+
const groupSeparatorInsetEm = groupSeparatorInsets.get(row.id)
|
|
245
|
+
const showGroupSeparator = groupSeparatorInsetEm !== undefined
|
|
222
246
|
|
|
223
247
|
return (
|
|
224
248
|
<React.Fragment key={`${row.index}-${row.id}-${row.depth}-row`}>
|
|
@@ -234,13 +258,20 @@ export const RegularTableView = ({
|
|
|
234
258
|
)}
|
|
235
259
|
|
|
236
260
|
<tr
|
|
237
|
-
className={
|
|
261
|
+
className={classnames(
|
|
262
|
+
rowColor,
|
|
263
|
+
row.depth > 0 && `depth-sub-row-${row.depth}`,
|
|
264
|
+
showGroupSeparator && "group-separator-row"
|
|
265
|
+
)}
|
|
238
266
|
id={`${row.index}-${row.id}-${row.depth}-row`}
|
|
239
267
|
ref={isFirstRegularRow ? sampleRowRef : null}
|
|
240
268
|
style={{
|
|
241
269
|
backgroundColor: customRowStyle?.backgroundColor,
|
|
242
270
|
color: customRowStyle?.fontColor,
|
|
243
271
|
fontWeight: getFontWeight(customRowStyle),
|
|
272
|
+
...(showGroupSeparator && {
|
|
273
|
+
["--group-separator-inset" as string]: `${groupSeparatorInsetEm}em`,
|
|
274
|
+
}),
|
|
244
275
|
}}
|
|
245
276
|
>
|
|
246
277
|
{/* Render custom checkbox column when we want selectableRows for non-expanding tables */}
|
|
@@ -280,7 +311,7 @@ export const RegularTableView = ({
|
|
|
280
311
|
</React.Fragment>
|
|
281
312
|
);
|
|
282
313
|
})}
|
|
283
|
-
{
|
|
314
|
+
{bottomRows.map((row: Row<GenericObject>) => (
|
|
284
315
|
<PinnedRow key={row.id}
|
|
285
316
|
position="bottom"
|
|
286
317
|
row={row}
|
|
@@ -105,7 +105,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
107
|
return (
|
|
108
|
-
|
|
108
|
+
<React.Fragment key={node.id}>
|
|
109
109
|
<Checkbox
|
|
110
110
|
checked={allOn}
|
|
111
111
|
indeterminate={!allOn && someOn}
|
|
@@ -120,7 +120,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
|
120
120
|
child.children ? renderGroup(child) : renderLeaf(child.id, child.label),
|
|
121
121
|
)}
|
|
122
122
|
</Flex>
|
|
123
|
-
|
|
123
|
+
</React.Fragment>
|
|
124
124
|
);
|
|
125
125
|
};
|
|
126
126
|
// ------------ End of column visibility logic --------
|
|
@@ -143,6 +143,47 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
|
143
143
|
const handleShouldClose = (shouldClose: boolean) =>
|
|
144
144
|
setShowPopover(!shouldClose)
|
|
145
145
|
|
|
146
|
+
// Select All only changes columns listed in the popover that can be hidden.
|
|
147
|
+
// The first column and ids omitted by includeIds stay as they are.
|
|
148
|
+
// Skip the leaf walk unless the checkbox is enabled.
|
|
149
|
+
const selectAllRequested = columnVisibilityControl?.showSelectAll === true
|
|
150
|
+
const availableColumns = selectAllRequested
|
|
151
|
+
? tree.flatMap(gatherLeafIds).flatMap((id) => {
|
|
152
|
+
const column = table.getColumn(id)
|
|
153
|
+
return column?.getCanHide() ? [column] : []
|
|
154
|
+
})
|
|
155
|
+
: []
|
|
156
|
+
const allAvailableVisible =
|
|
157
|
+
availableColumns.length > 0 &&
|
|
158
|
+
availableColumns.every((column) => column.getIsVisible())
|
|
159
|
+
const someAvailableVisible = availableColumns.some((column) => column.getIsVisible())
|
|
160
|
+
const showSelectAll = availableColumns.length > 0
|
|
161
|
+
const selectAllLabel = allAvailableVisible ? "Deselect All" : "Select All"
|
|
162
|
+
|
|
163
|
+
// Uses the same updater form as toggleVisibility, so onChange gets the same kind of value.
|
|
164
|
+
const handleSelectAllChange = () => {
|
|
165
|
+
const selectAllVisibility = Object.fromEntries(
|
|
166
|
+
availableColumns.map((column) => [column.id, !allAvailableVisible])
|
|
167
|
+
)
|
|
168
|
+
table.setColumnVisibility((previousVisibility: { [id: string]: boolean }) => ({
|
|
169
|
+
...previousVisibility,
|
|
170
|
+
...selectAllVisibility,
|
|
171
|
+
}))
|
|
172
|
+
|
|
173
|
+
if (columnVisibilityControl?.onColumnVisibilityChange) {
|
|
174
|
+
const nextVisibility = { ...table.getState().columnVisibility, ...selectAllVisibility }
|
|
175
|
+
// Same shape as the single toggles: root column ids, groups visible if any leaf is visible
|
|
176
|
+
const updatedVisibilityState = table.getAllColumns().reduce((
|
|
177
|
+
acc: { [id: string]: boolean },
|
|
178
|
+
column: { getLeafColumns: () => { id: string }[]; id: string }
|
|
179
|
+
) => {
|
|
180
|
+
acc[column.id] = column.getLeafColumns().some((leaf) => nextVisibility[leaf.id] ?? true)
|
|
181
|
+
return acc
|
|
182
|
+
}, {})
|
|
183
|
+
columnVisibilityControl.onColumnVisibilityChange(updatedVisibilityState)
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
146
187
|
const popoverReference = (
|
|
147
188
|
<Tooltip
|
|
148
189
|
placement="top"
|
|
@@ -197,6 +238,25 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
|
|
|
197
238
|
textAlign="center"
|
|
198
239
|
/>
|
|
199
240
|
<SectionSeparator paddingBottom="xs" />
|
|
241
|
+
{showSelectAll && (
|
|
242
|
+
<>
|
|
243
|
+
<Flex
|
|
244
|
+
cursor="pointer"
|
|
245
|
+
flexDirection="column"
|
|
246
|
+
paddingX="xs"
|
|
247
|
+
>
|
|
248
|
+
<Checkbox
|
|
249
|
+
aria={{ label: selectAllLabel }}
|
|
250
|
+
checked={allAvailableVisible}
|
|
251
|
+
indeterminate={!allAvailableVisible && someAvailableVisible}
|
|
252
|
+
onChange={handleSelectAllChange}
|
|
253
|
+
paddingBottom="xs"
|
|
254
|
+
text={selectAllLabel}
|
|
255
|
+
/>
|
|
256
|
+
</Flex>
|
|
257
|
+
<SectionSeparator paddingBottom="xs" />
|
|
258
|
+
</>
|
|
259
|
+
)}
|
|
200
260
|
{tree.map((node: VisibilityNode) => (
|
|
201
261
|
<Flex cursor="pointer"
|
|
202
262
|
flexDirection="column"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext,
|
|
1
|
+
import React, { useContext, useEffect, useLayoutEffect, useMemo, useState } from "react"
|
|
2
2
|
import classnames from "classnames"
|
|
3
3
|
import { flexRender, Cell, Row } from "@tanstack/react-table"
|
|
4
4
|
import { VirtualItem } from "@tanstack/react-virtual"
|
|
@@ -7,7 +7,7 @@ import { GenericObject } from "../../types"
|
|
|
7
7
|
|
|
8
8
|
import { isChrome } from "../Utilities/BrowserCheck"
|
|
9
9
|
import { getVirtualizedRowStyle } from "../Utilities/TableContainerStyles"
|
|
10
|
-
import { getRowColorClass } from "../Utilities/RowUtils"
|
|
10
|
+
import { buildGroupSeparatorInsets, getRowColorClass } from "../Utilities/RowUtils"
|
|
11
11
|
|
|
12
12
|
import LoadingInline from "../../pb_loading_inline/_loading_inline"
|
|
13
13
|
import Checkbox from "../../pb_checkbox/_checkbox"
|
|
@@ -34,6 +34,7 @@ export const VirtualizedTableView = ({
|
|
|
34
34
|
}: VirtualizedTableViewProps) => {
|
|
35
35
|
const {
|
|
36
36
|
enableToggleExpansion,
|
|
37
|
+
groupSeparators,
|
|
37
38
|
handleExpandOrCollapse,
|
|
38
39
|
inlineRowLoading,
|
|
39
40
|
loading,
|
|
@@ -119,6 +120,13 @@ export const VirtualizedTableView = ({
|
|
|
119
120
|
};
|
|
120
121
|
}, [table, selectableRows, hasAnySubRows]);
|
|
121
122
|
|
|
123
|
+
// Memoize against scroll-driven re-renders; only rebuild when the row model changes.
|
|
124
|
+
const rowModelRows = table.getRowModel().rows
|
|
125
|
+
const groupSeparatorInsets = useMemo(
|
|
126
|
+
() => (groupSeparators ? buildGroupSeparatorInsets(rowModelRows) : new Map<string, number>()),
|
|
127
|
+
[groupSeparators, rowModelRows]
|
|
128
|
+
)
|
|
129
|
+
|
|
122
130
|
// Safety check
|
|
123
131
|
if (!virtualizer || !flattenedItems) {
|
|
124
132
|
return (
|
|
@@ -180,10 +188,17 @@ export const VirtualizedTableView = ({
|
|
|
180
188
|
|
|
181
189
|
// Use the utility function to get consistent row color
|
|
182
190
|
const rowColor = getRowColorClass(row, inlineRowLoading || false);
|
|
191
|
+
const groupSeparatorInsetEm = groupSeparatorInsets.get(row.id)
|
|
192
|
+
const showGroupSeparator = groupSeparatorInsetEm !== undefined
|
|
183
193
|
|
|
184
194
|
return (
|
|
185
195
|
<tr
|
|
186
|
-
className={
|
|
196
|
+
className={classnames(
|
|
197
|
+
"virtualized-table-row",
|
|
198
|
+
rowColor,
|
|
199
|
+
row.depth > 0 && `depth-sub-row-${row.depth}`,
|
|
200
|
+
showGroupSeparator && "group-separator-row"
|
|
201
|
+
)}
|
|
187
202
|
data-index={virtualRow.index}
|
|
188
203
|
key={`row-${item.id}-sort-${sortingState}`}
|
|
189
204
|
ref={(node) => {
|
|
@@ -195,7 +210,12 @@ export const VirtualizedTableView = ({
|
|
|
195
210
|
}
|
|
196
211
|
}
|
|
197
212
|
}}
|
|
198
|
-
style={
|
|
213
|
+
style={{
|
|
214
|
+
...virtualItemStyle,
|
|
215
|
+
...(showGroupSeparator && {
|
|
216
|
+
["--group-separator-inset" as string]: `${groupSeparatorInsetEm}em`,
|
|
217
|
+
}),
|
|
218
|
+
}}
|
|
199
219
|
>
|
|
200
220
|
{/* Render custom checkbox column when we want selectableRows for non-expanding tables */}
|
|
201
221
|
{selectableRows && !hasAnySubRows && (
|
|
@@ -32,6 +32,7 @@ export const TableHeader = ({
|
|
|
32
32
|
...props
|
|
33
33
|
}: TableHeaderProps) => {
|
|
34
34
|
const {
|
|
35
|
+
columnVisibilityControl,
|
|
35
36
|
enableToggleExpansion,
|
|
36
37
|
handleExpandOrCollapse,
|
|
37
38
|
loading,
|
|
@@ -63,42 +64,83 @@ export const TableHeader = ({
|
|
|
63
64
|
`${responsive === "scroll" && "pinned-left"}`,
|
|
64
65
|
);
|
|
65
66
|
|
|
67
|
+
// TanStack drops header rows when every leaf in a group is hidden.
|
|
68
|
+
// Spacer rows keep that height only when Select All can hide a whole group.
|
|
69
|
+
const showSelectAll = columnVisibilityControl?.showSelectAll === true
|
|
70
|
+
let hiddenHeaderRowCount = 0
|
|
71
|
+
let spacerColSpan = 0
|
|
72
|
+
if (showSelectAll) {
|
|
73
|
+
const columnHeaderDepth = Math.max(
|
|
74
|
+
...table.getAllFlatColumns().map((column: GenericObject) => column.depth + 1)
|
|
75
|
+
)
|
|
76
|
+
hiddenHeaderRowCount = columnHeaderDepth - table.getHeaderGroups().length
|
|
77
|
+
spacerColSpan = table.getVisibleLeafColumns().length + (!hasAnySubRows && selectableRows ? 1 : 0)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const renderSpacerRows = (rowClassName?: string) =>
|
|
81
|
+
Array.from({ length: Math.max(0, hiddenHeaderRowCount) }, (_, index) => (
|
|
82
|
+
<tr
|
|
83
|
+
aria-hidden="true"
|
|
84
|
+
className={classnames("header-spacer-row", rowClassName)}
|
|
85
|
+
key={`header-spacer-${index}`}
|
|
86
|
+
>
|
|
87
|
+
{/* header-spacer-cell stays off .table-header-cells so width measurement and sticky-left styles skip it. */}
|
|
88
|
+
<th
|
|
89
|
+
className="header-spacer-cell"
|
|
90
|
+
colSpan={spacerColSpan}
|
|
91
|
+
/>
|
|
92
|
+
</tr>
|
|
93
|
+
))
|
|
94
|
+
|
|
95
|
+
// Empty checkbox-column cell on upper multi-header rows; checkbox only on the lowest row.
|
|
96
|
+
const renderSelectableHeaderCell = (
|
|
97
|
+
isLowestHeaderRow: boolean,
|
|
98
|
+
extraClassName?: string
|
|
99
|
+
) => (
|
|
100
|
+
<th className={classnames(customCellClassnames, "checkbox-cell-header", extraClassName)}>
|
|
101
|
+
{isLowestHeaderRow ? (
|
|
102
|
+
<Checkbox
|
|
103
|
+
checked={table?.getIsAllRowsSelected()}
|
|
104
|
+
indeterminate={table?.getIsSomeRowsSelected()}
|
|
105
|
+
onChange={table?.getToggleAllRowsSelectedHandler()}
|
|
106
|
+
/>
|
|
107
|
+
) : null}
|
|
108
|
+
</th>
|
|
109
|
+
)
|
|
110
|
+
|
|
66
111
|
const renderRegularTableHeader = () => (
|
|
67
112
|
<thead className={classes}
|
|
68
113
|
id={id}
|
|
69
114
|
ref={headerRef}
|
|
70
115
|
>
|
|
71
|
-
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
})}
|
|
100
|
-
</tr>
|
|
101
|
-
))}
|
|
116
|
+
{renderSpacerRows()}
|
|
117
|
+
{table.getHeaderGroups().map((headerGroup: HeaderGroup<GenericObject>, headerGroupIndex: number, headerGroups: HeaderGroup<GenericObject>[]) => {
|
|
118
|
+
const isLowestHeaderRow = headerGroupIndex === headerGroups.length - 1
|
|
119
|
+
|
|
120
|
+
return (
|
|
121
|
+
<tr key={`${headerGroup.id}-headerGroup`}>
|
|
122
|
+
{!hasAnySubRows && selectableRows && renderSelectableHeaderCell(isLowestHeaderRow)}
|
|
123
|
+
{headerGroup.headers.map(header => {
|
|
124
|
+
const isPinnedLeft = columnPinning.left.includes(header.id)
|
|
125
|
+
return (
|
|
126
|
+
<TableHeaderCell
|
|
127
|
+
enableSorting={enableSorting}
|
|
128
|
+
enableToggleExpansion={enableToggleExpansion}
|
|
129
|
+
handleExpandOrCollapse={handleExpandOrCollapse}
|
|
130
|
+
header={header}
|
|
131
|
+
headerChildren={children}
|
|
132
|
+
isPinnedLeft={isPinnedLeft}
|
|
133
|
+
key={`${header.id}-header`}
|
|
134
|
+
loading={loading}
|
|
135
|
+
persistToggleExpansionButton={persistToggleExpansionButton}
|
|
136
|
+
sortIcon={sortIcon}
|
|
137
|
+
table={table}
|
|
138
|
+
/>
|
|
139
|
+
)
|
|
140
|
+
})}
|
|
141
|
+
</tr>
|
|
142
|
+
)
|
|
143
|
+
})}
|
|
102
144
|
</thead>
|
|
103
145
|
);
|
|
104
146
|
|
|
@@ -109,41 +151,38 @@ export const TableHeader = ({
|
|
|
109
151
|
id={id}
|
|
110
152
|
ref={headerRef}
|
|
111
153
|
>
|
|
112
|
-
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
})}
|
|
145
|
-
</tr>
|
|
146
|
-
))}
|
|
154
|
+
{renderSpacerRows("virtualized-header-row-header")}
|
|
155
|
+
{table.getHeaderGroups().map((headerGroup: HeaderGroup<GenericObject>, headerGroupIndex: number, headerGroups: HeaderGroup<GenericObject>[]) => {
|
|
156
|
+
const isLowestHeaderRow = headerGroupIndex === headerGroups.length - 1
|
|
157
|
+
|
|
158
|
+
return (
|
|
159
|
+
<tr
|
|
160
|
+
className="virtualized-header-row-header"
|
|
161
|
+
key={`${headerGroup.id}-headerGroup-virtualized`}
|
|
162
|
+
>
|
|
163
|
+
{!hasAnySubRows && selectableRows && renderSelectableHeaderCell(isLowestHeaderRow, "virtualized-header-cell")}
|
|
164
|
+
{headerGroup.headers.map(header => {
|
|
165
|
+
const isPinnedLeft = columnPinning.left.includes(header.id)
|
|
166
|
+
return (
|
|
167
|
+
<TableHeaderCell
|
|
168
|
+
enableSorting={enableSorting}
|
|
169
|
+
enableToggleExpansion={enableToggleExpansion}
|
|
170
|
+
handleExpandOrCollapse={handleExpandOrCollapse}
|
|
171
|
+
header={header}
|
|
172
|
+
headerChildren={children}
|
|
173
|
+
isPinnedLeft={isPinnedLeft}
|
|
174
|
+
isVirtualized
|
|
175
|
+
key={`${header.id}-header-virtualized`}
|
|
176
|
+
loading={loading}
|
|
177
|
+
persistToggleExpansionButton={persistToggleExpansionButton}
|
|
178
|
+
sortIcon={sortIcon}
|
|
179
|
+
table={table}
|
|
180
|
+
/>
|
|
181
|
+
)
|
|
182
|
+
})}
|
|
183
|
+
</tr>
|
|
184
|
+
)
|
|
185
|
+
})}
|
|
147
186
|
</thead>
|
|
148
187
|
);
|
|
149
188
|
return (
|
|
@@ -53,6 +53,35 @@ export const getFontWeight = (rowStyle?: GenericObject) => {
|
|
|
53
53
|
if (rowStyle?.fontWeight === "regular") return 400
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
// Matches the `left` of the nth collapsible-trail (see CollapsibleTrail.tsx).
|
|
57
|
+
const getCollapsibleTrailLeftEm = (trailIndex: number): number =>
|
|
58
|
+
trailIndex * 1.0 + (trailIndex > 1 ? (trailIndex - 1) * 0.25 : 0)
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* One O(n) pass over the full visible row model → Map of row id to its
|
|
62
|
+
* `--group-separator-inset` (em). Call once (and memoize) for the whole table —
|
|
63
|
+
* do not rebuild per pinned section, or a pinned non-last sibling can look like
|
|
64
|
+
* a last sibling and invent a second separator.
|
|
65
|
+
*
|
|
66
|
+
* A row closes every group between its depth and the next visible row's depth
|
|
67
|
+
* (so expanded parents defer to their last visible descendant, and sort/filter
|
|
68
|
+
* is respected). One stroke is drawn, inset to the outermost closed group:
|
|
69
|
+
* year-level → 0 / full-bleed, otherwise that group's collapsible-trail.
|
|
70
|
+
*/
|
|
71
|
+
export const buildGroupSeparatorInsets = (
|
|
72
|
+
visibleRows: Row<GenericObject>[]
|
|
73
|
+
): Map<string, number> => {
|
|
74
|
+
const insets = new Map<string, number>()
|
|
75
|
+
|
|
76
|
+
visibleRows.forEach((row, index) => {
|
|
77
|
+
if (row.depth === 0) return
|
|
78
|
+
const nextDepth = visibleRows[index + 1]?.depth ?? 0
|
|
79
|
+
if (nextDepth >= row.depth) return
|
|
80
|
+
insets.set(row.id, nextDepth === 0 ? 0 : getCollapsibleTrailLeftEm(nextDepth + 1))
|
|
81
|
+
})
|
|
82
|
+
return insets
|
|
83
|
+
}
|
|
84
|
+
|
|
56
85
|
/**
|
|
57
86
|
* Creates a virtual item style object for virtualized rows
|
|
58
87
|
*/
|