@gitlab/ui 132.0.1 → 132.0.3
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/charts.js +13 -0
- package/dist/components/base/accordion/accordion.js +69 -0
- package/dist/components/base/accordion/accordion_item.js +160 -0
- package/dist/components/base/accordion/constants.js +3 -0
- package/dist/components/base/alert/alert.js +263 -0
- package/dist/components/base/animated_icon/animated_chevron_down_up_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_chevron_lg_down_up_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_chevron_lg_right_down_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_chevron_right_down_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_duo_chat_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_loader_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_notifications_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_sidebar_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_smile_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_sort_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_star_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_todo_icon.js +45 -0
- package/dist/components/base/animated_icon/animated_upload_icon.js +45 -0
- package/dist/components/base/animated_icon/base_animated_icon.js +77 -0
- package/dist/components/base/attribute_list/attribute_list.js +100 -0
- package/dist/components/base/avatar/avatar.js +175 -0
- package/dist/components/base/avatar/utils.js +17 -0
- package/dist/components/base/avatar_labeled/avatar_labeled.js +198 -0
- package/dist/components/base/avatar_link/avatar_link.js +47 -0
- package/dist/components/base/avatars_inline/avatars_inline.js +139 -0
- package/dist/components/base/badge/badge.js +197 -0
- package/dist/components/base/banner/banner.js +149 -0
- package/dist/components/base/breadcrumb/breadcrumb.js +282 -0
- package/dist/components/base/breadcrumb/breadcrumb_item.js +96 -0
- package/dist/components/base/broadcast_message/broadcast_message.js +113 -0
- package/dist/components/base/broadcast_message/constants.js +5 -0
- package/dist/components/base/button/button.js +419 -0
- package/dist/components/base/button_group/button_group.js +53 -0
- package/dist/components/base/card/card.js +69 -0
- package/dist/components/base/collapse/collapse.js +163 -0
- package/dist/components/base/color_mode_toggle/color_mode_toggle.js +92 -0
- package/dist/components/base/datepicker/datepicker.js +475 -0
- package/dist/components/base/daterange_picker/daterange_picker.js +394 -0
- package/dist/components/base/drawer/drawer.js +156 -0
- package/dist/components/base/dropdown/dropdown.js +330 -0
- package/dist/components/base/dropdown/dropdown_divider.js +48 -0
- package/dist/components/base/dropdown/dropdown_form.js +48 -0
- package/dist/components/base/dropdown/dropdown_item.js +175 -0
- package/dist/components/base/dropdown/dropdown_section_header.js +48 -0
- package/dist/components/base/dropdown/dropdown_text.js +48 -0
- package/dist/components/base/filtered_search/common_story_options.js +14 -0
- package/dist/components/base/filtered_search/filtered_search.js +428 -0
- package/dist/components/base/filtered_search/filtered_search_suggestion.js +95 -0
- package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +139 -0
- package/dist/components/base/filtered_search/filtered_search_term.js +217 -0
- package/dist/components/base/filtered_search/filtered_search_token.js +383 -0
- package/dist/components/base/filtered_search/filtered_search_token_segment.js +444 -0
- package/dist/components/base/filtered_search/filtered_search_utils.js +241 -0
- package/dist/components/base/form/form.js +43 -0
- package/dist/components/base/form/form_character_count/form_character_count.js +107 -0
- package/dist/components/base/form/form_checkbox/form_checkbox.js +342 -0
- package/dist/components/base/form/form_checkbox/form_checkbox_group.js +188 -0
- package/dist/components/base/form/form_combobox/constants.js +55 -0
- package/dist/components/base/form/form_combobox/form_combobox.js +239 -0
- package/dist/components/base/form/form_date/form_date.js +143 -0
- package/dist/components/base/form/form_fields/form_field_validator.js +93 -0
- package/dist/components/base/form/form_fields/form_fields.js +289 -0
- package/dist/components/base/form/form_fields/form_fields_loop.js +75 -0
- package/dist/components/base/form/form_fields/mappers.js +13 -0
- package/dist/components/base/form/form_fields/validators.js +48 -0
- package/dist/components/base/form/form_group/form_group.js +119 -0
- package/dist/components/base/form/form_input/form_input.js +695 -0
- package/dist/components/base/form/form_input_group/form_input_group.js +120 -0
- package/dist/components/base/form/form_input_group/form_input_group_mixin.js +41 -0
- package/dist/components/base/form/form_radio/form_radio.js +259 -0
- package/dist/components/base/form/form_radio_group/form_radio_group.js +189 -0
- package/dist/components/base/form/form_select/constants.js +12 -0
- package/dist/components/base/form/form_select/form_select.js +96 -0
- package/dist/components/base/form/form_textarea/form_textarea.js +166 -0
- package/dist/components/base/form/input_group_text/input_group_text.js +43 -0
- package/dist/components/base/icon/icon.js +113 -0
- package/dist/components/base/illustration/illustration.js +80 -0
- package/dist/components/base/infinite_scroll/infinite_scroll.js +196 -0
- package/dist/components/base/keyset_pagination/keyset_pagination.js +152 -0
- package/dist/components/base/label/label.js +174 -0
- package/dist/components/base/link/link.js +330 -0
- package/dist/components/base/loading_icon/loading_icon.js +120 -0
- package/dist/components/base/markdown/markdown.js +50 -0
- package/dist/components/base/modal/modal.js +259 -0
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +716 -0
- package/dist/components/base/new_dropdowns/base_dropdown/constants.js +5 -0
- package/dist/components/base/new_dropdowns/base_dropdown/dropdown_container.js +32 -0
- package/dist/components/base/new_dropdowns/constants.js +24 -0
- package/dist/components/base/new_dropdowns/disclosure/constants.js +8 -0
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +400 -0
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.js +112 -0
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +196 -0
- package/dist/components/base/new_dropdowns/disclosure/mock_data.js +168 -0
- package/dist/components/base/new_dropdowns/disclosure/utils.js +84 -0
- package/dist/components/base/new_dropdowns/listbox/listbox.js +997 -0
- package/dist/components/base/new_dropdowns/listbox/listbox_group.js +58 -0
- package/dist/components/base/new_dropdowns/listbox/listbox_item.js +112 -0
- package/dist/components/base/new_dropdowns/listbox/listbox_search_input.js +94 -0
- package/dist/components/base/new_dropdowns/listbox/mock_data.js +131 -0
- package/dist/components/base/new_dropdowns/listbox/utils.js +33 -0
- package/dist/components/base/pagination/pagination.js +397 -0
- package/dist/components/base/path/data.js +34 -0
- package/dist/components/base/path/path.js +177 -0
- package/dist/components/base/popover/popover.js +142 -0
- package/dist/components/base/progress_bar/progress_bar.js +117 -0
- package/dist/components/base/search_box_by_click/search_box_by_click.js +245 -0
- package/dist/components/base/search_box_by_type/search_box_by_type.js +187 -0
- package/dist/components/base/segmented_control/segmented_control.js +73 -0
- package/dist/components/base/skeleton_loader/skeleton_loader.js +232 -0
- package/dist/components/base/sorting/sorting.js +180 -0
- package/dist/components/base/table/constants.js +5 -0
- package/dist/components/base/table/table.js +187 -0
- package/dist/components/base/table_lite/table_lite.js +80 -0
- package/dist/components/base/tabs/constants.js +3 -0
- package/dist/components/base/tabs/tab/tab.js +113 -0
- package/dist/components/base/tabs/tabs/scrollable_tabs.js +162 -0
- package/dist/components/base/tabs/tabs/tabs.js +223 -0
- package/dist/components/base/toast/index.js +66 -0
- package/dist/components/base/toast/toast.js +125 -0
- package/dist/components/base/toast/toaster.js +87 -0
- package/dist/components/base/toggle/toggle.js +178 -0
- package/dist/components/base/token/token.js +97 -0
- package/dist/components/base/token_selector/helpers.js +5 -0
- package/dist/components/base/token_selector/token_container.js +160 -0
- package/dist/components/base/token_selector/token_selector.js +454 -0
- package/dist/components/base/token_selector/token_selector_dropdown.js +223 -0
- package/dist/components/base/tooltip/tooltip.js +54 -0
- package/dist/components/charts/area/area.js +329 -0
- package/dist/components/charts/bar/bar.js +207 -0
- package/dist/components/charts/chart/chart.js +215 -0
- package/dist/components/charts/column/column.js +221 -0
- package/dist/components/charts/discrete_scatter/discrete_scatter.js +199 -0
- package/dist/components/charts/gauge/gauge.js +205 -0
- package/dist/components/charts/heatmap/heatmap.js +299 -0
- package/dist/components/charts/heatmap/index.js +2 -0
- package/dist/components/charts/legend/legend.js +245 -0
- package/dist/components/charts/line/line.js +340 -0
- package/dist/components/charts/series_label/series_label.js +101 -0
- package/dist/components/charts/shared/tooltip/tooltip.js +369 -0
- package/dist/components/charts/shared/tooltip/tooltip_default_format/tooltip_default_format.js +53 -0
- package/dist/components/charts/single_stat/single_stat.js +164 -0
- package/dist/components/charts/sparkline/sparkline.js +299 -0
- package/dist/components/charts/stacked_column/stacked_column.js +380 -0
- package/dist/components/dashboards/dashboard_layout/dashboard_layout.js +125 -0
- package/dist/components/dashboards/dashboard_layout/grid_layout/grid_layout.js +326 -0
- package/dist/components/dashboards/dashboard_layout/validators.js +14 -0
- package/dist/components/dashboards/dashboard_panel/dashboard_panel.js +236 -0
- package/dist/components/dashboards/mock_data.js +49 -0
- package/dist/components/experimental/experiment_badge/constants.js +4 -0
- package/dist/components/experimental/experiment_badge/experiment_badge.js +102 -0
- package/dist/components/extended/multi_step_form_template/multi_step_form_template.js +87 -0
- package/dist/components/index.js +107 -0
- package/dist/components/mixins/button_mixin.js +11 -0
- package/dist/components/mixins/safe_link_mixin.js +30 -0
- package/dist/components/mixins/tooltip_mixin.js +21 -0
- package/dist/components/regions/dashboard_skeleton/dashboard_skeleton.js +53 -0
- package/dist/components/regions/empty_state/empty_state.js +181 -0
- package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +64 -0
- package/dist/components/shared_components/clipboard_button/clipboard_button.js +100 -0
- package/dist/components/shared_components/close_button/close_button.js +55 -0
- package/dist/components/utilities/animated_number/animated_number.js +131 -0
- package/dist/components/utilities/friendly_wrap/friendly_wrap.js +75 -0
- package/dist/components/utilities/intersection_observer/intersection_observer.js +88 -0
- package/dist/components/utilities/intersperse/intersperse.js +104 -0
- package/dist/components/utilities/sprintf/sprintf.js +171 -0
- package/dist/components/utilities/truncate/constants.js +8 -0
- package/dist/components/utilities/truncate/truncate.js +154 -0
- package/dist/components/utilities/truncate_text/constants.js +7 -0
- package/dist/components/utilities/truncate_text/truncate_text.js +146 -0
- package/dist/config.js +53 -0
- package/dist/directives/hover_load/hover_load.js +45 -0
- package/dist/directives/index.js +8 -0
- package/dist/directives/modal.js +1 -0
- package/dist/directives/outside/outside.js +149 -0
- package/dist/directives/resize_observer/resize_observer.js +58 -0
- package/dist/directives/safe_html/constants.js +6 -0
- package/dist/directives/safe_html/safe_html.js +39 -0
- package/dist/directives/safe_link/mock_data.js +10 -0
- package/dist/directives/safe_link/safe_link.js +67 -0
- package/dist/directives/tooltip/container.js +7 -0
- package/dist/directives/tooltip/tooltip.js +18 -0
- package/dist/index.css +7 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +2 -0
- package/dist/tailwind.css +2 -0
- package/dist/tailwind.css.map +1 -0
- package/dist/tokens/build/js/tokens.dark.js +1410 -0
- package/dist/tokens/build/js/tokens.js +1410 -0
- package/dist/tokens/common_story_options.js +29 -0
- package/dist/tokens/tokens_story.js +76 -0
- package/dist/utils/breakpoints.js +20 -0
- package/dist/utils/charts/config.js +616 -0
- package/dist/utils/charts/constants.js +69 -0
- package/dist/utils/charts/mock_data.js +191 -0
- package/dist/utils/charts/story_config.js +24 -0
- package/dist/utils/charts/theme.js +200 -0
- package/dist/utils/charts/utils.js +54 -0
- package/dist/utils/constants.js +331 -0
- package/dist/utils/data_utils.js +19 -0
- package/dist/utils/datetime_utility.js +61 -0
- package/dist/utils/equality_utils.js +84 -0
- package/dist/utils/form_options_utils.js +46 -0
- package/dist/utils/i18n.js +65 -0
- package/dist/utils/is_slot_empty.js +34 -0
- package/dist/utils/number_utils.js +132 -0
- package/dist/utils/play_utils.js +11 -0
- package/dist/utils/set_utils.js +25 -0
- package/dist/utils/stories_constants.js +29 -0
- package/dist/utils/stories_utils.js +62 -0
- package/dist/utils/story_decorators/container.js +19 -0
- package/dist/utils/string_utils.js +69 -0
- package/dist/utils/svgs/svg_paths.js +7 -0
- package/dist/utils/test_utils.js +33 -0
- package/dist/utils/url_utils.js +56 -0
- package/dist/utils/use_fake_date.js +29 -0
- package/dist/utils/use_mock_intersection_observer.js +105 -0
- package/dist/utils/utils.js +205 -0
- package/dist/utils/vue_utils.js +57 -0
- package/dist/utils.js +5 -0
- package/dist/vendor/bootstrap-vue/src/bv-config.js +8 -0
- package/dist/vendor/bootstrap-vue/src/components/button/button-close.js +81 -0
- package/dist/vendor/bootstrap-vue/src/components/button/button.js +204 -0
- package/dist/vendor/bootstrap-vue/src/components/button/index.js +2 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +44 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +59 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +98 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +63 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +108 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +97 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +60 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +270 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/index.js +8 -0
- package/dist/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +80 -0
- package/dist/vendor/bootstrap-vue/src/components/form/form-text.js +55 -0
- package/dist/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +80 -0
- package/dist/vendor/bootstrap-vue/src/components/form/form.js +56 -0
- package/dist/vendor/bootstrap-vue/src/components/form/index.js +4 -0
- package/dist/vendor/bootstrap-vue/src/components/form-group/form-group.js +347 -0
- package/dist/vendor/bootstrap-vue/src/components/form-group/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +56 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +47 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +154 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +63 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/index.js +3 -0
- package/dist/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +236 -0
- package/dist/vendor/bootstrap-vue/src/components/form-textarea/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/layout/col.js +155 -0
- package/dist/vendor/bootstrap-vue/src/components/layout/form-row.js +34 -0
- package/dist/vendor/bootstrap-vue/src/components/layout/index.js +2 -0
- package/dist/vendor/bootstrap-vue/src/components/link/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/link/link.js +283 -0
- package/dist/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.js +21 -0
- package/dist/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +212 -0
- package/dist/vendor/bootstrap-vue/src/components/modal/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +1059 -0
- package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +55 -0
- package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover.js +31 -0
- package/dist/vendor/bootstrap-vue/src/components/popover/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/popover/popover.js +64 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/constants.js +22 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +64 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/filter-event.js +40 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +43 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +86 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +57 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +32 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +101 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +292 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +169 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +51 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +210 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +227 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +328 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +42 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +241 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +349 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +247 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +69 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +233 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +42 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.js +86 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +31 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/stringify-record-values.js +11 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/text-selection-active.js +14 -0
- package/dist/vendor/bootstrap-vue/src/components/table/index.js +9 -0
- package/dist/vendor/bootstrap-vue/src/components/table/table-lite.js +51 -0
- package/dist/vendor/bootstrap-vue/src/components/table/table-simple.js +44 -0
- package/dist/vendor/bootstrap-vue/src/components/table/table.js +67 -0
- package/dist/vendor/bootstrap-vue/src/components/table/tbody.js +116 -0
- package/dist/vendor/bootstrap-vue/src/components/table/td.js +204 -0
- package/dist/vendor/bootstrap-vue/src/components/table/tfoot.js +96 -0
- package/dist/vendor/bootstrap-vue/src/components/table/th.js +26 -0
- package/dist/vendor/bootstrap-vue/src/components/table/thead.js +99 -0
- package/dist/vendor/bootstrap-vue/src/components/table/tr.js +121 -0
- package/dist/vendor/bootstrap-vue/src/components/tabs/index.js +2 -0
- package/dist/vendor/bootstrap-vue/src/components/tabs/tab.js +238 -0
- package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +690 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +278 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +125 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +932 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +337 -0
- package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +118 -0
- package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +220 -0
- package/dist/vendor/bootstrap-vue/src/constants/components.js +55 -0
- package/dist/vendor/bootstrap-vue/src/constants/config.js +11 -0
- package/dist/vendor/bootstrap-vue/src/constants/env.js +36 -0
- package/dist/vendor/bootstrap-vue/src/constants/events.js +56 -0
- package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +11 -0
- package/dist/vendor/bootstrap-vue/src/constants/popper.js +10 -0
- package/dist/vendor/bootstrap-vue/src/constants/props.js +24 -0
- package/dist/vendor/bootstrap-vue/src/constants/regex.js +35 -0
- package/dist/vendor/bootstrap-vue/src/constants/safe-types.js +15 -0
- package/dist/vendor/bootstrap-vue/src/constants/slots.js +36 -0
- package/dist/vendor/bootstrap-vue/src/directives/modal/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/directives/modal/modal.js +112 -0
- package/dist/vendor/bootstrap-vue/src/directives/tooltip/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +267 -0
- package/dist/vendor/bootstrap-vue/src/directives/visible/index.js +1 -0
- package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +187 -0
- package/dist/vendor/bootstrap-vue/src/mixins/attrs.js +5 -0
- package/dist/vendor/bootstrap-vue/src/mixins/click-out.js +54 -0
- package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +470 -0
- package/dist/vendor/bootstrap-vue/src/mixins/focus-in.js +46 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-control.js +73 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-custom.js +26 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-options.js +91 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-selection.js +62 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-size.js +26 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-state.js +50 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +293 -0
- package/dist/vendor/bootstrap-vue/src/mixins/form-validity.js +50 -0
- package/dist/vendor/bootstrap-vue/src/mixins/has-listener.js +29 -0
- package/dist/vendor/bootstrap-vue/src/mixins/id.js +57 -0
- package/dist/vendor/bootstrap-vue/src/mixins/listen-on-document.js +62 -0
- package/dist/vendor/bootstrap-vue/src/mixins/listen-on-root.js +120 -0
- package/dist/vendor/bootstrap-vue/src/mixins/listen-on-window.js +62 -0
- package/dist/vendor/bootstrap-vue/src/mixins/listeners.js +25 -0
- package/dist/vendor/bootstrap-vue/src/mixins/model.js +10 -0
- package/dist/vendor/bootstrap-vue/src/mixins/normalize-slot.js +30 -0
- package/dist/vendor/bootstrap-vue/src/mixins/scoped-style.js +18 -0
- package/dist/vendor/bootstrap-vue/src/mixins/use-parent.js +14 -0
- package/dist/vendor/bootstrap-vue/src/utils/array.js +27 -0
- package/dist/vendor/bootstrap-vue/src/utils/bv-event.class.js +60 -0
- package/dist/vendor/bootstrap-vue/src/utils/cache.js +60 -0
- package/dist/vendor/bootstrap-vue/src/utils/clone-deep.js +18 -0
- package/dist/vendor/bootstrap-vue/src/utils/config-set.js +86 -0
- package/dist/vendor/bootstrap-vue/src/utils/config.js +71 -0
- package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +133 -0
- package/dist/vendor/bootstrap-vue/src/utils/css-escape.js +70 -0
- package/dist/vendor/bootstrap-vue/src/utils/dom.js +298 -0
- package/dist/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +28 -0
- package/dist/vendor/bootstrap-vue/src/utils/env.js +16 -0
- package/dist/vendor/bootstrap-vue/src/utils/events.js +78 -0
- package/dist/vendor/bootstrap-vue/src/utils/get-event-root.js +5 -0
- package/dist/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +3 -0
- package/dist/vendor/bootstrap-vue/src/utils/get-scope-id.js +9 -0
- package/dist/vendor/bootstrap-vue/src/utils/get.js +63 -0
- package/dist/vendor/bootstrap-vue/src/utils/html.js +16 -0
- package/dist/vendor/bootstrap-vue/src/utils/identity.js +3 -0
- package/dist/vendor/bootstrap-vue/src/utils/inspect.js +35 -0
- package/dist/vendor/bootstrap-vue/src/utils/locale.js +18 -0
- package/dist/vendor/bootstrap-vue/src/utils/loose-equal.js +59 -0
- package/dist/vendor/bootstrap-vue/src/utils/loose-index-of.js +13 -0
- package/dist/vendor/bootstrap-vue/src/utils/math.js +9 -0
- package/dist/vendor/bootstrap-vue/src/utils/memoize.js +14 -0
- package/dist/vendor/bootstrap-vue/src/utils/model.js +33 -0
- package/dist/vendor/bootstrap-vue/src/utils/noop.js +3 -0
- package/dist/vendor/bootstrap-vue/src/utils/normalize-slot.js +51 -0
- package/dist/vendor/bootstrap-vue/src/utils/number.js +23 -0
- package/dist/vendor/bootstrap-vue/src/utils/object.js +72 -0
- package/dist/vendor/bootstrap-vue/src/utils/observe-dom.js +76 -0
- package/dist/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +22 -0
- package/dist/vendor/bootstrap-vue/src/utils/plugins.js +124 -0
- package/dist/vendor/bootstrap-vue/src/utils/props.js +67 -0
- package/dist/vendor/bootstrap-vue/src/utils/router.js +150 -0
- package/dist/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +14 -0
- package/dist/vendor/bootstrap-vue/src/utils/stable-sort.js +28 -0
- package/dist/vendor/bootstrap-vue/src/utils/string.js +47 -0
- package/dist/vendor/bootstrap-vue/src/utils/stringify-object-values.js +31 -0
- package/dist/vendor/bootstrap-vue/src/utils/warn.js +45 -0
- package/dist/vendor/bootstrap-vue/src/vue.js +55 -0
- package/package.json +4 -3
- package/src/components/base/link/link.vue +2 -2
- package/src/utils/url_utils.js +66 -0
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +5 -2
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +16 -4
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +31 -8
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +15 -4
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +32 -8
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +35 -8
- package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +35 -8
- package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +4 -2
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +9 -3
- package/src/vendor/bootstrap-vue/src/components/form-select/form-select.js +16 -9
- package/src/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +10 -3
- package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +26 -7
- package/src/vendor/bootstrap-vue/src/components/layout/col.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/modal/modal.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/popover/popover.js +23 -7
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +5 -2
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +10 -3
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +25 -6
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +20 -5
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +11 -4
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +27 -7
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +21 -7
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +72 -18
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +6 -3
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +72 -17
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +18 -6
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +7 -3
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +27 -7
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +21 -6
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +36 -13
- package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +10 -3
- package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -9
- package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +20 -5
- package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +22 -6
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.js +1 -2
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.js +1 -2
- package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.js +1 -2
- package/src/vendor/bootstrap-vue/src/utils/array.js +0 -1
- package/src/vendor/bootstrap-vue/src/utils/locale.js +1 -2
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { extend } from '../../../vue';
|
|
2
|
+
import { NAME_TABLE } from '../../../constants/components';
|
|
3
|
+
import { EVENT_NAME_FILTERED } from '../../../constants/events';
|
|
4
|
+
import { PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_REG_EXP, PROP_TYPE_NUMBER, PROP_TYPE_FUNCTION } from '../../../constants/props';
|
|
5
|
+
import { RX_SPACES, RX_DIGITS } from '../../../constants/regex';
|
|
6
|
+
import { concat } from '../../../utils/array';
|
|
7
|
+
import { cloneDeep } from '../../../utils/clone-deep';
|
|
8
|
+
import { identity } from '../../../utils/identity';
|
|
9
|
+
import { isFunction, isString, isRegExp } from '../../../utils/inspect';
|
|
10
|
+
import { looseEqual } from '../../../utils/loose-equal';
|
|
11
|
+
import { toInteger } from '../../../utils/number';
|
|
12
|
+
import { escapeRegExp } from '../../../utils/string';
|
|
13
|
+
import { warn } from '../../../utils/warn';
|
|
14
|
+
import { stringifyRecordValues } from './stringify-record-values';
|
|
15
|
+
|
|
16
|
+
// --- Constants ---
|
|
17
|
+
|
|
18
|
+
const DEBOUNCE_DEPRECATED_MSG = 'Prop "filter-debounce" is deprecated. Use the debounce feature of "<b-form-input>" instead.';
|
|
19
|
+
|
|
20
|
+
// --- Props ---
|
|
21
|
+
|
|
22
|
+
const props = {
|
|
23
|
+
filter: {
|
|
24
|
+
type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_REG_EXP],
|
|
25
|
+
required: false,
|
|
26
|
+
default: undefined
|
|
27
|
+
},
|
|
28
|
+
filterDebounce: {
|
|
29
|
+
type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
|
|
30
|
+
required: false,
|
|
31
|
+
default: 0,
|
|
32
|
+
validator: value => RX_DIGITS.test(String(value))
|
|
33
|
+
},
|
|
34
|
+
filterFunction: {
|
|
35
|
+
type: PROP_TYPE_FUNCTION,
|
|
36
|
+
required: false,
|
|
37
|
+
default: undefined
|
|
38
|
+
},
|
|
39
|
+
filterIgnoredFields: {
|
|
40
|
+
type: PROP_TYPE_ARRAY,
|
|
41
|
+
required: false,
|
|
42
|
+
default: () => []
|
|
43
|
+
},
|
|
44
|
+
filterIncludedFields: {
|
|
45
|
+
type: PROP_TYPE_ARRAY,
|
|
46
|
+
required: false,
|
|
47
|
+
default: () => []
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// --- Mixin ---
|
|
52
|
+
|
|
53
|
+
// @vue/component
|
|
54
|
+
const filteringMixin = extend({
|
|
55
|
+
props,
|
|
56
|
+
data() {
|
|
57
|
+
return {
|
|
58
|
+
// Flag for displaying which empty slot to show and some event triggering
|
|
59
|
+
isFiltered: false,
|
|
60
|
+
// Where we store the copy of the filter criteria after debouncing
|
|
61
|
+
// We pre-set it with the sanitized filter value
|
|
62
|
+
localFilter: this.filterSanitize(this.filter)
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
computed: {
|
|
66
|
+
computedFilterIgnored() {
|
|
67
|
+
return concat(this.filterIgnoredFields || []).filter(identity);
|
|
68
|
+
},
|
|
69
|
+
computedFilterIncluded() {
|
|
70
|
+
return concat(this.filterIncludedFields || []).filter(identity);
|
|
71
|
+
},
|
|
72
|
+
computedFilterDebounce() {
|
|
73
|
+
const ms = toInteger(this.filterDebounce, 0);
|
|
74
|
+
/* istanbul ignore next */
|
|
75
|
+
if (ms > 0) {
|
|
76
|
+
warn(DEBOUNCE_DEPRECATED_MSG, NAME_TABLE);
|
|
77
|
+
}
|
|
78
|
+
return ms;
|
|
79
|
+
},
|
|
80
|
+
localFiltering() {
|
|
81
|
+
return this.hasProvider ? !!this.noProviderFiltering : true;
|
|
82
|
+
},
|
|
83
|
+
// For watching changes to `filteredItems` vs `localItems`
|
|
84
|
+
filteredCheck() {
|
|
85
|
+
const {
|
|
86
|
+
filteredItems,
|
|
87
|
+
localItems,
|
|
88
|
+
localFilter
|
|
89
|
+
} = this;
|
|
90
|
+
return {
|
|
91
|
+
filteredItems,
|
|
92
|
+
localItems,
|
|
93
|
+
localFilter
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
// Sanitized/normalize filter-function prop
|
|
97
|
+
localFilterFn() {
|
|
98
|
+
// Return `null` to signal to use internal filter function
|
|
99
|
+
const {
|
|
100
|
+
filterFunction
|
|
101
|
+
} = this;
|
|
102
|
+
// `filterFunction` is an optional Function prop with no default
|
|
103
|
+
return isFunction(filterFunction) ? filterFunction : null;
|
|
104
|
+
},
|
|
105
|
+
// Returns the records in `localItems` that match the filter criteria
|
|
106
|
+
// Returns the original `localItems` array if not sorting
|
|
107
|
+
filteredItems() {
|
|
108
|
+
// Note the criteria is debounced and sanitized
|
|
109
|
+
const {
|
|
110
|
+
localItems: items,
|
|
111
|
+
localFilter: criteria
|
|
112
|
+
} = this;
|
|
113
|
+
|
|
114
|
+
// Resolve the filtering function, when requested
|
|
115
|
+
// We prefer the provided filtering function and fallback to the internal one
|
|
116
|
+
// When no filtering criteria is specified the filtering factories will return `null`
|
|
117
|
+
const filterFn = this.localFiltering ? this.filterFnFactory(this.localFilterFn, criteria) || this.defaultFilterFnFactory(criteria) : null;
|
|
118
|
+
|
|
119
|
+
// We only do local filtering when requested and there are records to filter
|
|
120
|
+
return filterFn && items.length > 0 ? items.filter(filterFn) : items;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
watch: {
|
|
124
|
+
// Watch for debounce being set to 0
|
|
125
|
+
computedFilterDebounce(newValue) {
|
|
126
|
+
if (!newValue && this.$_filterTimer) {
|
|
127
|
+
this.clearFilterTimer();
|
|
128
|
+
this.localFilter = this.filterSanitize(this.filter);
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
// Watch for changes to the filter criteria, and debounce if necessary
|
|
132
|
+
filter: {
|
|
133
|
+
// We need a deep watcher in case the user passes
|
|
134
|
+
// an object when using `filter-function`
|
|
135
|
+
deep: true,
|
|
136
|
+
handler(newCriteria) {
|
|
137
|
+
const timeout = this.computedFilterDebounce;
|
|
138
|
+
this.clearFilterTimer();
|
|
139
|
+
if (timeout && timeout > 0) {
|
|
140
|
+
// If we have a debounce time, delay the update of `localFilter`
|
|
141
|
+
this.$_filterTimer = setTimeout(() => {
|
|
142
|
+
this.localFilter = this.filterSanitize(newCriteria);
|
|
143
|
+
}, timeout);
|
|
144
|
+
} else {
|
|
145
|
+
// Otherwise, immediately update `localFilter` with `newFilter` value
|
|
146
|
+
this.localFilter = this.filterSanitize(newCriteria);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
// Watch for changes to the filter criteria and filtered items vs `localItems`
|
|
151
|
+
// Set visual state and emit events as required
|
|
152
|
+
filteredCheck(_ref) {
|
|
153
|
+
let {
|
|
154
|
+
filteredItems,
|
|
155
|
+
localFilter
|
|
156
|
+
} = _ref;
|
|
157
|
+
// Determine if the dataset is filtered or not
|
|
158
|
+
let isFiltered = false;
|
|
159
|
+
if (!localFilter) {
|
|
160
|
+
// If filter criteria is falsey
|
|
161
|
+
isFiltered = false;
|
|
162
|
+
} else if (looseEqual(localFilter, []) || looseEqual(localFilter, {})) {
|
|
163
|
+
// If filter criteria is an empty array or object
|
|
164
|
+
isFiltered = false;
|
|
165
|
+
} else if (localFilter) {
|
|
166
|
+
// If filter criteria is truthy
|
|
167
|
+
isFiltered = true;
|
|
168
|
+
}
|
|
169
|
+
if (isFiltered) {
|
|
170
|
+
this.$emit(EVENT_NAME_FILTERED, filteredItems, filteredItems.length);
|
|
171
|
+
// Clear selection on filter change if selectable (defined in mixin-selectable.js)
|
|
172
|
+
if (this.hasSelectableRowClick) {
|
|
173
|
+
this.clearSelected();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
this.isFiltered = isFiltered;
|
|
177
|
+
},
|
|
178
|
+
isFiltered(newValue, oldValue) {
|
|
179
|
+
if (newValue === false && oldValue === true) {
|
|
180
|
+
// We need to emit a filtered event if `isFiltered` transitions from `true` to
|
|
181
|
+
// `false` so that users can update their pagination controls
|
|
182
|
+
const {
|
|
183
|
+
localItems
|
|
184
|
+
} = this;
|
|
185
|
+
this.$emit(EVENT_NAME_FILTERED, localItems, localItems.length);
|
|
186
|
+
// Clear selection on filter change if selectable (defined in mixin-selectable.js)
|
|
187
|
+
if (this.hasSelectableRowClick) {
|
|
188
|
+
this.clearSelected();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
created() {
|
|
194
|
+
// Create private non-reactive props
|
|
195
|
+
this.$_filterTimer = null;
|
|
196
|
+
// If filter is "pre-set", set the criteria
|
|
197
|
+
// This will trigger any watchers/dependents
|
|
198
|
+
// this.localFilter = this.filterSanitize(this.filter)
|
|
199
|
+
// Set the initial filtered state in a `$nextTick()` so that
|
|
200
|
+
// we trigger a filtered event if needed
|
|
201
|
+
this.$nextTick(() => {
|
|
202
|
+
this.isFiltered = Boolean(this.localFilter);
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
beforeDestroy() {
|
|
206
|
+
this.clearFilterTimer();
|
|
207
|
+
},
|
|
208
|
+
methods: {
|
|
209
|
+
clearFilterTimer() {
|
|
210
|
+
clearTimeout(this.$_filterTimer);
|
|
211
|
+
this.$_filterTimer = null;
|
|
212
|
+
},
|
|
213
|
+
filterSanitize(criteria) {
|
|
214
|
+
// Sanitizes filter criteria based on internal or external filtering
|
|
215
|
+
if (this.localFiltering && !this.localFilterFn && !(isString(criteria) || isRegExp(criteria))) {
|
|
216
|
+
// If using internal filter function, which only accepts string or RegExp,
|
|
217
|
+
// return '' to signify no filter
|
|
218
|
+
return '';
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Could be a string, object or array, as needed by external filter function
|
|
222
|
+
// We use `cloneDeep` to ensure we have a new copy of an object or array
|
|
223
|
+
// without Vue's reactive observers
|
|
224
|
+
return cloneDeep(criteria);
|
|
225
|
+
},
|
|
226
|
+
// Filter Function factories
|
|
227
|
+
filterFnFactory(filterFn, criteria) {
|
|
228
|
+
// Wrapper factory for external filter functions
|
|
229
|
+
// Wrap the provided filter-function and return a new function
|
|
230
|
+
// Returns `null` if no filter-function defined or if criteria is falsey
|
|
231
|
+
// Rather than directly grabbing `this.computedLocalFilterFn` or `this.filterFunction`
|
|
232
|
+
// we have it passed, so that the caller computed prop will be reactive to changes
|
|
233
|
+
// in the original filter-function (as this routine is a method)
|
|
234
|
+
if (!filterFn || !isFunction(filterFn) || !criteria || looseEqual(criteria, []) || looseEqual(criteria, {})) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Build the wrapped filter test function, passing the criteria to the provided function
|
|
239
|
+
const fn = item => {
|
|
240
|
+
// Generated function returns true if the criteria matches part
|
|
241
|
+
// of the serialized data, otherwise false
|
|
242
|
+
return filterFn(item, criteria);
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
// Return the wrapped function
|
|
246
|
+
return fn;
|
|
247
|
+
},
|
|
248
|
+
defaultFilterFnFactory(criteria) {
|
|
249
|
+
// Generates the default filter function, using the given filter criteria
|
|
250
|
+
// Returns `null` if no criteria or criteria format not supported
|
|
251
|
+
if (!criteria || !(isString(criteria) || isRegExp(criteria))) {
|
|
252
|
+
// Built in filter can only support strings or RegExp criteria (at the moment)
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Build the RegExp needed for filtering
|
|
257
|
+
let regExp = criteria;
|
|
258
|
+
if (isString(regExp)) {
|
|
259
|
+
// Escape special RegExp characters in the string and convert contiguous
|
|
260
|
+
// whitespace to \s+ matches
|
|
261
|
+
const pattern = escapeRegExp(criteria).replace(RX_SPACES, '\\s+');
|
|
262
|
+
// Build the RegExp (no need for global flag, as we only need
|
|
263
|
+
// to find the value once in the string)
|
|
264
|
+
regExp = new RegExp(`.*${pattern}.*`, 'i');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Generate the wrapped filter test function to use
|
|
268
|
+
const fn = item => {
|
|
269
|
+
// This searches all row values (and sub property values) in the entire (excluding
|
|
270
|
+
// special `_` prefixed keys), because we convert the record to a space-separated
|
|
271
|
+
// string containing all the value properties (recursively), even ones that are
|
|
272
|
+
// not visible (not specified in this.fields)
|
|
273
|
+
// Users can ignore filtering on specific fields, or on only certain fields,
|
|
274
|
+
// and can optionall specify searching results of fields with formatter
|
|
275
|
+
//
|
|
276
|
+
// TODO: Enable searching on scoped slots (optional, as it will be SLOW)
|
|
277
|
+
//
|
|
278
|
+
// Generated function returns true if the criteria matches part of
|
|
279
|
+
// the serialized data, otherwise false
|
|
280
|
+
//
|
|
281
|
+
// We set `lastIndex = 0` on the `RegExp` in case someone specifies the `/g` global flag
|
|
282
|
+
regExp.lastIndex = 0;
|
|
283
|
+
return regExp.test(stringifyRecordValues(item, this.computedFilterIgnored, this.computedFilterIncluded, this.computedFieldsObj));
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
// Return the generated function
|
|
287
|
+
return fn;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
export { filteringMixin, props };
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { extend } from '../../../vue';
|
|
2
|
+
import { EVENT_NAME_CONTEXT_CHANGED } from '../../../constants/events';
|
|
3
|
+
import { PROP_TYPE_ARRAY, PROP_TYPE_STRING } from '../../../constants/props';
|
|
4
|
+
import { useParentMixin } from '../../../mixins/use-parent';
|
|
5
|
+
import { isArray, isString, isFunction } from '../../../utils/inspect';
|
|
6
|
+
import { looseEqual } from '../../../utils/loose-equal';
|
|
7
|
+
import { mathMax } from '../../../utils/math';
|
|
8
|
+
import { makeModelMixin } from '../../../utils/model';
|
|
9
|
+
import { toInteger } from '../../../utils/number';
|
|
10
|
+
import { sortKeys, clone } from '../../../utils/object';
|
|
11
|
+
import { safeVueInstance } from '../../../utils/safe-vue-instance';
|
|
12
|
+
import { normalizeFields } from './normalize-fields';
|
|
13
|
+
|
|
14
|
+
// --- Constants ---
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
mixin: modelMixin,
|
|
18
|
+
props: modelProps,
|
|
19
|
+
prop: MODEL_PROP_NAME,
|
|
20
|
+
event: MODEL_EVENT_NAME
|
|
21
|
+
} = makeModelMixin('value', {
|
|
22
|
+
type: PROP_TYPE_ARRAY,
|
|
23
|
+
defaultValue: []
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// --- Props ---
|
|
27
|
+
|
|
28
|
+
const props = sortKeys({
|
|
29
|
+
...modelProps,
|
|
30
|
+
fields: {
|
|
31
|
+
type: PROP_TYPE_ARRAY,
|
|
32
|
+
required: false,
|
|
33
|
+
default: null
|
|
34
|
+
},
|
|
35
|
+
// Provider mixin adds in `Function` type
|
|
36
|
+
items: {
|
|
37
|
+
type: PROP_TYPE_ARRAY,
|
|
38
|
+
required: false,
|
|
39
|
+
default: () => []
|
|
40
|
+
},
|
|
41
|
+
// Primary key for record
|
|
42
|
+
// If provided the value in each row must be unique!
|
|
43
|
+
primaryKey: {
|
|
44
|
+
type: PROP_TYPE_STRING,
|
|
45
|
+
required: false,
|
|
46
|
+
default: undefined
|
|
47
|
+
},
|
|
48
|
+
// `v-model` for retrieving the current displayed rows
|
|
49
|
+
[MODEL_PROP_NAME]: {
|
|
50
|
+
type: PROP_TYPE_ARRAY,
|
|
51
|
+
required: false,
|
|
52
|
+
default: () => []
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// --- Mixin ---
|
|
57
|
+
|
|
58
|
+
// @vue/component
|
|
59
|
+
const itemsMixin = extend({
|
|
60
|
+
mixins: [modelMixin, useParentMixin],
|
|
61
|
+
props,
|
|
62
|
+
data() {
|
|
63
|
+
const {
|
|
64
|
+
items
|
|
65
|
+
} = this;
|
|
66
|
+
return {
|
|
67
|
+
// Our local copy of the items
|
|
68
|
+
// Must be an array
|
|
69
|
+
localItems: isArray(items) ? items.slice() : []
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
computed: {
|
|
73
|
+
computedFields() {
|
|
74
|
+
// We normalize fields into an array of objects
|
|
75
|
+
// `[ { key:..., label:..., ...}, {...}, ..., {..}]`
|
|
76
|
+
return normalizeFields(this.fields, this.localItems);
|
|
77
|
+
},
|
|
78
|
+
computedFieldsObj() {
|
|
79
|
+
// Fields as a simple lookup hash object
|
|
80
|
+
// Mainly for formatter lookup and use in `scopedSlots` for convenience
|
|
81
|
+
// If the field has a formatter, it normalizes formatter to a
|
|
82
|
+
// function ref or `undefined` if no formatter
|
|
83
|
+
const {
|
|
84
|
+
bvParent
|
|
85
|
+
} = this;
|
|
86
|
+
return this.computedFields.reduce((obj, f) => {
|
|
87
|
+
// We use object spread here so we don't mutate the original field object
|
|
88
|
+
obj[f.key] = clone(f);
|
|
89
|
+
if (f.formatter) {
|
|
90
|
+
// Normalize formatter to a function ref or `undefined`
|
|
91
|
+
let formatter = f.formatter;
|
|
92
|
+
if (isString(formatter) && isFunction(bvParent[formatter])) {
|
|
93
|
+
formatter = bvParent[formatter];
|
|
94
|
+
} else if (!isFunction(formatter)) {
|
|
95
|
+
/* istanbul ignore next */
|
|
96
|
+
formatter = undefined;
|
|
97
|
+
}
|
|
98
|
+
// Return formatter function or `undefined` if none
|
|
99
|
+
obj[f.key].formatter = formatter;
|
|
100
|
+
}
|
|
101
|
+
return obj;
|
|
102
|
+
}, {});
|
|
103
|
+
},
|
|
104
|
+
computedItems() {
|
|
105
|
+
const {
|
|
106
|
+
paginatedItems,
|
|
107
|
+
sortedItems,
|
|
108
|
+
filteredItems,
|
|
109
|
+
localItems
|
|
110
|
+
} = safeVueInstance(this);
|
|
111
|
+
// Fallback if various mixins not provided
|
|
112
|
+
return (paginatedItems || sortedItems || filteredItems || localItems || /* istanbul ignore next */
|
|
113
|
+
[]).slice();
|
|
114
|
+
},
|
|
115
|
+
context() {
|
|
116
|
+
const {
|
|
117
|
+
perPage,
|
|
118
|
+
currentPage
|
|
119
|
+
} = safeVueInstance(this);
|
|
120
|
+
// Current state of sorting, filtering and pagination props/values
|
|
121
|
+
return {
|
|
122
|
+
filter: this.localFilter,
|
|
123
|
+
sortBy: this.localSortBy,
|
|
124
|
+
sortDesc: this.localSortDesc,
|
|
125
|
+
perPage: mathMax(toInteger(perPage, 0), 0),
|
|
126
|
+
currentPage: mathMax(toInteger(currentPage, 0), 1),
|
|
127
|
+
apiUrl: this.apiUrl
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
watch: {
|
|
132
|
+
items(newValue) {
|
|
133
|
+
// Set `localItems`/`filteredItems` to a copy of the provided array
|
|
134
|
+
this.localItems = isArray(newValue) ? newValue.slice() : [];
|
|
135
|
+
},
|
|
136
|
+
// Watch for changes on `computedItems` and update the `v-model`
|
|
137
|
+
computedItems(newValue, oldValue) {
|
|
138
|
+
if (!looseEqual(newValue, oldValue)) {
|
|
139
|
+
this.$emit(MODEL_EVENT_NAME, newValue);
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
// Watch for context changes
|
|
143
|
+
context(newValue, oldValue) {
|
|
144
|
+
// Emit context information for external paging/filtering/sorting handling
|
|
145
|
+
if (!looseEqual(newValue, oldValue)) {
|
|
146
|
+
this.$emit(EVENT_NAME_CONTEXT_CHANGED, newValue);
|
|
147
|
+
// Clear selection on context change if selectable (defined in mixin-selectable.js)
|
|
148
|
+
if (this.hasSelectableRowClick) {
|
|
149
|
+
this.clearSelected();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
mounted() {
|
|
155
|
+
// Initially update the `v-model` of displayed items
|
|
156
|
+
this.$emit(MODEL_EVENT_NAME, this.computedItems);
|
|
157
|
+
},
|
|
158
|
+
methods: {
|
|
159
|
+
// Method to get the formatter method for a given field key
|
|
160
|
+
getFieldFormatter(key) {
|
|
161
|
+
const field = this.computedFieldsObj[key];
|
|
162
|
+
// `this.computedFieldsObj` has pre-normalized the formatter to a
|
|
163
|
+
// function ref if present, otherwise `undefined`
|
|
164
|
+
return field ? field.formatter : undefined;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
export { MODEL_EVENT_NAME, MODEL_PROP_NAME, itemsMixin, props };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { extend } from '../../../vue';
|
|
2
|
+
import { PROP_TYPE_NUMBER, PROP_TYPE_STRING } from '../../../constants/props';
|
|
3
|
+
import { mathMax } from '../../../utils/math';
|
|
4
|
+
import { toInteger } from '../../../utils/number';
|
|
5
|
+
import { safeVueInstance } from '../../../utils/safe-vue-instance';
|
|
6
|
+
|
|
7
|
+
// --- Props ---
|
|
8
|
+
|
|
9
|
+
const props = {
|
|
10
|
+
currentPage: {
|
|
11
|
+
type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
|
|
12
|
+
required: false,
|
|
13
|
+
default: 1
|
|
14
|
+
},
|
|
15
|
+
perPage: {
|
|
16
|
+
type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
|
|
17
|
+
required: false,
|
|
18
|
+
default: 0
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// --- Mixin ---
|
|
23
|
+
|
|
24
|
+
// @vue/component
|
|
25
|
+
const paginationMixin = extend({
|
|
26
|
+
props,
|
|
27
|
+
computed: {
|
|
28
|
+
localPaging() {
|
|
29
|
+
return this.hasProvider ? !!this.noProviderPaging : true;
|
|
30
|
+
},
|
|
31
|
+
paginatedItems() {
|
|
32
|
+
const {
|
|
33
|
+
sortedItems,
|
|
34
|
+
filteredItems,
|
|
35
|
+
localItems
|
|
36
|
+
} = safeVueInstance(this);
|
|
37
|
+
let items = sortedItems || filteredItems || localItems || [];
|
|
38
|
+
const currentPage = mathMax(toInteger(this.currentPage, 1), 1);
|
|
39
|
+
const perPage = mathMax(toInteger(this.perPage, 0), 0);
|
|
40
|
+
// Apply local pagination
|
|
41
|
+
if (this.localPaging && perPage) {
|
|
42
|
+
// Grab the current page of data (which may be past filtered items limit)
|
|
43
|
+
items = items.slice((currentPage - 1) * perPage, currentPage * perPage);
|
|
44
|
+
}
|
|
45
|
+
// Return the items to display in the table
|
|
46
|
+
return items;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export { paginationMixin, props };
|