@searchcraft/javascript-sdk 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-e7bd239c.js → index-e7e9ab69.js} +4 -3
- package/dist/cjs/index-e7e9ab69.js.map +1 -0
- package/dist/cjs/index.cjs.js +4 -2
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/searchcraft-auto-search-form_13.cjs.entry.js +55 -29
- package/dist/cjs/searchcraft-auto-search-form_13.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-base-search-form.cjs.entry.js +2 -2
- package/dist/cjs/searchcraft-button-icon.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-button.cjs.entry.js +2 -2
- package/dist/cjs/searchcraft-javascript-sdk.cjs.js +2 -2
- package/dist/cjs/{store-6c259dd0.js → store-ab3978ce.js} +2 -2
- package/dist/cjs/{store-6c259dd0.js.map → store-ab3978ce.js.map} +1 -1
- package/dist/cjs/utils-57b6c18f.js +48 -0
- package/dist/cjs/utils-57b6c18f.js.map +1 -0
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +126 -65
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +1 -1
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.module.css +42 -2
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +69 -4
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +1 -1
- package/dist/collection/components/searchcraft-button/searchcraft-button.js +1 -1
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +1 -1
- package/dist/collection/components/searchcraft-input-icon/searchcraft-input-icon.module.css +6 -4
- package/dist/collection/components/searchcraft-spinner-dark/searchcraft-spinner-dark.js +1 -1
- package/dist/collection/components/searchcraft-spinner-light/searchcraft-spinner-light.js +1 -1
- package/dist/collection/index.js +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/provider/store.js.map +1 -1
- package/dist/collection/utils/utils.js +23 -0
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/index.js +3 -3
- package/dist/components/{p-c69651f6.js → p-066c8210.js} +3 -3
- package/dist/components/p-066c8210.js.map +1 -0
- package/dist/components/p-1912bbbd.js +83 -0
- package/dist/components/p-1912bbbd.js.map +1 -0
- package/dist/components/{p-a18c4969.js → p-1bd04bac.js} +10 -10
- package/dist/components/{p-a18c4969.js.map → p-1bd04bac.js.map} +1 -1
- package/dist/components/{p-6f0eaec6.js → p-36c95064.js} +2 -2
- package/dist/components/{p-6f0eaec6.js.map → p-36c95064.js.map} +1 -1
- package/dist/components/p-5e3152c4.js +44 -0
- package/dist/components/p-5e3152c4.js.map +1 -0
- package/dist/components/{p-8646a603.js → p-63035c6a.js} +4 -4
- package/dist/components/p-63035c6a.js.map +1 -0
- package/dist/components/{p-0c25e95d.js → p-6f2a72d3.js} +3 -3
- package/dist/components/{p-0c25e95d.js.map → p-6f2a72d3.js.map} +1 -1
- package/dist/components/{p-e8e40447.js → p-8d9551ce.js} +3 -3
- package/dist/components/{p-e8e40447.js.map → p-8d9551ce.js.map} +1 -1
- package/dist/components/{p-2cc8c074.js → p-b1ff2296.js} +5 -5
- package/dist/components/{p-2cc8c074.js.map → p-b1ff2296.js.map} +1 -1
- package/dist/components/{p-f83f2b59.js → p-c3838435.js} +4 -4
- package/dist/components/{p-f83f2b59.js.map → p-c3838435.js.map} +1 -1
- package/dist/components/{p-199065b5.js → p-cb75ba7a.js} +2 -2
- package/dist/components/{p-199065b5.js.map → p-cb75ba7a.js.map} +1 -1
- package/dist/components/{p-04e7305e.js → p-d0edf961.js} +2 -2
- package/dist/components/{p-04e7305e.js.map → p-d0edf961.js.map} +1 -1
- package/dist/components/{p-155f7a59.js → p-d446eda4.js} +2 -2
- package/dist/components/{p-155f7a59.js.map → p-d446eda4.js.map} +1 -1
- package/dist/components/{p-9283a3c2.js → p-d54bca75.js} +2 -2
- package/dist/components/{p-9283a3c2.js.map → p-d54bca75.js.map} +1 -1
- package/dist/components/{p-16a533e3.js → p-d6616aa5.js} +3 -3
- package/dist/components/{p-16a533e3.js.map → p-d6616aa5.js.map} +1 -1
- package/dist/components/searchcraft-auto-search-form.js +13 -13
- package/dist/components/searchcraft-base-search-form.js +13 -13
- package/dist/components/searchcraft-base-search-result.js +1 -1
- package/dist/components/searchcraft-base-search-results.js +31 -9
- package/dist/components/searchcraft-base-search-results.js.map +1 -1
- package/dist/components/searchcraft-button-icon.js +1 -1
- package/dist/components/searchcraft-button.js +1 -1
- package/dist/components/searchcraft-clear-icon-set.js +1 -1
- package/dist/components/searchcraft-clear-input-button.js +1 -1
- package/dist/components/searchcraft-error-message.js +1 -1
- package/dist/components/searchcraft-input-caption.js +1 -1
- package/dist/components/searchcraft-input-icon.js +1 -1
- package/dist/components/searchcraft-input-label.js +1 -1
- package/dist/components/searchcraft-input.js +1 -1
- package/dist/components/searchcraft-search-icon-set.js +1 -1
- package/dist/components/searchcraft-spinner-dark.js +1 -1
- package/dist/components/searchcraft-spinner-light.js +1 -1
- package/dist/esm/{index-0d9f850d.js → index-eace3343.js} +4 -4
- package/dist/esm/index-eace3343.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/loader.js +3 -3
- package/dist/esm/searchcraft-auto-search-form_13.entry.js +55 -29
- package/dist/esm/searchcraft-auto-search-form_13.entry.js.map +1 -1
- package/dist/esm/searchcraft-base-search-form.entry.js +2 -2
- package/dist/esm/searchcraft-button-icon.entry.js +1 -1
- package/dist/esm/searchcraft-button.entry.js +2 -2
- package/dist/esm/searchcraft-javascript-sdk.js +3 -3
- package/dist/esm/{store-2370857c.js → store-e55b12aa.js} +2 -2
- package/dist/esm/{store-2370857c.js.map → store-e55b12aa.js.map} +1 -1
- package/dist/esm/utils-02b18bb5.js +44 -0
- package/dist/esm/utils-02b18bb5.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/index.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/{p-329c3f66.js → p-0ba9029b.js} +3 -3
- package/dist/searchcraft-javascript-sdk/p-0ba9029b.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-6f0eaec6.js → p-36c95064.js} +1 -1
- package/dist/searchcraft-javascript-sdk/p-36c95064.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-437c6ef9.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-437c6ef9.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-0a8c2538.entry.js → p-562e923d.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-40791ead.entry.js → p-5959cd6a.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/p-5e3152c4.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-5e3152c4.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-4d18a44a.entry.js → p-eb632a89.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +1 -1
- package/dist/types/components/searchcraft-base-search-result/searchcraft-base-search-result.d.ts +14 -11
- package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +13 -2
- package/dist/types/components.d.ts +58 -22
- package/dist/types/index.d.ts +1 -1
- package/dist/types/provider/store.d.ts +3 -3
- package/dist/types/utils/utils.d.ts +2 -0
- package/package.json +1 -1
- package/dist/cjs/index-e7bd239c.js.map +0 -1
- package/dist/cjs/utils-cbbed1f7.js +0 -23
- package/dist/cjs/utils-cbbed1f7.js.map +0 -1
- package/dist/components/p-1ef23e15.js +0 -21
- package/dist/components/p-1ef23e15.js.map +0 -1
- package/dist/components/p-83c9df48.js +0 -76
- package/dist/components/p-83c9df48.js.map +0 -1
- package/dist/components/p-8646a603.js.map +0 -1
- package/dist/components/p-c69651f6.js.map +0 -1
- package/dist/esm/index-0d9f850d.js.map +0 -1
- package/dist/esm/utils-f221d91f.js +0 -21
- package/dist/esm/utils-f221d91f.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-1ef23e15.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-1ef23e15.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-329c3f66.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-6f0eaec6.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-c0cb5bb1.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-c0cb5bb1.entry.js.map +0 -1
- /package/dist/searchcraft-javascript-sdk/{p-0a8c2538.entry.js.map → p-562e923d.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-40791ead.entry.js.map → p-5959cd6a.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-4d18a44a.entry.js.map → p-eb632a89.entry.js.map} +0 -0
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
color: #BFBFBF;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
.
|
|
152
|
+
.primaryContentLight {
|
|
153
153
|
font-family: var(--font-stack);
|
|
154
154
|
font-size: 16px;
|
|
155
155
|
font-weight: 400;
|
|
@@ -159,7 +159,47 @@
|
|
|
159
159
|
color: #404040;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
.
|
|
162
|
+
.primaryContentDark {
|
|
163
|
+
font-family: var(--font-stack);
|
|
164
|
+
font-size: 16px;
|
|
165
|
+
font-weight: 400;
|
|
166
|
+
line-height: 20px;
|
|
167
|
+
margin-bottom: 4px;
|
|
168
|
+
margin-top: 0px;
|
|
169
|
+
color: #E6E6E6;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.secondaryContentLight {
|
|
173
|
+
font-family: var(--font-stack);
|
|
174
|
+
font-size: 16px;
|
|
175
|
+
font-weight: 400;
|
|
176
|
+
line-height: 20px;
|
|
177
|
+
margin-bottom: 4px;
|
|
178
|
+
margin-top: 0px;
|
|
179
|
+
color: #404040;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.secondaryContentDark {
|
|
183
|
+
font-family: var(--font-stack);
|
|
184
|
+
font-size: 16px;
|
|
185
|
+
font-weight: 400;
|
|
186
|
+
line-height: 20px;
|
|
187
|
+
margin-bottom: 4px;
|
|
188
|
+
margin-top: 0px;
|
|
189
|
+
color: #E6E6E6;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.tertiaryContentLight {
|
|
193
|
+
font-family: var(--font-stack);
|
|
194
|
+
font-size: 16px;
|
|
195
|
+
font-weight: 400;
|
|
196
|
+
line-height: 20px;
|
|
197
|
+
margin-bottom: 4px;
|
|
198
|
+
margin-top: 0px;
|
|
199
|
+
color: #404040;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.tertiaryContentDark {
|
|
163
203
|
font-family: var(--font-stack);
|
|
164
204
|
font-size: 16px;
|
|
165
205
|
font-weight: 400;
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { useSearchcraftStore } from "../../provider/store";
|
|
3
|
+
import { extractDynamicProperties, parseCustomStyles, parseSearchKeys, } from "../../utils/utils";
|
|
3
4
|
export class SearchcraftBaseSearchResults {
|
|
4
5
|
constructor() {
|
|
5
6
|
this.query = '';
|
|
6
7
|
this.searchResults = null;
|
|
8
|
+
this.searchKeys = '';
|
|
9
|
+
this.customStylesForResults = {};
|
|
7
10
|
}
|
|
8
11
|
componentDidLoad() {
|
|
12
|
+
// Initialize searchKeys if not provided
|
|
13
|
+
if (!this.searchKeys || this.searchKeys.length === 0) {
|
|
14
|
+
console.warn('No searchKeys provided; using empty keys array.');
|
|
15
|
+
this.searchKeys = ''; // Ensure it's explicitly set as an empty array
|
|
16
|
+
}
|
|
9
17
|
// Subscribe to state changes
|
|
10
18
|
this.unsubscribe = useSearchcraftStore.subscribe((state) => {
|
|
11
|
-
console.log('Store updated:', state);
|
|
12
19
|
this.searchResults = Object.assign({}, state.searchResults);
|
|
13
20
|
this.query = state.query;
|
|
14
21
|
});
|
|
15
22
|
// Fetch initial state
|
|
16
23
|
const { searchResults, query } = useSearchcraftStore.getState();
|
|
17
|
-
console.log('Initial state:', searchResults, query);
|
|
18
24
|
this.searchResults = searchResults;
|
|
19
25
|
this.query = query;
|
|
20
26
|
}
|
|
@@ -29,12 +35,25 @@ export class SearchcraftBaseSearchResults {
|
|
|
29
35
|
console.warn('No search results data available');
|
|
30
36
|
return h("div", null, "No results to display.");
|
|
31
37
|
}
|
|
38
|
+
const parsedSearchKeys = parseSearchKeys(this.searchKeys);
|
|
39
|
+
const parsedCustomStyles = parseCustomStyles(this.customStylesForResults);
|
|
32
40
|
return (h("div", { class: 'resultsContainer' }, (_d = (_c = (_b = this.searchResults) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.hits) === null || _d === void 0 ? void 0 :
|
|
33
41
|
_d.map((document, index) => {
|
|
34
42
|
const { doc: result } = document;
|
|
35
|
-
|
|
43
|
+
const dynamicProperties = extractDynamicProperties(result, parsedSearchKeys);
|
|
44
|
+
// Render the custom element if present, otherwise fallback to default
|
|
45
|
+
const customElement = this.hostElement.querySelector('[slot="result-template"]');
|
|
46
|
+
if (customElement) {
|
|
47
|
+
// Clone the custom element and pass data to it
|
|
48
|
+
const customElementClone = customElement.cloneNode(true);
|
|
49
|
+
customElementClone.removeAttribute('slot'); // Remove the slot attribute
|
|
50
|
+
customElementClone.setAttribute('data-result', JSON.stringify(result));
|
|
51
|
+
return (h("div", { key: `${dynamicProperties.id}-${index}` }, customElementClone.outerHTML));
|
|
52
|
+
}
|
|
53
|
+
// Fallback to the default element
|
|
54
|
+
return (h("searchcraft-base-search-result", { key: `${dynamicProperties.id}-${index}`, "button-callback": () => console.log('button callback'), "result-callback": () => console.log('interactive element'), "keydown-callback": () => console.log('keydown'), "is-interactive": true, "heading-text": dynamicProperties[parsedSearchKeys[0]], "subheading-text": dynamicProperties[parsedSearchKeys[1]], "primary-content": dynamicProperties[parsedSearchKeys[2]], "secondary-content": dynamicProperties[parsedSearchKeys[3]], "tertiary-content": dynamicProperties[parsedSearchKeys[4]], "image-source": dynamicProperties[parsedSearchKeys[parsedSearchKeys.length - 1]], customStyles: parsedCustomStyles }));
|
|
36
55
|
}), this.query.length > 0 &&
|
|
37
|
-
((_g = (_f = (_e = this.searchResults) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.hits) === null || _g === void 0 ? void 0 : _g.length) === 0 && (h("searchcraft-error-message", { "error-message": `No search results found for "${this.query}" query` }))));
|
|
56
|
+
((_g = (_f = (_e = this.searchResults) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.hits) === null || _g === void 0 ? void 0 : _g.length) === 0 && (h("searchcraft-error-message", { "error-message": `No search results found for "${this.query}" query` })), h("slot", { name: 'result-template' })));
|
|
38
57
|
}
|
|
39
58
|
static get is() { return "searchcraft-base-search-results"; }
|
|
40
59
|
static get encapsulation() { return "shadow"; }
|
|
@@ -48,11 +67,57 @@ export class SearchcraftBaseSearchResults {
|
|
|
48
67
|
"$": ["searchcraft-base-search-results.module.css"]
|
|
49
68
|
};
|
|
50
69
|
}
|
|
70
|
+
static get properties() {
|
|
71
|
+
return {
|
|
72
|
+
"searchKeys": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"mutable": false,
|
|
75
|
+
"complexType": {
|
|
76
|
+
"original": "string",
|
|
77
|
+
"resolved": "string",
|
|
78
|
+
"references": {}
|
|
79
|
+
},
|
|
80
|
+
"required": false,
|
|
81
|
+
"optional": false,
|
|
82
|
+
"docs": {
|
|
83
|
+
"tags": [],
|
|
84
|
+
"text": "Array of keys to dynamically extract properties from each document.\nMust be explicitly set by the parent component."
|
|
85
|
+
},
|
|
86
|
+
"attribute": "search-keys",
|
|
87
|
+
"reflect": false,
|
|
88
|
+
"defaultValue": "''"
|
|
89
|
+
},
|
|
90
|
+
"customStylesForResults": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"mutable": false,
|
|
93
|
+
"complexType": {
|
|
94
|
+
"original": "string | Record<string, string>",
|
|
95
|
+
"resolved": "string | { [x: string]: string; }",
|
|
96
|
+
"references": {
|
|
97
|
+
"Record": {
|
|
98
|
+
"location": "global",
|
|
99
|
+
"id": "global::Record"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"required": false,
|
|
104
|
+
"optional": false,
|
|
105
|
+
"docs": {
|
|
106
|
+
"tags": [],
|
|
107
|
+
"text": "Custom styles to apply to search results.\nExpected format: JSON string, e.g., '{\"borderRadius\": \"10px\", \"padding\": \"16px\"}'"
|
|
108
|
+
},
|
|
109
|
+
"attribute": "custom-styles-for-results",
|
|
110
|
+
"reflect": false,
|
|
111
|
+
"defaultValue": "{}"
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
51
115
|
static get states() {
|
|
52
116
|
return {
|
|
53
117
|
"query": {},
|
|
54
118
|
"searchResults": {}
|
|
55
119
|
};
|
|
56
120
|
}
|
|
121
|
+
static get elementRef() { return "hostElement"; }
|
|
57
122
|
}
|
|
58
123
|
//# sourceMappingURL=searchcraft-base-search-results.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchcraft-base-search-results.js","sourceRoot":"","sources":["../../../src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"searchcraft-base-search-results.js","sourceRoot":"","sources":["../../../src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element } from '@stencil/core';\nimport type { SearchcraftResponse } from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\nimport {\n extractDynamicProperties,\n parseCustomStyles,\n parseSearchKeys,\n} from '@utils/utils';\n\n@Component({\n tag: 'searchcraft-base-search-results',\n styleUrl: 'searchcraft-base-search-results.module.scss',\n shadow: true,\n})\nexport class SearchcraftBaseSearchResults {\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n\n /**\n * Array of keys to dynamically extract properties from each document.\n * Must be explicitly set by the parent component.\n */\n @Prop() searchKeys = '';\n\n /**\n * Custom styles to apply to search results.\n * Expected format: JSON string, e.g., '{\"borderRadius\": \"10px\", \"padding\": \"16px\"}'\n */\n @Prop() customStylesForResults: string | Record<string, string> = {};\n\n @Element() hostElement: HTMLElement; // Reference to the host element\n\n private unsubscribe: () => void;\n\n componentDidLoad() {\n // Initialize searchKeys if not provided\n if (!this.searchKeys || this.searchKeys.length === 0) {\n console.warn('No searchKeys provided; using empty keys array.');\n this.searchKeys = ''; // Ensure it's explicitly set as an empty array\n }\n\n // Subscribe to state changes\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.searchResults = { ...state.searchResults };\n this.query = state.query;\n });\n\n // Fetch initial state\n const { searchResults, query } = useSearchcraftStore.getState();\n this.searchResults = searchResults;\n this.query = query;\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n render() {\n if (!this.searchResults?.data) {\n console.warn('No search results data available');\n return <div>No results to display.</div>;\n }\n\n const parsedSearchKeys = parseSearchKeys(this.searchKeys);\n const parsedCustomStyles = parseCustomStyles(this.customStylesForResults);\n return (\n <div class='resultsContainer'>\n {this.searchResults?.data?.hits?.map((document, index) => {\n const { doc: result } = document;\n const dynamicProperties = extractDynamicProperties(\n result,\n parsedSearchKeys,\n );\n\n // Render the custom element if present, otherwise fallback to default\n const customElement = this.hostElement.querySelector(\n '[slot=\"result-template\"]',\n );\n if (customElement) {\n // Clone the custom element and pass data to it\n const customElementClone = customElement.cloneNode(\n true,\n ) as HTMLElement;\n customElementClone.removeAttribute('slot'); // Remove the slot attribute\n customElementClone.setAttribute(\n 'data-result',\n JSON.stringify(result),\n );\n return (\n <div key={`${dynamicProperties.id}-${index}`}>\n {customElementClone.outerHTML}\n </div>\n );\n }\n // Fallback to the default element\n return (\n <searchcraft-base-search-result\n key={`${dynamicProperties.id}-${index}`}\n button-callback={() => console.log('button callback')}\n result-callback={() => console.log('interactive element')}\n keydown-callback={() => console.log('keydown')}\n is-interactive={true}\n heading-text={dynamicProperties[parsedSearchKeys[0]]}\n subheading-text={dynamicProperties[parsedSearchKeys[1]]}\n primary-content={dynamicProperties[parsedSearchKeys[2]]}\n secondary-content={dynamicProperties[parsedSearchKeys[3]]}\n tertiary-content={dynamicProperties[parsedSearchKeys[4]]}\n image-source={\n dynamicProperties[parsedSearchKeys[parsedSearchKeys.length - 1]]\n }\n customStyles={parsedCustomStyles}\n />\n );\n })}\n\n {this.query.length > 0 &&\n this.searchResults?.data?.hits?.length === 0 && (\n <searchcraft-error-message\n error-message={`No search results found for \"${this.query}\" query`}\n />\n )}\n\n {/* Slot for custom element */}\n <slot name='result-template' />\n </div>\n );\n }\n}\n"]}
|
|
@@ -17,7 +17,7 @@ export class SearchcraftButton {
|
|
|
17
17
|
}
|
|
18
18
|
render() {
|
|
19
19
|
const buttonStyle = this.getButtonStyle();
|
|
20
|
-
return (h(Fragment, { key: '
|
|
20
|
+
return (h(Fragment, { key: 'd95f39680caa437650f45f089c25273ddf24e076' }, this.iconOnly ? (h("button", { class: classNames(buttonStyle, 'searchcraft-button'), onClick: this.handleClick, type: 'submit' }, this.isRequesting ? (h("searchcraft-spinner-dark", null)) : (this.iconElement))) : (h("button", { class: classNames(buttonStyle, 'searchcraft-button'), onClick: this.handleClick, type: 'submit' }, this.iconPosition === 'left' && this.isRequesting ? (h("div", { class: 'spinner-margin-right' }, h("searchcraft-spinner-dark", null))) : (this.iconElement), h("span", { class: classNames(this.isRequesting && 'button-label', 'searchcraft-button-label') }, this.label)))));
|
|
21
21
|
}
|
|
22
22
|
static get is() { return "searchcraft-button"; }
|
|
23
23
|
static get encapsulation() { return "shadow"; }
|
|
@@ -7,7 +7,7 @@ export class SearchcraftErrorMessage {
|
|
|
7
7
|
}
|
|
8
8
|
render() {
|
|
9
9
|
const errorMessageStyle = this.theme === 'light' ? 'errorMessageLight' : 'errorMessageDark';
|
|
10
|
-
return (h("p", { key: '
|
|
10
|
+
return (h("p", { key: '4e0b94cb24f940e8c404fd752e6f02f977190043', class: classNames(errorMessageStyle) }, this.errorMessage || 'Search term is required.'));
|
|
11
11
|
}
|
|
12
12
|
static get is() { return "searchcraft-error-message"; }
|
|
13
13
|
static get encapsulation() { return "shadow"; }
|
|
@@ -4,16 +4,18 @@
|
|
|
4
4
|
|
|
5
5
|
.inputIconLTR {
|
|
6
6
|
height: 20px;
|
|
7
|
-
left:
|
|
7
|
+
left: 15px;
|
|
8
8
|
position: absolute;
|
|
9
|
-
top:
|
|
9
|
+
top: 50%;
|
|
10
|
+
transform: translateY(-50%);
|
|
10
11
|
width: 20px;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
.inputIconRTL {
|
|
14
15
|
height: 20px;
|
|
15
16
|
position: absolute;
|
|
16
|
-
right:
|
|
17
|
-
top:
|
|
17
|
+
right: 15px;
|
|
18
|
+
top: 50%;
|
|
19
|
+
transform: translateY(-50%);
|
|
18
20
|
width: 20px;
|
|
19
21
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
export class SearchcraftSpinnerDark {
|
|
3
3
|
render() {
|
|
4
|
-
return (h("div", { key: '
|
|
4
|
+
return (h("div", { key: 'fc32dd86414502f1895b157d8aa28645a5391ff9', class: 'spinnerContainer' }, h("div", { key: '260233361f9ff5a17d05b92e41ec2fc13adc2dbf', class: 'spinnerDark' })));
|
|
5
5
|
}
|
|
6
6
|
static get is() { return "searchcraft-spinner-dark"; }
|
|
7
7
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
export class SearchcraftSpinnerLight {
|
|
3
3
|
render() {
|
|
4
|
-
return (h("div", { key: '
|
|
4
|
+
return (h("div", { key: '0e0faa615a1548868153b07bb467ee85eabcdd09', class: 'spinnerContainer' }, h("div", { key: 'a9aac4d029d9072e01cc643da62f3338622f0ef0', class: 'spinnerLight' })));
|
|
5
5
|
}
|
|
6
6
|
static get is() { return "searchcraft-spinner-light"; }
|
|
7
7
|
static get encapsulation() { return "shadow"; }
|
package/dist/collection/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* to consume components of this package as outlined in the `README.md`.
|
|
9
9
|
*/
|
|
10
10
|
// Export utility functions
|
|
11
|
-
export { parseCustomStyles } from './utils/utils';
|
|
11
|
+
export { extractDynamicProperties, parseCustomStyles, parseSearchKeys, } from './utils/utils';
|
|
12
12
|
// Export Zustand store and useTheme hook
|
|
13
13
|
export { useSearchcraftStore, useThemeStore } from './provider/store';
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,2BAA2B;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,2BAA2B;AAC3B,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,yCAAyC;AACzC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * @fileoverview entry point for your component library\n *\n * This is the entry point for your component library. Use this file to export utilities,\n * constants or data structure that accompany your components.\n *\n * DO NOT use this file to export your components. Instead, use the recommended approaches\n * to consume components of this package as outlined in the `README.md`.\n */\n\nexport type * from './components';\n\n// Export utility functions\nexport {\n extractDynamicProperties,\n parseCustomStyles,\n parseSearchKeys,\n} from './utils/utils';\n\n// Export Zustand store and useTheme hook\nexport { useSearchcraftStore, useThemeStore } from './provider/store';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/provider/store.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/provider/store.tsx"],"names":[],"mappings":"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","sourcesContent":["import { create } from 'zustand';\nimport {\n type CoreSDK as SearchcraftCore,\n SDKDebugger,\n LogLevel,\n type SearchcraftResponse,\n} from '@searchcraft/core';\n\ninterface SearchcraftState {\n query: string;\n isRequesting: boolean;\n searchResults: SearchcraftResponse | null;\n setQuery: (query: string) => void;\n setSearchResults: (results: SearchcraftResponse | null) => void;\n setIsRequesting: (isRequesting: boolean) => void;\n search: () => Promise<void>;\n initialize: (searchcraft: SearchcraftCore, debug?: boolean) => void;\n}\n\ninterface ThemeState {\n theme: 'light' | 'dark';\n toggleTheme: () => void;\n}\n\n// Zustand store for Searchcraft state\nconst useSearchcraftStore = create<SearchcraftState>((set, get) => {\n let searchcraft: SearchcraftCore | null = null;\n let debuggerInstance: SDKDebugger | null = null;\n\n const log = (level: LogLevel, message: string) => {\n if (debuggerInstance) {\n switch (level) {\n case LogLevel.DEBUG:\n debuggerInstance.debug(message);\n break;\n case LogLevel.INFO:\n debuggerInstance.info(message);\n break;\n case LogLevel.WARN:\n debuggerInstance.warn(message);\n break;\n case LogLevel.ERROR:\n debuggerInstance.error(message);\n break;\n }\n }\n };\n\n return {\n query: '',\n isRequesting: false,\n searchResults: null,\n setQuery: (query) => set({ query }),\n setSearchResults: (results) => set({ searchResults: results }),\n setIsRequesting: (isRequesting) => set({ isRequesting }),\n search: async () => {\n const { query, setIsRequesting, setSearchResults } = get();\n if (!searchcraft) {\n throw new Error('Searchcraft instance is not initialized.');\n }\n\n log(LogLevel.INFO, `Starting search with query: \"${query}\"`);\n setIsRequesting(true);\n try {\n const results = await searchcraft.search({ query, mode: 'fuzzy' });\n setSearchResults(results);\n log(LogLevel.DEBUG, `Search results: ${JSON.stringify(results)}`);\n } catch (error) {\n console.error(`Search failed: ${(error as Error).message}`);\n log(\n LogLevel.ERROR,\n `Search failed with error: ${(error as Error).message}`,\n );\n } finally {\n setIsRequesting(false);\n }\n },\n initialize: (searchcraftInstance, debug = false) => {\n searchcraft = searchcraftInstance;\n debuggerInstance = debug\n ? new SDKDebugger({ logLevel: LogLevel.DEBUG })\n : null;\n\n log(LogLevel.INFO, 'Searchcraft store initialized.');\n },\n };\n});\n\n// Zustand store for Theme state\nconst useThemeStore = create<ThemeState>((set) => ({\n theme: 'light',\n toggleTheme: () =>\n set((state) => ({ theme: state.theme === 'light' ? 'dark' : 'light' })),\n}));\n\n// Export the Zustand stores for use in Stencil components\nexport { useSearchcraftStore, useThemeStore };\n"]}
|
|
@@ -15,4 +15,27 @@ export function parseCustomStyles(styles) {
|
|
|
15
15
|
}
|
|
16
16
|
return styles || {};
|
|
17
17
|
}
|
|
18
|
+
export function parseSearchKeys(searchKeys) {
|
|
19
|
+
try {
|
|
20
|
+
// Attempt to parse the string as JSON
|
|
21
|
+
const parsedKeys = JSON.parse(searchKeys);
|
|
22
|
+
if (Array.isArray(parsedKeys) &&
|
|
23
|
+
parsedKeys.every((key) => typeof key === 'string')) {
|
|
24
|
+
return parsedKeys; // Return the array if it's valid
|
|
25
|
+
}
|
|
26
|
+
console.warn('searchKeys must be a JSON array of strings. Defaulting to an empty array.');
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('Failed to parse searchKeys:', error);
|
|
31
|
+
return []; // Return an empty array in case of a parsing error
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function extractDynamicProperties(document, keys) {
|
|
35
|
+
const extractedProperties = {};
|
|
36
|
+
keys.forEach((key) => {
|
|
37
|
+
extractedProperties[key] = document[key] || '';
|
|
38
|
+
});
|
|
39
|
+
return extractedProperties;
|
|
40
|
+
}
|
|
18
41
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC","sourcesContent":["/**\n * Utility function to parse custom styles from a string or object.\n * @param styles - Custom styles as a stringified JSON or an object.\n * @returns {Record<string, string>} - Parsed styles as an object.\n */\nexport function parseCustomStyles(\n styles: string | Record<string, string>,\n): Record<string, string> {\n if (typeof styles === 'string') {\n try {\n return JSON.parse(styles);\n } catch (error) {\n console.error('Invalid customStyles format:', styles);\n return {};\n }\n }\n return styles || {};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,IACE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAClD,CAAC;YACD,OAAO,UAAU,CAAC,CAAC,iCAAiC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,CAAC,mDAAmD;IAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAyC,EACzC,IAAc;IAEd,MAAM,mBAAmB,GAAoC,EAAE,CAAC;IAChE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,mBAAmB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,mBAAmB,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Utility function to parse custom styles from a string or object.\n * @param styles - Custom styles as a stringified JSON or an object.\n * @returns {Record<string, string>} - Parsed styles as an object.\n */\nexport function parseCustomStyles(\n styles: string | Record<string, string>,\n): Record<string, string> {\n if (typeof styles === 'string') {\n try {\n return JSON.parse(styles);\n } catch (error) {\n console.error('Invalid customStyles format:', styles);\n return {};\n }\n }\n return styles || {};\n}\n\nexport function parseSearchKeys(searchKeys: string): string[] {\n try {\n // Attempt to parse the string as JSON\n const parsedKeys = JSON.parse(searchKeys);\n if (\n Array.isArray(parsedKeys) &&\n parsedKeys.every((key) => typeof key === 'string')\n ) {\n return parsedKeys; // Return the array if it's valid\n }\n console.warn(\n 'searchKeys must be a JSON array of strings. Defaulting to an empty array.',\n );\n return [];\n } catch (error) {\n console.error('Failed to parse searchKeys:', error);\n return []; // Return an empty array in case of a parsing error\n }\n}\n\nexport function extractDynamicProperties(\n document: Record<string, string | number>,\n keys: string[],\n) {\n const extractedProperties: Record<string, string | number> = {};\n keys.forEach((key) => {\n extractedProperties[key] = document[key] || '';\n });\n return extractedProperties;\n}\n"]}
|
package/dist/components/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-
|
|
2
|
-
export { p as parseCustomStyles } from './p-
|
|
3
|
-
export { u as useSearchcraftStore, a as useThemeStore } from './p-
|
|
1
|
+
export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-066c8210.js';
|
|
2
|
+
export { e as extractDynamicProperties, p as parseCustomStyles, a as parseSearchKeys } from './p-5e3152c4.js';
|
|
3
|
+
export { u as useSearchcraftStore, a as useThemeStore } from './p-36c95064.js';
|
|
4
4
|
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const NAMESPACE = 'searchcraft-javascript-sdk';
|
|
2
|
-
const BUILD = /* searchcraft-javascript-sdk */ { allRenderFn: true, appendChildSlotFix: false, asyncLoading: true, asyncQueue: false, attachStyles: true, cloneNodeFix: false, cmpDidLoad: true, cmpDidRender: false, cmpDidUnload: false, cmpDidUpdate: false, cmpShouldUpdate: false, cmpWillLoad: false, cmpWillRender: false, cmpWillUpdate: false, connectedCallback: false, constructableCSS: true, cssAnnotations: true, devTools: false, disconnectedCallback: true, element: false, event: true, experimentalScopedSlotChanges: false, experimentalSlotFixes: false, formAssociated: false, hasRenderFn: true, hostListener: false, hostListenerTarget: false, hostListenerTargetBody: false, hostListenerTargetDocument: false, hostListenerTargetParent: false, hostListenerTargetWindow: false, hotModuleReplacement: false, hydrateClientSide: false, hydrateServerSide: false, hydratedAttribute: false, hydratedClass: true, hydratedSelectorName: "hydrated", invisiblePrehydration: true, isDebug: false, isDev: false, isTesting: false, lazyLoad: false, lifecycle: true, lifecycleDOMEvents: false, member: true, method: false, mode: false, observeAttribute: true, profile: false, prop: true, propBoolean: true, propMutable: false, propNumber: false, propString: true, reflect: false, scoped: false, scopedSlotTextContentFix: false, scriptDataOpts: false, shadowDelegatesFocus: false, shadowDom: true, slot:
|
|
2
|
+
const BUILD = /* searchcraft-javascript-sdk */ { allRenderFn: true, appendChildSlotFix: false, asyncLoading: true, asyncQueue: false, attachStyles: true, cloneNodeFix: false, cmpDidLoad: true, cmpDidRender: false, cmpDidUnload: false, cmpDidUpdate: false, cmpShouldUpdate: false, cmpWillLoad: false, cmpWillRender: false, cmpWillUpdate: false, connectedCallback: false, constructableCSS: true, cssAnnotations: true, devTools: false, disconnectedCallback: true, element: false, event: true, experimentalScopedSlotChanges: false, experimentalSlotFixes: false, formAssociated: false, hasRenderFn: true, hostListener: false, hostListenerTarget: false, hostListenerTargetBody: false, hostListenerTargetDocument: false, hostListenerTargetParent: false, hostListenerTargetWindow: false, hotModuleReplacement: false, hydrateClientSide: false, hydrateServerSide: false, hydratedAttribute: false, hydratedClass: true, hydratedSelectorName: "hydrated", invisiblePrehydration: true, isDebug: false, isDev: false, isTesting: false, lazyLoad: false, lifecycle: true, lifecycleDOMEvents: false, member: true, method: false, mode: false, observeAttribute: true, profile: false, prop: true, propBoolean: true, propMutable: false, propNumber: false, propString: true, reflect: false, scoped: false, scopedSlotTextContentFix: false, scriptDataOpts: false, shadowDelegatesFocus: false, shadowDom: true, slot: true, slotChildNodesFix: false, slotRelocation: false, state: true, style: true, svg: true, taskQueue: true, updatable: true, vdomAttribute: true, vdomClass: true, vdomFunctional: true, vdomKey: true, vdomListener: true, vdomPropOrAttr: true, vdomRef: false, vdomRender: true, vdomStyle: true, vdomText: true, vdomXlink: false, watchCallback: false };
|
|
3
3
|
|
|
4
4
|
/*
|
|
5
5
|
Stencil Client Platform v4.22.3 | MIT Licensed | https://stenciljs.com
|
|
@@ -690,7 +690,7 @@ var patch = (oldVNode, newVNode2, isInitialRender = false) => {
|
|
|
690
690
|
isSvgMode = tag === "svg" ? true : tag === "foreignObject" ? false : isSvgMode;
|
|
691
691
|
}
|
|
692
692
|
{
|
|
693
|
-
{
|
|
693
|
+
if (tag === "slot" && !useNativeShadowDom) ; else {
|
|
694
694
|
updateElement(oldVNode, newVNode2, isSvgMode);
|
|
695
695
|
}
|
|
696
696
|
}
|
|
@@ -1103,4 +1103,4 @@ var setPlatformOptions = (opts) => Object.assign(plt, opts);
|
|
|
1103
1103
|
|
|
1104
1104
|
export { Fragment as F, H, setNonce as a, setPlatformOptions as b, createEvent as c, getAssetPath as g, h, proxyCustomElement as p, setAssetPath as s };
|
|
1105
1105
|
|
|
1106
|
-
//# sourceMappingURL=p-
|
|
1106
|
+
//# sourceMappingURL=p-066c8210.js.map
|