import jQ from 'jquery';
import noUiSlider from 'nouislider';
import Settings from './helpers/settings';
import Utils from './helpers/utils';
import Labels from './helpers/labels';
import Globals from './helpers/globals';
import Selector from './helpers/selector';
import Navigation from './helpers/navigation';
import Class from "./helpers/class";
import Analytics from "./helpers/analytics";
import FunctionMapper from './legacy/function-mapper';
// API
import Api from "./helpers/api";
import FilterApi from './api/filter-api';
import InstantSearchApi from './api/instant-search-api';
// Enums
import FilterTreeEnum from './enum/filter-tree-enum';
import FilterOptionEnum from "./enum/filter-option-enum";
import InstantSearchEnum from "./enum/instant-search-enum";
// Instant Search Components
import SearchInput from './components/instant-search/instant-search-element/search-input';
import InstantSearch from './components/instant-search/instant-search';
import InstantSearchMobile from './components/instant-search/instant-search-style/instant-search-mobile';
import InstantSearchResult from "./components/instant-search/instant-search-style/instant-search-result";
import InstantSearchStyle from "./components/instant-search/instant-search-style/instant-search-style";
import InstantSearchResultStyle2 from "./components/instant-search/instant-search-style/instant-search-result-style2";
// Instant Search Block
import InstantSearchResultBlock from "./components/instant-search/instant-search-block/instant-search-result-block";
import InstantSearchResultBlockDym from "./components/instant-search/instant-search-block/instant-search-result-block-dym";
import InstantSearchResultBlockEmpty from "./components/instant-search/instant-search-block/instant-search-result-block-empty";
import InstantSearchResultBlockLoading from "./components/instant-search/instant-search-block/instant-search-result-block-loading";
import InstantSearchResultBlockViewAll from "./components/instant-search/instant-search-block/instant-search-result-block-view-all";
// Instant Search Item
import InstantSearchResultItem from "./components/instant-search/instant-search-item/instant-search-result-item";
import InstantSearchResultItemCollection from "./components/instant-search/instant-search-item/instant-search-result-item-collection";
import InstantSearchResultItemPage from "./components/instant-search/instant-search-item/instant-search-result-item-page";
import InstantSearchResultItemPopular from "./components/instant-search/instant-search-item/instant-search-result-item-popular";
import InstantSearchResultItemProduct from './components/instant-search/instant-search-item/instant-search-result-item-product';
// Instant Search Others
import AutocompleteMenuCustom from './components/instant-search/others/autocomplete-menu-custom';
import InstantSearchResultRedirect from "./components/instant-search/others/instant-search-result-redirect";
// Filter Components
import Filter from './components/filter/filter';
import FilterTree from "./components/filter/filter-tree/filter-tree";
import FilterRefineBy from "./components/filter/filter-tree/filter-refine-by/filter-refine-by";
import FilterRefineByItem from "./components/filter/filter-tree/filter-refine-by/filter-refine-by-item";
import FilterOption from "./components/filter/filter-tree/filter-option/filter-option";
import FilterOptionBox from "./components/filter/filter-tree/filter-option/filter-option-box";
import FilterOptionList from "./components/filter/filter-tree/filter-option/filter-option-list";
import FilterOptionSwatch from "./components/filter/filter-tree/filter-option/filter-option-swatch";
import FilterOptionMultiLevelTag from "./components/filter/filter-tree/filter-option/filter-option-multi-level-tag";
import FilterOptionMultiLevelCollections from "./components/filter/filter-tree/filter-option/filter-option-multi-level-collections";
import FilterOptionRangeSlider from "./components/filter/filter-tree/filter-option/filter-option-range-slider";
import FilterOptionRating from "./components/filter/filter-tree/filter-option/filter-option-rating";
import FilterOptionSubCategory from "./components/filter/filter-tree/filter-option/filter-option-sub-category";
import FilterApplyButton from "./components/filter/filter-tree/filter-option-element/filter-apply-button";
import FilterClearButton from "./components/filter/filter-tree/filter-option-element/filter-clear-button";
import FilterScrollbar from "./components/filter/filter-tree/filter-option-element/filter-scrollbar";
import FilterViewMore from "./components/filter/filter-tree/filter-option-element/filter-view-more";
import FilterCollapse from "./components/filter/filter-tree/filter-option-element/filter-collapse";
import FilterSearchBox from "./components/filter/filter-tree/filter-option-element/filter-search-box";
import FilterTooltip from "./components/filter/filter-tree/filter-option-element/filter-tooltip";
import FilterOptionItem from "./components/filter/filter-tree/filter-option-item/filter-option-item";
import FilterOptionItemBox from "./components/filter/filter-tree/filter-option-item/filter-option-item-box";
import FilterOptionItemList from "./components/filter/filter-tree/filter-option-item/filter-option-item-list";
import FilterOptionItemSwatch from "./components/filter/filter-tree/filter-option-item/filter-option-item-swatch";
import FilterOptionItemMultiLevelTag from "./components/filter/filter-tree/filter-option-item/filter-option-item-multi-level-tag";
import { FilterOptionItemSecondLevelTag, FilterOptionItemThirdLevelTag } from "./components/filter/filter-tree/filter-option-item/filter-option-item-multi-level-tag";
import FilterOptionItemMultiLevelCollections from "./components/filter/filter-tree/filter-option-item/filter-option-item-multi-level-collections";
import { FilterOptionItemSecondLevelCollections, FilterOptionItemThirdLevelCollections } from "./components/filter/filter-tree/filter-option-item/filter-option-item-multi-level-collections";
import FilterOptionItemRangeSlider from "./components/filter/filter-tree/filter-option-item/filter-option-item-range-slider";
import FilterOptionItemRating from "./components/filter/filter-tree/filter-option-item/filter-option-item-rating";
import FilterOptionItemSubCategory from "./components/filter/filter-tree/filter-option-item/filter-option-item-sub-category";
import FilterStyle from "./components/filter/filter-tree/filter-style/filter-style";
import FilterTreeStyle2 from "./components/filter/filter-tree/filter-style/filter-tree-style2";
import FilterTreeStyle3 from "./components/filter/filter-tree/filter-style/filter-tree-style3";
import FilterTreeStyle4 from "./components/filter/filter-tree/filter-style/filter-tree-style4";
import FilterLoadingIcon from "./components/filter/filter-tree/filter-loading-icon";
import FilterMobileButton from "./components/filter/filter-tree/filter-mobile-button";
import FilterScrollToTop from "./components/filter/filter-tree/filter-scroll-to-top";
// Filter results
import FilterResult from "./components/filter/filter-result/filter-result";
import ProductList from './components/filter/filter-result/product/product-list';
import ProductListPlaceholder from './components/filter/filter-result/product/product-list-placeholder';
// Product Item
import ProductItem from "./components/filter/filter-result/product/product-item/product-item";
import ProductGridItem from './components/filter/filter-result/product/product-item/product-grid-item';
import ProductListItem from "./components/filter/filter-result/product/product-item/product-list-item";
import ProductCollageItem from './components/filter/filter-result/product/product-item/product-collage-item';
// Filter result elements
import ProductDisplayType from './components/filter/filter-result/filter-result-element/product-display-type';
import ProductSorting from './components/filter/filter-result/filter-result-element/product-sorting';
import ProductLimit from './components/filter/filter-result/filter-result-element/product-limit';
import PageInfoCollection from './components/filter/filter-result/filter-result-element/page-info-collection';
import PageInfoSearch from "./components/filter/filter-result/filter-result-element/page-info-search";
import Breadcrumb from "./components/filter/filter-result/filter-result-element/breadcrumb";
import RobotsMeta from "./components/filter/filter-result/filter-result-element/robots-meta";
import SearchResultPanels from "./components/filter/filter-result/filter-result-element/search-result-panels";
import SearchResultPanelItem from "./components/filter/filter-result/filter-result-element/search-result-panel-item";
import SearchResultTotal from "./components/filter/filter-result/filter-result-element/search-result-total";
// Pagination
import ProductPagination from "./components/filter/filter-result/filter-result-element/pagination/product-pagination";
import ProductPaginationDefault from './components/filter/filter-result/filter-result-element/pagination/product-pagination-default';
import ProductPaginationInfinite from "./components/filter/filter-result/filter-result-element/pagination/product-pagination-infinite";
import ProductPaginationLoadMore from "./components/filter/filter-result/filter-result-element/pagination/product-pagination-load-more";
import ProductPaginationLoadPrevious from "./components/filter/filter-result/filter-result-element/pagination/product-pagination-load-previous";
import SearchDisplayPagination from "./components/filter/filter-result/filter-result-element/pagination/search-display-pagination"
/**
* Injects all components into a scope, to override and customize outside applib.
* @param scope
*/
const inject = (scope) => {
// Library
scope.jQ = jQ;
scope.noUiSlider = noUiSlider;
// Helpers
scope.Analytics = Analytics;
scope.Class = Class;
scope.Globals = Globals;
scope.Labels = Labels;
scope.Navigation = Navigation;
scope.Selector = Selector;
scope.Settings = Settings;
scope.Utils = Utils;
scope.FunctionMapper = FunctionMapper;
// Api
scope.Api = Api;
scope.FilterApi = FilterApi;
scope.InstantSearchApi = InstantSearchApi;
// Enums
scope.FilterTreeEnum = FilterTreeEnum;
scope.FilterOptionEnum = FilterOptionEnum;
scope.InstantSearchEnum = InstantSearchEnum;
// Filter
scope.Filter = Filter;
scope.FilterTree = FilterTree;
scope.FilterStyle = FilterStyle;
scope.FilterTreeStyle2 = FilterTreeStyle2;
scope.FilterTreeStyle3 = FilterTreeStyle3;
scope.FilterTreeStyle4 = FilterTreeStyle4;
// Filter Option
scope.FilterOption = FilterOption;
scope.FilterOptionList = FilterOptionList;
scope.FilterOptionBox = FilterOptionBox;
scope.FilterOptionSwatch = FilterOptionSwatch;
scope.FilterOptionMultiLevelCollections = FilterOptionMultiLevelCollections;
scope.FilterOptionMultiLevelTag = FilterOptionMultiLevelTag;
scope.FilterOptionRangeSlider = FilterOptionRangeSlider;
scope.FilterOptionRating = FilterOptionRating;
scope.FilterOptionSubCategory = FilterOptionSubCategory;
// Filter Option Element
scope.FilterApplyButton = FilterApplyButton;
scope.FilterClearButton = FilterClearButton;
scope.FilterCollapse = FilterCollapse;
scope.FilterScrollbar = FilterScrollbar;
scope.FilterSearchBox = FilterSearchBox;
scope.FilterTooltip = FilterTooltip;
scope.FilterViewMore = FilterViewMore;
// Filter Option Item
scope.FilterOptionItem = FilterOptionItem;
scope.FilterOptionItemList = FilterOptionItemList;
scope.FilterOptionItemBox = FilterOptionItemBox;
scope.FilterOptionItemSwatch = FilterOptionItemSwatch;
scope.FilterOptionItemMultiLevelCollections = FilterOptionItemMultiLevelCollections;
scope.FilterOptionItemSecondLevelCollections = FilterOptionItemSecondLevelCollections;
scope.FilterOptionItemThirdLevelCollections = FilterOptionItemThirdLevelCollections;
scope.FilterOptionItemMultiLevelTag = FilterOptionItemMultiLevelTag;
scope.FilterOptionItemSecondLevelTag = FilterOptionItemSecondLevelTag;
scope.FilterOptionItemThirdLevelTag = FilterOptionItemThirdLevelTag;
scope.FilterOptionItemRangeSlider = FilterOptionItemRangeSlider;
scope.FilterOptionItemRating = FilterOptionItemRating;
scope.FilterOptionItemSubCategory = FilterOptionItemSubCategory;
// Filter Refine By
scope.FilterRefineBy = FilterRefineBy;
scope.FilterRefineByItem = FilterRefineByItem;
// Filter extra elements
scope.FilterLoadingIcon = FilterLoadingIcon;
scope.FilterMobileButton = FilterMobileButton;
scope.FilterScrollToTop = FilterScrollToTop;
// Filter Results
scope.FilterResult = FilterResult;
scope.ProductList = ProductList;
scope.ProductListPlaceholder = ProductListPlaceholder;
// Product item
scope.ProductItem = ProductItem;
scope.ProductGridItem = ProductGridItem;
scope.ProductListItem = ProductListItem;
scope.ProductCollageItem = ProductCollageItem
// Filter results elements
scope.Breadcrumb = Breadcrumb;
scope.PageInfoCollection = PageInfoCollection;
scope.PageInfoSearch = PageInfoSearch;
scope.ProductDisplayType = ProductDisplayType;
scope.ProductLimit = ProductLimit;
scope.ProductSorting = ProductSorting;
scope.RobotsMeta = RobotsMeta;
scope.SearchResultPanels = SearchResultPanels;
scope.SearchResultPanelItem = SearchResultPanelItem;
scope.SearchResultTotal = SearchResultTotal;
// Pagination
scope.ProductPagination = ProductPagination;
scope.ProductPaginationDefault = ProductPaginationDefault;
scope.ProductPaginationInfinite = ProductPaginationInfinite;
scope.ProductPaginationLoadMore = ProductPaginationLoadMore;
scope.ProductPaginationLoadPrevious = ProductPaginationLoadPrevious;
scope.SearchDisplayPagination = SearchDisplayPagination;
// Instant search
scope.SearchInput = SearchInput;
scope.InstantSearch = InstantSearch;
scope.InstantSearchMobile = InstantSearchMobile;
scope.InstantSearchResult = InstantSearchResult;
scope.InstantSearchStyle = InstantSearchStyle;
scope.InstantSearchResultStyle2 = InstantSearchResultStyle2;
// Instant search result block
scope.InstantSearchResultBlock = InstantSearchResultBlock;
scope.InstantSearchResultBlockDym = InstantSearchResultBlockDym;
scope.InstantSearchResultBlockEmpty = InstantSearchResultBlockEmpty;
scope.InstantSearchResultBlockLoading = InstantSearchResultBlockLoading;
scope.InstantSearchResultBlockViewAll = InstantSearchResultBlockViewAll;
// Instant search item
scope.InstantSearchResultItem = InstantSearchResultItem;
scope.InstantSearchResultItemCollection = InstantSearchResultItemCollection;
scope.InstantSearchResultItemPage = InstantSearchResultItemPage;
scope.InstantSearchResultItemPopular = InstantSearchResultItemPopular;
scope.InstantSearchResultItemProduct = InstantSearchResultItemProduct;
// Instant search others
scope.AutocompleteMenuCustom = AutocompleteMenuCustom;
scope.InstantSearchResultRedirect = InstantSearchResultRedirect;
}
const Components = {
inject: inject
}
export default Components;