@gitlab/ui 132.0.0 → 132.0.2
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/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 +41 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +52 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +75 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +52 -0
- package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +85 -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 +53 -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 +53 -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 +54 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +41 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +143 -0
- package/dist/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +56 -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 +217 -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 +49 -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 +83 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +50 -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 +82 -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 +154 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +44 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +191 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +213 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +274 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +39 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +186 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +338 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +243 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +50 -0
- package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +218 -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 +251 -0
- package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +118 -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 +103 -0
- package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +205 -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 +6 -5
- package/src/components/base/link/link.vue +5 -8
- package/src/utils/constants.js +0 -3
- package/src/utils/vue_utils.js +56 -0
- package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/layout/col.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/modal/modal.js +219 -52
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +30 -11
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +3 -3
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +1 -2
- package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +4 -4
- package/src/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +2 -3
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +2 -2
- package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -9
- package/src/vendor/bootstrap-vue/src/constants/config.js +2 -2
- package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +1 -1
- 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,205 @@
|
|
|
1
|
+
import { isVisible } from '../vendor/bootstrap-vue/src/utils/dom';
|
|
2
|
+
export { isVisible } from '../vendor/bootstrap-vue/src/utils/dom';
|
|
3
|
+
import { COMMA, labelColorOptions, CONTRAST_LEVELS, focusableTags } from './constants';
|
|
4
|
+
|
|
5
|
+
function debounceByAnimationFrame(fn) {
|
|
6
|
+
let requestId;
|
|
7
|
+
return function debounced() {
|
|
8
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
9
|
+
args[_key] = arguments[_key];
|
|
10
|
+
}
|
|
11
|
+
if (requestId) {
|
|
12
|
+
window.cancelAnimationFrame(requestId);
|
|
13
|
+
}
|
|
14
|
+
requestId = window.requestAnimationFrame(() => fn.apply(this, args));
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function throttle(fn) {
|
|
18
|
+
let frameId = null;
|
|
19
|
+
return function () {
|
|
20
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
21
|
+
args[_key2] = arguments[_key2];
|
|
22
|
+
}
|
|
23
|
+
if (frameId) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
frameId = window.requestAnimationFrame(() => {
|
|
27
|
+
fn(...args);
|
|
28
|
+
frameId = null;
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function rgbFromHex(hex) {
|
|
33
|
+
const cleanHex = hex.replace('#', '');
|
|
34
|
+
const rgb = cleanHex.length === 3 ? cleanHex.split('').map(val => val + val) : cleanHex.match(/[\da-f]{2}/gi);
|
|
35
|
+
const [r, g, b] = rgb.map(val => parseInt(val, 16));
|
|
36
|
+
return [r, g, b];
|
|
37
|
+
}
|
|
38
|
+
function rgbFromString(color, sub) {
|
|
39
|
+
const rgb = color.substring(sub, color.length - 1).split(COMMA);
|
|
40
|
+
const [r, g, b] = rgb.map(i => parseInt(i, 10));
|
|
41
|
+
return [r, g, b];
|
|
42
|
+
}
|
|
43
|
+
function hexToRgba(hex) {
|
|
44
|
+
let opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
45
|
+
const [r, g, b] = rgbFromHex(hex);
|
|
46
|
+
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
47
|
+
}
|
|
48
|
+
function toSrgb(value) {
|
|
49
|
+
const normalized = value / 255;
|
|
50
|
+
return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
|
|
51
|
+
}
|
|
52
|
+
function relativeLuminance(rgb) {
|
|
53
|
+
// WCAG 2.1 formula: https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
|
|
54
|
+
// -
|
|
55
|
+
// WCAG 3.0 will use APAC
|
|
56
|
+
// Using APAC would be the ultimate goal, but was dismissed by engineering as of now
|
|
57
|
+
// See https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/3418#note_1370107090
|
|
58
|
+
return 0.2126 * toSrgb(rgb[0]) + 0.7152 * toSrgb(rgb[1]) + 0.0722 * toSrgb(rgb[2]);
|
|
59
|
+
}
|
|
60
|
+
function colorFromBackground(backgroundColor) {
|
|
61
|
+
let contrastRatio = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2.4;
|
|
62
|
+
let color;
|
|
63
|
+
const lightColor = rgbFromHex('#FFFFFF');
|
|
64
|
+
const darkColor = rgbFromHex('#18171d');
|
|
65
|
+
if (backgroundColor.startsWith('#')) {
|
|
66
|
+
color = rgbFromHex(backgroundColor);
|
|
67
|
+
} else if (backgroundColor.startsWith('rgba(')) {
|
|
68
|
+
color = rgbFromString(backgroundColor, 5);
|
|
69
|
+
} else if (backgroundColor.startsWith('rgb(')) {
|
|
70
|
+
color = rgbFromString(backgroundColor, 4);
|
|
71
|
+
}
|
|
72
|
+
const luminance = relativeLuminance(color);
|
|
73
|
+
const lightLuminance = relativeLuminance(lightColor);
|
|
74
|
+
const darkLuminance = relativeLuminance(darkColor);
|
|
75
|
+
const contrastLight = (lightLuminance + 0.05) / (luminance + 0.05);
|
|
76
|
+
const contrastDark = (luminance + 0.05) / (darkLuminance + 0.05);
|
|
77
|
+
|
|
78
|
+
// Using a default threshold contrast of 2.4 instead of 3
|
|
79
|
+
// as this will solve weird color combinations in the mid tones
|
|
80
|
+
return contrastLight >= contrastRatio || contrastLight > contrastDark ? labelColorOptions.light : labelColorOptions.dark;
|
|
81
|
+
}
|
|
82
|
+
function getColorContrast(foreground, background) {
|
|
83
|
+
// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
|
|
84
|
+
const backgroundLuminance = relativeLuminance(rgbFromHex(background)) + 0.05;
|
|
85
|
+
const foregroundLuminance = relativeLuminance(rgbFromHex(foreground)) + 0.05;
|
|
86
|
+
let score = backgroundLuminance / foregroundLuminance;
|
|
87
|
+
if (foregroundLuminance > backgroundLuminance) {
|
|
88
|
+
score = 1 / score;
|
|
89
|
+
}
|
|
90
|
+
const level = CONTRAST_LEVELS.find(_ref => {
|
|
91
|
+
let {
|
|
92
|
+
min,
|
|
93
|
+
max
|
|
94
|
+
} = _ref;
|
|
95
|
+
return score >= min && score < max;
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
score: (Math.round(score * 10) / 10).toFixed(1),
|
|
99
|
+
level
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function uid() {
|
|
103
|
+
return Math.random().toString(36).substring(2);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Receives an element and validates that it can be focused
|
|
108
|
+
* @param { HTMLElement } The element we want to validate
|
|
109
|
+
* @return { boolean } Is the element focusable
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
function isElementFocusable(elt) {
|
|
113
|
+
if (!elt) return false;
|
|
114
|
+
const {
|
|
115
|
+
tagName
|
|
116
|
+
} = elt;
|
|
117
|
+
const isValidTag = focusableTags.includes(tagName);
|
|
118
|
+
const hasValidType = elt.getAttribute('type') !== 'hidden';
|
|
119
|
+
const isDisabled = elt.getAttribute('disabled') === '' || elt.getAttribute('disabled');
|
|
120
|
+
const hasValidZIndex = elt.getAttribute('z-index') !== '-1';
|
|
121
|
+
const isInvalidAnchorTag = tagName === 'A' && !elt.getAttribute('href');
|
|
122
|
+
return isValidTag && hasValidType && !isDisabled && hasValidZIndex && !isInvalidAnchorTag;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Receives an element and validates that it is reachable via sequential keyboard navigation
|
|
127
|
+
* @param { HTMLElement } The element to validate
|
|
128
|
+
* @return { boolean } Is the element focusable in a sequential tab order
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
function isElementTabbable(el) {
|
|
132
|
+
if (!el) return false;
|
|
133
|
+
const tabindex = parseInt(el.getAttribute('tabindex'), 10);
|
|
134
|
+
return tabindex > -1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Receives an array of HTML elements and focus the first one possible
|
|
139
|
+
* @param { Array.<HTMLElement> } An array of element to potentially focus
|
|
140
|
+
* @return { undefined }
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
function focusFirstFocusableElement(elts) {
|
|
144
|
+
const focusableElt = elts.find(el => isElementFocusable(el));
|
|
145
|
+
if (focusableElt) focusableElt.focus();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Returns true if the current environment is considered a development environment (it's not
|
|
150
|
+
* production or test).
|
|
151
|
+
*
|
|
152
|
+
* @returns {boolean}
|
|
153
|
+
*/
|
|
154
|
+
function isDev() {
|
|
155
|
+
return !['test', 'production'].includes(process.env.NODE_ENV);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Prints a warning message to the console in non-test and non-production environments.
|
|
160
|
+
* @param {string} message Message to print to the console.
|
|
161
|
+
* @param {Object} [context] Optional object with additional context.
|
|
162
|
+
* @param {string} [context.name] The name of the context of the message. Usually the component's name.
|
|
163
|
+
* @param {HTMLElement} [context.element] The element relevant to the message.
|
|
164
|
+
*/
|
|
165
|
+
function logWarning(message) {
|
|
166
|
+
let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
167
|
+
if (isDev()) {
|
|
168
|
+
const {
|
|
169
|
+
name,
|
|
170
|
+
element
|
|
171
|
+
} = context;
|
|
172
|
+
const formattedMessage = name ? `[${name}] ${message}` : message;
|
|
173
|
+
const args = element ? [formattedMessage, element] : [formattedMessage];
|
|
174
|
+
console.warn(...args); // eslint-disable-line no-console
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Stop default event handling and propagation
|
|
180
|
+
*/
|
|
181
|
+
function stopEvent(event) {
|
|
182
|
+
let {
|
|
183
|
+
preventDefault = true,
|
|
184
|
+
stopPropagation = true,
|
|
185
|
+
stopImmediatePropagation = false
|
|
186
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
187
|
+
if (preventDefault) {
|
|
188
|
+
event.preventDefault();
|
|
189
|
+
}
|
|
190
|
+
if (stopPropagation) {
|
|
191
|
+
event.stopPropagation();
|
|
192
|
+
}
|
|
193
|
+
if (stopImmediatePropagation) {
|
|
194
|
+
event.stopImmediatePropagation();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Return an Array of visible items
|
|
200
|
+
*/
|
|
201
|
+
function filterVisible(els) {
|
|
202
|
+
return (els || []).filter(el => isVisible(el));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export { colorFromBackground, debounceByAnimationFrame, filterVisible, focusFirstFocusableElement, getColorContrast, hexToRgba, isDev, isElementFocusable, isElementTabbable, logWarning, relativeLuminance, rgbFromHex, rgbFromString, stopEvent, throttle, toSrgb, uid };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import Vue from 'vue';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether the global Vue version is Vue 3 (or the Vue 3 compat build).
|
|
5
|
+
*
|
|
6
|
+
* Use this for module-level checks where no component instance is available,
|
|
7
|
+
* such as conditional test logic or static configuration.
|
|
8
|
+
*
|
|
9
|
+
* @type {boolean}
|
|
10
|
+
*/
|
|
11
|
+
const isGlobalVue3 = Boolean(Vue.Fragment);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether a component instance is running under Vue 3 (or compat mode).
|
|
15
|
+
*
|
|
16
|
+
* In Vue 3, component instances expose an internal `$` property that holds
|
|
17
|
+
* the component's internal instance. This property does not exist in Vue 2.
|
|
18
|
+
*
|
|
19
|
+
* Prefer this over {@link isGlobalVue3} when you have access to a component
|
|
20
|
+
* instance, as it checks at the instance level rather than the global level.
|
|
21
|
+
*
|
|
22
|
+
* @param {object} instance - The Vue component instance (`this`).
|
|
23
|
+
* @returns {boolean} `true` if the instance is a Vue 3 component.
|
|
24
|
+
*/
|
|
25
|
+
const isVue3 = instance => Boolean(instance.$);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a Vue component instance to safely access properties without
|
|
29
|
+
* triggering Vue 3 development warnings.
|
|
30
|
+
*
|
|
31
|
+
* In Vue 3 (and compat mode), component instances are Proxies. Accessing a
|
|
32
|
+
* property that doesn't exist on the instance (e.g. `this.$router` when no
|
|
33
|
+
* router is installed) triggers a development warning from Vue's `get` trap:
|
|
34
|
+
* "Property X was accessed during render but is not defined on instance."
|
|
35
|
+
*
|
|
36
|
+
* This utility returns a Proxy that uses the `in` operator (which hits Vue's
|
|
37
|
+
* `has` trap, which is silent) to check for property existence before accessing
|
|
38
|
+
* it. If the property doesn't exist, `undefined` is returned without ever
|
|
39
|
+
* hitting Vue's `get` trap.
|
|
40
|
+
*
|
|
41
|
+
* In Vue 2, the instance is returned as-is since there are no Proxy warnings.
|
|
42
|
+
*
|
|
43
|
+
* @param {object} target - The Vue component instance (`this`).
|
|
44
|
+
* @returns {object} The original instance (Vue 2) or a safe Proxy wrapper (Vue 3).
|
|
45
|
+
*/
|
|
46
|
+
function safeVueInstance(target) {
|
|
47
|
+
if (!isVue3(target)) {
|
|
48
|
+
return target;
|
|
49
|
+
}
|
|
50
|
+
return new Proxy(target, {
|
|
51
|
+
get(obj, prop) {
|
|
52
|
+
return prop in obj ? obj[prop] : undefined;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { isGlobalVue3, isVue3, safeVueInstance };
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { GlBreakpointInstance, breakpoints } from './utils/breakpoints';
|
|
2
|
+
import * as validators from './components/base/form/form_fields/validators';
|
|
3
|
+
export { validators as formValidators };
|
|
4
|
+
import * as mappers from './components/base/form/form_fields/mappers';
|
|
5
|
+
export { mappers as formMappers };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { extend, mergeData } from '../../vue';
|
|
2
|
+
import { NAME_BUTTON_CLOSE } from '../../constants/components';
|
|
3
|
+
import { PROP_TYPE_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props';
|
|
4
|
+
import { SLOT_NAME_DEFAULT } from '../../constants/slots';
|
|
5
|
+
import { stopEvent } from '../../utils/events';
|
|
6
|
+
import { isEvent } from '../../utils/inspect';
|
|
7
|
+
import { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot';
|
|
8
|
+
|
|
9
|
+
// --- Props ---
|
|
10
|
+
|
|
11
|
+
const props = {
|
|
12
|
+
ariaLabel: {
|
|
13
|
+
type: PROP_TYPE_STRING,
|
|
14
|
+
required: false,
|
|
15
|
+
default: 'Close'
|
|
16
|
+
},
|
|
17
|
+
content: {
|
|
18
|
+
type: PROP_TYPE_STRING,
|
|
19
|
+
required: false,
|
|
20
|
+
default: '×'
|
|
21
|
+
},
|
|
22
|
+
disabled: {
|
|
23
|
+
type: PROP_TYPE_BOOLEAN,
|
|
24
|
+
required: false,
|
|
25
|
+
default: false
|
|
26
|
+
},
|
|
27
|
+
textVariant: {
|
|
28
|
+
type: PROP_TYPE_STRING,
|
|
29
|
+
required: false,
|
|
30
|
+
default: undefined
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// --- Main component ---
|
|
35
|
+
|
|
36
|
+
// @vue/component
|
|
37
|
+
const BButtonClose = /*#__PURE__*/extend({
|
|
38
|
+
name: NAME_BUTTON_CLOSE,
|
|
39
|
+
functional: true,
|
|
40
|
+
props,
|
|
41
|
+
render(h, _ref) {
|
|
42
|
+
let {
|
|
43
|
+
props,
|
|
44
|
+
data,
|
|
45
|
+
slots,
|
|
46
|
+
scopedSlots
|
|
47
|
+
} = _ref;
|
|
48
|
+
const $slots = slots();
|
|
49
|
+
const $scopedSlots = scopedSlots || {};
|
|
50
|
+
const componentData = {
|
|
51
|
+
staticClass: 'close',
|
|
52
|
+
class: {
|
|
53
|
+
[`text-${props.textVariant}`]: props.textVariant
|
|
54
|
+
},
|
|
55
|
+
attrs: {
|
|
56
|
+
type: 'button',
|
|
57
|
+
disabled: props.disabled,
|
|
58
|
+
'aria-label': props.ariaLabel ? String(props.ariaLabel) : null
|
|
59
|
+
},
|
|
60
|
+
on: {
|
|
61
|
+
click(event) {
|
|
62
|
+
// Ensure click on button HTML content is also disabled
|
|
63
|
+
/* istanbul ignore if: bug in JSDOM still emits click on inner element */
|
|
64
|
+
if (props.disabled && isEvent(event)) {
|
|
65
|
+
stopEvent(event);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Careful not to override the default slot with innerHTML
|
|
72
|
+
if (!hasNormalizedSlot(SLOT_NAME_DEFAULT, $scopedSlots, $slots)) {
|
|
73
|
+
componentData.domProps = {
|
|
74
|
+
innerHTML: props.content
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return h('button', mergeData(data, componentData), normalizeSlot(SLOT_NAME_DEFAULT, {}, $scopedSlots, $slots));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export { BButtonClose, props };
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { extend, mergeData } from '../../vue';
|
|
2
|
+
import { NAME_BUTTON } from '../../constants/components';
|
|
3
|
+
import { CODE_SPACE, CODE_ENTER } from '../../constants/key-codes';
|
|
4
|
+
import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';
|
|
5
|
+
import { concat } from '../../utils/array';
|
|
6
|
+
import { isTag, addClass, removeClass } from '../../utils/dom';
|
|
7
|
+
import { stopEvent } from '../../utils/events';
|
|
8
|
+
import { isBoolean, isEvent, isFunction } from '../../utils/inspect';
|
|
9
|
+
import { omit, sortKeys } from '../../utils/object';
|
|
10
|
+
import { pluckProps } from '../../utils/props';
|
|
11
|
+
import { isLink as isLink$1 } from '../../utils/router';
|
|
12
|
+
import { props as props$1, BLink } from '../link/link';
|
|
13
|
+
|
|
14
|
+
// --- Props ---
|
|
15
|
+
|
|
16
|
+
const linkProps = omit(props$1, ['event', 'routerTag']);
|
|
17
|
+
delete linkProps.href.default;
|
|
18
|
+
delete linkProps.to.default;
|
|
19
|
+
const props = sortKeys({
|
|
20
|
+
...linkProps,
|
|
21
|
+
block: {
|
|
22
|
+
type: PROP_TYPE_BOOLEAN,
|
|
23
|
+
required: false,
|
|
24
|
+
default: false
|
|
25
|
+
},
|
|
26
|
+
disabled: {
|
|
27
|
+
type: PROP_TYPE_BOOLEAN,
|
|
28
|
+
required: false,
|
|
29
|
+
default: false
|
|
30
|
+
},
|
|
31
|
+
// Tri-state: `true`, `false` or `null`
|
|
32
|
+
// => On, off, not a toggle
|
|
33
|
+
pressed: {
|
|
34
|
+
type: PROP_TYPE_BOOLEAN,
|
|
35
|
+
required: false,
|
|
36
|
+
default: null
|
|
37
|
+
},
|
|
38
|
+
size: {
|
|
39
|
+
type: PROP_TYPE_STRING,
|
|
40
|
+
required: false,
|
|
41
|
+
default: undefined
|
|
42
|
+
},
|
|
43
|
+
tag: {
|
|
44
|
+
type: PROP_TYPE_STRING,
|
|
45
|
+
required: false,
|
|
46
|
+
default: 'button'
|
|
47
|
+
},
|
|
48
|
+
type: {
|
|
49
|
+
type: PROP_TYPE_STRING,
|
|
50
|
+
required: false,
|
|
51
|
+
default: 'button'
|
|
52
|
+
},
|
|
53
|
+
variant: {
|
|
54
|
+
type: PROP_TYPE_STRING,
|
|
55
|
+
required: false,
|
|
56
|
+
default: 'secondary'
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// --- Helper methods ---
|
|
61
|
+
|
|
62
|
+
// Focus handler for toggle buttons
|
|
63
|
+
// Needs class of 'focus' when focused
|
|
64
|
+
const handleFocus = event => {
|
|
65
|
+
if (event.type === 'focusin') {
|
|
66
|
+
addClass(event.target, 'focus');
|
|
67
|
+
} else if (event.type === 'focusout') {
|
|
68
|
+
removeClass(event.target, 'focus');
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Is the requested button a link?
|
|
73
|
+
// If tag prop is set to `a`, we use a <b-link> to get proper disabled handling
|
|
74
|
+
const isLink = props => isLink$1(props) || isTag(props.tag, 'a');
|
|
75
|
+
|
|
76
|
+
// Is the button to be a toggle button?
|
|
77
|
+
const isToggle = props => isBoolean(props.pressed);
|
|
78
|
+
|
|
79
|
+
// Is the button "really" a button?
|
|
80
|
+
const isButton = props => !(isLink(props) || props.tag && !isTag(props.tag, 'button'));
|
|
81
|
+
|
|
82
|
+
// Is the requested tag not a button or link?
|
|
83
|
+
const isNonStandardTag = props => !isLink(props) && !isButton(props);
|
|
84
|
+
|
|
85
|
+
// Compute required classes (non static classes)
|
|
86
|
+
const computeClass = props => [`btn-${props.variant || 'secondary'}`, {
|
|
87
|
+
[`btn-${props.size}`]: props.size,
|
|
88
|
+
'btn-block': props.block,
|
|
89
|
+
disabled: props.disabled,
|
|
90
|
+
active: props.pressed
|
|
91
|
+
}];
|
|
92
|
+
|
|
93
|
+
// Compute the link props to pass to b-link (if required)
|
|
94
|
+
const computeLinkProps = props => isLink(props) ? pluckProps(linkProps, props) : {};
|
|
95
|
+
|
|
96
|
+
// Compute the attributes for a button
|
|
97
|
+
const computeAttrs = (props, data) => {
|
|
98
|
+
const button = isButton(props);
|
|
99
|
+
const link = isLink(props);
|
|
100
|
+
const toggle = isToggle(props);
|
|
101
|
+
const nonStandardTag = isNonStandardTag(props);
|
|
102
|
+
const hashLink = link && props.href === '#';
|
|
103
|
+
const role = data.attrs && data.attrs.role ? data.attrs.role : null;
|
|
104
|
+
let tabindex = data.attrs ? data.attrs.tabindex : null;
|
|
105
|
+
if (nonStandardTag || hashLink) {
|
|
106
|
+
tabindex = '0';
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
// Type only used for "real" buttons
|
|
110
|
+
type: button && !link ? props.type : null,
|
|
111
|
+
// Disabled only set on "real" buttons
|
|
112
|
+
disabled: button ? props.disabled : null,
|
|
113
|
+
// We add a role of button when the tag is not a link or button for ARIA
|
|
114
|
+
// Don't bork any role provided in `data.attrs` when `isLink` or `isButton`
|
|
115
|
+
// Except when link has `href` of `#`
|
|
116
|
+
role: nonStandardTag || hashLink ? 'button' : role,
|
|
117
|
+
// We set the `aria-disabled` state for non-standard tags
|
|
118
|
+
'aria-disabled': nonStandardTag ? String(props.disabled) : null,
|
|
119
|
+
// For toggles, we need to set the pressed state for ARIA
|
|
120
|
+
'aria-pressed': toggle ? String(props.pressed) : null,
|
|
121
|
+
// `autocomplete="off"` is needed in toggle mode to prevent some browsers
|
|
122
|
+
// from remembering the previous setting when using the back button
|
|
123
|
+
autocomplete: toggle ? 'off' : null,
|
|
124
|
+
// `tabindex` is used when the component is not a button
|
|
125
|
+
// Links are tabbable, but don't allow disabled, while non buttons or links
|
|
126
|
+
// are not tabbable, so we mimic that functionality by disabling tabbing
|
|
127
|
+
// when disabled, and adding a `tabindex="0"` to non buttons or non links
|
|
128
|
+
tabindex: props.disabled && !button ? '-1' : tabindex
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// --- Main component ---
|
|
133
|
+
|
|
134
|
+
// @vue/component
|
|
135
|
+
const BButton = /*#__PURE__*/extend({
|
|
136
|
+
name: NAME_BUTTON,
|
|
137
|
+
functional: true,
|
|
138
|
+
props,
|
|
139
|
+
render(h, _ref) {
|
|
140
|
+
let {
|
|
141
|
+
props,
|
|
142
|
+
data,
|
|
143
|
+
listeners,
|
|
144
|
+
children
|
|
145
|
+
} = _ref;
|
|
146
|
+
const toggle = isToggle(props);
|
|
147
|
+
const link = isLink(props);
|
|
148
|
+
const nonStandardTag = isNonStandardTag(props);
|
|
149
|
+
const hashLink = link && props.href === '#';
|
|
150
|
+
const on = {
|
|
151
|
+
keydown(event) {
|
|
152
|
+
// When the link is a `href="#"` or a non-standard tag (has `role="button"`),
|
|
153
|
+
// we add a keydown handlers for CODE_SPACE/CODE_ENTER
|
|
154
|
+
/* istanbul ignore next */
|
|
155
|
+
if (props.disabled || !(nonStandardTag || hashLink)) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const {
|
|
159
|
+
keyCode
|
|
160
|
+
} = event;
|
|
161
|
+
// Add CODE_SPACE handler for `href="#"` and CODE_ENTER handler for non-standard tags
|
|
162
|
+
if (keyCode === CODE_SPACE || keyCode === CODE_ENTER && nonStandardTag) {
|
|
163
|
+
const target = event.currentTarget || event.target;
|
|
164
|
+
stopEvent(event, {
|
|
165
|
+
propagation: false
|
|
166
|
+
});
|
|
167
|
+
target.click();
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
click(event) {
|
|
171
|
+
/* istanbul ignore if: blink/button disabled should handle this */
|
|
172
|
+
if (props.disabled && isEvent(event)) {
|
|
173
|
+
stopEvent(event);
|
|
174
|
+
} else if (toggle && listeners && listeners['update:pressed']) {
|
|
175
|
+
// Send `.sync` updates to any "pressed" prop (if `.sync` listeners)
|
|
176
|
+
// `concat()` will normalize the value to an array without
|
|
177
|
+
// double wrapping an array value in an array
|
|
178
|
+
concat(listeners['update:pressed']).forEach(fn => {
|
|
179
|
+
if (isFunction(fn)) {
|
|
180
|
+
fn(!props.pressed);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
if (toggle) {
|
|
187
|
+
on.focusin = handleFocus;
|
|
188
|
+
on.focusout = handleFocus;
|
|
189
|
+
}
|
|
190
|
+
const componentData = {
|
|
191
|
+
staticClass: 'btn',
|
|
192
|
+
class: computeClass(props),
|
|
193
|
+
props: computeLinkProps(props),
|
|
194
|
+
attrs: computeAttrs(props, data),
|
|
195
|
+
on
|
|
196
|
+
};
|
|
197
|
+
return h(link ? BLink : props.tag, mergeData({
|
|
198
|
+
...data,
|
|
199
|
+
props: undefined
|
|
200
|
+
}, componentData), children);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
export { BButton, props };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { extend, mergeData } from '../../vue';
|
|
2
|
+
import { NAME_DROPDOWN_DIVIDER } from '../../constants/components';
|
|
3
|
+
import { PROP_TYPE_STRING } from '../../constants/props';
|
|
4
|
+
import { makeProp } from '../../utils/props';
|
|
5
|
+
import { omit } from '../../utils/object';
|
|
6
|
+
|
|
7
|
+
// --- Props ---
|
|
8
|
+
|
|
9
|
+
const props = {
|
|
10
|
+
tag: makeProp(PROP_TYPE_STRING, 'hr')
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// --- Main component ---
|
|
14
|
+
|
|
15
|
+
// @vue/component
|
|
16
|
+
const BDropdownDivider = /*#__PURE__*/extend({
|
|
17
|
+
name: NAME_DROPDOWN_DIVIDER,
|
|
18
|
+
functional: true,
|
|
19
|
+
props,
|
|
20
|
+
render(h, _ref) {
|
|
21
|
+
let {
|
|
22
|
+
props,
|
|
23
|
+
data
|
|
24
|
+
} = _ref;
|
|
25
|
+
return h('li', mergeData(omit(data, ['attrs']), {
|
|
26
|
+
attrs: {
|
|
27
|
+
role: 'presentation'
|
|
28
|
+
}
|
|
29
|
+
}), [h(props.tag, {
|
|
30
|
+
staticClass: 'dropdown-divider',
|
|
31
|
+
attrs: {
|
|
32
|
+
...(data.attrs || {}),
|
|
33
|
+
role: 'separator',
|
|
34
|
+
'aria-orientation': 'horizontal'
|
|
35
|
+
},
|
|
36
|
+
ref: 'divider'
|
|
37
|
+
})]);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export { BDropdownDivider, props };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { extend, mergeData } from '../../vue';
|
|
2
|
+
import { NAME_DROPDOWN_FORM } from '../../constants/components';
|
|
3
|
+
import { PROP_TYPE_BOOLEAN, PROP_TYPE_ARRAY_OBJECT_STRING } from '../../constants/props';
|
|
4
|
+
import { sortKeys, omit } from '../../utils/object';
|
|
5
|
+
import { makeProp } from '../../utils/props';
|
|
6
|
+
import { props as props$1, BForm } from '../form/form';
|
|
7
|
+
|
|
8
|
+
// --- Props ---
|
|
9
|
+
|
|
10
|
+
const props = sortKeys({
|
|
11
|
+
...props$1,
|
|
12
|
+
disabled: makeProp(PROP_TYPE_BOOLEAN, false),
|
|
13
|
+
formClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// --- Main component ---
|
|
17
|
+
|
|
18
|
+
// @vue/component
|
|
19
|
+
const BDropdownForm = /*#__PURE__*/extend({
|
|
20
|
+
name: NAME_DROPDOWN_FORM,
|
|
21
|
+
functional: true,
|
|
22
|
+
props,
|
|
23
|
+
render(h, _ref) {
|
|
24
|
+
let {
|
|
25
|
+
props,
|
|
26
|
+
data,
|
|
27
|
+
listeners,
|
|
28
|
+
children
|
|
29
|
+
} = _ref;
|
|
30
|
+
return h('li', mergeData(omit(data, ['attrs', 'on']), {
|
|
31
|
+
attrs: {
|
|
32
|
+
role: 'presentation'
|
|
33
|
+
}
|
|
34
|
+
}), [h(BForm, {
|
|
35
|
+
staticClass: 'b-dropdown-form',
|
|
36
|
+
class: [props.formClass, {
|
|
37
|
+
disabled: props.disabled
|
|
38
|
+
}],
|
|
39
|
+
props,
|
|
40
|
+
attrs: {
|
|
41
|
+
...(data.attrs || {}),
|
|
42
|
+
disabled: props.disabled,
|
|
43
|
+
// Tab index of -1 for keyboard navigation
|
|
44
|
+
tabindex: props.disabled ? null : '-1'
|
|
45
|
+
},
|
|
46
|
+
on: listeners,
|
|
47
|
+
ref: 'form'
|
|
48
|
+
}, children)]);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export { BDropdownForm, props };
|