@getlupa/vue 0.0.1

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.
Files changed (142) hide show
  1. package/.eslintrc.cjs +15 -0
  2. package/.prettierrc.json +8 -0
  3. package/README.md +46 -0
  4. package/dist/containerStyle.css +1 -0
  5. package/dist/favicon.ico +0 -0
  6. package/dist/lupaSearch.iife.js +15899 -0
  7. package/dist/lupaSearch.js +15897 -0
  8. package/dist/lupaSearch.mjs +15897 -0
  9. package/dist/lupaSearch.umd.js +15900 -0
  10. package/dist/src/components/common/ProductImage.vue.d.ts +39 -0
  11. package/dist/src/components/common/Spinner.vue.d.ts +2 -0
  12. package/dist/src/components/product-list/CategoryDescription.vue.d.ts +14 -0
  13. package/dist/src/components/product-list/CategoryFilter.vue.d.ts +14 -0
  14. package/dist/src/components/product-list/CategoryFilterItem.vue.d.ts +22 -0
  15. package/dist/src/components/product-list/CategoryTopFilters.vue.d.ts +14 -0
  16. package/dist/src/components/product-list/ProductList.vue.d.ts +14 -0
  17. package/dist/src/components/recommendations/Recommendations.vue.d.ts +14 -0
  18. package/dist/src/components/search-box/SearchBox.vue.d.ts +22 -0
  19. package/dist/src/components/search-box/SearchBoxInput.vue.d.ts +42 -0
  20. package/dist/src/components/search-box/SearchBoxMainPanel.vue.d.ts +52 -0
  21. package/dist/src/components/search-box/SearchBoxMoreResults.vue.d.ts +24 -0
  22. package/dist/src/components/search-box/history/SearchBoxHistoryItem.vue.d.ts +24 -0
  23. package/dist/src/components/search-box/history/SearchBoxHistoryPanel.vue.d.ts +16 -0
  24. package/dist/src/components/search-box/products/SearchBoxProduct.vue.d.ts +50 -0
  25. package/dist/src/components/search-box/products/SearchBoxProducts.vue.d.ts +40 -0
  26. package/dist/src/components/search-box/products/SearchBoxProductsWrapper.vue.d.ts +50 -0
  27. package/dist/src/components/search-box/products/elements/SearchBoxProductCustom.vue.d.ts +23 -0
  28. package/dist/src/components/search-box/products/elements/SearchBoxProductCustomHtml.vue.d.ts +22 -0
  29. package/dist/src/components/search-box/products/elements/SearchBoxProductDescription.vue.d.ts +23 -0
  30. package/dist/src/components/search-box/products/elements/SearchBoxProductElement.vue.d.ts +32 -0
  31. package/dist/src/components/search-box/products/elements/SearchBoxProductImage.vue.d.ts +23 -0
  32. package/dist/src/components/search-box/products/elements/SearchBoxProductPrice.vue.d.ts +32 -0
  33. package/dist/src/components/search-box/products/elements/SearchBoxProductRegularPrice.vue.d.ts +32 -0
  34. package/dist/src/components/search-box/products/elements/SearchBoxProductTitle.vue.d.ts +23 -0
  35. package/dist/src/components/search-box/suggestions/SearchBoxSuggestion.vue.d.ts +33 -0
  36. package/dist/src/components/search-box/suggestions/SearchBoxSuggestions.vue.d.ts +41 -0
  37. package/dist/src/components/search-box/suggestions/SearchBoxSuggestionsWrapper.vue.d.ts +51 -0
  38. package/dist/src/components/search-container/SearchContainer.vue.d.ts +14 -0
  39. package/dist/src/components/search-results/SearchResults.vue.d.ts +39 -0
  40. package/dist/src/components/search-results/SearchResultsBreadcrumbs.vue.d.ts +14 -0
  41. package/dist/src/components/search-results/SearchResultsDidYouMean.vue.d.ts +14 -0
  42. package/dist/src/components/search-results/SearchResultsTitle.vue.d.ts +30 -0
  43. package/dist/src/components/search-results/additional-panels/AdditionalPanel.vue.d.ts +23 -0
  44. package/dist/src/components/search-results/additional-panels/AdditionalPanels.vue.d.ts +31 -0
  45. package/dist/src/components/search-results/filters/CurrentFilterDisplay.vue.d.ts +16 -0
  46. package/dist/src/components/search-results/filters/CurrentFilters.vue.d.ts +22 -0
  47. package/dist/src/components/search-results/filters/FiltersTopDropdown.vue.d.ts +14 -0
  48. package/dist/src/components/search-results/filters/MobileFilterSidebar.vue.d.ts +14 -0
  49. package/dist/src/components/search-results/filters/SearchResultsFilters.vue.d.ts +22 -0
  50. package/dist/src/components/search-results/filters/facets/FacetDisplay.vue.d.ts +42 -0
  51. package/dist/src/components/search-results/filters/facets/FacetList.vue.d.ts +50 -0
  52. package/dist/src/components/search-results/filters/facets/Facets.vue.d.ts +30 -0
  53. package/dist/src/components/search-results/filters/facets/HierarchyFacet.vue.d.ts +33 -0
  54. package/dist/src/components/search-results/filters/facets/HierarchyFacetLevel.vue.d.ts +41 -0
  55. package/dist/src/components/search-results/filters/facets/StatsFacet.vue.d.ts +33 -0
  56. package/dist/src/components/search-results/filters/facets/TermFacet.vue.d.ts +33 -0
  57. package/dist/src/components/search-results/products/SearchResultsLayoutSelection.vue.d.ts +2 -0
  58. package/dist/src/components/search-results/products/SearchResultsMobileToggle.vue.d.ts +21 -0
  59. package/dist/src/components/search-results/products/SearchResultsProducts.vue.d.ts +14 -0
  60. package/dist/src/components/search-results/products/SearchResultsSummary.vue.d.ts +21 -0
  61. package/dist/src/components/search-results/products/SearchResultsToolbar.vue.d.ts +22 -0
  62. package/dist/src/components/search-results/products/pagination/SearchResultsPageSelect.vue.d.ts +30 -0
  63. package/dist/src/components/search-results/products/pagination/SearchResultsPageSize.vue.d.ts +22 -0
  64. package/dist/src/components/search-results/products/product-card/SearchResultsProductCard.vue.d.ts +40 -0
  65. package/dist/src/components/search-results/products/product-card/badges/CustomBadge.vue.d.ts +14 -0
  66. package/dist/src/components/search-results/products/product-card/badges/ImageBadge.vue.d.ts +14 -0
  67. package/dist/src/components/search-results/products/product-card/badges/SearchResultGeneratedBadges.vue.d.ts +14 -0
  68. package/dist/src/components/search-results/products/product-card/badges/SearchResultsBadgeWrapper.vue.d.ts +22 -0
  69. package/dist/src/components/search-results/products/product-card/badges/TextBadge.vue.d.ts +14 -0
  70. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductAddToCart.vue.d.ts +33 -0
  71. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductCardElement.vue.d.ts +50 -0
  72. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductCustom.vue.d.ts +23 -0
  73. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductDescription.vue.d.ts +23 -0
  74. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductImage.vue.d.ts +23 -0
  75. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductPrice.vue.d.ts +32 -0
  76. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductRating.vue.d.ts +23 -0
  77. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductRegularPrice.vue.d.ts +32 -0
  78. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductSingleStarRating.vue.d.ts +23 -0
  79. package/dist/src/components/search-results/products/product-card/elements/SearchResultsProductTitle.vue.d.ts +31 -0
  80. package/dist/src/components/search-results/products/product-card/elements/custom/SearchResultsProductCustomHtmlElement.vue.d.ts +23 -0
  81. package/dist/src/components/search-results/products/similar-queries/SearchResultsSimilarQueries.vue.d.ts +31 -0
  82. package/dist/src/components/search-results/products/similar-queries/SimilarQueryText.vue.d.ts +22 -0
  83. package/dist/src/components/search-results/products/sort/SearchResultsSort.vue.d.ts +14 -0
  84. package/dist/src/constants/global.const.d.ts +17 -0
  85. package/dist/src/constants/queryParams.const.d.ts +26 -0
  86. package/dist/src/constants/searchBox.const.d.ts +48 -0
  87. package/dist/src/constants/searchResults.const.d.ts +107 -0
  88. package/dist/src/index.d.ts +21 -0
  89. package/dist/src/stores/dynamicData.d.ts +24 -0
  90. package/dist/src/stores/history.d.ts +31 -0
  91. package/dist/src/stores/options.d.ts +75 -0
  92. package/dist/src/stores/params.d.ts +124 -0
  93. package/dist/src/stores/screen.d.ts +22 -0
  94. package/dist/src/stores/searchBox.d.ts +204 -0
  95. package/dist/src/stores/searchResult.d.ts +125 -0
  96. package/dist/src/stores/tracking.d.ts +46 -0
  97. package/dist/src/types/AnalyticsOptions.d.ts +14 -0
  98. package/dist/src/types/DocumentElement.d.ts +91 -0
  99. package/dist/src/types/General.d.ts +20 -0
  100. package/dist/src/types/product-list/ProductListOptions.d.ts +29 -0
  101. package/dist/src/types/recommendations/RecommendationsOptions.d.ts +26 -0
  102. package/dist/src/types/search-box/Common.d.ts +51 -0
  103. package/dist/src/types/search-box/SearchBoxHistory.d.ts +6 -0
  104. package/dist/src/types/search-box/SearchBoxOptions.d.ts +36 -0
  105. package/dist/src/types/search-box/SearchBoxPanel.d.ts +28 -0
  106. package/dist/src/types/search-container/SearchContainerOptions.d.ts +15 -0
  107. package/dist/src/types/search-results/BadgeOptions.d.ts +61 -0
  108. package/dist/src/types/search-results/FacetAction.d.ts +16 -0
  109. package/dist/src/types/search-results/Filters.d.ts +9 -0
  110. package/dist/src/types/search-results/PaginationOptions.d.ts +20 -0
  111. package/dist/src/types/search-results/QueryParams.d.ts +4 -0
  112. package/dist/src/types/search-results/ResultsLayout.d.ts +5 -0
  113. package/dist/src/types/search-results/RoutingBehavior.d.ts +1 -0
  114. package/dist/src/types/search-results/SearchResultsAdditionalPanelOptions.d.ts +16 -0
  115. package/dist/src/types/search-results/SearchResultsOptions.d.ts +177 -0
  116. package/dist/src/types/search-results/SearchResultsPagination.d.ts +21 -0
  117. package/dist/src/types/search-results/SearchResultsProductCardOptions.d.ts +24 -0
  118. package/dist/src/types/search-results/SearchResultsSort.d.ts +11 -0
  119. package/dist/src/utils/debounce.utils.d.ts +1 -0
  120. package/dist/src/utils/document.utils.d.ts +1 -0
  121. package/dist/src/utils/event.utils.d.ts +2 -0
  122. package/dist/src/utils/filter.toggle.utils.d.ts +23 -0
  123. package/dist/src/utils/filter.utils.d.ts +11 -0
  124. package/dist/src/utils/history.utils.d.ts +2 -0
  125. package/dist/src/utils/link.utils.d.ts +6 -0
  126. package/dist/src/utils/params.utils.d.ts +9 -0
  127. package/dist/src/utils/picker.utils.d.ts +5 -0
  128. package/dist/src/utils/price.utils.d.ts +2 -0
  129. package/dist/src/utils/query.utils.d.ts +5 -0
  130. package/dist/src/utils/routing.utils.d.ts +6 -0
  131. package/dist/src/utils/scroll.utils.d.ts +4 -0
  132. package/dist/src/utils/string.utils.d.ts +9 -0
  133. package/dist/src/utils/suggestion.utils.d.ts +3 -0
  134. package/dist/src/utils/tracking.utils.d.ts +15 -0
  135. package/dist/style.css +1 -0
  136. package/dist/style.js +1 -0
  137. package/env.d.ts +1 -0
  138. package/index.html +13 -0
  139. package/package.json +62 -0
  140. package/tsconfig.app.json +18 -0
  141. package/tsconfig.node.json +15 -0
  142. package/vite.config.ts +35 -0
