@searchcraft/javascript-sdk 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/components/defineCustomElements.js +2 -0
  2. package/dist/components/index.d.ts +238 -120
  3. package/dist/components/index.js +10 -5
  4. package/dist/components/index.js.map +1 -1
  5. package/dist/components/{p-3f63fa14.js → p-0077f677.js} +4 -4
  6. package/dist/components/p-0077f677.js.map +1 -0
  7. package/dist/components/{p-e72d0167.js → p-13e81b5d.js} +3 -3
  8. package/dist/components/p-13e81b5d.js.map +1 -0
  9. package/dist/components/{p-39e70a00.js → p-172a848d.js} +29 -3
  10. package/dist/components/p-172a848d.js.map +1 -0
  11. package/dist/components/{p-f8df3d49.js → p-17c646e2.js} +101 -65
  12. package/dist/components/p-17c646e2.js.map +1 -0
  13. package/dist/components/{p-d361b781.js → p-2be1a382.js} +4 -4
  14. package/dist/components/{p-d361b781.js.map → p-2be1a382.js.map} +1 -1
  15. package/dist/components/{p-c317a36a.js → p-3e65aa91.js} +6 -6
  16. package/dist/components/p-3e65aa91.js.map +1 -0
  17. package/dist/components/{p-8aa0fff5.js → p-5d17ace0.js} +13 -13
  18. package/dist/components/p-5d17ace0.js.map +1 -0
  19. package/dist/components/p-84e2cbd6.js +46 -0
  20. package/dist/components/p-84e2cbd6.js.map +1 -0
  21. package/dist/components/{p-bc9e0e40.js → p-868803f9.js} +3 -3
  22. package/dist/components/{p-bc9e0e40.js.map → p-868803f9.js.map} +1 -1
  23. package/dist/components/{p-34a32648.js → p-a62a2e74.js} +4 -4
  24. package/dist/components/{p-34a32648.js.map → p-a62a2e74.js.map} +1 -1
  25. package/dist/components/searchcraft-ad.js +1 -1
  26. package/dist/components/searchcraft-facet-list.js +1 -1
  27. package/dist/components/searchcraft-filter-panel.js +5 -5
  28. package/dist/components/searchcraft-filter-panel.js.map +1 -1
  29. package/dist/components/searchcraft-input-form.js +1 -1
  30. package/dist/components/searchcraft-pagination.js +1 -1
  31. package/dist/components/searchcraft-pagination.js.map +1 -1
  32. package/dist/components/searchcraft-popover-button.js +95 -3
  33. package/dist/components/searchcraft-popover-button.js.map +1 -1
  34. package/dist/components/searchcraft-popover-footer.d.ts +11 -0
  35. package/dist/components/searchcraft-popover-footer.js +8 -0
  36. package/dist/components/searchcraft-popover-footer.js.map +1 -0
  37. package/dist/components/searchcraft-popover-form.js +34 -24
  38. package/dist/components/searchcraft-popover-form.js.map +1 -1
  39. package/dist/components/searchcraft-popover-list-item.js +1 -1
  40. package/dist/components/searchcraft-popover-list-view.js +1 -1
  41. package/dist/components/searchcraft-results-info.js +1 -8
  42. package/dist/components/searchcraft-results-info.js.map +1 -1
  43. package/dist/components/searchcraft-search-result.js +1 -1
  44. package/dist/components/searchcraft-search-results-per-page.js +1 -1
  45. package/dist/components/searchcraft-search-results-per-page.js.map +1 -1
  46. package/dist/components/searchcraft-search-results.js +3 -3
  47. package/dist/components/searchcraft-search-results.js.map +1 -1
  48. package/dist/components/searchcraft-slider.js +1 -1
  49. package/dist/components/searchcraft-theme.js +2 -2
  50. package/dist/components/searchcraft-theme.js.map +1 -1
  51. package/dist/components/searchcraft-toggle-button.js +1 -1
  52. package/dist/hydrate/index.js +298 -109
  53. package/dist/hydrate/index.mjs +298 -109
  54. package/dist/themes/hologram.css +1 -0
  55. package/dist/themes/hologram.css.map +1 -0
  56. package/dist/types/components/searchcraft-filter-panel/searchcraft-filter-panel.d.ts +4 -3
  57. package/dist/types/components/searchcraft-input-form/searchcraft-input-form.d.ts +4 -3
  58. package/dist/types/components/searchcraft-pagination/searchcraft-pagination.d.ts +4 -3
  59. package/dist/types/components/searchcraft-popover-button/searchcraft-popover-button.d.ts +49 -5
  60. package/dist/types/components/searchcraft-popover-footer/searchcraft-popover-footer.d.ts +13 -0
  61. package/dist/types/components/searchcraft-popover-form/searchcraft-popover-form.d.ts +4 -3
  62. package/dist/types/components/searchcraft-popover-list-item/searchcraft-popover-list-item.d.ts +3 -3
  63. package/dist/types/components/searchcraft-results-info/searchcraft-results-info.d.ts +6 -10
  64. package/dist/types/components/searchcraft-search-result/searchcraft-search-result.d.ts +3 -0
  65. package/dist/types/components/searchcraft-search-results/searchcraft-search-results.d.ts +5 -4
  66. package/dist/types/components/searchcraft-search-results-per-page/searchcraft-search-results-per-page.d.ts +4 -3
  67. package/dist/types/components/searchcraft-theme/searchcraft-theme.d.ts +4 -3
  68. package/dist/types/components.d.ts +231 -120
  69. package/dist/types/store/SearchcraftStore.types.d.ts +3 -0
  70. package/package.json +7 -3
  71. package/dist/components/p-39e70a00.js.map +0 -1
  72. package/dist/components/p-3f63fa14.js.map +0 -1
  73. package/dist/components/p-8aa0fff5.js.map +0 -1
  74. package/dist/components/p-c317a36a.js.map +0 -1
  75. package/dist/components/p-e72d0167.js.map +0 -1
  76. package/dist/components/p-f8df3d49.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  export { g as getAssetPath, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-5365011f.js';
2
- import { v as ve } from './p-f8df3d49.js';
3
- export { v as SearchcraftCore, s as searchcraftStore } from './p-f8df3d49.js';
2
+ import { w as we } from './p-17c646e2.js';
3
+ export { w as SearchcraftCore, s as searchcraftStore } from './p-17c646e2.js';
4
4
  import './p-a64b4cba.js';
5
5
  export { SearchcraftAd, defineCustomElement as defineCustomElementSearchcraftAd } from './searchcraft-ad.js';
6
6
  export { SearchcraftButton, defineCustomElement as defineCustomElementSearchcraftButton } from './searchcraft-button.js';
@@ -11,6 +11,7 @@ export { SearchcraftInputForm, defineCustomElement as defineCustomElementSearchc
11
11
  export { SearchcraftInputLabel, defineCustomElement as defineCustomElementSearchcraftInputLabel } from './searchcraft-input-label.js';
12
12
  export { SearchcraftPagination, defineCustomElement as defineCustomElementSearchcraftPagination } from './searchcraft-pagination.js';
13
13
  export { SearchcraftPopoverButton, defineCustomElement as defineCustomElementSearchcraftPopoverButton } from './searchcraft-popover-button.js';
14
+ export { SearchcraftPopoverFooter, defineCustomElement as defineCustomElementSearchcraftPopoverFooter } from './searchcraft-popover-footer.js';
14
15
  export { SearchcraftPopoverForm, defineCustomElement as defineCustomElementSearchcraftPopoverForm } from './searchcraft-popover-form.js';
15
16
  export { SearchcraftPopoverListItem, defineCustomElement as defineCustomElementSearchcraftPopoverListItem } from './searchcraft-popover-list-item.js';
16
17
  export { SearchcraftPopoverListView, defineCustomElement as defineCustomElementSearchcraftPopoverListView } from './searchcraft-popover-list-view.js';
@@ -24,7 +25,7 @@ export { SearchcraftTheme, defineCustomElement as defineCustomElementSearchcraft
24
25
  export { SearchcraftToggleButton, defineCustomElement as defineCustomElementSearchcraftToggleButton } from './searchcraft-toggle-button.js';
25
26
 
26
27
  const name = "@searchcraft/javascript-sdk";
27
- const version = "0.10.0";
28
+ const version = "0.10.1";
28
29
  const description = "Searchcraft Javascript SDK";
29
30
  const author = "Searchcraft Inc.";
30
31
  const license = "Apache-2.0";
@@ -43,6 +44,10 @@ const exports = {
43
44
  require: "./dist/hydrate/index.js",
44
45
  "import": "./dist/hydrate/index.mjs",
45
46
  types: "./dist/hydrate/index.d.ts"
47
+ },
48
+ "./themes/*.css": {
49
+ "import": "./dist/themes/*.css",
50
+ require: "./dist/themes/*.css"
46
51
  }
47
52
  };
48
53
  const repository = {
@@ -66,7 +71,7 @@ const dependencies = {
66
71
  nanoid: "^5.0.9"
67
72
  };
68
73
  const devDependencies = {
69
- "@searchcraft/core": "^0.10.0",
74
+ "@searchcraft/core": "^0.10.1",
70
75
  "@stencil/core": "^4.7.0",
71
76
  "@stencil/react-output-target": "^0.8.2",
72
77
  "@stencil/sass": "^3.0.12",
@@ -125,7 +130,7 @@ function serializeStyles(styles) {
125
130
  /**
126
131
  * The consumer-facing `Searchcraft` class.
127
132
  */
128
- class Searchcraft extends ve {
133
+ class Searchcraft extends we {
129
134
  constructor(config) {
130
135
  super(config, {
131
136
  sdkName: packageJson.name,
@@ -1 +1 @@
1
- {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAgB,iBAAiB,CAC/B,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;SACX;KACF;IACD,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;SAEe,eAAe,CAC7B,MAA8C;IAE9C,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;KACb;AACH;;ACnBA;;;;;;;;;AAUA;;;MAGa,WAAY,SAAQA,EAAe;IAC9C,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,EAAE;YACZ,OAAO,EAAE,WAAW,CAAC,IAAI;YACzB,UAAU,EAAE,WAAW,CAAC,OAAO;SAChC,CAAC,CAAC;KACJ;;;;;","names":["SearchcraftCore"],"sources":["src/utils/styles.ts","src/index.ts"],"sourcesContent":["export 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 serializeStyles(\n styles: Record<string, Record<string, string>>,\n): string {\n try {\n return JSON.stringify(styles);\n } catch (error) {\n console.error('Error serializing styles:', error);\n return '{}';\n }\n}\n","import { type SearchcraftConfig, SearchcraftCore } from '@searchcraft/core';\nimport { searchcraftStore } from '@store';\nimport packageJson from '../package.json';\n\n/**\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\n/**\n * The consumer-facing `Searchcraft` class.\n */\nexport class Searchcraft extends SearchcraftCore {\n constructor(config: SearchcraftConfig) {\n super(config, {\n sdkName: packageJson.name,\n sdkVersion: packageJson.version,\n });\n }\n}\n\n/**\n * Exports the shared types that all SDKs need\n */\nexport {\n parseCustomStyles,\n serializeStyles,\n} from './utils';\nexport type { SearchcraftConfig };\nexport { searchcraftStore };\nexport type { Components, JSX } from './components';\nexport { SearchcraftCore };\nexport type * from '@searchcraft/core/dist/types/sdk-types';\n"],"version":3}
1
+ {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAgB,iBAAiB,CAC/B,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;SACX;KACF;IACD,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;SAEe,eAAe,CAC7B,MAA8C;IAE9C,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC/B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;KACb;AACH;;ACnBA;;;;;;;;;AAUA;;;MAGa,WAAY,SAAQA,EAAe;IAC9C,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,EAAE;YACZ,OAAO,EAAE,WAAW,CAAC,IAAI;YACzB,UAAU,EAAE,WAAW,CAAC,OAAO;SAChC,CAAC,CAAC;KACJ;;;;;","names":["SearchcraftCore"],"sources":["src/utils/styles.ts","src/index.ts"],"sourcesContent":["export 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 serializeStyles(\n styles: Record<string, Record<string, string>>,\n): string {\n try {\n return JSON.stringify(styles);\n } catch (error) {\n console.error('Error serializing styles:', error);\n return '{}';\n }\n}\n","import { type SearchcraftConfig, SearchcraftCore } from '@searchcraft/core';\nimport { searchcraftStore } from '@store';\nimport packageJson from '../package.json';\n\n/**\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\n/**\n * The consumer-facing `Searchcraft` class.\n */\nexport class Searchcraft extends SearchcraftCore {\n constructor(config: SearchcraftConfig) {\n super(config, {\n sdkName: packageJson.name,\n sdkVersion: packageJson.version,\n });\n }\n}\n\n/**\n * Exports the shared types that all SDKs need\n */\nexport {\n parseCustomStyles,\n serializeStyles,\n} from './utils';\nexport type { SearchcraftConfig };\nexport { searchcraftStore };\nexport type { Components, JSX } from './components';\nexport { SearchcraftCore };\nexport type * from '@searchcraft/core/dist/types/sdk-types';\n"],"version":3}
@@ -1,6 +1,6 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h } from './p-5365011f.js';
2
2
  import { c as classNames } from './p-5cdc6210.js';
3
- import { s as searchcraftStore } from './p-f8df3d49.js';
3
+ import { s as searchcraftStore } from './p-17c646e2.js';
4
4
  import { d as defineCustomElement$3 } from './p-acf23bab.js';
5
5
  import { d as defineCustomElement$2 } from './p-f2585cdf.js';
6
6
  import { d as defineCustomElement$1 } from './p-1adf78b9.js';
@@ -107,9 +107,9 @@ const SearchcraftInputForm = /*@__PURE__*/ proxyCustomElement(class SearchcraftI
107
107
  const inputGridStyles = {
108
108
  gap: shouldHaveVerticalGap ? '4px 8px' : '0px 8px',
109
109
  };
110
- return (h("form", { key: '862f8059b6eaae8d7ac9bd3c9de8109dd60fab8f', class: 'searchcraft-input-form', onSubmit: this.handleFormSubmit }, h("div", { key: '34ff1c3cff4011c9a5f0af0ff690e3a12ad80907', class: inputGridClassNames, style: inputGridStyles }, h("div", { key: '820506482aeea17534c4113e601f3ba2254e7fe6', class: 'searchcraft-input-form-button' }, h("searchcraft-button", { key: '377a6d8e9835c40379dbd0842a2f0f53638845e1', onButtonClick: this.handleFormSubmit, label: this.buttonLabel })), this.inputLabel && (h("div", { key: '84d100df3793599fd3f6773d26028e43e41d1ab7', class: 'searchcraft-input-form-label' }, h("searchcraft-input-label", { key: 'cfa7eca0b2ab3b82dd6c0a5104c19c88881f52b5', label: this.inputLabel }))), this.error && (h("div", { key: '62d0e29e46ac922469e48aa822239cd645ea9c8d', class: 'searchcraft-input-form-error-message' }, h("searchcraft-error-message", { key: '8a989b4a2e1196b01de9082433a69d86f55910fb' }, "Something went wrong."))), h("div", { key: 'a3c4cd8ef20f909eec2d9e2f9515a65525fe612e', class: 'searchcraft-input-form-input-wrapper' }, h("input", { key: 'af23902c7f7a79ced427da3aadaa30736b68c8a7', autoComplete: 'off', class: 'searchcraft-input-form-input', onFocus: () => this.inputFocus?.emit(), onBlur: () => this.inputBlur?.emit(), onInput: (event) => {
110
+ return (h("form", { key: '488789f41d06780cf1cb3ab55013995fd16985bc', class: 'searchcraft-input-form', onSubmit: this.handleFormSubmit }, h("div", { key: 'abde33425daaa82f068d7bb31fca8f94d55b79e5', class: inputGridClassNames, style: inputGridStyles }, h("div", { key: 'd2ee4a97e3384550160e3d77c73167e725b78910', class: 'searchcraft-input-form-button' }, h("searchcraft-button", { key: '6ca8bffa156a032dbddce0728f682f7e713b00b3', onButtonClick: this.handleFormSubmit, label: this.buttonLabel })), this.inputLabel && (h("div", { key: '760f54d2ca7401fdd3151f0baa65163ba447aad4', class: 'searchcraft-input-form-label' }, h("searchcraft-input-label", { key: '9b1e1fcc8559ba7417edc23cd495c27c44e9d394', label: this.inputLabel }))), this.error && (h("div", { key: 'e2ba421228fe3daa1b60b3bda963be7b8fe5e2dd', class: 'searchcraft-input-form-error-message' }, h("searchcraft-error-message", { key: '07655cb3197b9bd20fe6feb610a58b5679a82c33' }, "Something went wrong."))), h("div", { key: '93c20245f8f1bcb1656e88d7c26644ab41dd5000', class: 'searchcraft-input-form-input-wrapper' }, h("input", { key: '2a3748be8434ac01ebae9907e0a762e868d5d10f', autoComplete: 'off', class: 'searchcraft-input-form-input', onFocus: () => this.inputFocus?.emit(), onBlur: () => this.inputBlur?.emit(), onInput: (event) => {
111
111
  this.handleOnInput(event);
112
- }, placeholder: this.placeholderValue, type: 'text', value: this.inputValue }), h("div", { key: '66176081ef8da6bd3065ad0eeb61a397ab0fadfc', class: 'searchcraft-input-form-input-icon' }, h("svg", { key: 'baac2f051f04a411acba0d5683255e9a37a27833', class: 'searchcraft-input-form-input-search-icon', viewBox: '0 0 20 20', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'searchcraft-title' }, h("title", { key: '24230d00bd0b9466fb414246836c2477630ec254' }, "Search icon"), h("path", { key: '9f1446fd1885cc63c26fa5acfcdbdb775547c5ee', d: 'M17.5 17.5L13.875 13.875M15.8333 9.16667C15.8333 12.8486 12.8486 15.8333 9.16667 15.8333C5.48477 15.8333 2.5 12.8486 2.5 9.16667C2.5 5.48477 5.48477 2.5 9.16667 2.5C12.8486 2.5 15.8333 5.48477 15.8333 9.16667Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))), isShowingClearButton && (h("button", { key: 'b9a42b46f7d470f6f1bbba5b95fd4031db9a1ebd', type: 'button', class: 'searchcraft-input-form-clear-button', onClick: this.handleClearInput }, h("svg", { key: 'cda07c19eb77c2d2d343ce8d1cf8c55c484107f2', class: 'searchcraft-input-form-clear-button-icon', viewBox: '0 0 22 22', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'icon-title' }, h("title", { key: '43ba26388dc06b6ff3c5441387db9ba621bcc08e' }, "Clear icon"), h("path", { key: '5f33de1e306548f1cf504e4e6c6548d51eba93d3', d: 'M14 8L8 14M8 8L14 14M21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))))));
112
+ }, placeholder: this.placeholderValue, type: 'text', value: this.inputValue }), h("div", { key: 'c9eb1230b10d3bb91ffe0e43481ac3d1a1362b29', class: 'searchcraft-input-form-input-icon' }, h("svg", { key: '68b3d2c336cc99faacb28e0a98cd93f88f9df13b', class: 'searchcraft-input-form-input-search-icon', viewBox: '0 0 20 20', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'searchcraft-title' }, h("title", { key: 'da56c06e543f45c59ef0f5922bd7d61fef448630' }, "Search icon"), h("path", { key: 'ae0bcf6b95f861155cf0023d72a33f6d437b67dd', d: 'M17.5 17.5L13.875 13.875M15.8333 9.16667C15.8333 12.8486 12.8486 15.8333 9.16667 15.8333C5.48477 15.8333 2.5 12.8486 2.5 9.16667C2.5 5.48477 5.48477 2.5 9.16667 2.5C12.8486 2.5 15.8333 5.48477 15.8333 9.16667Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))), isShowingClearButton && (h("button", { key: '5663606a70f3c4afd44406e6e550dc44573c5421', type: 'button', class: 'searchcraft-input-form-clear-button', onClick: this.handleClearInput }, h("svg", { key: '15f316ed61153f1054e3c5ac6dffca48b702ac81', class: 'searchcraft-input-form-clear-icon', viewBox: '0 0 22 22', fill: 'none', xmlns: 'http://www.w3.org/2000/svg', "aria-labelledby": 'icon-title' }, h("title", { key: '3e93ab9c95db6a7c012a9b25875aa78f33984ce6' }, "Clear icon"), h("path", { key: 'b31b09b4a928e113720a13e9826e1d462c4e65bd', d: 'M14 8L8 14M8 8L14 14M21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z', stroke: 'currentColor', "stroke-width": '1.5', "stroke-linecap": 'round', "stroke-linejoin": 'round' }))))))));
113
113
  }
114
114
  static get watchers() { return {
115
115
  "core": ["onCoreChange"]
@@ -158,4 +158,4 @@ function defineCustomElement() {
158
158
 
159
159
  export { SearchcraftInputForm as S, defineCustomElement as d };
160
160
 
161
- //# sourceMappingURL=p-3f63fa14.js.map
161
+ //# sourceMappingURL=p-0077f677.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-0077f677.js","mappings":"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","names":[],"sources":["src/components/searchcraft-input-form/searchcraft-input-form.tsx"],"sourcesContent":["import {\n Component,\n h,\n Prop,\n State,\n Event,\n type EventEmitter,\n Watch,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\nimport type { SearchcraftCore } from '@searchcraft/core';\n\nimport { searchcraftStore } from '@store';\n\n/**\n * This web component provides a user-friendly interface for querying an indexed dataset, enabling users to easily search large collections of data.\n * It abstracts the complexities of index-based searching, making it accessible to users of all technical levels.\n *\n * @react-import\n * ```jsx\n * import { SearchcraftInputForm } from \"@searchcraft/react-sdk\";\n * ```\n *\n * @vue-import\n * ```jsx\n * import { SearchcraftInputForm } from \"@searchcraft/vue-sdk\";\n * ```\n *\n * @js-example\n * ```html\n * <searchcraft-input-form auto-search />\n * ```\n *\n * @react-example\n * ```jsx\n * <SearchcraftInputForm autoSearch />\n * ```\n *\n * @vue-example\n * ```jsx\n * <SearchcraftInputForm autoSearch />\n * ```\n */\n@Component({\n tag: 'searchcraft-input-form',\n shadow: false,\n})\nexport class SearchcraftInputForm {\n /**\n * Whether or not to automatically submit the search term when the input changes.\n */\n @Prop() autoSearch?: boolean = true;\n /**\n * Where to place the search button.\n */\n @Prop() buttonPlacement?: 'left' | 'right' | 'none' = 'none';\n /**\n * The label for the submit button.\n */\n @Prop() buttonLabel?: string;\n /**\n * The label rendered above the input.\n */\n @Prop() inputLabel?: string;\n /**\n * The input element's placeholder value.\n */\n @Prop() placeholderValue?: string = 'Enter Search';\n /**\n * When the input becomes focused.\n */\n @Event() inputFocus?: EventEmitter<void>;\n /**\n * When the input becomes unfocused.\n */\n @Event() inputBlur?: EventEmitter<void>;\n /**\n * Event emitted when input initializes.\n */\n @Event() inputInit?: EventEmitter<void>;\n\n @State() inputValue = '';\n @State() searchTerm = '';\n @State() error = false;\n\n @Prop() core?: SearchcraftCore;\n\n private searchStore = searchcraftStore.getState();\n\n init() {\n if (this.core) {\n this.searchStore.initialize(this.core);\n this.inputInit?.emit();\n }\n }\n\n connectedCallback() {\n this.init();\n }\n\n @Watch('core')\n onCoreChange() {\n this.init();\n }\n\n handleOnInput = (event: Event) => {\n const input = event.target as HTMLInputElement;\n this.inputValue = input.value;\n\n if (!this.autoSearch) {\n return;\n }\n\n this.performSearch(input.value);\n };\n\n private performSearch = async (value: string) => {\n if (value === searchcraftStore.getState().searchTerm) {\n return;\n }\n\n this.searchTerm = value.trim();\n this.error = false;\n this.searchStore.setSearchTerm(this.searchTerm);\n\n try {\n await this.searchStore.search();\n } catch (error) {\n console.log(error);\n this.error = true;\n }\n };\n\n handleClearInput = () => {\n this.inputValue = '';\n this.searchTerm = '';\n this.searchStore.setSearchTerm('');\n this.searchStore.setSearchClientResponseItems([]);\n this.error = false;\n };\n\n handleFormSubmit = async (event: Event) => {\n event.preventDefault();\n await this.performSearch(this.searchTerm);\n };\n\n render() {\n const isShowingClearButton = this.inputValue.length > 0;\n const inputGridClassNames = classNames('searchcraft-input-form-grid', {\n 'searchcraft-input-form-grid-button-left':\n this.buttonPlacement === 'left',\n 'searchcraft-input-form-grid-button-right':\n this.buttonPlacement === 'right',\n 'searchcraft-input-form-grid-button-none':\n this.buttonPlacement === 'none',\n });\n const shouldHaveVerticalGap = this.inputLabel || this.error;\n const inputGridStyles = {\n gap: shouldHaveVerticalGap ? '4px 8px' : '0px 8px',\n };\n\n return (\n <form class='searchcraft-input-form' onSubmit={this.handleFormSubmit}>\n <div class={inputGridClassNames} style={inputGridStyles}>\n <div class='searchcraft-input-form-button'>\n <searchcraft-button\n onButtonClick={this.handleFormSubmit}\n label={this.buttonLabel}\n />\n </div>\n {this.inputLabel && (\n <div class='searchcraft-input-form-label'>\n <searchcraft-input-label label={this.inputLabel} />\n </div>\n )}\n {this.error && (\n <div class='searchcraft-input-form-error-message'>\n <searchcraft-error-message>\n Something went wrong.\n </searchcraft-error-message>\n </div>\n )}\n <div class='searchcraft-input-form-input-wrapper'>\n <input\n autoComplete='off'\n class='searchcraft-input-form-input'\n onFocus={() => this.inputFocus?.emit()}\n onBlur={() => this.inputBlur?.emit()}\n onInput={(event) => {\n this.handleOnInput(event);\n }}\n placeholder={this.placeholderValue}\n type='text'\n value={this.inputValue}\n />\n <div class='searchcraft-input-form-input-icon'>\n <svg\n class='searchcraft-input-form-input-search-icon'\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='searchcraft-title'\n >\n <title>Search icon</title>\n <path\n d='M17.5 17.5L13.875 13.875M15.8333 9.16667C15.8333 12.8486 12.8486 15.8333 9.16667 15.8333C5.48477 15.8333 2.5 12.8486 2.5 9.16667C2.5 5.48477 5.48477 2.5 9.16667 2.5C12.8486 2.5 15.8333 5.48477 15.8333 9.16667Z'\n stroke='currentColor'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n </div>\n {isShowingClearButton && (\n <button\n type='button'\n class='searchcraft-input-form-clear-button'\n onClick={this.handleClearInput}\n >\n <svg\n class='searchcraft-input-form-clear-icon'\n viewBox='0 0 22 22'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='icon-title'\n >\n <title>Clear icon</title>\n <path\n d='M14 8L8 14M8 8L14 14M21 11C21 16.5228 16.5228 21 11 21C5.47715 21 1 16.5228 1 11C1 5.47715 5.47715 1 11 1C16.5228 1 21 5.47715 21 11Z'\n stroke='currentColor'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n </form>\n );\n }\n}\n"],"version":3}
@@ -1,5 +1,5 @@
1
1
  import { p as proxyCustomElement, H, h } from './p-5365011f.js';
2
- import { s as searchcraftStore } from './p-f8df3d49.js';
2
+ import { s as searchcraftStore } from './p-17c646e2.js';
3
3
  import { h as html } from './p-810a7850.js';
4
4
 
5
5
  const urlAlphabet =
@@ -71,7 +71,7 @@ const SearchcraftPopoverListItemAd = /*@__PURE__*/ proxyCustomElement(class Sear
71
71
  if (!item.admAd) {
72
72
  return;
73
73
  }
74
- return (h("a", { class: 'searchcraft-adm-ad', href: item.admAd.click_url }, item.admAd.image_url && (h("div", { class: 'searchcraft-adm-ad-image-wrapper' }, h("img", { alt: item.admAd.term || 'image', src: item.admAd.image_url, class: 'searchcraft-adm-ad-image' }))), h("div", { class: 'searchcraft-adm-ad-info-wrapper' }, h("p", { class: 'searchcraft-adm-ad-title' }, item.admAd.term), item.admAd.price && (h("p", { class: 'searchcraft-adm-ad-subtitle' }, item.admAd.price)))));
74
+ return (h("div", { class: 'searchcraft-adm-ad' }, h("a", { class: 'searchcraft-adm-ad-link', href: item.admAd.click_url }, item.admAd.image_url && (h("div", { class: 'searchcraft-adm-ad-image-wrapper' }, h("img", { alt: item.admAd.term || 'image', src: item.admAd.image_url, class: 'searchcraft-adm-ad-image' }))), h("div", { class: 'searchcraft-adm-ad-content' }, h("p", { class: 'searchcraft-adm-ad-content-title' }, item.admAd.term), item.admAd.price && (h("p", { class: 'searchcraft-adm-ad-content-subtitle' }, item.admAd.price))))));
75
75
  }
76
76
  renderCustomAd() {
77
77
  const templateRenderFunction = this.core?.config?.customAdTemplate;
@@ -144,4 +144,4 @@ function defineCustomElement() {
144
144
 
145
145
  export { SearchcraftPopoverListItemAd as S, defineCustomElement as d, nanoid as n };
146
146
 
147
- //# sourceMappingURL=p-e72d0167.js.map
147
+ //# sourceMappingURL=p-13e81b5d.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-13e81b5d.js","mappings":"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","names":["scopedUrlAlphabet"],"sources":["../../node_modules/nanoid/url-alphabet/index.js","../../node_modules/nanoid/index.browser.js","src/components/searchcraft-ad/searchcraft-ad.tsx"],"sourcesContent":["export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","import type {\n AdClientResponseItem,\n ADMClientResponseItem,\n SearchcraftCore,\n SearchcraftAdSource,\n} from '@searchcraft/core';\nimport { Component, Element, h, Prop, State } from '@stencil/core';\nimport { nanoid } from 'nanoid';\n\nimport { searchcraftStore } from '@store';\n\nimport { html } from '@utils';\n\n/**\n * An inline ad meant to be rendered in a list of search results.\n *\n * @internal\n */\n@Component({\n tag: 'searchcraft-ad',\n shadow: false,\n})\nexport class SearchcraftPopoverListItemAd {\n @Prop() adSource: SearchcraftAdSource = 'Custom';\n @Prop() adClientResponseItem?: AdClientResponseItem;\n @Prop() adContainerId: string = nanoid();\n\n @State() searchTerm?: string;\n @State() isSearchInProgress = false;\n @Element() hostElement?: HTMLElement;\n\n private core?: SearchcraftCore;\n\n private intersectionObserver?: IntersectionObserver;\n private storeUnsubscribe?: () => void;\n private adContainerRenderedTimeout?: NodeJS.Timeout;\n private isComponentConnected = true;\n\n connectedCallback() {\n const currentState = searchcraftStore.getState();\n\n this.core = currentState.core;\n this.searchTerm = currentState.searchTerm;\n this.isSearchInProgress = currentState.isSearchInProgress;\n\n // Subscribes to store changes (for search term).\n this.storeUnsubscribe = searchcraftStore.subscribe((state) => {\n this.searchTerm = state.searchTerm;\n this.isSearchInProgress = state.isSearchInProgress;\n });\n }\n\n componentDidLoad() {\n /**\n * Handles when an ad container is viewable within the document,\n * Core emits an ad_container_viewed event and performs ad client side effects\n */\n if (this.hostElement) {\n this.intersectionObserver = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting && !this.isSearchInProgress) {\n this.core?.handleAdContainerViewed({\n adClientResponseItem: this.adClientResponseItem,\n adContainerId: this.adContainerId,\n adSource: this.adSource,\n searchTerm: this.searchTerm || '',\n });\n }\n },\n { threshold: 0 },\n );\n\n this.intersectionObserver.observe(this.hostElement);\n }\n }\n\n disconnectedCallback() {\n this.storeUnsubscribe?.();\n this.intersectionObserver?.disconnect();\n this.isComponentConnected = false;\n clearTimeout(this.adContainerRenderedTimeout);\n }\n\n renderADMAd() {\n const item = this.adClientResponseItem as ADMClientResponseItem;\n\n if (!item.admAd) {\n return;\n }\n\n return (\n <div class='searchcraft-adm-ad'>\n <a class='searchcraft-adm-ad-link' href={item.admAd.click_url}>\n {item.admAd.image_url && (\n <div class='searchcraft-adm-ad-image-wrapper'>\n <img\n alt={item.admAd.term || 'image'}\n src={item.admAd.image_url}\n class='searchcraft-adm-ad-image'\n />\n </div>\n )}\n <div class='searchcraft-adm-ad-content'>\n <p class='searchcraft-adm-ad-content-title'>{item.admAd.term}</p>\n {item.admAd.price && (\n <p class='searchcraft-adm-ad-content-subtitle'>\n {item.admAd.price}\n </p>\n )}\n </div>\n </a>\n </div>\n );\n }\n\n renderCustomAd() {\n const templateRenderFunction = this.core?.config?.customAdTemplate;\n const containerId = `searchcraft-custom-ad-${this.adContainerId}`;\n\n let containerInnerHTML = '<p>Custom Ad Placeholder</p>';\n\n if (templateRenderFunction) {\n containerInnerHTML = templateRenderFunction(\n {\n searchTerm: this.searchTerm || '',\n adContainerId: this.adContainerId,\n },\n { html },\n );\n }\n\n return (\n <div\n class='searchcraft-custom-ad'\n id={containerId}\n data-searchcraft-ad-container-id={this.adContainerId}\n innerHTML={containerInnerHTML}\n />\n );\n }\n\n renderNativoAd() {\n const nativoClassName = this.core?.config.nativoAdClassName || 'ntv-item';\n return <div class={nativoClassName} />;\n }\n\n render() {\n // Don't render ads while search is in progress\n if (this.isSearchInProgress) {\n return;\n }\n\n /**\n * Handles when an ad container is first rendered.\n * Core emits an ad_container_rendered event and performs ad client side effects\n *\n */\n\n if (this.isComponentConnected) {\n clearTimeout(this.adContainerRenderedTimeout);\n this.adContainerRenderedTimeout = setTimeout(() => {\n this.core?.handleAdContainerRendered({\n adClientResponseItem: this.adClientResponseItem,\n adContainerId: this.adContainerId,\n adSource: this.adSource,\n searchTerm: this.searchTerm || '',\n });\n }, this.core?.config?.adContainerRenderedDebounceDelay || 500);\n }\n\n switch (this.adSource) {\n case 'adMarketplace':\n return this.renderADMAd();\n case 'Custom':\n return this.renderCustomAd();\n case 'Nativo':\n return this.renderNativoAd();\n default:\n return;\n }\n }\n}\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { p as proxyCustomElement, H, h } from './p-5365011f.js';
2
2
  import { h as html } from './p-810a7850.js';
3
+ import { s as searchcraftStore } from './p-17c646e2.js';
3
4
 
4
5
  const SearchcraftSearchResult = /*@__PURE__*/ proxyCustomElement(class SearchcraftSearchResult extends H {
5
6
  constructor() {
@@ -20,6 +21,7 @@ const SearchcraftSearchResult = /*@__PURE__*/ proxyCustomElement(class Searchcra
20
21
  */
21
22
  template;
22
23
  templateHtml;
24
+ get hostElement() { return this; }
23
25
  connectedCallback() {
24
26
  if (this.item) {
25
27
  try {
@@ -32,14 +34,38 @@ const SearchcraftSearchResult = /*@__PURE__*/ proxyCustomElement(class Searchcra
32
34
  }
33
35
  }
34
36
  }
37
+ handleResultContainerClick = (event) => {
38
+ const state = searchcraftStore.getState();
39
+ const searchcraft = state.getSearchcraftInstance();
40
+ if (!event.target) {
41
+ return;
42
+ }
43
+ const target = event.target;
44
+ const link = target.closest('a');
45
+ if (!link ||
46
+ !this.hostElement?.contains(link) ||
47
+ !searchcraft ||
48
+ !searchcraft.measureClient) {
49
+ return;
50
+ }
51
+ const document_position = this.documentPosition;
52
+ const search_term = state.searchTerm;
53
+ const number_of_documents = state.searchClientResponseItems.length || 0;
54
+ searchcraft.measureClient.sendMeasureEvent('document_clicked', {
55
+ document_position,
56
+ number_of_documents,
57
+ search_term,
58
+ });
59
+ };
60
+ handleKeyDown = () => { };
35
61
  render() {
36
62
  if (!this.item) {
37
63
  return;
38
64
  }
39
65
  if (typeof this.template === 'undefined') {
40
- return (h("div", { class: 'searchcraft-search-result searchcraft-search-result-no-template' }, Object.entries(this.item.document).map(([key, value]) => (h("p", { key: key }, h("strong", null, key), ": ", value)))));
66
+ return (h("div", { class: 'searchcraft-search-result searchcraft-search-result-no-template', onClick: this.handleResultContainerClick, onKeyDown: this.handleKeyDown }, Object.entries(this.item.document).map(([key, value]) => (h("p", { key: key }, h("strong", null, key), ": ", value)))));
41
67
  }
42
- return (h("div", { class: 'searchcraft-search-result', innerHTML: this.templateHtml }));
68
+ return (h("div", { class: 'searchcraft-search-result', innerHTML: this.templateHtml, onClick: this.handleResultContainerClick, onKeyDown: this.handleKeyDown }));
43
69
  }
44
70
  }, [0, "searchcraft-search-result", {
45
71
  "item": [16],
@@ -64,4 +90,4 @@ function defineCustomElement() {
64
90
 
65
91
  export { SearchcraftSearchResult as S, defineCustomElement as d };
66
92
 
67
- //# sourceMappingURL=p-39e70a00.js.map
93
+ //# sourceMappingURL=p-172a848d.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-172a848d.js","mappings":";;;;MAmBa,uBAAuB;;;;;IAC1B,IAAI,CAA4B;;;;IAIhC,KAAK,CAAU;;;;IAIf,gBAAgB,GAAG,CAAC,CAAC;;;;IAIrB,QAAQ,CAAkD;IAEzD,YAAY,CAAqB;;IAG1C,iBAAiB;QACf,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI;gBACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE;oBAClE,IAAI;iBACL,CAAC,CAAC;aACJ;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;aAC3D;SACF;KACF;IAED,0BAA0B,GAAG,CAAC,KAAiB;QAC7C,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAEnD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO;SACR;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEjC,IACE,CAAC,IAAI;YACL,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;YACjC,CAAC,WAAW;YACZ,CAAC,WAAW,CAAC,aAAa,EAC1B;YACA,OAAO;SACR;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC;QACrC,MAAM,mBAAmB,GAAG,KAAK,CAAC,yBAAyB,CAAC,MAAM,IAAI,CAAC,CAAC;QAExE,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YAC7D,iBAAiB;YACjB,mBAAmB;YACnB,WAAW;SACZ,CAAC,CAAC;KACJ,CAAC;IAEF,aAAa,GAAG,SAAQ,CAAC;IAEzB,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,OAAO;SACR;QAED,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;YACxC,QACE,WACE,KAAK,EAAC,iEAAiE,EACvE,OAAO,EAAE,IAAI,CAAC,0BAA0B,EACxC,SAAS,EAAE,IAAI,CAAC,aAAa,IAE5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MACnD,SAAG,GAAG,EAAE,GAAG,IACT,kBAAS,GAAG,CAAU,QAAG,KAAK,CAC5B,CACL,CAAC,CACE,EACN;SACH;QAED,QACE,WACE,KAAK,EAAC,2BAA2B,EACjC,SAAS,EAAE,IAAI,CAAC,YAAY,EAC5B,OAAO,EAAE,IAAI,CAAC,0BAA0B,EACxC,SAAS,EAAE,IAAI,CAAC,aAAa,GAC7B,EACF;KACH;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/searchcraft-search-result/searchcraft-search-result.tsx"],"sourcesContent":["import type {\n SearchClientResponseItem,\n SearchResultTemplate,\n SearchResultTemplateData,\n} from '@searchcraft/core';\nimport { Component, Element, h, Prop, State } from '@stencil/core';\n\nimport { html } from '@utils';\nimport { searchcraftStore } from '@store';\n\n/**\n * This web component is designed to display detailed information for a single search result. Once a query is submitted, the component formats and presents the result.\n *\n * @internal\n */\n@Component({\n tag: 'searchcraft-search-result',\n shadow: false,\n})\nexport class SearchcraftSearchResult {\n @Prop() item?: SearchClientResponseItem;\n /**\n * The index.\n */\n @Prop() index!: number;\n /**\n * The position in the document. Used with the \"document_clicked\" measure event.\n */\n @Prop() documentPosition = 0;\n /**\n * A callback function responsible for rendering a result.\n */\n @Prop() template?: SearchResultTemplate<SearchResultTemplateData>;\n\n @State() templateHtml: string | undefined;\n @Element() hostElement?: HTMLElement;\n\n connectedCallback() {\n if (this.item) {\n try {\n this.templateHtml = this.template?.(this.item.document, this.index, {\n html,\n });\n } catch (error) {\n console.error(`Invalid search result template: ${error}`);\n }\n }\n }\n\n handleResultContainerClick = (event: MouseEvent) => {\n const state = searchcraftStore.getState();\n const searchcraft = state.getSearchcraftInstance();\n\n if (!event.target) {\n return;\n }\n\n const target = event.target as HTMLElement;\n const link = target.closest('a');\n\n if (\n !link ||\n !this.hostElement?.contains(link) ||\n !searchcraft ||\n !searchcraft.measureClient\n ) {\n return;\n }\n\n const document_position = this.documentPosition;\n const search_term = state.searchTerm;\n const number_of_documents = state.searchClientResponseItems.length || 0;\n\n searchcraft.measureClient.sendMeasureEvent('document_clicked', {\n document_position,\n number_of_documents,\n search_term,\n });\n };\n\n handleKeyDown = () => {};\n\n render() {\n if (!this.item) {\n return;\n }\n\n if (typeof this.template === 'undefined') {\n return (\n <div\n class='searchcraft-search-result searchcraft-search-result-no-template'\n onClick={this.handleResultContainerClick}\n onKeyDown={this.handleKeyDown}\n >\n {Object.entries(this.item.document).map(([key, value]) => (\n <p key={key}>\n <strong>{key}</strong>: {value}\n </p>\n ))}\n </div>\n );\n }\n\n return (\n <div\n class='searchcraft-search-result'\n innerHTML={this.templateHtml}\n onClick={this.handleResultContainerClick}\n onKeyDown={this.handleKeyDown}\n />\n );\n }\n}\n"],"version":3}