@coveo/atomic 3.33.8-pre.f71538d21f → 3.33.8-pre.f7fa88e058
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/atomic/_atomic.esm.js +1 -1
- package/dist/atomic/atomic.esm.js.map +1 -1
- package/dist/atomic/components/_index.d.ts +0 -2
- package/dist/atomic/components/_index.js +0 -1
- package/dist/atomic/components/analytics-config.js +1 -1
- package/dist/atomic/components/atomic-insight-history-toggle.js +2 -2
- package/dist/atomic/components/atomic-insight-history-toggle.js.map +1 -1
- package/dist/atomic/components/atomic-insight-user-actions-toggle.js +2 -2
- package/dist/atomic/components/atomic-insight-user-actions-toggle.js.map +1 -1
- package/dist/atomic/components/atomic-search-box.js +2 -8
- package/dist/atomic/components/atomic-search-box.js.map +1 -1
- package/dist/atomic/components/atomic-smart-snippet-feedback-modal2.js +2 -2
- package/dist/atomic/components/atomic-tab-manager.js +1 -1
- package/dist/atomic/components/clock.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-interface/atomic-commerce-interface.js +49 -7
- package/dist/atomic/components/components/commerce/atomic-commerce-query-summary/atomic-commerce-query-summary.js +2 -2
- package/dist/atomic/components/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.js +25 -10
- package/dist/atomic/components/components/common/atomic-modal/atomic-modal.js +2 -0
- package/dist/atomic/components/components/search/atomic-search-box-recent-queries/atomic-search-box-recent-queries.js +137 -0
- package/dist/atomic/components/components/search/index.js +1 -0
- package/dist/atomic/components/components/search/lazy-index.js +1 -0
- package/dist/atomic/components/global/environment.js +1 -1
- package/dist/atomic/components/index.js.map +1 -1
- package/dist/atomic/{p-09c4c7f2.entry.js → p-1ea14b8b.entry.js} +2 -2
- package/dist/atomic/p-2e9db4ca.entry.js +2 -0
- package/dist/atomic/p-2e9db4ca.entry.js.map +1 -0
- package/dist/atomic/{p-aa2a81fd.entry.js → p-39e63678.entry.js} +2 -2
- package/dist/atomic/{p-c7040496.entry.js → p-4b97f491.entry.js} +2 -2
- package/dist/atomic/{p-327df077.entry.js → p-5f2e8b83.entry.js} +2 -2
- package/dist/atomic/{p-6e6d686e.entry.js → p-7383fd32.entry.js} +2 -2
- package/dist/atomic/{p-9a451295.js → p-7a69a983.js} +2 -2
- package/dist/atomic/{p-7a625c7e.entry.js → p-ae98c582.entry.js} +2 -2
- package/dist/atomic/{p-6329ff94.entry.js → p-ba4bf29f.entry.js} +2 -2
- package/dist/atomic/{p-c280cd05.js → p-e1cc5150.js} +1 -1
- package/dist/cjs/_loader.cjs.js +1 -1
- package/dist/cjs/{analytics-config-82f35f78.js → analytics-config-f82ce3da.js} +2 -2
- package/dist/cjs/{analytics-config-82f35f78.js.map → analytics-config-f82ce3da.js.map} +1 -1
- package/dist/cjs/atomic-insight-history-toggle.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-history-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-insight-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-insight-user-actions-toggle.cjs.entry.js +2 -2
- package/dist/cjs/atomic-insight-user-actions-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/atomic-recs-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-search-box-query-suggestions.cjs.entry.js +76 -0
- package/dist/cjs/atomic-search-box-query-suggestions.cjs.entry.js.map +1 -0
- package/dist/cjs/atomic-search-interface.cjs.entry.js +1 -1
- package/dist/cjs/atomic-smart-snippet-feedback-modal.cjs.entry.js +2 -2
- package/dist/cjs/atomic-tab-manager.cjs.entry.js +1 -1
- package/dist/cjs/atomic.cjs.js +1 -1
- package/dist/cjs/clock-7aeb19d0.js +7 -0
- package/dist/cjs/clock-7aeb19d0.js.map +1 -0
- package/dist/cjs/index-757bc886.js +2 -2
- package/dist/cjs/version.cjs.js +2 -2
- package/dist/esm/_loader.js +1 -1
- package/dist/esm/{analytics-config-7a822440.js → analytics-config-d7026e3b.js} +2 -2
- package/dist/esm/{analytics-config-7a822440.js.map → analytics-config-d7026e3b.js.map} +1 -1
- package/dist/esm/atomic-insight-history-toggle.entry.js +2 -2
- package/dist/esm/atomic-insight-history-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-insight-interface.entry.js +1 -1
- package/dist/esm/atomic-insight-user-actions-toggle.entry.js +2 -2
- package/dist/esm/atomic-insight-user-actions-toggle.entry.js.map +1 -1
- package/dist/esm/atomic-recs-interface.entry.js +1 -1
- package/dist/esm/atomic-search-box-query-suggestions.entry.js +72 -0
- package/dist/esm/atomic-search-box-query-suggestions.entry.js.map +1 -0
- package/dist/esm/atomic-search-interface.entry.js +1 -1
- package/dist/esm/atomic-smart-snippet-feedback-modal.entry.js +2 -2
- package/dist/esm/atomic-tab-manager.entry.js +1 -1
- package/dist/esm/atomic.js +1 -1
- package/dist/esm/clock-b1f5d7f7.js +5 -0
- package/dist/esm/clock-b1f5d7f7.js.map +1 -0
- package/dist/esm/index-3f35faca.js +2 -2
- package/dist/esm/version.js +2 -2
- package/dist/types/components/commerce/atomic-commerce-interface/atomic-commerce-interface.d.ts +29 -1
- package/dist/types/components/commerce/atomic-commerce-recommendation-interface/atomic-commerce-recommendation-interface.d.ts +1 -0
- package/dist/types/components/search/atomic-search-box-recent-queries/atomic-search-box-recent-queries.d.ts +45 -0
- package/dist/types/components/search/index.d.ts +1 -0
- package/dist/types/components.d.ts +0 -49
- package/docs/atomic-docs.json +1 -98
- package/package.json +3 -3
- package/dist/atomic/components/atomic-search-box-recent-queries.d.ts +0 -11
- package/dist/atomic/components/atomic-search-box-recent-queries.js +0 -8
- package/dist/atomic/components/atomic-search-box-recent-queries.js.map +0 -1
- package/dist/atomic/components/atomic-search-box-recent-queries2.js +0 -183
- package/dist/atomic/components/atomic-search-box-recent-queries2.js.map +0 -1
- package/dist/atomic/p-31f1e44e.entry.js +0 -2
- package/dist/atomic/p-31f1e44e.entry.js.map +0 -1
- package/dist/cjs/atomic-search-box-query-suggestions_2.cjs.entry.js +0 -234
- package/dist/cjs/atomic-search-box-query-suggestions_2.cjs.entry.js.map +0 -1
- package/dist/cjs/clock-f03ff827.js +0 -7
- package/dist/cjs/clock-f03ff827.js.map +0 -1
- package/dist/esm/atomic-search-box-query-suggestions_2.entry.js +0 -229
- package/dist/esm/atomic-search-box-query-suggestions_2.entry.js.map +0 -1
- package/dist/esm/clock-add3e9a5.js +0 -5
- package/dist/esm/clock-add3e9a5.js.map +0 -1
- package/dist/types/components/search/search-box-suggestions/atomic-search-box-recent-queries/atomic-search-box-recent-queries.d.ts +0 -37
- /package/dist/atomic/{p-09c4c7f2.entry.js.map → p-1ea14b8b.entry.js.map} +0 -0
- /package/dist/atomic/{p-aa2a81fd.entry.js.map → p-39e63678.entry.js.map} +0 -0
- /package/dist/atomic/{p-c7040496.entry.js.map → p-4b97f491.entry.js.map} +0 -0
- /package/dist/atomic/{p-327df077.entry.js.map → p-5f2e8b83.entry.js.map} +0 -0
- /package/dist/atomic/{p-6e6d686e.entry.js.map → p-7383fd32.entry.js.map} +0 -0
- /package/dist/atomic/{p-9a451295.js.map → p-7a69a983.js.map} +0 -0
- /package/dist/atomic/{p-7a625c7e.entry.js.map → p-ae98c582.entry.js.map} +0 -0
- /package/dist/atomic/{p-6329ff94.entry.js.map → p-ba4bf29f.entry.js.map} +0 -0
- /package/dist/atomic/{p-c280cd05.js.map → p-e1cc5150.js.map} +0 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
import { type SearchBox } from '@coveo/headless';
|
2
|
+
import { LitElement } from 'lit';
|
3
|
+
import type { SearchBoxSuggestionsComponent } from "../../../decorators/types";
|
4
|
+
import type { SearchBoxSuggestions, SearchBoxSuggestionsBindings } from '../../common/suggestions/suggestions-types';
|
5
|
+
import type { Bindings } from '../atomic-search-interface/interfaces';
|
6
|
+
/**
|
7
|
+
* The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.
|
8
|
+
*/
|
9
|
+
export declare class AtomicSearchBoxRecentQueries extends LitElement implements SearchBoxSuggestionsComponent<Bindings> {
|
10
|
+
bindings: SearchBoxSuggestionsBindings<SearchBox, Bindings>;
|
11
|
+
private recentQueriesList;
|
12
|
+
private storage;
|
13
|
+
error: Error;
|
14
|
+
/**
|
15
|
+
* The SVG icon to display.
|
16
|
+
*
|
17
|
+
* - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.
|
18
|
+
* - Use a value that starts with `assets://`, to display an icon from the Atomic package.
|
19
|
+
* - Use a stringified SVG to display it directly.
|
20
|
+
*/
|
21
|
+
icon?: string;
|
22
|
+
/**
|
23
|
+
* The maximum number of suggestions to display when the user types in the input field.
|
24
|
+
*/
|
25
|
+
maxWithQuery: number;
|
26
|
+
/**
|
27
|
+
* The maximum number of suggestions to display initially, when the input field is empty.
|
28
|
+
*/
|
29
|
+
maxWithoutQuery?: number;
|
30
|
+
connectedCallback(): void;
|
31
|
+
initialize(): SearchBoxSuggestions;
|
32
|
+
private retrieveLocalStorage;
|
33
|
+
private updateLocalStorage;
|
34
|
+
private warnUser;
|
35
|
+
private disableFeature;
|
36
|
+
private renderItems;
|
37
|
+
private renderClear;
|
38
|
+
private renderItem;
|
39
|
+
render(): import("lit-html").TemplateResult<1>;
|
40
|
+
}
|
41
|
+
declare global {
|
42
|
+
interface HTMLElementTagNameMap {
|
43
|
+
'atomic-search-box-recent-queries': AtomicSearchBoxRecentQueries;
|
44
|
+
}
|
45
|
+
}
|
@@ -1,3 +1,4 @@
|
|
1
1
|
export { AtomicQuerySummary } from './atomic-query-summary/atomic-query-summary.js';
|
2
2
|
export { AtomicResultsPerPage } from './atomic-results-per-page/atomic-results-per-page.js';
|
3
|
+
export { AtomicSearchBoxRecentQueries } from './atomic-search-box-recent-queries/atomic-search-box-recent-queries.js';
|
3
4
|
export { AtomicSearchLayout } from './atomic-search-layout/atomic-search-layout.js';
|
@@ -2432,23 +2432,6 @@ export namespace Components {
|
|
2432
2432
|
*/
|
2433
2433
|
"maxWithoutQuery"?: number;
|
2434
2434
|
}
|
2435
|
-
/**
|
2436
|
-
* The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.
|
2437
|
-
*/
|
2438
|
-
interface AtomicSearchBoxRecentQueries {
|
2439
|
-
/**
|
2440
|
-
* The SVG icon to display. - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location. - Use a value that starts with `assets://`, to display an icon from the Atomic package. - Use a stringified SVG to display it directly.
|
2441
|
-
*/
|
2442
|
-
"icon"?: string;
|
2443
|
-
/**
|
2444
|
-
* The maximum number of suggestions that will be displayed if the user has typed something into the input field.
|
2445
|
-
*/
|
2446
|
-
"maxWithQuery": number;
|
2447
|
-
/**
|
2448
|
-
* The maximum number of suggestions that will be displayed initially when the input field is empty.
|
2449
|
-
*/
|
2450
|
-
"maxWithoutQuery"?: number;
|
2451
|
-
}
|
2452
2435
|
/**
|
2453
2436
|
* The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.
|
2454
2437
|
*/
|
@@ -4203,15 +4186,6 @@ declare global {
|
|
4203
4186
|
prototype: HTMLAtomicSearchBoxQuerySuggestionsElement;
|
4204
4187
|
new (): HTMLAtomicSearchBoxQuerySuggestionsElement;
|
4205
4188
|
};
|
4206
|
-
/**
|
4207
|
-
* The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.
|
4208
|
-
*/
|
4209
|
-
interface HTMLAtomicSearchBoxRecentQueriesElement extends Components.AtomicSearchBoxRecentQueries, HTMLStencilElement {
|
4210
|
-
}
|
4211
|
-
var HTMLAtomicSearchBoxRecentQueriesElement: {
|
4212
|
-
prototype: HTMLAtomicSearchBoxRecentQueriesElement;
|
4213
|
-
new (): HTMLAtomicSearchBoxRecentQueriesElement;
|
4214
|
-
};
|
4215
4189
|
/**
|
4216
4190
|
* The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.
|
4217
4191
|
*/
|
@@ -4616,7 +4590,6 @@ declare global {
|
|
4616
4590
|
"atomic-search-box": HTMLAtomicSearchBoxElement;
|
4617
4591
|
"atomic-search-box-instant-results": HTMLAtomicSearchBoxInstantResultsElement;
|
4618
4592
|
"atomic-search-box-query-suggestions": HTMLAtomicSearchBoxQuerySuggestionsElement;
|
4619
|
-
"atomic-search-box-recent-queries": HTMLAtomicSearchBoxRecentQueriesElement;
|
4620
4593
|
"atomic-search-interface": HTMLAtomicSearchInterfaceElement;
|
4621
4594
|
"atomic-segmented-facet": HTMLAtomicSegmentedFacetElement;
|
4622
4595
|
"atomic-segmented-facet-scrollable": HTMLAtomicSegmentedFacetScrollableElement;
|
@@ -6899,23 +6872,6 @@ declare namespace LocalJSX {
|
|
6899
6872
|
*/
|
6900
6873
|
"maxWithoutQuery"?: number;
|
6901
6874
|
}
|
6902
|
-
/**
|
6903
|
-
* The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.
|
6904
|
-
*/
|
6905
|
-
interface AtomicSearchBoxRecentQueries {
|
6906
|
-
/**
|
6907
|
-
* The SVG icon to display. - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location. - Use a value that starts with `assets://`, to display an icon from the Atomic package. - Use a stringified SVG to display it directly.
|
6908
|
-
*/
|
6909
|
-
"icon"?: string;
|
6910
|
-
/**
|
6911
|
-
* The maximum number of suggestions that will be displayed if the user has typed something into the input field.
|
6912
|
-
*/
|
6913
|
-
"maxWithQuery"?: number;
|
6914
|
-
/**
|
6915
|
-
* The maximum number of suggestions that will be displayed initially when the input field is empty.
|
6916
|
-
*/
|
6917
|
-
"maxWithoutQuery"?: number;
|
6918
|
-
}
|
6919
6875
|
/**
|
6920
6876
|
* The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.
|
6921
6877
|
*/
|
@@ -7488,7 +7444,6 @@ declare namespace LocalJSX {
|
|
7488
7444
|
"atomic-search-box": AtomicSearchBox;
|
7489
7445
|
"atomic-search-box-instant-results": AtomicSearchBoxInstantResults;
|
7490
7446
|
"atomic-search-box-query-suggestions": AtomicSearchBoxQuerySuggestions;
|
7491
|
-
"atomic-search-box-recent-queries": AtomicSearchBoxRecentQueries;
|
7492
7447
|
"atomic-search-interface": AtomicSearchInterface;
|
7493
7448
|
"atomic-segmented-facet": AtomicSegmentedFacet;
|
7494
7449
|
"atomic-segmented-facet-scrollable": AtomicSegmentedFacetScrollable;
|
@@ -8005,10 +7960,6 @@ declare module "@stencil/core" {
|
|
8005
7960
|
* The `atomic-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior.
|
8006
7961
|
*/
|
8007
7962
|
"atomic-search-box-query-suggestions": LocalJSX.AtomicSearchBoxQuerySuggestions & JSXBase.HTMLAttributes<HTMLAtomicSearchBoxQuerySuggestionsElement>;
|
8008
|
-
/**
|
8009
|
-
* The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.
|
8010
|
-
*/
|
8011
|
-
"atomic-search-box-recent-queries": LocalJSX.AtomicSearchBoxRecentQueries & JSXBase.HTMLAttributes<HTMLAtomicSearchBoxRecentQueriesElement>;
|
8012
7963
|
/**
|
8013
7964
|
* The `atomic-search-interface` component is the parent to all other atomic components in a search page. It handles the headless search engine and localization configurations.
|
8014
7965
|
*/
|
package/docs/atomic-docs.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"timestamp": "2025-09-
|
2
|
+
"timestamp": "2025-09-30T16:45:44",
|
3
3
|
"compiler": {
|
4
4
|
"name": "@stencil/core",
|
5
5
|
"version": "4.20.0",
|
@@ -12480,13 +12480,11 @@
|
|
12480
12480
|
"dependents": [],
|
12481
12481
|
"dependencies": [
|
12482
12482
|
"atomic-suggestion-renderer",
|
12483
|
-
"atomic-search-box-recent-queries",
|
12484
12483
|
"atomic-search-box-query-suggestions"
|
12485
12484
|
],
|
12486
12485
|
"dependencyGraph": {
|
12487
12486
|
"atomic-search-box": [
|
12488
12487
|
"atomic-suggestion-renderer",
|
12489
|
-
"atomic-search-box-recent-queries",
|
12490
12488
|
"atomic-search-box-query-suggestions"
|
12491
12489
|
]
|
12492
12490
|
}
|
@@ -12805,101 +12803,6 @@
|
|
12805
12803
|
]
|
12806
12804
|
}
|
12807
12805
|
},
|
12808
|
-
{
|
12809
|
-
"filePath": "src/components/search/search-box-suggestions/atomic-search-box-recent-queries/atomic-search-box-recent-queries.tsx",
|
12810
|
-
"encapsulation": "shadow",
|
12811
|
-
"tag": "atomic-search-box-recent-queries",
|
12812
|
-
"docs": "The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.",
|
12813
|
-
"docsTags": [],
|
12814
|
-
"usage": {},
|
12815
|
-
"props": [
|
12816
|
-
{
|
12817
|
-
"name": "icon",
|
12818
|
-
"type": "string | undefined",
|
12819
|
-
"complexType": {
|
12820
|
-
"original": "string",
|
12821
|
-
"resolved": "string | undefined",
|
12822
|
-
"references": {}
|
12823
|
-
},
|
12824
|
-
"mutable": false,
|
12825
|
-
"attr": "icon",
|
12826
|
-
"reflectToAttr": false,
|
12827
|
-
"docs": "The SVG icon to display.\n\n- Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n- Use a value that starts with `assets://`, to display an icon from the Atomic package.\n- Use a stringified SVG to display it directly.",
|
12828
|
-
"docsTags": [],
|
12829
|
-
"values": [
|
12830
|
-
{
|
12831
|
-
"type": "string"
|
12832
|
-
},
|
12833
|
-
{
|
12834
|
-
"type": "undefined"
|
12835
|
-
}
|
12836
|
-
],
|
12837
|
-
"optional": true,
|
12838
|
-
"required": false
|
12839
|
-
},
|
12840
|
-
{
|
12841
|
-
"name": "maxWithQuery",
|
12842
|
-
"type": "number",
|
12843
|
-
"complexType": {
|
12844
|
-
"original": "number",
|
12845
|
-
"resolved": "number",
|
12846
|
-
"references": {}
|
12847
|
-
},
|
12848
|
-
"mutable": false,
|
12849
|
-
"attr": "max-with-query",
|
12850
|
-
"reflectToAttr": true,
|
12851
|
-
"docs": "The maximum number of suggestions that will be displayed if the user has typed something into the input field.",
|
12852
|
-
"docsTags": [],
|
12853
|
-
"default": "3",
|
12854
|
-
"values": [
|
12855
|
-
{
|
12856
|
-
"type": "number"
|
12857
|
-
}
|
12858
|
-
],
|
12859
|
-
"optional": false,
|
12860
|
-
"required": false
|
12861
|
-
},
|
12862
|
-
{
|
12863
|
-
"name": "maxWithoutQuery",
|
12864
|
-
"type": "number | undefined",
|
12865
|
-
"complexType": {
|
12866
|
-
"original": "number",
|
12867
|
-
"resolved": "number | undefined",
|
12868
|
-
"references": {}
|
12869
|
-
},
|
12870
|
-
"mutable": false,
|
12871
|
-
"attr": "max-without-query",
|
12872
|
-
"reflectToAttr": true,
|
12873
|
-
"docs": "The maximum number of suggestions that will be displayed initially when the input field is empty.",
|
12874
|
-
"docsTags": [],
|
12875
|
-
"values": [
|
12876
|
-
{
|
12877
|
-
"type": "number"
|
12878
|
-
},
|
12879
|
-
{
|
12880
|
-
"type": "undefined"
|
12881
|
-
}
|
12882
|
-
],
|
12883
|
-
"optional": true,
|
12884
|
-
"required": false
|
12885
|
-
}
|
12886
|
-
],
|
12887
|
-
"methods": [],
|
12888
|
-
"events": [],
|
12889
|
-
"listeners": [],
|
12890
|
-
"styles": [],
|
12891
|
-
"slots": [],
|
12892
|
-
"parts": [],
|
12893
|
-
"dependents": [
|
12894
|
-
"atomic-search-box"
|
12895
|
-
],
|
12896
|
-
"dependencies": [],
|
12897
|
-
"dependencyGraph": {
|
12898
|
-
"atomic-search-box": [
|
12899
|
-
"atomic-search-box-recent-queries"
|
12900
|
-
]
|
12901
|
-
}
|
12902
|
-
},
|
12903
12806
|
{
|
12904
12807
|
"filePath": "src/components/search/atomic-search-interface/atomic-search-interface.tsx",
|
12905
12808
|
"encapsulation": "shadow",
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@coveo/atomic",
|
3
3
|
"type": "module",
|
4
|
-
"version": "3.33.8-pre.
|
4
|
+
"version": "3.33.8-pre.f7fa88e058",
|
5
5
|
"description": "A web-component library for building modern UIs interfacing with the Coveo platform",
|
6
6
|
"homepage": "https://docs.coveo.com/en/atomic/latest/",
|
7
7
|
"repository": {
|
@@ -81,7 +81,7 @@
|
|
81
81
|
},
|
82
82
|
"dependencies": {
|
83
83
|
"@coveo/bueno": "1.1.2",
|
84
|
-
"@coveo/headless": "3.31.1-pre.
|
84
|
+
"@coveo/headless": "3.31.1-pre.f7fa88e058",
|
85
85
|
"@lit/context": "1.1.6",
|
86
86
|
"@open-wc/lit-helpers": "0.7.0",
|
87
87
|
"@popperjs/core": "2.11.8",
|
@@ -153,7 +153,7 @@
|
|
153
153
|
},
|
154
154
|
"peerDependencies": {
|
155
155
|
"@coveo/bueno": "1.1.2",
|
156
|
-
"@coveo/headless": "3.31.1-pre.
|
156
|
+
"@coveo/headless": "3.31.1-pre.f7fa88e058",
|
157
157
|
"typescript": ">=5.0.0"
|
158
158
|
},
|
159
159
|
"peerDependenciesMeta": {
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import type { Components, JSX } from "../../types/components";
|
2
|
-
|
3
|
-
interface AtomicSearchBoxRecentQueries extends Components.AtomicSearchBoxRecentQueries, HTMLElement {}
|
4
|
-
export const AtomicSearchBoxRecentQueries: {
|
5
|
-
prototype: AtomicSearchBoxRecentQueries;
|
6
|
-
new (): AtomicSearchBoxRecentQueries;
|
7
|
-
};
|
8
|
-
/**
|
9
|
-
* Used to define this component and all nested components recursively.
|
10
|
-
*/
|
11
|
-
export const defineCustomElement: () => void;
|
@@ -1,8 +0,0 @@
|
|
1
|
-
import { A as AtomicSearchBoxRecentQueries$1, d as defineCustomElement$1 } from './atomic-search-box-recent-queries2.js';
|
2
|
-
|
3
|
-
const AtomicSearchBoxRecentQueries = AtomicSearchBoxRecentQueries$1;
|
4
|
-
const defineCustomElement = defineCustomElement$1;
|
5
|
-
|
6
|
-
export { AtomicSearchBoxRecentQueries, defineCustomElement };
|
7
|
-
|
8
|
-
//# sourceMappingURL=atomic-search-box-recent-queries.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"file":"atomic-search-box-recent-queries.js","mappings":";;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
@@ -1,183 +0,0 @@
|
|
1
|
-
import { h, proxyCustomElement, HTMLElement } from '@stencil/core/internal/client';
|
2
|
-
import { HighlightUtils, buildRecentQueriesList } from '@coveo/headless';
|
3
|
-
import { C as Clock } from './clock.js';
|
4
|
-
import { a as SafeStorage, S as StorageItems } from './local-storage-utils.js';
|
5
|
-
import { o as once } from './utils.js';
|
6
|
-
import { e as encodeForDomAttribute } from './string-utils.js';
|
7
|
-
import { d as dispatchSearchBoxSuggestionsEvent } from './suggestions-events.js';
|
8
|
-
|
9
|
-
const getPartialRecentQueryElement = (value, i18n) => {
|
10
|
-
return {
|
11
|
-
part: 'recent-query-item',
|
12
|
-
query: value,
|
13
|
-
key: `recent-${encodeForDomAttribute(value)}`,
|
14
|
-
ariaLabel: i18n.t('recent-query-suggestion-label', {
|
15
|
-
query: value,
|
16
|
-
interpolation: { escapeValue: false },
|
17
|
-
}),
|
18
|
-
};
|
19
|
-
};
|
20
|
-
const getPartialRecentQueryClearElement = (i18n) => {
|
21
|
-
return {
|
22
|
-
key: 'recent-query-clear',
|
23
|
-
ariaLabel: i18n.t('clear-recent-searches', {
|
24
|
-
interpolation: { escapeValue: false },
|
25
|
-
}),
|
26
|
-
part: 'recent-query-title-item suggestion-divider',
|
27
|
-
hideIfLast: true,
|
28
|
-
};
|
29
|
-
};
|
30
|
-
const RecentQueriesContainer = (_, children) => {
|
31
|
-
return (h("div", { part: "recent-query-content", class: "flex items-center text-left break-all" }, children));
|
32
|
-
};
|
33
|
-
const RecentQueryIcon = ({ icon, }) => {
|
34
|
-
return (h("atomic-icon", { part: "recent-query-icon", icon: icon, class: "mr-2 h-4 w-4 shrink-0" }));
|
35
|
-
};
|
36
|
-
const RecentQueryText = ({ query, value, }) => {
|
37
|
-
if (query === '') {
|
38
|
-
return (h("span", { part: "recent-query-text", class: "line-clamp-2 break-all" }, value));
|
39
|
-
}
|
40
|
-
return (h("span", { part: "recent-query-text", class: "line-clamp-2 break-all", innerHTML: HighlightUtils.highlightString({
|
41
|
-
content: value,
|
42
|
-
openingDelimiter: '<span part="recent-query-text-highlight" class="font-bold">',
|
43
|
-
closingDelimiter: '</span>',
|
44
|
-
highlights: [
|
45
|
-
{
|
46
|
-
offset: query.length,
|
47
|
-
length: value.length - query.length,
|
48
|
-
},
|
49
|
-
],
|
50
|
-
}) }));
|
51
|
-
};
|
52
|
-
const RecentQueryClear = ({ i18n, }) => {
|
53
|
-
return (h("div", { part: "recent-query-title-content", class: "flex w-full justify-between" },
|
54
|
-
h("span", { class: "font-bold", part: "recent-query-title" }, i18n.t('recent-searches')),
|
55
|
-
h("span", { part: "recent-query-clear" }, i18n.t('clear'))));
|
56
|
-
};
|
57
|
-
|
58
|
-
const AtomicSearchBoxRecentQueries = /*@__PURE__*/ proxyCustomElement(class AtomicSearchBoxRecentQueries extends HTMLElement {
|
59
|
-
constructor() {
|
60
|
-
super();
|
61
|
-
this.__registerHost();
|
62
|
-
this.__attachShadow();
|
63
|
-
/**
|
64
|
-
* The maximum number of suggestions that will be displayed if the user has typed something into the input field.
|
65
|
-
*/
|
66
|
-
this.maxWithQuery = 3;
|
67
|
-
this.warnUser = once(() => this.bindings.engine.logger.warn('Because analytics are disabled, the recent queries feature is deactivated.'));
|
68
|
-
this.error = undefined;
|
69
|
-
this.icon = undefined;
|
70
|
-
this.maxWithQuery = 3;
|
71
|
-
this.maxWithoutQuery = undefined;
|
72
|
-
}
|
73
|
-
componentWillLoad() {
|
74
|
-
try {
|
75
|
-
dispatchSearchBoxSuggestionsEvent((bindings) => {
|
76
|
-
this.bindings = bindings;
|
77
|
-
return this.initialize();
|
78
|
-
}, this.host, ['atomic-search-box']);
|
79
|
-
}
|
80
|
-
catch (error) {
|
81
|
-
this.error = error;
|
82
|
-
}
|
83
|
-
}
|
84
|
-
renderIcon() {
|
85
|
-
return this.icon || Clock;
|
86
|
-
}
|
87
|
-
initialize() {
|
88
|
-
this.storage = new SafeStorage();
|
89
|
-
this.recentQueriesList = buildRecentQueriesList(this.bindings.engine, {
|
90
|
-
initialState: { queries: this.retrieveLocalStorage() },
|
91
|
-
options: { maxLength: 1000, clearFilters: this.bindings.clearFilters },
|
92
|
-
});
|
93
|
-
this.recentQueriesList.subscribe(() => this.updateLocalStorage());
|
94
|
-
return {
|
95
|
-
position: Array.from(this.host.parentNode.children).indexOf(this.host),
|
96
|
-
renderItems: () => this.renderItems(),
|
97
|
-
};
|
98
|
-
}
|
99
|
-
retrieveLocalStorage() {
|
100
|
-
return this.storage.getParsedJSON(StorageItems.RECENT_QUERIES, []);
|
101
|
-
}
|
102
|
-
updateLocalStorage() {
|
103
|
-
if (!this.recentQueriesList.state.analyticsEnabled) {
|
104
|
-
return this.disableFeature();
|
105
|
-
}
|
106
|
-
return this.storage.setJSON(StorageItems.RECENT_QUERIES, this.recentQueriesList.state.queries);
|
107
|
-
}
|
108
|
-
disableFeature() {
|
109
|
-
this.warnUser();
|
110
|
-
this.storage.removeItem(StorageItems.RECENT_QUERIES);
|
111
|
-
}
|
112
|
-
renderItems() {
|
113
|
-
if (!this.recentQueriesList.state.analyticsEnabled) {
|
114
|
-
return [];
|
115
|
-
}
|
116
|
-
const query = this.bindings.searchBoxController.state.value;
|
117
|
-
const hasQuery = query !== '';
|
118
|
-
const max = hasQuery ? this.maxWithQuery : this.maxWithoutQuery;
|
119
|
-
const filteredQueries = this.recentQueriesList.state.queries
|
120
|
-
.filter((recentQuery) => recentQuery.toLowerCase().startsWith(query.toLowerCase()))
|
121
|
-
.slice(0, max);
|
122
|
-
const suggestionElements = filteredQueries.map((value) => this.renderItem(value));
|
123
|
-
if (suggestionElements.length) {
|
124
|
-
suggestionElements.unshift(this.renderClear());
|
125
|
-
}
|
126
|
-
return suggestionElements;
|
127
|
-
}
|
128
|
-
renderClear() {
|
129
|
-
const partialItem = getPartialRecentQueryClearElement(this.bindings.i18n);
|
130
|
-
return {
|
131
|
-
...partialItem,
|
132
|
-
content: h(RecentQueryClear, { i18n: this.bindings.i18n }),
|
133
|
-
onSelect: () => {
|
134
|
-
this.recentQueriesList.clear();
|
135
|
-
this.bindings.triggerSuggestions();
|
136
|
-
},
|
137
|
-
};
|
138
|
-
}
|
139
|
-
renderItem(value) {
|
140
|
-
const query = this.bindings.searchBoxController.state.value;
|
141
|
-
const partialItem = getPartialRecentQueryElement(value, this.bindings.i18n);
|
142
|
-
return {
|
143
|
-
...partialItem,
|
144
|
-
content: (h(RecentQueriesContainer, null, h(RecentQueryIcon, { icon: this.renderIcon() }), h(RecentQueryText, { query: query, value: value }))),
|
145
|
-
onSelect: () => {
|
146
|
-
if (this.bindings.isStandalone) {
|
147
|
-
this.bindings.searchBoxController.updateText(value);
|
148
|
-
this.bindings.searchBoxController.submit();
|
149
|
-
return;
|
150
|
-
}
|
151
|
-
this.recentQueriesList.executeRecentQuery(this.recentQueriesList.state.queries.indexOf(value));
|
152
|
-
},
|
153
|
-
};
|
154
|
-
}
|
155
|
-
render() {
|
156
|
-
if (this.error) {
|
157
|
-
return (h("atomic-component-error", { key: 'a0eed6f3235cbc1ecd75fdb75608c6db10934dda', element: this.host, error: this.error }));
|
158
|
-
}
|
159
|
-
}
|
160
|
-
get host() { return this; }
|
161
|
-
}, [1, "atomic-search-box-recent-queries", {
|
162
|
-
"icon": [1],
|
163
|
-
"maxWithQuery": [514, "max-with-query"],
|
164
|
-
"maxWithoutQuery": [514, "max-without-query"],
|
165
|
-
"error": [32]
|
166
|
-
}]);
|
167
|
-
function defineCustomElement() {
|
168
|
-
if (typeof customElements === "undefined") {
|
169
|
-
return;
|
170
|
-
}
|
171
|
-
const components = ["atomic-search-box-recent-queries"];
|
172
|
-
components.forEach(tagName => { switch (tagName) {
|
173
|
-
case "atomic-search-box-recent-queries":
|
174
|
-
if (!customElements.get(tagName)) {
|
175
|
-
customElements.define(tagName, AtomicSearchBoxRecentQueries);
|
176
|
-
}
|
177
|
-
break;
|
178
|
-
} });
|
179
|
-
}
|
180
|
-
|
181
|
-
export { AtomicSearchBoxRecentQueries as A, defineCustomElement as d };
|
182
|
-
|
183
|
-
//# sourceMappingURL=atomic-search-box-recent-queries2.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"file":"atomic-search-box-recent-queries2.js","mappings":"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","names":[],"sources":["src/components/common/suggestions/stencil-recent-queries.tsx","src/components/search/search-box-suggestions/atomic-search-box-recent-queries/atomic-search-box-recent-queries.tsx"],"sourcesContent":["import {HighlightUtils} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport {encodeForDomAttribute} from '../../../utils/string-utils';\nimport {SearchBoxSuggestionElement} from './suggestions-types';\n\nexport const getPartialRecentQueryElement = (\n value: string,\n i18n: i18n\n): Pick<SearchBoxSuggestionElement, 'ariaLabel' | 'key' | 'query' | 'part'> => {\n return {\n part: 'recent-query-item',\n query: value,\n key: `recent-${encodeForDomAttribute(value)}`,\n ariaLabel: i18n.t('recent-query-suggestion-label', {\n query: value,\n interpolation: {escapeValue: false},\n }),\n };\n};\n\nexport const getPartialRecentQueryClearElement = (\n i18n: i18n\n): Pick<\n SearchBoxSuggestionElement,\n 'ariaLabel' | 'key' | 'part' | 'hideIfLast'\n> => {\n return {\n key: 'recent-query-clear',\n ariaLabel: i18n.t('clear-recent-searches', {\n interpolation: {escapeValue: false},\n }),\n part: 'recent-query-title-item suggestion-divider',\n hideIfLast: true,\n };\n};\n\nexport const RecentQueriesContainer: FunctionalComponent = (_, children) => {\n return (\n <div\n part=\"recent-query-content\"\n class=\"flex items-center text-left break-all\"\n >\n {children}\n </div>\n );\n};\n\ninterface RecentQueryIconProps {\n icon: string;\n}\n\nexport const RecentQueryIcon: FunctionalComponent<RecentQueryIconProps> = ({\n icon,\n}) => {\n return (\n <atomic-icon\n part=\"recent-query-icon\"\n icon={icon}\n class=\"mr-2 h-4 w-4 shrink-0\"\n ></atomic-icon>\n );\n};\n\ninterface RecentQueryTextProps {\n query: string;\n value: string;\n}\n\nexport const RecentQueryText: FunctionalComponent<RecentQueryTextProps> = ({\n query,\n value,\n}) => {\n if (query === '') {\n return (\n <span part=\"recent-query-text\" class=\"line-clamp-2 break-all\">\n {value}\n </span>\n );\n }\n return (\n <span\n part=\"recent-query-text\"\n class=\"line-clamp-2 break-all\"\n innerHTML={HighlightUtils.highlightString({\n content: value,\n openingDelimiter:\n '<span part=\"recent-query-text-highlight\" class=\"font-bold\">',\n closingDelimiter: '</span>',\n highlights: [\n {\n offset: query.length,\n length: value.length - query.length,\n },\n ],\n })}\n ></span>\n );\n};\n\ninterface RecentQueryClearProps {\n i18n: i18n;\n}\n\nexport const RecentQueryClear: FunctionalComponent<RecentQueryClearProps> = ({\n i18n,\n}) => {\n return (\n <div part=\"recent-query-title-content\" class=\"flex w-full justify-between\">\n <span class=\"font-bold\" part=\"recent-query-title\">\n {i18n.t('recent-searches')}\n </span>\n <span part=\"recent-query-clear\">{i18n.t('clear')}</span>\n </div>\n );\n};\n","import {\n buildRecentQueriesList,\n RecentQueriesList,\n SearchBox,\n} from '@coveo/headless';\nimport {Component, Element, Prop, State, h} from '@stencil/core';\nimport Clock from '../../../../images/clock.svg';\nimport {SafeStorage, StorageItems} from '../../../../utils/local-storage-utils';\nimport {once} from '../../../../utils/utils';\nimport {\n getPartialRecentQueryClearElement,\n getPartialRecentQueryElement,\n RecentQueriesContainer,\n RecentQueryClear,\n RecentQueryIcon,\n RecentQueryText,\n} from '../../../common/suggestions/stencil-recent-queries';\nimport {\n dispatchSearchBoxSuggestionsEvent,\n} from '../../../common/suggestions/suggestions-events';\nimport type {\n SearchBoxSuggestionElement,\n SearchBoxSuggestions,\n SearchBoxSuggestionsBindings,\n} from '../../../common/suggestions/suggestions-types';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.\n */\n@Component({\n tag: 'atomic-search-box-recent-queries',\n shadow: true,\n})\nexport class AtomicSearchBoxRecentQueries {\n private bindings!: SearchBoxSuggestionsBindings<SearchBox, Bindings>;\n private recentQueriesList!: RecentQueriesList;\n private storage!: SafeStorage;\n\n @Element() private host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The SVG icon to display.\n *\n * - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n * - Use a value that starts with `assets://`, to display an icon from the Atomic package.\n * - Use a stringified SVG to display it directly.\n */\n @Prop() public icon?: string;\n\n /**\n * The maximum number of suggestions that will be displayed if the user has typed something into the input field.\n */\n @Prop({reflect: true}) public maxWithQuery = 3;\n /**\n * The maximum number of suggestions that will be displayed initially when the input field is empty.\n */\n @Prop({reflect: true}) public maxWithoutQuery?: number;\n\n componentWillLoad() {\n try {\n dispatchSearchBoxSuggestionsEvent<SearchBox, Bindings>(\n (bindings) => {\n this.bindings = bindings;\n return this.initialize();\n },\n this.host,\n ['atomic-search-box']\n );\n } catch (error) {\n this.error = error as Error;\n }\n }\n\n private renderIcon() {\n return this.icon || Clock;\n }\n\n private initialize(): SearchBoxSuggestions {\n this.storage = new SafeStorage();\n this.recentQueriesList = buildRecentQueriesList(this.bindings.engine, {\n initialState: {queries: this.retrieveLocalStorage()},\n options: {maxLength: 1000, clearFilters: this.bindings.clearFilters},\n });\n\n this.recentQueriesList.subscribe(() => this.updateLocalStorage());\n\n return {\n position: Array.from(this.host.parentNode!.children).indexOf(this.host),\n renderItems: () => this.renderItems(),\n };\n }\n\n private retrieveLocalStorage() {\n return this.storage.getParsedJSON(StorageItems.RECENT_QUERIES, []);\n }\n\n private updateLocalStorage() {\n if (!this.recentQueriesList.state.analyticsEnabled) {\n return this.disableFeature();\n }\n\n return this.storage.setJSON(\n StorageItems.RECENT_QUERIES,\n this.recentQueriesList.state.queries\n );\n }\n\n private warnUser = once(() =>\n this.bindings.engine.logger.warn(\n 'Because analytics are disabled, the recent queries feature is deactivated.'\n )\n );\n\n private disableFeature() {\n this.warnUser();\n this.storage.removeItem(StorageItems.RECENT_QUERIES);\n }\n\n private renderItems(): SearchBoxSuggestionElement[] {\n if (!this.recentQueriesList.state.analyticsEnabled) {\n return [];\n }\n\n const query = this.bindings.searchBoxController.state.value;\n const hasQuery = query !== '';\n const max = hasQuery ? this.maxWithQuery : this.maxWithoutQuery;\n const filteredQueries = this.recentQueriesList.state.queries\n .filter((recentQuery) =>\n recentQuery.toLowerCase().startsWith(query.toLowerCase())\n )\n .slice(0, max);\n\n const suggestionElements: SearchBoxSuggestionElement[] =\n filteredQueries.map((value) => this.renderItem(value));\n if (suggestionElements.length) {\n suggestionElements.unshift(this.renderClear());\n }\n\n return suggestionElements;\n }\n\n private renderClear(): SearchBoxSuggestionElement {\n const partialItem = getPartialRecentQueryClearElement(this.bindings.i18n);\n\n return {\n ...partialItem,\n content: <RecentQueryClear i18n={this.bindings.i18n} />,\n onSelect: () => {\n this.recentQueriesList.clear();\n this.bindings.triggerSuggestions();\n },\n };\n }\n\n private renderItem(value: string): SearchBoxSuggestionElement {\n const query = this.bindings.searchBoxController.state.value;\n const partialItem = getPartialRecentQueryElement(value, this.bindings.i18n);\n return {\n ...partialItem,\n content: (\n <RecentQueriesContainer>\n <RecentQueryIcon icon={this.renderIcon()} />\n <RecentQueryText query={query} value={value} />\n </RecentQueriesContainer>\n ),\n\n onSelect: () => {\n if (this.bindings.isStandalone) {\n this.bindings.searchBoxController.updateText(value);\n this.bindings.searchBoxController.submit();\n return;\n }\n\n this.recentQueriesList.executeRecentQuery(\n this.recentQueriesList.state.queries.indexOf(value)\n );\n },\n };\n }\n\n public render() {\n if (this.error) {\n return (\n <atomic-component-error\n element={this.host}\n error={this.error}\n ></atomic-component-error>\n );\n }\n }\n}\n"],"version":3}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
import{r as t,h as e,g as s}from"./p-dc3df5ce.js";import{loadQuerySuggestActions as r,HighlightUtils as i,buildRecentQueriesList as n}from"@coveo/headless";import{S as o}from"./p-cfb3c589.js";import{g as c,Q as a,a as h,b as l}from"./p-af93b44c.js";import{d as u}from"./p-4b7a19db.js";import{C as p}from"./p-c280cd05.js";import{S as d,a as f}from"./p-946fe85f.js";import{o as m}from"./p-a12e1c59.js";import{e as y}from"./p-8f5830b4.js";import"./p-c9074946.js";import"./p-1580513b.js";import"./p-f284897c.js";import"./p-0462f723.js";const b=class{constructor(e){t(this,e);this.error=undefined;this.icon=undefined;this.maxWithQuery=undefined;this.maxWithoutQuery=undefined}componentWillLoad(){try{u((t=>{this.bindings=t;return this.initialize()}),this.host,["atomic-search-box"])}catch(t){this.error=t}}initialize(){const t=this.bindings.engine;const{registerQuerySuggest:e,fetchQuerySuggestions:s}=r(t);t.dispatch(e({id:this.bindings.id,count:this.bindings.numberOfQueries}));return{position:Array.from(this.host.parentNode.children).indexOf(this.host),onInput:()=>t.dispatch(s({id:this.bindings.id})),renderItems:()=>this.renderItems()}}renderItems(){const t=this.bindings.searchBoxController.state.value!=="";const e=t?this.maxWithQuery:this.maxWithoutQuery;return this.bindings.searchBoxController.state.suggestions.slice(0,e).map((t=>this.renderItem(t)))}renderItem(t){const s=this.bindings.searchBoxController.state.value!=="";const r=c(t,this.bindings.i18n);return{...r,content:e(l,null,e(h,{icon:this.icon||o,hasSuggestion:this.bindings.getSuggestions().length>1}),e(a,{suggestion:t,hasQuery:s})),onSelect:()=>{this.bindings.searchBoxController.selectSuggestion(t.rawValue)}}}render(){if(this.error){return e("atomic-component-error",{key:"818ed7b1734a6f2cbf721b1eb3fd03d020791e9e",element:this.host,error:this.error})}}get host(){return s(this)}};const g=(t,e)=>({part:"recent-query-item",query:t,key:`recent-${y(t)}`,ariaLabel:e.t("recent-query-suggestion-label",{query:t,interpolation:{escapeValue:false}})});const q=t=>({key:"recent-query-clear",ariaLabel:t.t("clear-recent-searches",{interpolation:{escapeValue:false}}),part:"recent-query-title-item suggestion-divider",hideIfLast:true});const j=(t,s)=>e("div",{part:"recent-query-content",class:"flex items-center text-left break-all"},s);const x=({icon:t})=>e("atomic-icon",{part:"recent-query-icon",icon:t,class:"mr-2 h-4 w-4 shrink-0"});const S=({query:t,value:s})=>{if(t===""){return e("span",{part:"recent-query-text",class:"line-clamp-2 break-all"},s)}return e("span",{part:"recent-query-text",class:"line-clamp-2 break-all",innerHTML:i.highlightString({content:s,openingDelimiter:'<span part="recent-query-text-highlight" class="font-bold">',closingDelimiter:"</span>",highlights:[{offset:t.length,length:s.length-t.length}]})})};const I=({i18n:t})=>e("div",{part:"recent-query-title-content",class:"flex w-full justify-between"},e("span",{class:"font-bold",part:"recent-query-title"},t.t("recent-searches")),e("span",{part:"recent-query-clear"},t.t("clear")));const L=class{constructor(e){t(this,e);this.maxWithQuery=3;this.warnUser=m((()=>this.bindings.engine.logger.warn("Because analytics are disabled, the recent queries feature is deactivated.")));this.error=undefined;this.icon=undefined;this.maxWithQuery=3;this.maxWithoutQuery=undefined}componentWillLoad(){try{u((t=>{this.bindings=t;return this.initialize()}),this.host,["atomic-search-box"])}catch(t){this.error=t}}renderIcon(){return this.icon||p}initialize(){this.storage=new d;this.recentQueriesList=n(this.bindings.engine,{initialState:{queries:this.retrieveLocalStorage()},options:{maxLength:1e3,clearFilters:this.bindings.clearFilters}});this.recentQueriesList.subscribe((()=>this.updateLocalStorage()));return{position:Array.from(this.host.parentNode.children).indexOf(this.host),renderItems:()=>this.renderItems()}}retrieveLocalStorage(){return this.storage.getParsedJSON(f.RECENT_QUERIES,[])}updateLocalStorage(){if(!this.recentQueriesList.state.analyticsEnabled){return this.disableFeature()}return this.storage.setJSON(f.RECENT_QUERIES,this.recentQueriesList.state.queries)}disableFeature(){this.warnUser();this.storage.removeItem(f.RECENT_QUERIES)}renderItems(){if(!this.recentQueriesList.state.analyticsEnabled){return[]}const t=this.bindings.searchBoxController.state.value;const e=t!=="";const s=e?this.maxWithQuery:this.maxWithoutQuery;const r=this.recentQueriesList.state.queries.filter((e=>e.toLowerCase().startsWith(t.toLowerCase()))).slice(0,s);const i=r.map((t=>this.renderItem(t)));if(i.length){i.unshift(this.renderClear())}return i}renderClear(){const t=q(this.bindings.i18n);return{...t,content:e(I,{i18n:this.bindings.i18n}),onSelect:()=>{this.recentQueriesList.clear();this.bindings.triggerSuggestions()}}}renderItem(t){const s=this.bindings.searchBoxController.state.value;const r=g(t,this.bindings.i18n);return{...r,content:e(j,null,e(x,{icon:this.renderIcon()}),e(S,{query:s,value:t})),onSelect:()=>{if(this.bindings.isStandalone){this.bindings.searchBoxController.updateText(t);this.bindings.searchBoxController.submit();return}this.recentQueriesList.executeRecentQuery(this.recentQueriesList.state.queries.indexOf(t))}}}render(){if(this.error){return e("atomic-component-error",{key:"a0eed6f3235cbc1ecd75fdb75608c6db10934dda",element:this.host,error:this.error})}}get host(){return s(this)}};export{b as atomic_search_box_query_suggestions,L as atomic_search_box_recent_queries};
|
2
|
-
//# sourceMappingURL=p-31f1e44e.entry.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["AtomicSearchBoxQuerySuggestions","componentWillLoad","dispatchSearchBoxSuggestionsEvent","bindings","this","initialize","host","error","engine","registerQuerySuggest","fetchQuerySuggestions","loadQuerySuggestActions","dispatch","id","count","numberOfQueries","position","Array","from","parentNode","children","indexOf","onInput","renderItems","hasQuery","searchBoxController","state","value","max","maxWithQuery","maxWithoutQuery","suggestions","slice","map","suggestion","renderItem","partialItem","getPartialSearchBoxSuggestionElement","i18n","content","h","QuerySuggestionContainer","QuerySuggestionIcon","icon","SearchIcon","hasSuggestion","getSuggestions","length","QuerySuggestionText","onSelect","selectSuggestion","rawValue","render","key","element","getPartialRecentQueryElement","part","query","encodeForDomAttribute","ariaLabel","t","interpolation","escapeValue","getPartialRecentQueryClearElement","hideIfLast","RecentQueriesContainer","_","class","RecentQueryIcon","RecentQueryText","innerHTML","HighlightUtils","highlightString","openingDelimiter","closingDelimiter","highlights","offset","RecentQueryClear","AtomicSearchBoxRecentQueries","warnUser","once","logger","warn","renderIcon","Clock","storage","SafeStorage","recentQueriesList","buildRecentQueriesList","initialState","queries","retrieveLocalStorage","options","maxLength","clearFilters","subscribe","updateLocalStorage","getParsedJSON","StorageItems","RECENT_QUERIES","analyticsEnabled","disableFeature","setJSON","removeItem","filteredQueries","filter","recentQuery","toLowerCase","startsWith","suggestionElements","unshift","renderClear","clear","triggerSuggestions","isStandalone","updateText","submit","executeRecentQuery"],"sources":["src/components/search/search-box-suggestions/atomic-search-box-query-suggestions/atomic-search-box-query-suggestions.tsx","src/components/common/suggestions/stencil-recent-queries.tsx","src/components/search/search-box-suggestions/atomic-search-box-recent-queries/atomic-search-box-recent-queries.tsx"],"sourcesContent":["import {\n loadQuerySuggestActions,\n SearchBox,\n SearchEngine,\n Suggestion,\n} from '@coveo/headless';\nimport {Component, Element, Prop, State, h} from '@stencil/core';\nimport SearchIcon from '../../../../images/search.svg';\nimport {\n getPartialSearchBoxSuggestionElement,\n QuerySuggestionContainer,\n QuerySuggestionIcon,\n QuerySuggestionText,\n} from '../../../common/suggestions/stencil-query-suggestions';\nimport {\n dispatchSearchBoxSuggestionsEvent,\n} from '../../../common/suggestions/suggestions-events';\nimport type {\n SearchBoxSuggestionElement,\n SearchBoxSuggestions,\n SearchBoxSuggestionsBindings,\n} from '../../../common/suggestions/suggestions-types';\n\n/**\n * The `atomic-search-box-query-suggestions` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of query suggestion behavior.\n */\n@Component({\n tag: 'atomic-search-box-query-suggestions',\n shadow: true,\n})\nexport class AtomicSearchBoxQuerySuggestions {\n private bindings!: SearchBoxSuggestionsBindings<SearchBox>;\n @Element() private host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The SVG icon to display.\n *\n * - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n * - Use a value that starts with `assets://`, to display an icon from the Atomic package.\n * - Use a stringified SVG to display it directly.\n */\n @Prop() public icon?: string;\n\n /**\n * The maximum number of suggestions that will be displayed if the user has typed something into the input field.\n */\n @Prop({reflect: true}) public maxWithQuery?: number;\n /**\n * The maximum number of suggestions that will be displayed initially when the input field is empty.\n */\n @Prop({reflect: true}) public maxWithoutQuery?: number;\n\n componentWillLoad() {\n try {\n dispatchSearchBoxSuggestionsEvent<SearchBox>(\n (bindings) => {\n this.bindings = bindings;\n return this.initialize();\n },\n this.host,\n ['atomic-search-box']\n );\n } catch (error) {\n this.error = error as Error;\n }\n }\n\n private initialize(): SearchBoxSuggestions {\n const engine = this.bindings.engine as SearchEngine<{\n querySet: string;\n querySuggest: string;\n }>;\n const {registerQuerySuggest, fetchQuerySuggestions} =\n loadQuerySuggestActions(engine);\n\n engine.dispatch(\n registerQuerySuggest({\n id: this.bindings.id,\n count: this.bindings.numberOfQueries,\n })\n );\n\n return {\n position: Array.from(this.host.parentNode!.children).indexOf(this.host),\n onInput: () =>\n engine.dispatch(\n fetchQuerySuggestions({\n id: this.bindings.id,\n })\n ),\n renderItems: () => this.renderItems(),\n };\n }\n\n private renderItems(): SearchBoxSuggestionElement[] {\n const hasQuery = this.bindings.searchBoxController.state.value !== '';\n const max = hasQuery ? this.maxWithQuery : this.maxWithoutQuery;\n return this.bindings.searchBoxController.state.suggestions\n .slice(0, max)\n .map((suggestion) => this.renderItem(suggestion));\n }\n\n private renderItem(suggestion: Suggestion) {\n const hasQuery = this.bindings.searchBoxController.state.value !== '';\n const partialItem = getPartialSearchBoxSuggestionElement(\n suggestion,\n this.bindings.i18n\n );\n\n return {\n ...partialItem,\n content: (\n <QuerySuggestionContainer>\n <QuerySuggestionIcon\n icon={this.icon || SearchIcon}\n hasSuggestion={this.bindings.getSuggestions().length > 1}\n />\n\n <QuerySuggestionText suggestion={suggestion} hasQuery={hasQuery} />\n </QuerySuggestionContainer>\n ),\n onSelect: () => {\n this.bindings.searchBoxController.selectSuggestion(suggestion.rawValue);\n },\n };\n }\n\n public render() {\n if (this.error) {\n return (\n <atomic-component-error\n element={this.host}\n error={this.error}\n ></atomic-component-error>\n );\n }\n }\n}\n","import {HighlightUtils} from '@coveo/headless';\nimport {FunctionalComponent, h} from '@stencil/core';\nimport {i18n} from 'i18next';\nimport {encodeForDomAttribute} from '../../../utils/string-utils';\nimport {SearchBoxSuggestionElement} from './suggestions-types';\n\nexport const getPartialRecentQueryElement = (\n value: string,\n i18n: i18n\n): Pick<SearchBoxSuggestionElement, 'ariaLabel' | 'key' | 'query' | 'part'> => {\n return {\n part: 'recent-query-item',\n query: value,\n key: `recent-${encodeForDomAttribute(value)}`,\n ariaLabel: i18n.t('recent-query-suggestion-label', {\n query: value,\n interpolation: {escapeValue: false},\n }),\n };\n};\n\nexport const getPartialRecentQueryClearElement = (\n i18n: i18n\n): Pick<\n SearchBoxSuggestionElement,\n 'ariaLabel' | 'key' | 'part' | 'hideIfLast'\n> => {\n return {\n key: 'recent-query-clear',\n ariaLabel: i18n.t('clear-recent-searches', {\n interpolation: {escapeValue: false},\n }),\n part: 'recent-query-title-item suggestion-divider',\n hideIfLast: true,\n };\n};\n\nexport const RecentQueriesContainer: FunctionalComponent = (_, children) => {\n return (\n <div\n part=\"recent-query-content\"\n class=\"flex items-center text-left break-all\"\n >\n {children}\n </div>\n );\n};\n\ninterface RecentQueryIconProps {\n icon: string;\n}\n\nexport const RecentQueryIcon: FunctionalComponent<RecentQueryIconProps> = ({\n icon,\n}) => {\n return (\n <atomic-icon\n part=\"recent-query-icon\"\n icon={icon}\n class=\"mr-2 h-4 w-4 shrink-0\"\n ></atomic-icon>\n );\n};\n\ninterface RecentQueryTextProps {\n query: string;\n value: string;\n}\n\nexport const RecentQueryText: FunctionalComponent<RecentQueryTextProps> = ({\n query,\n value,\n}) => {\n if (query === '') {\n return (\n <span part=\"recent-query-text\" class=\"line-clamp-2 break-all\">\n {value}\n </span>\n );\n }\n return (\n <span\n part=\"recent-query-text\"\n class=\"line-clamp-2 break-all\"\n innerHTML={HighlightUtils.highlightString({\n content: value,\n openingDelimiter:\n '<span part=\"recent-query-text-highlight\" class=\"font-bold\">',\n closingDelimiter: '</span>',\n highlights: [\n {\n offset: query.length,\n length: value.length - query.length,\n },\n ],\n })}\n ></span>\n );\n};\n\ninterface RecentQueryClearProps {\n i18n: i18n;\n}\n\nexport const RecentQueryClear: FunctionalComponent<RecentQueryClearProps> = ({\n i18n,\n}) => {\n return (\n <div part=\"recent-query-title-content\" class=\"flex w-full justify-between\">\n <span class=\"font-bold\" part=\"recent-query-title\">\n {i18n.t('recent-searches')}\n </span>\n <span part=\"recent-query-clear\">{i18n.t('clear')}</span>\n </div>\n );\n};\n","import {\n buildRecentQueriesList,\n RecentQueriesList,\n SearchBox,\n} from '@coveo/headless';\nimport {Component, Element, Prop, State, h} from '@stencil/core';\nimport Clock from '../../../../images/clock.svg';\nimport {SafeStorage, StorageItems} from '../../../../utils/local-storage-utils';\nimport {once} from '../../../../utils/utils';\nimport {\n getPartialRecentQueryClearElement,\n getPartialRecentQueryElement,\n RecentQueriesContainer,\n RecentQueryClear,\n RecentQueryIcon,\n RecentQueryText,\n} from '../../../common/suggestions/stencil-recent-queries';\nimport {\n dispatchSearchBoxSuggestionsEvent,\n} from '../../../common/suggestions/suggestions-events';\nimport type {\n SearchBoxSuggestionElement,\n SearchBoxSuggestions,\n SearchBoxSuggestionsBindings,\n} from '../../../common/suggestions/suggestions-types';\nimport {Bindings} from '../../atomic-search-interface/atomic-search-interface';\n\n/**\n * The `atomic-search-box-recent-queries` component can be added as a child of an `atomic-search-box` component, allowing for the configuration of recent query suggestions.\n */\n@Component({\n tag: 'atomic-search-box-recent-queries',\n shadow: true,\n})\nexport class AtomicSearchBoxRecentQueries {\n private bindings!: SearchBoxSuggestionsBindings<SearchBox, Bindings>;\n private recentQueriesList!: RecentQueriesList;\n private storage!: SafeStorage;\n\n @Element() private host!: HTMLElement;\n\n @State() public error!: Error;\n\n /**\n * The SVG icon to display.\n *\n * - Use a value that starts with `http://`, `https://`, `./`, or `../`, to fetch and display an icon from a given location.\n * - Use a value that starts with `assets://`, to display an icon from the Atomic package.\n * - Use a stringified SVG to display it directly.\n */\n @Prop() public icon?: string;\n\n /**\n * The maximum number of suggestions that will be displayed if the user has typed something into the input field.\n */\n @Prop({reflect: true}) public maxWithQuery = 3;\n /**\n * The maximum number of suggestions that will be displayed initially when the input field is empty.\n */\n @Prop({reflect: true}) public maxWithoutQuery?: number;\n\n componentWillLoad() {\n try {\n dispatchSearchBoxSuggestionsEvent<SearchBox, Bindings>(\n (bindings) => {\n this.bindings = bindings;\n return this.initialize();\n },\n this.host,\n ['atomic-search-box']\n );\n } catch (error) {\n this.error = error as Error;\n }\n }\n\n private renderIcon() {\n return this.icon || Clock;\n }\n\n private initialize(): SearchBoxSuggestions {\n this.storage = new SafeStorage();\n this.recentQueriesList = buildRecentQueriesList(this.bindings.engine, {\n initialState: {queries: this.retrieveLocalStorage()},\n options: {maxLength: 1000, clearFilters: this.bindings.clearFilters},\n });\n\n this.recentQueriesList.subscribe(() => this.updateLocalStorage());\n\n return {\n position: Array.from(this.host.parentNode!.children).indexOf(this.host),\n renderItems: () => this.renderItems(),\n };\n }\n\n private retrieveLocalStorage() {\n return this.storage.getParsedJSON(StorageItems.RECENT_QUERIES, []);\n }\n\n private updateLocalStorage() {\n if (!this.recentQueriesList.state.analyticsEnabled) {\n return this.disableFeature();\n }\n\n return this.storage.setJSON(\n StorageItems.RECENT_QUERIES,\n this.recentQueriesList.state.queries\n );\n }\n\n private warnUser = once(() =>\n this.bindings.engine.logger.warn(\n 'Because analytics are disabled, the recent queries feature is deactivated.'\n )\n );\n\n private disableFeature() {\n this.warnUser();\n this.storage.removeItem(StorageItems.RECENT_QUERIES);\n }\n\n private renderItems(): SearchBoxSuggestionElement[] {\n if (!this.recentQueriesList.state.analyticsEnabled) {\n return [];\n }\n\n const query = this.bindings.searchBoxController.state.value;\n const hasQuery = query !== '';\n const max = hasQuery ? this.maxWithQuery : this.maxWithoutQuery;\n const filteredQueries = this.recentQueriesList.state.queries\n .filter((recentQuery) =>\n recentQuery.toLowerCase().startsWith(query.toLowerCase())\n )\n .slice(0, max);\n\n const suggestionElements: SearchBoxSuggestionElement[] =\n filteredQueries.map((value) => this.renderItem(value));\n if (suggestionElements.length) {\n suggestionElements.unshift(this.renderClear());\n }\n\n return suggestionElements;\n }\n\n private renderClear(): SearchBoxSuggestionElement {\n const partialItem = getPartialRecentQueryClearElement(this.bindings.i18n);\n\n return {\n ...partialItem,\n content: <RecentQueryClear i18n={this.bindings.i18n} />,\n onSelect: () => {\n this.recentQueriesList.clear();\n this.bindings.triggerSuggestions();\n },\n };\n }\n\n private renderItem(value: string): SearchBoxSuggestionElement {\n const query = this.bindings.searchBoxController.state.value;\n const partialItem = getPartialRecentQueryElement(value, this.bindings.i18n);\n return {\n ...partialItem,\n content: (\n <RecentQueriesContainer>\n <RecentQueryIcon icon={this.renderIcon()} />\n <RecentQueryText query={query} value={value} />\n </RecentQueriesContainer>\n ),\n\n onSelect: () => {\n if (this.bindings.isStandalone) {\n this.bindings.searchBoxController.updateText(value);\n this.bindings.searchBoxController.submit();\n return;\n }\n\n this.recentQueriesList.executeRecentQuery(\n this.recentQueriesList.state.queries.indexOf(value)\n );\n },\n };\n }\n\n public render() {\n if (this.error) {\n return (\n <atomic-component-error\n element={this.host}\n error={this.error}\n ></atomic-component-error>\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|