@@ -0,0 +1,28 @@
1
+ import type { DocumentElement } from '../DocumentElement';
2
+ export declare enum SearchBoxPanelType {
3
+ SUGGESTION = "suggestion",
4
+ DOCUMENT = "document"
5
+ }
6
+ export type SearchBoxPanelLinks = {
7
+ details: string;
8
+ };
9
+ export type SearchBoxPanelBase = {
10
+ type: SearchBoxPanelType;
11
+ queryKey: string;
12
+ limit: number;
13
+ };
14
+ export type DocumentSearchBoxPanel = SearchBoxPanelBase & {
15
+ type: SearchBoxPanelType.DOCUMENT;
16
+ links: SearchBoxPanelLinks;
17
+ elements: DocumentElement[];
18
+ titleKey?: string;
19
+ idKey?: string;
20
+ customClassName?: string;
21
+ searchBySuggestion?: boolean;
22
+ };
23
+ export type SuggestionSearchBoxPanel = SearchBoxPanelBase & {
24
+ type: SearchBoxPanelType.SUGGESTION;
25
+ highlight: boolean;
26
+ customClassName?: string;
27
+ };
28
+ export type SearchBoxPanel = DocumentSearchBoxPanel | SuggestionSearchBoxPanel;
@@ -0,0 +1,15 @@
1
+ import type { SearchBoxOptions } from '../search-box/SearchBoxOptions';
2
+ import type { SearchResultsOptions } from '../search-results/SearchResultsOptions';
3
+ export type SearchContainerConfigOptions = {
4
+ isOpenInitially?: boolean;
5
+ styleLink?: string;
6
+ layout?: {
7
+ marginLeft?: number;
8
+ };
9
+ };
10
+ export type SearchContainerOptions = {
11
+ trigger: string;
12
+ searchBox: SearchBoxOptions;
13
+ searchResults: SearchResultsOptions;
14
+ options?: SearchContainerConfigOptions;
15
+ };
@@ -0,0 +1,61 @@
1
+ import type { AnchorPosition } from './SearchResultsProductCardOptions';
2
+ export type SearchResultBadgeType = 'text' | 'image' | 'customHtml';
3
+ export type BadgeGenerateSeed = {
4
+ id?: string;
5
+ backgroundColor?: string;
6
+ color?: string;
7
+ titleText?: string;
8
+ additionalText?: string;
9
+ };
10
+ export type BadgeGenerateOptions<T = Record<string, any>> = {
11
+ key?: string;
12
+ keyMap?: Record<keyof BadgeGenerateSeed, keyof T>;
13
+ image?: (field: BadgeGenerateSeed) => string | undefined;
14
+ showTitle?: (field: BadgeGenerateSeed) => boolean;
15
+ customClass?: (field: BadgeGenerateSeed) => string | undefined;
16
+ };
17
+ export type BadgeOptions = {
18
+ anchor: AnchorPosition;
19
+ elements: BadgeElement[];
20
+ generate?: BadgeGenerateOptions;
21
+ product?: any;
22
+ };
23
+ export type SearchResultBadgeElement<T = any> = {
24
+ type: SearchResultBadgeType;
25
+ key: string;
26
+ isHtml?: boolean;
27
+ className?: string;
28
+ product?: T;
29
+ display?: (document: T) => boolean;
30
+ rootImageUrl?: string;
31
+ maxItems?: number;
32
+ html?: (doc: T) => string;
33
+ position?: 'card' | 'image';
34
+ };
35
+ export type BaseBadgeElement<T = any> = SearchResultBadgeElement<T> & {
36
+ value?: string;
37
+ };
38
+ export type TextBadgeElement<T = any> = BaseBadgeElement<T> & {
39
+ type: 'text';
40
+ prefix?: string;
41
+ maxItems?: number;
42
+ };
43
+ export type ImageBadgeElement<T = any> = BaseBadgeElement<T> & {
44
+ type: 'image';
45
+ rootImageUrl?: string;
46
+ maxItems?: number;
47
+ };
48
+ export type CustomHtmlBadgeElement<T = any> = BaseBadgeElement<T> & {
49
+ type: 'customHtml';
50
+ className?: string;
51
+ html: (doc: T) => string;
52
+ };
53
+ export type BadgeElement = BaseBadgeElement | TextBadgeElement;
54
+ export declare enum BadgeType {
55
+ DISCOUNTPERCENTAGE = "discountPercentage",
56
+ DISCOUNTAMOUNT = "discountAmount",
57
+ NEWITEM = "newItem",
58
+ TEXT = "text",
59
+ IMAGE = "image",
60
+ CUSTOM_HTML = "customHtml"
61
+ }
@@ -0,0 +1,16 @@
1
+ export type TermFacetAction = {
2
+ type: 'terms';
3
+ value: string;
4
+ key: string;
5
+ };
6
+ export type HierarchyFacetAction = {
7
+ type: 'hierarchy';
8
+ value: string;
9
+ key: string;
10
+ };
11
+ export type RangeFacetAction = {
12
+ type: 'range';
13
+ value: string[];
14
+ key: string;
15
+ };
16
+ export type FacetAction = TermFacetAction | RangeFacetAction | HierarchyFacetAction;
@@ -0,0 +1,9 @@
1
+ export type UnfoldedFilter = {
2
+ key: string;
3
+ value: string;
4
+ type: FilterType;
5
+ };
6
+ export type LabeledFilter = UnfoldedFilter & {
7
+ label: string;
8
+ };
9
+ export type FilterType = 'terms' | 'range' | 'hierarchy';
@@ -0,0 +1,20 @@
1
+ import type { SearchResultsPaginationLabels } from './SearchResultsPagination';
2
+ export type PaginationOptions = {
3
+ pageSize: PaginationPageSize;
4
+ pageSelect: PaginationPageSelect;
5
+ labels: SearchResultsPaginationLabels;
6
+ };
7
+ export type PaginationPageSize = {
8
+ sizes: number[];
9
+ selectedSize: number;
10
+ };
11
+ export type PaginationPageSelect = {
12
+ count: number;
13
+ selectedPage: number;
14
+ display: number;
15
+ displayMobile: number;
16
+ };
17
+ export type PaginationDisplay = {
18
+ pageSize: boolean;
19
+ pageSelect: boolean;
20
+ };
@@ -0,0 +1,4 @@
1
+ import type { FilterGroup } from '@getlupa/client-sdk/Types';
2
+ export type QueryParams = {
3
+ filters?: FilterGroup;
4
+ } & Record<string, string>;
@@ -0,0 +1,5 @@
1
+ export type ResultsLayout = 'Grid' | 'List';
2
+ export declare enum ResultsLayoutEnum {
3
+ GRID = "Grid",
4
+ LIST = "List"
5
+ }
@@ -0,0 +1 @@
1
+ export type RoutingBehavior = 'direct-link' | 'event';
@@ -0,0 +1,16 @@
1
+ import type { DocumentElement } from '../DocumentElement';
2
+ import { SearchResultsProductCardOptions } from './SearchResultsProductCardOptions';
3
+ export type SearchResultsAdditionalPanelOptions = Partial<SearchResultsProductCardOptions> & {
4
+ location: 'top' | 'bottom';
5
+ queryKey: string;
6
+ initialCountLimit: number;
7
+ totalCountLimit: number;
8
+ links?: {
9
+ details: string;
10
+ };
11
+ labels: {
12
+ showMore: string;
13
+ showLess: string;
14
+ };
15
+ elements: DocumentElement[];
16
+ };
@@ -0,0 +1,177 @@
1
+ import type { SdkOptions } from '../General';
2
+ import type { CategoryFilterOptions } from '../product-list/ProductListOptions';
3
+ import type { SearchResultsAdditionalPanelOptions } from './SearchResultsAdditionalPanelOptions';
4
+ import type { SearchResultsProductCardOptions } from './SearchResultsProductCardOptions';
5
+ import type { SearchResultsSortOptions } from './SearchResultsSort';
6
+ export type SearchResultsOptions = SearchResultsProductOptions & SearchResultsAdditionalPanels & {
7
+ containerSelector: string;
8
+ breadcrumbs: SearchResultsBreadcrumb[];
9
+ classMap?: Record<string, string>;
10
+ disallowEmptyQuery?: boolean;
11
+ callbacks?: SearchResultEventCallbacks;
12
+ categories?: CategoryFilterOptions;
13
+ dynamicData?: DynamicData;
14
+ };
15
+ export type SearchTitlePosition = 'page-top' | 'search-results-top';
16
+ export type SearchResultsDidYouMeanLabels = {
17
+ noResultsSuggestion: string;
18
+ didYouMean: string;
19
+ };
20
+ export type SearchResultsSimilarQueriesLabels = {
21
+ similarQuery: string;
22
+ similarQueries: string;
23
+ aiSuggestions?: string;
24
+ };
25
+ export type CallbackContext = {
26
+ queryKey: string;
27
+ hasResults?: boolean;
28
+ urlQueryString?: string;
29
+ productId?: string;
30
+ };
31
+ export type SearchResultEventCallbacks = {
32
+ onSearchResults?: (context: CallbackContext) => unknown;
33
+ onAdditionalPanelResults?: (context: CallbackContext) => unknown;
34
+ onCategoryFilterResults?: (context: CallbackContext) => unknown;
35
+ onProductClick?: (context: CallbackContext) => unknown;
36
+ onUrlQueryChange?: (context: CallbackContext) => unknown;
37
+ onMounted?: () => unknown;
38
+ };
39
+ export type SearchResultsOptionLabels = SearchResultsPaginationLabels & SearchResultsDidYouMeanLabels & SearchResultsSimilarQueriesLabels & {
40
+ sortBy: string;
41
+ currency: string;
42
+ priceSeparator?: string;
43
+ searchResults?: string;
44
+ itemCount: string;
45
+ emptyResults: string;
46
+ mobileFilterButton: string;
47
+ htmlTitleTemplate: string;
48
+ outOfStock?: string;
49
+ noItemsInPage?: string;
50
+ backToFirstPage?: string;
51
+ };
52
+ export type SearchResultsAdditionalPanels = {
53
+ additionalPanels?: SearchResultsAdditionalPanelOptions[];
54
+ };
55
+ export type SearchResultsProductOptions = SearchResultsProductCardOptions & SearchResultsAdditionalPanels & {
56
+ grid: ProductGrid;
57
+ options: SdkOptions;
58
+ queryKey: string;
59
+ pagination: SearchResultsPagination;
60
+ sort: SearchResultsSortOptions[];
61
+ filters?: SearchResultsFilterOptions;
62
+ searchTitlePosition?: string;
63
+ toolbar?: {
64
+ layoutSelector?: boolean;
65
+ itemSummary?: boolean;
66
+ clearFilters?: boolean;
67
+ totalCount?: boolean;
68
+ };
69
+ };
70
+ export type ProductGrid = {
71
+ columns: {
72
+ xl: number;
73
+ l: number;
74
+ md: number;
75
+ sm: number;
76
+ xs: number;
77
+ };
78
+ };
79
+ export type SearchResultsPaginationLabels = {
80
+ pageSize: string;
81
+ showMore: string;
82
+ showLess?: string;
83
+ };
84
+ export type ResponsiveSearchResultPageSizes = {
85
+ xs: number[];
86
+ sm: number[];
87
+ md: number[];
88
+ l: number[];
89
+ xl: number[];
90
+ };
91
+ export type SearchResultPageSizes = number[] | ResponsiveSearchResultPageSizes;
92
+ export type SearchResultsPagination = {
93
+ sizeSelection: {
94
+ sizes: SearchResultPageSizes;
95
+ position: SearchResultsPaginationPosition;
96
+ };
97
+ pageSelection: {
98
+ position: SearchResultsPaginationPosition;
99
+ display: number;
100
+ displayMobile: number;
101
+ };
102
+ };
103
+ export type SearchResultsPaginationPosition = {
104
+ top: boolean;
105
+ bottom: boolean;
106
+ };
107
+ export type ResultCurrentFilterOptions = {
108
+ labels: {
109
+ title: string;
110
+ clearAll: string;
111
+ };
112
+ visibility?: {
113
+ mobileSidebar?: boolean;
114
+ mobileToolbar?: boolean;
115
+ desktopSidebar?: boolean;
116
+ desktopToolbar?: boolean;
117
+ };
118
+ mobileSidebar?: {
119
+ showFilterCount?: boolean;
120
+ activeFiltersExpanded?: boolean;
121
+ };
122
+ desktopToolbar?: {
123
+ activeFiltersExpanded?: boolean;
124
+ };
125
+ };
126
+ export type FacetStyle = 'sidebar' | 'top-dropdown';
127
+ export type FacetFilterQuery = {
128
+ queryKey: string;
129
+ };
130
+ export type ResultFacetOptions = {
131
+ labels: {
132
+ title: string;
133
+ showAll: string;
134
+ showLess?: string;
135
+ facetFilter: string;
136
+ facetClear?: string;
137
+ };
138
+ promotedFacets?: string[];
139
+ filterable?: {
140
+ minValues: number;
141
+ };
142
+ hierarchy?: {
143
+ maxInitialLevel: number;
144
+ topLevelValueCountLimit?: number;
145
+ filterable?: boolean;
146
+ };
147
+ stats?: {
148
+ slider?: boolean;
149
+ inputs?: boolean;
150
+ labels?: {
151
+ from?: string;
152
+ to?: string;
153
+ };
154
+ };
155
+ facetValueCountLimit?: number;
156
+ showDocumentCount?: boolean;
157
+ style?: {
158
+ type: FacetStyle;
159
+ };
160
+ exclude?: string[];
161
+ expand?: string[];
162
+ facetFilterQueries?: Record<string, FacetFilterQuery>;
163
+ };
164
+ export type SearchResultsFilterOptions = {
165
+ currentFilters?: ResultCurrentFilterOptions;
166
+ facets?: ResultFacetOptions;
167
+ categories?: CategoryFilterOptions;
168
+ };
169
+ export type SearchResultsBreadcrumb = {
170
+ label: string;
171
+ link?: string;
172
+ };
173
+ export type DynamicData = {
174
+ enabled?: boolean;
175
+ cache?: boolean;
176
+ handler?: (documentIds: string[]) => Promise<Record<'id' | string, unknown>[]>;
177
+ };
@@ -0,0 +1,21 @@
1
+ export type SearchResultsPaginationLabels = {
2
+ pageSize: string;
3
+ showMore?: string;
4
+ showLess?: string;
5
+ itemCount: string;
6
+ filteredItemCount?: string;
7
+ };
8
+ export type SearchResultsPagination = {
9
+ sizeSelection: {
10
+ sizes: number[];
11
+ position: SearchResultsPaginationPosition;
12
+ };
13
+ pageSelection: {
14
+ position: SearchResultsPaginationPosition;
15
+ display: number;
16
+ };
17
+ };
18
+ export type SearchResultsPaginationPosition = {
19
+ top: boolean;
20
+ bottom: boolean;
21
+ };
@@ -0,0 +1,24 @@
1
+ import type { Document } from '@getlupa/client-sdk/Types';
2
+ import type { DocumentElement } from '../DocumentElement';
3
+ import type { BadgeElement, BadgeGenerateOptions } from './BadgeOptions';
4
+ import type { RoutingBehavior } from './RoutingBehavior';
5
+ import type { SearchResultsOptionLabels } from './SearchResultsOptions';
6
+ export type SearchResultsProductCardOptions = {
7
+ labels: SearchResultsOptionLabels;
8
+ routingBehavior?: RoutingBehavior;
9
+ isInStock?: (doc: Document) => boolean;
10
+ badges?: SearchResultBadgeOptions;
11
+ links?: {
12
+ details: string;
13
+ };
14
+ elements: DocumentElement[];
15
+ queryKey: string;
16
+ idKey?: string;
17
+ titleKey?: string;
18
+ };
19
+ export type SearchResultBadgeOptions = {
20
+ anchor: AnchorPosition;
21
+ elements: BadgeElement[];
22
+ generate?: BadgeGenerateOptions;
23
+ };
24
+ export type AnchorPosition = 'tr' | 'tl';
@@ -0,0 +1,11 @@
1
+ import type { SortDirection } from '../General';
2
+ export type SearchResultsSortOptions = {
3
+ key: string;
4
+ label: string;
5
+ config: Record<string, SortDirection>[];
6
+ default?: boolean;
7
+ };
8
+ export type SortOptions = {
9
+ label: string;
10
+ options: SearchResultsSortOptions[];
11
+ };
@@ -0,0 +1 @@
1
+ export declare const debounce: (func: (...args: any[]) => any, timeout?: number) => (...args: any[]) => void;
@@ -0,0 +1 @@
1
+ export declare const setDocumentTitle: (template: string, textToInsert?: string) => void;
@@ -0,0 +1,2 @@
1
+ export declare const bindSearchTriggers: (triggers: string[], event: () => unknown) => void;
2
+ export declare const unbindSearchTriggers: (triggers: string[], event: () => unknown) => void;
@@ -0,0 +1,23 @@
1
+ import type { HierarchyFacetAction, RangeFacetAction, TermFacetAction } from '../types/search-results/FacetAction';
2
+ import type { FilterType } from '../types/search-results/Filters';
3
+ import type { FilterGroup } from '@getlupa/client-sdk/Types';
4
+ type AppendParams = ({ params, paramsToRemove, encode }: {
5
+ params: {
6
+ name: string;
7
+ value: string | string[];
8
+ }[];
9
+ paramsToRemove?: string[];
10
+ encode?: boolean;
11
+ }) => unknown;
12
+ export declare const getFacetKey: (key: string, type: FilterType) => string;
13
+ export declare const getFacetParam: (key: string, value: string[] | string, type?: string) => {
14
+ name: string;
15
+ value: string[] | string;
16
+ };
17
+ export declare const toggleTermFilter: (appendParams: AppendParams, facetAction: TermFacetAction, currentFilters?: FilterGroup) => void;
18
+ export declare const toggleHierarchyFilter: (appendParams: AppendParams, facetAction: HierarchyFacetAction, currentFilters?: FilterGroup, removeAllLevels?: boolean) => void;
19
+ export declare const toggleRangeFilter: (appendParams: AppendParams, facetAction: RangeFacetAction, currentFilters?: FilterGroup) => void;
20
+ export declare const toggleTermParam: (params?: string[], param?: string) => string[];
21
+ export declare const toggleLastPram: (params?: string[], param?: string) => string[];
22
+ export declare const toggleHierarchyParam: (params?: string[], param?: string, removeAllLevels?: boolean) => string[];
23
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { LabeledFilter, UnfoldedFilter } from '../types/search-results/Filters';
2
+ import type { FacetResult, FilterGroup, FilterGroupItemTypeRange, HierarchyTree } from '@getlupa/client-sdk/Types';
3
+ export declare const formatRange: (filter: FilterGroupItemTypeRange) => string;
4
+ export declare const unfoldFilters: (filters?: FilterGroup) => UnfoldedFilter[];
5
+ export declare const getLabeledFilters: (filters: UnfoldedFilter[], facets?: FacetResult[]) => LabeledFilter[];
6
+ export declare const isFacetKey: (key: string) => boolean;
7
+ export declare const isArrayKey: (key: string) => boolean;
8
+ export declare const getMostSpecificHierarchyTerms: (terms: string[]) => string[];
9
+ export declare const recursiveFilter: (items: HierarchyTree[], query?: string) => HierarchyTree[];
10
+ export declare const recursiveFilterItem: (item: HierarchyTree, query?: string) => HierarchyTree | undefined;
11
+ export declare const rangeFilterToString: (rangeFilter: FilterGroupItemTypeRange, separator?: string) => string;
@@ -0,0 +1,2 @@
1
+ export declare const retrieveHistory: () => string[];
2
+ export declare const saveHistory: (items: string[]) => void;
@@ -0,0 +1,6 @@
1
+ import type { InputSuggestionFacet } from '../types/search-box/Common';
2
+ export declare const generateLink: (linkPattern: string, document: Record<string, unknown>) => string;
3
+ export declare const generateResultLink: (link: string, searchText?: string, facet?: InputSuggestionFacet) => string;
4
+ export declare const getPathName: (resultPageLink: string) => string;
5
+ export declare const getRelativePath: (link: string) => string;
6
+ export declare const linksMatch: (link1?: string, link2?: string) => boolean;
@@ -0,0 +1,9 @@
1
+ import type { QueryParams } from '../types/search-results/QueryParams';
2
+ export declare const parseParams: (searchParams?: URLSearchParams) => QueryParams;
3
+ export declare const appendParam: (url: URL, { name, value }: {
4
+ name: string;
5
+ value: string | string[];
6
+ }, encode?: boolean) => void;
7
+ export declare const getRemovableParams: (url: URL, paramsToRemove?: 'all' | string[]) => string[] | undefined;
8
+ export declare const removeParams: (url: URL, params?: string[]) => void;
9
+ export declare const encodeParam: (param: string) => string;
@@ -0,0 +1,5 @@
1
+ export declare const pick: <T extends Record<string, unknown>, U extends keyof T>(obj: T, keys: U[]) => Pick<T, U>;
2
+ export declare const getHint: (suggestion: string, inputValue: string) => string;
3
+ export declare const reverseKeyValue: (obj: Record<string, string>) => Record<string, string>;
4
+ export declare const pickClosestNumber: (numbers: number[], closestTo: number) => number;
5
+ export declare const getPageCount: (total: number, limit: number) => number;
@@ -0,0 +1,2 @@
1
+ export declare const formatPrice: (price?: string | number, currency?: string, separator?: string) => string;
2
+ export declare const formatPriceSummary: ([min, max]: [min?: string | number, max?: string | number], currency?: string, separator?: string) => string;
@@ -0,0 +1,5 @@
1
+ import type { QueryParams } from '../types/search-results/QueryParams';
2
+ import type { SearchResultsSortOptions } from '../types/search-results/SearchResultsSort';
3
+ import type { FilterGroup, PublicQuery } from '@getlupa/client-sdk/Types';
4
+ export declare const createPublicQuery: (queryParams: QueryParams, sortOptions?: SearchResultsSortOptions[], defaultPageSize?: number) => PublicQuery;
5
+ export declare const getPublicQuery: (publicQuery: PublicQuery, initialFilters: FilterGroup, isProductList: boolean) => PublicQuery;
@@ -0,0 +1,6 @@
1
+ import type { InputSuggestionFacet } from '../types/search-box/Common';
2
+ import type { RoutingBehavior } from '..';
3
+ export declare const emitRoutingEvent: (url: string) => void;
4
+ export declare const handleRoutingEvent: (link: string, event?: Event, hasEventRouting?: boolean) => void;
5
+ export declare const redirectToResultsPage: (link: string, searchText: string, facet?: InputSuggestionFacet, routingBehavior?: RoutingBehavior) => void;
6
+ export declare const getPageUrl: (pathnameOverride?: string) => URL;
@@ -0,0 +1,4 @@
1
+ export declare const scrollToSearchResults: (timeout?: number) => void;
2
+ export declare const scrollTo: (elementId: string) => void;
3
+ export declare const disableBodyScroll: () => void;
4
+ export declare const enableBodyScroll: () => void;
@@ -0,0 +1,9 @@
1
+ import type { Document } from '@getlupa/client-sdk/Types';
2
+ export declare const getNormalizedString: (str?: string | number) => string;
3
+ export declare const capitalize: (str?: string) => string;
4
+ export declare const addParamsToLabel: (label: string, ...params: unknown[]) => string;
5
+ export declare const getRandomString: (length: number) => string;
6
+ export declare const getDisplayValue: (value?: string | number) => string;
7
+ export declare const getProductKey: (index: string, product: Document, idKey: string | undefined) => string;
8
+ export declare const normalizeFloat: (value?: string) => number;
9
+ export declare const escapeHtml: (value?: string) => string;
@@ -0,0 +1,3 @@
1
+ import type { DisplaySuggestion } from '../types/search-box/Common';
2
+ import type { Suggestion } from '@getlupa/client-sdk/Types';
3
+ export declare const flattenSuggestions: (suggestions: Suggestion[], inputValue: string) => DisplaySuggestion[];
@@ -0,0 +1,15 @@
1
+ import type { TrackingOptions } from '../types/General';
2
+ import type { TrackableEventData } from '../types/search-box/Common';
3
+ import type { Options } from '@getlupa/client-sdk/Types';
4
+ declare global {
5
+ interface Window {
6
+ ga: any;
7
+ dataLayer: any;
8
+ }
9
+ }
10
+ export declare const initTracking: (options: TrackingOptions) => void;
11
+ export declare const getLupaTrackingContext: () => {
12
+ userId?: string;
13
+ sessionId?: string;
14
+ };
15
+ export declare const track: (queryKey?: string, data?: TrackableEventData, options?: Options) => void;
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--lupa-available-height: 100%}#lupa-search-box-panel{position:absolute;width:100%;height:auto;border:1px solid #d8d8d8;background:#fff;box-shadow:0px 4px 6px rgba(0,0,0,.25);z-index:5000;border-radius:0;font-family:"Roboto",sans-serif;box-sizing:border-box}#lupa-search-box-panel:empty{display:none}@media(max-width: 767px){#lupa-search-box-panel{max-height:var(--lupa-available-height);overflow-y:auto}}.lupa-main-panel{display:grid;grid-template:"suggestions docs";grid-template-columns:minmax(50px, 35%) minmax(250px, 1fr)}@media(max-width: 767px){.lupa-main-panel{display:block}}.lupa-panel-suggestion-index{grid-area:left;word-break:break-word}@media(min-width: 767px){.lupa-panel-suggestion-index{border-right:1px solid #d8d8d8}}.lupa-panel-document-index{grid-area:right;word-break:break-word}.lupa-more-results{cursor:pointer;border-top:1px solid #d8d8d8;padding:5px 10px;color:#161616;background-color:#fff;font-size:14px;line-height:24px}.lupa-more-results:hover{background-color:rgba(0,0,0,.05);color:#3c53f4}#lupa-search-box-panel{display:flex;justify-content:space-between;flex-direction:column}.lupa-more-results{text-align:center}#lupa-search-box{width:100%}.lupa-search-box-wrapper{position:relative}.lupa-suggestion{cursor:pointer;display:flex;flex-wrap:wrap;align-items:center;color:#161616;background-color:#fff;padding:4px 20px;font-size:16px;line-height:24px}.lupa-suggestion strong{color:#161616}.lupa-suggestion-value{margin-right:7px}.lupa-suggestion-facet{font-size:13px}.lupa-suggestion-facet-label{margin-right:2px}.lupa-suggestion-facet-value{font-weight:bold}.lupa-suggestion-highlighted,.lupa-suggestion:hover{cursor:pointer;color:#3c53f4;background-color:rgba(0,0,0,.05)}.lupa-suggestion-highlighted strong,.lupa-suggestion:hover strong{color:#3c53f4}.lupa-suggestion:hover{text-decoration:underline}.lupa-search-box-input-field{position:relative !important;background:rgba(0,0,0,0) !important}.lupa-search-box-input-field,.lupa-hint{color:#161616;height:48px;padding:0 16px;line-height:1.5;font-size:16px;font-family:"Roboto",sans-serif;width:100%}.lupa-search-box-input-field{border:1px solid #d8d8d8;color:#161616}.lupa-hint{opacity:.5;position:absolute !important;pointer-events:none;border:1px solid rgba(0,0,0,0)}.lupa-input-clear{display:none}.lupa-search-box-history-item{cursor:pointer}.lupa-search-box-history-item-content{display:flex;justify-content:space-between}.lupa-search-box-history-item-text{width:100%;display:flex;align-items:center;line-height:24px;font-size:16px;padding:4px 20px;color:#161616}.lupa-search-box-history-item-text:hover,.lupa-search-box-history-item-text.lupa-search-box-history-item-highlighted{background-color:rgba(0,0,0,.05);color:#161616}.lupa-search-box-history-item-text:hover{text-decoration:underline}.lupa-search-box-history-item-clear{display:flex;align-items:center;padding:4px 20px;color:#161616;font-size:24px}.lupa-search-box-history-item-clear:hover{color:#161616;background-color:rgba(0,0,0,.05)}.lupa-search-box-history-clear-all{text-align:center;cursor:pointer;border-top:1px solid #d8d8d8;padding:4px 20px;line-height:24px;font-size:14px;color:#161616}.lupa-search-box-history-clear-all:hover{background-color:rgba(0,0,0,.05);color:#161616}.lupa-search-box-product{padding:10px;font-size:14px;display:flex;cursor:pointer;text-decoration:inherit;color:inherit}.lupa-search-box-product:hover,.lupa-search-box-product.lupa-search-box-product-highlighted{text-decoration:none;background-color:rgba(0,0,0,.05)}.lupa-search-box-product:hover .lupa-search-box-product-title,.lupa-search-box-product.lupa-search-box-product-highlighted .lupa-search-box-product-title{color:#161616}.lupa-search-box-product:hover .lupa-search-box-product-custom,.lupa-search-box-product.lupa-search-box-product-highlighted .lupa-search-box-product-custom{color:#161616}.lupa-search-box-product:hover .lupa-search-box-product-price,.lupa-search-box-product.lupa-search-box-product-highlighted .lupa-search-box-product-price{color:#161616}.lupa-search-box-product:hover .lupa-search-box-product-regular-price,.lupa-search-box-product.lupa-search-box-product-highlighted .lupa-search-box-product-regular-price{color:#161616}.lupa-search-box-product-details-section{font-family:"Roboto",sans-serif}.lupa-search-box-product-details-section{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.lupa-search-box-product-image-section{min-width:85px;flex:0 1}.lupa-search-box-image-wrapper,.lupa-search-box-image{width:70px;height:70px}.lupa-search-box-image{object-fit:contain}.lupa-search-box-product-title{font-size:16px;line-height:15px;color:#161616}.lupa-search-box-product-custom{font-size:14px;line-height:15px;color:#161616}.lupa-search-box-product-price{font-size:16px;line-height:15px;color:#3c53f4}.lupa-search-box-product-regular-price{font-size:14px;line-height:15px;color:#161616;font-weight:normal}.lupa-search-box-product-description{max-height:42px;line-height:14px;color:#161616;overflow:hidden}.lupa-search-result-facets{font-family:"Roboto",sans-serif}.lupa-facets-title{font-size:16px;line-height:1.1;font-weight:700;padding:0 0 10px;color:#161616}.lupa-search-result-facet-display{border-bottom:1px solid #d8d8d8}.lupa-search-result-facet-display:first-child{border-top:1px solid #d8d8d8}.lupa-search-result-facet-label{justify-content:space-between;display:flex;font-size:14px;line-height:21px;font-weight:700;padding:10.5px;color:#161616;cursor:pointer}.lupa-search-result-facet-label:hover{color:#3c53f4}.lupa-search-result-facet-label.open{padding:10.5px 10.5px 0}.lupa-facet-label-caret::after{content:"⌄";font-family:"Roboto",sans-serif;color:#161616;display:block;font-weight:400;overflow:hidden;text-align:center}.lupa-facet-label-caret.open::after{transform:rotate(180deg)}.lupa-facet-content{padding:5px 10px 20px}.lupa-facet-term{padding:4px 5px;margin:16px 0 0}.lupa-term-checkbox-label{width:100%;padding-left:8px;display:flex;justify-content:space-between;align-items:center}.lupa-facet-term{cursor:pointer;display:flex;align-items:center;font-size:14px;color:#161616}.lupa-facet-term:hover{background:rgba(0,0,0,.05)}.lupa-facet-term.checked{font-weight:bold}.lupa-term-count{color:#161616}.lupa-term-checkbox{display:inline-block;height:18px;width:18px;box-sizing:border-box;border:2px solid #3c53f4;border-radius:0px;content:"";display:flex;justify-content:center;align-items:center}.lupa-term-checkbox.checked::after{border:3px solid #3c53f4;border-radius:0px;display:inline-block;content:""}.lupa-show-more-facet-results{justify-content:center}.lupa-term-filter{width:100%;padding:8px;box-sizing:border-box;border:1px solid #d8d8d8}.lupa-show-more-facet-results{color:#161616;font-size:14px}.lupa-show-more-facet-results:hover{color:#161616}.lupa-stats-facet-summary{text-align:center;font-size:14px}.lupa-stats-slider-wrapper{margin:10px 0 0;padding:0 8px}.lupa-stats-slider-wrapper .vue-slider-rail{background-color:rgba(60,83,244,.3)}.lupa-stats-slider-wrapper .vue-slider-process{background-color:#3c53f4}.lupa-stats-slider-wrapper .vue-slider-dot{background:#3c53f4;border-radius:50%;border:0px solid #3c53f4;z-index:3;cursor:pointer}.lupa-stats-slider-wrapper .vue-slider-dot:hover{background:#3c53f4}.lupa-stats-range-label{font-size:12px;margin:0 0 5px}.lupa-stats-facet-summary-input{display:flex;align-items:center;justify-content:center}.lupa-stats-facet-summary-input input{width:100%;padding:8px;box-sizing:border-box;border:1px solid #d8d8d8}.lupa-stats-facet-summary-input .lupa-stats-from,.lupa-stats-facet-summary-input .lupa-stats-to{display:flex;align-items:center}.lupa-stats-facet-summary-input .lupa-stats-separator{margin:0 10px}.lupa-stats-facet-summary-input span{padding:0 5px}.lupa-search-result-facet-list.lupa-top-dropdown{display:flex;flex-wrap:wrap}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-search-result-facet-display{margin:0 10px 0 0;border-bottom:none;border-top:none}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-facet-content{position:absolute;background:#fff;z-index:10;border:1px solid #d8d8d8;min-width:220px}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-terms-list{overflow-y:auto;max-height:300px;margin:2px 0 0}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-search-result-facet-label{border:1px solid #d8d8d8}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-search-result-facet-label.lupa-has-filter{border-width:2px}.lupa-search-result-facet-list.lupa-top-dropdown .lupa-single-facet-clear{cursor:pointer;text-align:center;margin:3px 0 0;padding:5px 0 3px;font-size:5px 0 3px;border-top:1px solid #d8d8d8}.lupa-search-result-current-filters{font-family:"Roboto",sans-serif}.lupa-current-filter-title{display:flex;align-items:center;justify-content:space-between;font-size:16px;line-height:1.1;font-weight:700;padding:0;color:#161616}.lupa-current-filter-list{margin:0;padding:0 10px 5px}.lupa-search-result-current-filters{margin:0 0 25px}.lupa-clear-all-filters{cursor:pointer;color:#0c26d7;padding:0 10.5px;margin:0 0 31.5px;font-size:14px}.lupa-clear-all-filters:hover{color:#091da7}.lupa-search-result-filter-value{display:flex;align-items:center;flex-wrap:wrap;margin:10.5px 0;font-size:14px}.lupa-current-filter-action{padding:0 5px 0 0;font-size:17px;color:#3c53f4;cursor:pointer}.lupa-current-filter-action:hover{color:#3c53f4}.lupa-current-filter-label,.lupa-current-filter-value{margin:0 0 0 5px}.lupa-current-filter-label{color:#161616}.lupa-current-filter-value{color:#3c53f4}.lupa-filter-title-caret::after{content:"⌄";font-family:"Roboto",sans-serif;color:#161616;font-size:14px;display:block;font-weight:400;overflow:hidden;text-align:center}.lupa-filter-title-caret.open::after{transform:rotate(180deg)}.lupa-filter-count{font-size:14px;color:#161616}.lupa-toolbar-filters,.lupa-toolbar-filters-desktop{margin-right:12px}.lupa-toolbar-filters .filter-values,.lupa-toolbar-filters-desktop .filter-values{display:flex}.lupa-result-page-title{font-size:16px;margin:0 0 38px;font-family:"Roboto",sans-serif}.lupa-search-result-filters{padding:0 4.6% 0 0}#lupa-search-results,.top-layout-wrapper{width:100%;height:100%;display:flex;flex-direction:row;justify-content:flex-start}.search-content{width:100%}.lupa-search-result-filters{flex:25%;flex-grow:1;flex-shrink:0;box-sizing:border-box}#lupa-search-results-products{position:relative;padding:0 0 0 1.6%;width:100%}.lupa-products{display:flex;align-self:flex-start;flex-wrap:wrap;margin:0 0 31.5px -16px}.lupa-loader{background-color:#fff;display:flex;height:calc(100% - 0px);opacity:.5;position:absolute;z-index:555}.lupa-search-result-product-card{box-sizing:border-box}#lupa-search-results-did-you-mean{font-family:"Roboto",sans-serif}.lupa-suggested-search-text{font-weight:bold}.lupa-highlighted-search-text{font-weight:bold;font-style:italic}#lupa-search-results-did-you-mean{margin-bottom:10px}.lupa-did-you-mean{text-decoration:none}.lupa-did-you-mean:hover{text-decoration:underline;cursor:pointer}#lupa-select{position:relative;font-family:"Roboto",sans-serif;color:#161616;text-indent:.01em}.lupa-select-dropdown{cursor:pointer;padding:20px 25px 4px 8px;font-family:"Roboto",sans-serif;background:#fff;background-clip:padding-box;border:1px solid #d8d8d8;border-radius:0;font-size:14px;height:48px;line-height:1.5;vertical-align:baseline;box-sizing:border-box;appearance:none}.lupa-select-dropdown:focus{outline:none;box-shadow:0 0 3px 1px #6c7ef7}.lupa-select-label{font-family:"Roboto",sans-serif;font-size:12px;line-height:1;position:absolute;pointer-events:none;top:8px;left:8px}.lupa-search-results-summary{display:flex;align-items:center}#lupa-search-results-toolbar{display:flex;flex-direction:row;justify-content:space-between;margin:0 0 40px}.lupa-toolbar-left{display:flex}.lupa-toolbar-right{display:flex;flex-direction:row}#lupa-search-results-page-select{display:flex;flex-direction:row;align-items:center}#lupa-search-results-layout-selection{display:flex;flex-direction:row;align-items:center}#lupa-search-results-layout-selection div{margin:0 16px 0 0}.lupa-search-results-summary{color:#161616;font-family:"Roboto",sans-serif;font-size:14px}#lupa-search-results-page-size{margin:0}#lupa-search-results-page-size .lupa-select-dropdown{width:125px}.lupa-search-results-sort{margin:0 0 0 8px}.lupa-filter-clear{cursor:pointer}#lupa-search-results-page-select{font-family:"Roboto",sans-serif}.lupa-page-number-separator{margin:0 12px 0 0}.lupa-page-number{cursor:pointer;color:#3c53f4;font-size:12px;padding:0 5.25px;margin:0 12px 0 0}.lupa-page-number:hover{color:#161616}.lupa-page-number.lupa-page-number-selected{color:#161616;font-weight:700}.lupa-page-arrow{cursor:pointer;font-weight:700;margin:0 12px 0 0;padding:0 8px}.lupa-page-arrow:before{line-height:31.5px;color:#161616;content:"";font-family:"Roboto",sans-serif;font-size:11px}.lupa-page-arrow:hover:before{color:#3c53f4}.lupa-search-result-product-card{height:auto;min-height:250px;border:1px solid #d8d8d8;padding:12px;margin:0}.lupa-out-of-stock{opacity:.5}.lupa-search-result-product-contents{height:100%;display:flex;flex-direction:column;font-family:"Roboto",sans-serif;font-size:16px}.lupa-search-result-product-contents-list{flex-direction:row}.lupa-search-result-product-details-section{display:flex;flex-direction:column;justify-content:space-between;height:100%}.lupa-search-results-image-wrapper{padding-bottom:125%;display:block;height:0;overflow:hidden;position:relative;z-index:1;display:flex;justify-content:center}.lupa-search-results-image{width:100%;height:100%;object-fit:contain;max-width:240px;max-height:195px;margin:auto;position:absolute}.lupa-search-result-product-image-section{cursor:pointer;border:none;padding:12px 8px;margin:0}.lupa-search-results-product-title{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;font-size:16px;margin:0 0 12px;line-height:21px}.lupa-search-results-product-title-text{font-weight:bold;color:#161616}.lupa-search-results-product-title-text.lupa-title-link{text-decoration:none;color:#161616}.lupa-search-results-product-title-text.lupa-title-link:hover{text-decoration:underline;color:#3c53f4}.lupa-search-results-product-regular-price{font-size:16px;font-weight:700;padding:10px 8px 0 5px}#lupa-search-results-rating{display:flex;flex-direction:row;align-items:center;width:auto;margin:0 0 15.75px}.lupa-ratings{display:flex;flex-direction:row;align-items:center;width:auto}.lupa-ratings-base,.lupa-rating-wrapper{display:flex;width:90px}.lupa-rating-wrapper{position:absolute}.lupa-ratings-highlighted{display:flex;overflow:hidden}.lupa-total-ratings{color:#161616 !important;text-decoration:none}.lupa-total-ratings:hover{color:#3c53f4 !important;text-decoration:underline !important}.lupa-search-result-product-contents-list .lupa-search-result-product-card{min-height:50px}.lupa-search-result-product-contents-list .lupa-search-results-image{width:240px;height:195px;object-fit:contain;margin:auto;position:relative}.lupa-search-result-product-contents-list .lupa-search-result-product-details-section{width:100%;padding:15px}.lupa-search-result-product-contents-list .lupa-search-results-image{max-width:120px;max-height:97.5px}.lupa-search-result-product-contents-list .lupa-search-results-product-addtocart{order:3;margin:0 -16px 0;position:static}.lupa-search-result-product-contents-list .lupa-search-results-product-addtocart button{padding:8px 32px}.lupa-search-results-product-description{max-height:200px;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.lupa-empty-results{text-align:center;width:100%;font-size:14px;font-family:"Roboto",sans-serif;color:#161616}.lupa-empty-results .lupa-empty-page-action{cursor:pointer;text-decoration:underline}.lupa-mobile-filter-sidebar{position:fixed;width:100%;height:var(--lupa-full-height);left:0;top:0;bottom:0;z-index:555;background:rgba(0,0,0,0);display:flex}.lupa-mobile-filter-sidebar .lupa-mobile-sidebar-content{height:var(--lupa-full-height);width:100%;z-index:555;background:#fff}.lupa-mobile-filter-sidebar .lupa-sidebar-close{background:rgba(0,0,0,.6);height:var(--lupa-full-height);width:30px}.lupa-sidebar-top{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 13.5px 0 0;border-bottom:1px solid #d8d8d8}.lupa-sidebar-title{margin-left:15px;font-weight:700;font-size:16px;font-family:"Roboto",sans-serif;color:#161616}.lupa-sidebar-filter-options .lupa-facets-title{display:none}.lupa-filter-toggle-mobile:after{font-size:16px;color:#6c7ef7;content:"✖";line-height:inherit;font-family:"Roboto",sans-serif;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;text-align:center}.lupa-sidebar-filter-options{overflow-y:scroll;height:calc(100% - 48px)}#lupa-search-results-toolbar.lupa-toolbar-mobile{display:none}.lupa-category-top-mobile-filters{display:none}.lupa-filters-mobile{display:none}.lupa-mobile-toggle{font-family:"Roboto",sans-serif;font-size:14px;color:#6c7ef7;width:208px;border-radius:0;display:none;padding:15px 0;border:1px solid #d8d8d8;line-height:16px;text-align:center;z-index:2}@media(max-width: 767px){.lupa-mobile-toggle{display:block}.lupa-category-top-mobile-filters{display:block}.lupa-filters-mobile{display:block;border-top:1px solid #d8d8d8}.lupa-filters-mobile.lupa-search-result-current-filters.expandable{padding:15px 0;margin:-20px 0 20px}#lupa-search-results-layout-selection{display:none}.lupa-search-results-summary{display:none}#lupa-search-results-page-size{display:none}#lupa-search-results-toolbar.lupa-toolbar-top{display:none}#lupa-search-results-toolbar.lupa-toolbar-mobile{display:flex}.lupa-toolbar-bottom .lupa-toolbar-right{display:none}.lupa-toolbar-mobile .lupa-toolbar-left{display:none}#lupa-search-results-toolbar{justify-content:center}#lupa-search-results-rating{flex-direction:column;align-items:normal}#lupa-search-results-rating .lupa-total-ratings{margin-left:0;margin-top:5px}.lupa-search-result-filters{display:none}.lupa-mobile-filter-sidebar .lupa-search-result-filters{display:flex;flex-direction:column}#lupa-search-results-products{padding:0}.lupa-select-dropdown{width:208px}.lupa-facets-title{padding:16px}.lupa-search-result-current-filters.expandable{padding:16px;border-bottom:1px solid #d8d8d8;margin:0}.lupa-clear-all-filters{margin:0}#lupa-search-results-did-you-mean{margin-bottom:10px}}@media(max-width: 479px){.lupa-mobile-toggle{width:139px}.lupa-select-dropdown{width:139px}}@media(max-width: 350px){.lupa-mobile-toggle{width:100px}.lupa-select-dropdown{width:100px}}@media(max-width: 767px){.lupa-search-result-filters{flex:100%;padding:0}.lupa-search-result-facets{width:100%}.lupa-search-result-facet-display{padding:0 15px}}@media(max-width: 1024px){#lupa-search-results-badges>#lupa-badges{top:-16px}#lupa-search-results-badges>#lupa-badges .lupa-badge{width:32px;height:32px;font-size:11px}}#lupa-search-results-badges{position:relative}#lupa-badges{display:flex;position:absolute;font-family:"Roboto",sans-serif;top:-24px;z-index:1}#lupa-badges .tl{left:-10px}#lupa-badges .tr{right:-10px}.lupa-badge{width:48px;height:48px;font-size:14px;margin:0 8px 0 0;font-weight:700;border-radius:50%}.lupa-text-badges{display:flex}.lupa-image-badges{display:flex}.lupa-image-badges img{width:100%}.lupa-text-badge{color:#fff;background:#3c53f4;display:flex;align-items:center;justify-content:center;text-align:center}#lupa-badges{flex-direction:column;top:0;pointer-events:none;z-index:1000}.lupa-discount-badge{background:#e0232f;color:#fff}.lupa-preorder-badge{background:#4b81eb;color:#fff}.lupa-generated-badges{display:flex;flex-direction:column}.lupa-dynamic-badge{cursor:pointer;pointer-events:all;display:flex;font-weight:600;font-size:14px;line-height:20px;padding:4px;margin-bottom:4px;margin-right:auto;white-space:nowrap}.lupa-dynamic-badge .lupa-badge-title{font-weight:700;letter-spacing:-0.6px;display:flex;align-items:center;justify-content:center;min-width:42px}.lupa-dynamic-badge .lupa-badge-title img{max-height:20px}.lupa-dynamic-badge .lupa-badge-full-text{display:none;margin-left:10px}.lupa-dynamic-badge:hover .lupa-badge-full-text{display:inline-block}#lupa-search-results-breadcrumbs{margin:0 0 24px;font-size:12px}@media(min-width: 767px){#lupa-search-results-breadcrumbs{max-width:1228px;box-sizing:border-box;width:100%}}@media(max-width: 767px){#lupa-search-results-breadcrumbs{display:none}}#lupa-search-results-breadcrumbs .lupa-search-results-breadcrumb-link{text-decoration:none;color:#0c26d7}#lupa-search-results-breadcrumbs .lupa-search-results-breadcrumb-link:hover{text-decoration:underline;color:#091da7}#lupa-search-results-similar-queries{margin-top:20px}.lupa-similar-queries-label{font-size:20px;font-family:"Roboto",sans-serif;font-weight:700;line-height:1.1;margin-top:0;margin-bottom:8px}.lupa-similar-query-label{margin-bottom:48px;font-weight:400;line-height:1.5;color:#4f4f4f;font-family:"Roboto",sans-serif}.lupa-similar-query-value{font-size:16px}.lupa-similar-query-link:hover{text-decoration:underline;cursor:pointer}.lupa-similar-query-crossed{text-decoration:line-through}#lupa-similar-query-text-component span{margin-right:2px;display:inline-block}.lupa-similar-query-label span{margin-right:1.5px;display:inline-block}.lupa-category-filter{padding:0;font-family:"Roboto",sans-serif;margin:0 0 25px}.lupa-category-back{padding:13px 0}.lupa-category-back a{color:#161616;font-size:16px;line-height:20px;font-weight:700;text-decoration:none !important}.lupa-category-back a:hover{color:#3c53f4}.lupa-current-category,.lupa-child-category-item{padding:10px 0 10px 25px}.lupa-current-category a,.lupa-child-category-item a{text-decoration:none !important;color:#161616;font-size:16px;line-height:16px}.lupa-current-category a:hover,.lupa-child-category-item a:hover{color:#3c53f4}.lupa-child-category-item-active,.lupa-current-category-active{color:#3c53f4}.lupa-child-category-list{padding:0 0 0 10px}.lupa-category-overview{margin:30px 0 50px}.lupa-category-title{font-weight:600;font-size:14px;margin:0 0 15px}.lupa-spinner-wrapper{width:100%;overflow:hidden}.lupa-spinner{color:#555;display:flex;justify-content:center;position:relative;width:100%;padding-top:100px;padding-right:72px}.lupa-spinner div{transform-origin:40px 40px;animation:lupa-spinner 1.2s linear infinite}.lupa-spinner div:after{content:" ";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#555}.lupa-spinner div:nth-child(1){transform:rotate(0deg);animation-delay:-1.1s}.lupa-spinner div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.lupa-spinner div:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.lupa-spinner div:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.lupa-spinner div:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.lupa-spinner div:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.lupa-spinner div:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.lupa-spinner div:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.lupa-spinner div:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.lupa-spinner div:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.lupa-spinner div:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.lupa-spinner div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes lupa-spinner{0%{opacity:1}100%{opacity:0}}.lupa-search-result-product-card{width:100%}.lupa-search-box-product-title{font-weight:300}#lupa-search-box-input::after{direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;content:"󰍉";font-size:24px;position:absolute;right:16px;top:12px}.lupa-suggestion{font-weight:300}.lupa-search-box-product-details-section{justify-content:space-between}.lupa-search-box-product-regular-price{text-decoration:line-through;color:#9e9e9e}.lupa-more-results{font-size:16px;font-weight:300}#lupa-search-box-panel{box-shadow:0px 1px 1px rgba(22,22,22,.14),0px 2px 1px rgba(22,22,22,.12),0px 1px 3px rgba(22,22,22,.2);border-radius:24px;border:none;overflow:hidden}.lupa-suggestion-facet-label,.lupa-suggestion-facet-value{line-height:13px}#lupa-search-results-toolbar{margin:0 0 12px;padding-right:1.6%}#lupa-search-results-toolbar.lupa-toolbar-bottom{justify-content:center;margin:24px 0}.lupa-search-results-summary{font-weight:300;font-size:18px;line-height:15px}.lupa-search-results-summary span{color:#3c53f4;font-weight:700}.lupa-page-number{min-width:48px;min-height:48px;color:#464646;font-weight:300;font-size:18px;display:flex;align-items:center;justify-content:center;border-radius:50%;padding:0}.lupa-page-number.lupa-page-number-selected,.lupa-page-number:hover{background:rgba(60,83,244,.08);font-weight:300}.lupa-page-arrow{font-size:0}.lupa-page-arrow::before{direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:20px;content:"󰅂"}.lupa-page-arrow:first-child::before{direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:20px;content:"󰅁"}#lupa-similar-query-text-component,.lupa-highlighted-search-text{color:#3c53f4}.lupa-similar-query-label{margin-bottom:18px;font-weight:300}.lupa-empty-results{font-weight:300;font-size:18px;margin-bottom:36px;color:#9e9e9e}.lupa-search-result-product-card{border-radius:4px;margin-bottom:36px;border:none}.lupa-search-result-product-contents{border:1px solid #d8d8d8;box-shadow:0px 1px 1px rgba(22,22,22,.14),0px 2px 1px rgba(22,22,22,.12),0px 1px 3px rgba(22,22,22,.2);border-radius:4px;padding:16px}.lupa-search-result-product-contents:hover{border-color:#3c53f4}.lupa-search-results-product-title-text{font-weight:300;line-height:29px}.lupa-search-results-image-wrapper{padding-bottom:100%}.lupa-discount{display:inline;font-weight:700;font-size:32px;line-height:27px;color:#3c53f4}.lupa-custom-id{opacity:.5}.lupa-custom-brand{opacity:.5;color:#3c53f4}.lupa-final{display:inline;font-weight:700;font-size:32px;line-height:27px}.lupa-regular{text-decoration:line-through;color:#9e9e9e;display:inline-block;margin-left:4px}.lupa-search-result-filters{padding-right:24px;flex:40%}.lupa-filter-title-text{margin-bottom:24px}.lupa-search-result-facet-display{border:none}.lupa-search-result-facet-display:first-child{border:none}.lupa-facet-label-text{font-weight:700;font-size:16px;line-height:24px}.lupa-facet-label-caret::after{direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:22px;content:"󰅀"}.lupa-term-label{font-weight:300;font-size:16px;line-height:1.15}.lupa-stats-facet-summary{margin-top:16px;font-size:16px;font-weight:300}.lupa-current-filter-list{display:flex;flex-wrap:wrap}.lupa-search-result-current-filters{border-bottom:1px solid #d8d8d8}.lupa-search-result-filter-value{flex-direction:row-reverse;display:flex;justify-content:flex-end;background-color:#3c53f4;padding:9px;border-radius:24px;margin:0 8px 8px 0}.lupa-search-result-filter-value .lupa-current-filter-label{display:none}.lupa-search-result-filter-value .lupa-current-filter-value{color:#fff;font-weight:300;font-size:14px}.lupa-search-result-filter-value .lupa-current-filter-action{display:flex;font-size:0}.lupa-search-result-filter-value .lupa-current-filter-action::before{color:#fff;margin-left:9px;width:16px;direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:20px;content:"󰅙"}.lupa-clear-all-filters{font-weight:300;font-size:16px;line-height:22px;color:#464646;display:flex;align-items:center;margin-top:16px}.lupa-clear-all-filters:before{direction:ltr;display:inline-block;font-family:"Material Symbols Outlined";font-size:16px;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:1;text-transform:none;white-space:nowrap;word-wrap:normal;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;content:"󰅖";margin-right:10px;font-size:20px}.lupa-term-checkbox{border-radius:2px;border:2px solid #464646}.lupa-term-checkbox.checked{border-color:#3c53f4;background:#3c53f4}.lupa-term-checkbox.checked:after{border:none;border-left:2px solid #fff;border-bottom:2px solid #fff;display:inline-block;transform:rotate(-45deg);height:7px;width:12px;border-radius:0;top:-2px;content:" ";position:relative}.lupa-term-checkbox-label{font-size:16px;font-weight:300}.lupa-search-box-wrapper input{border-radius:24px}.lupa-mobile-toggle-filter-count{display:inline-flex;color:#fff;background:#3c53f4;border-radius:50%;width:20px;height:20px;justify-content:center;align-items:center}.lupa-category-top-mobile-filters .lupa-category-back{border:1px solid #d8d8d8;cursor:pointer;padding:10px 5px;margin:10px 0}.lupa-category-top-mobile-filters .lupa-category-back::before{content:"<";display:inline-block}.lupa-search-product-recommendations-wrapper{width:100%}.lupa-panel-suggestion-index{grid-area:suggestions}.lupa-panel-document-index{grid-area:docs}#lupa-search-results-products{background:#fff;padding-top:36px}.wrapper{background:#fafafa}
package/dist/style.js ADDED
@@ -0,0 +1 @@
1
+
package/env.d.ts ADDED
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />