@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.
Files changed (134) hide show
  1. package/dist/cjs/{index-e7bd239c.js → index-e7e9ab69.js} +4 -3
  2. package/dist/cjs/index-e7e9ab69.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +4 -2
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +2 -2
  6. package/dist/cjs/searchcraft-auto-search-form_13.cjs.entry.js +55 -29
  7. package/dist/cjs/searchcraft-auto-search-form_13.cjs.entry.js.map +1 -1
  8. package/dist/cjs/searchcraft-base-search-form.cjs.entry.js +2 -2
  9. package/dist/cjs/searchcraft-button-icon.cjs.entry.js +1 -1
  10. package/dist/cjs/searchcraft-button.cjs.entry.js +2 -2
  11. package/dist/cjs/searchcraft-javascript-sdk.cjs.js +2 -2
  12. package/dist/cjs/{store-6c259dd0.js → store-ab3978ce.js} +2 -2
  13. package/dist/cjs/{store-6c259dd0.js.map → store-ab3978ce.js.map} +1 -1
  14. package/dist/cjs/utils-57b6c18f.js +48 -0
  15. package/dist/cjs/utils-57b6c18f.js.map +1 -0
  16. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +126 -65
  17. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +1 -1
  18. package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.module.css +42 -2
  19. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +69 -4
  20. package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +1 -1
  21. package/dist/collection/components/searchcraft-button/searchcraft-button.js +1 -1
  22. package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +1 -1
  23. package/dist/collection/components/searchcraft-input-icon/searchcraft-input-icon.module.css +6 -4
  24. package/dist/collection/components/searchcraft-spinner-dark/searchcraft-spinner-dark.js +1 -1
  25. package/dist/collection/components/searchcraft-spinner-light/searchcraft-spinner-light.js +1 -1
  26. package/dist/collection/index.js +1 -1
  27. package/dist/collection/index.js.map +1 -1
  28. package/dist/collection/provider/store.js.map +1 -1
  29. package/dist/collection/utils/utils.js +23 -0
  30. package/dist/collection/utils/utils.js.map +1 -1
  31. package/dist/components/index.js +3 -3
  32. package/dist/components/{p-c69651f6.js → p-066c8210.js} +3 -3
  33. package/dist/components/p-066c8210.js.map +1 -0
  34. package/dist/components/p-1912bbbd.js +83 -0
  35. package/dist/components/p-1912bbbd.js.map +1 -0
  36. package/dist/components/{p-a18c4969.js → p-1bd04bac.js} +10 -10
  37. package/dist/components/{p-a18c4969.js.map → p-1bd04bac.js.map} +1 -1
  38. package/dist/components/{p-6f0eaec6.js → p-36c95064.js} +2 -2
  39. package/dist/components/{p-6f0eaec6.js.map → p-36c95064.js.map} +1 -1
  40. package/dist/components/p-5e3152c4.js +44 -0
  41. package/dist/components/p-5e3152c4.js.map +1 -0
  42. package/dist/components/{p-8646a603.js → p-63035c6a.js} +4 -4
  43. package/dist/components/p-63035c6a.js.map +1 -0
  44. package/dist/components/{p-0c25e95d.js → p-6f2a72d3.js} +3 -3
  45. package/dist/components/{p-0c25e95d.js.map → p-6f2a72d3.js.map} +1 -1
  46. package/dist/components/{p-e8e40447.js → p-8d9551ce.js} +3 -3
  47. package/dist/components/{p-e8e40447.js.map → p-8d9551ce.js.map} +1 -1
  48. package/dist/components/{p-2cc8c074.js → p-b1ff2296.js} +5 -5
  49. package/dist/components/{p-2cc8c074.js.map → p-b1ff2296.js.map} +1 -1
  50. package/dist/components/{p-f83f2b59.js → p-c3838435.js} +4 -4
  51. package/dist/components/{p-f83f2b59.js.map → p-c3838435.js.map} +1 -1
  52. package/dist/components/{p-199065b5.js → p-cb75ba7a.js} +2 -2
  53. package/dist/components/{p-199065b5.js.map → p-cb75ba7a.js.map} +1 -1
  54. package/dist/components/{p-04e7305e.js → p-d0edf961.js} +2 -2
  55. package/dist/components/{p-04e7305e.js.map → p-d0edf961.js.map} +1 -1
  56. package/dist/components/{p-155f7a59.js → p-d446eda4.js} +2 -2
  57. package/dist/components/{p-155f7a59.js.map → p-d446eda4.js.map} +1 -1
  58. package/dist/components/{p-9283a3c2.js → p-d54bca75.js} +2 -2
  59. package/dist/components/{p-9283a3c2.js.map → p-d54bca75.js.map} +1 -1
  60. package/dist/components/{p-16a533e3.js → p-d6616aa5.js} +3 -3
  61. package/dist/components/{p-16a533e3.js.map → p-d6616aa5.js.map} +1 -1
  62. package/dist/components/searchcraft-auto-search-form.js +13 -13
  63. package/dist/components/searchcraft-base-search-form.js +13 -13
  64. package/dist/components/searchcraft-base-search-result.js +1 -1
  65. package/dist/components/searchcraft-base-search-results.js +31 -9
  66. package/dist/components/searchcraft-base-search-results.js.map +1 -1
  67. package/dist/components/searchcraft-button-icon.js +1 -1
  68. package/dist/components/searchcraft-button.js +1 -1
  69. package/dist/components/searchcraft-clear-icon-set.js +1 -1
  70. package/dist/components/searchcraft-clear-input-button.js +1 -1
  71. package/dist/components/searchcraft-error-message.js +1 -1
  72. package/dist/components/searchcraft-input-caption.js +1 -1
  73. package/dist/components/searchcraft-input-icon.js +1 -1
  74. package/dist/components/searchcraft-input-label.js +1 -1
  75. package/dist/components/searchcraft-input.js +1 -1
  76. package/dist/components/searchcraft-search-icon-set.js +1 -1
  77. package/dist/components/searchcraft-spinner-dark.js +1 -1
  78. package/dist/components/searchcraft-spinner-light.js +1 -1
  79. package/dist/esm/{index-0d9f850d.js → index-eace3343.js} +4 -4
  80. package/dist/esm/index-eace3343.js.map +1 -0
  81. package/dist/esm/index.js +2 -2
  82. package/dist/esm/loader.js +3 -3
  83. package/dist/esm/searchcraft-auto-search-form_13.entry.js +55 -29
  84. package/dist/esm/searchcraft-auto-search-form_13.entry.js.map +1 -1
  85. package/dist/esm/searchcraft-base-search-form.entry.js +2 -2
  86. package/dist/esm/searchcraft-button-icon.entry.js +1 -1
  87. package/dist/esm/searchcraft-button.entry.js +2 -2
  88. package/dist/esm/searchcraft-javascript-sdk.js +3 -3
  89. package/dist/esm/{store-2370857c.js → store-e55b12aa.js} +2 -2
  90. package/dist/esm/{store-2370857c.js.map → store-e55b12aa.js.map} +1 -1
  91. package/dist/esm/utils-02b18bb5.js +44 -0
  92. package/dist/esm/utils-02b18bb5.js.map +1 -0
  93. package/dist/searchcraft-javascript-sdk/index.esm.js +1 -1
  94. package/dist/searchcraft-javascript-sdk/{p-329c3f66.js → p-0ba9029b.js} +3 -3
  95. package/dist/searchcraft-javascript-sdk/p-0ba9029b.js.map +1 -0
  96. package/dist/searchcraft-javascript-sdk/{p-6f0eaec6.js → p-36c95064.js} +1 -1
  97. package/dist/searchcraft-javascript-sdk/p-36c95064.js.map +1 -0
  98. package/dist/searchcraft-javascript-sdk/p-437c6ef9.entry.js +2 -0
  99. package/dist/searchcraft-javascript-sdk/p-437c6ef9.entry.js.map +1 -0
  100. package/dist/searchcraft-javascript-sdk/{p-0a8c2538.entry.js → p-562e923d.entry.js} +2 -2
  101. package/dist/searchcraft-javascript-sdk/{p-40791ead.entry.js → p-5959cd6a.entry.js} +2 -2
  102. package/dist/searchcraft-javascript-sdk/p-5e3152c4.js +2 -0
  103. package/dist/searchcraft-javascript-sdk/p-5e3152c4.js.map +1 -0
  104. package/dist/searchcraft-javascript-sdk/{p-4d18a44a.entry.js → p-eb632a89.entry.js} +2 -2
  105. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +1 -1
  106. package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +1 -1
  107. package/dist/types/components/searchcraft-base-search-result/searchcraft-base-search-result.d.ts +14 -11
  108. package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +13 -2
  109. package/dist/types/components.d.ts +58 -22
  110. package/dist/types/index.d.ts +1 -1
  111. package/dist/types/provider/store.d.ts +3 -3
  112. package/dist/types/utils/utils.d.ts +2 -0
  113. package/package.json +1 -1
  114. package/dist/cjs/index-e7bd239c.js.map +0 -1
  115. package/dist/cjs/utils-cbbed1f7.js +0 -23
  116. package/dist/cjs/utils-cbbed1f7.js.map +0 -1
  117. package/dist/components/p-1ef23e15.js +0 -21
  118. package/dist/components/p-1ef23e15.js.map +0 -1
  119. package/dist/components/p-83c9df48.js +0 -76
  120. package/dist/components/p-83c9df48.js.map +0 -1
  121. package/dist/components/p-8646a603.js.map +0 -1
  122. package/dist/components/p-c69651f6.js.map +0 -1
  123. package/dist/esm/index-0d9f850d.js.map +0 -1
  124. package/dist/esm/utils-f221d91f.js +0 -21
  125. package/dist/esm/utils-f221d91f.js.map +0 -1
  126. package/dist/searchcraft-javascript-sdk/p-1ef23e15.js +0 -2
  127. package/dist/searchcraft-javascript-sdk/p-1ef23e15.js.map +0 -1
  128. package/dist/searchcraft-javascript-sdk/p-329c3f66.js.map +0 -1
  129. package/dist/searchcraft-javascript-sdk/p-6f0eaec6.js.map +0 -1
  130. package/dist/searchcraft-javascript-sdk/p-c0cb5bb1.entry.js +0 -2
  131. package/dist/searchcraft-javascript-sdk/p-c0cb5bb1.entry.js.map +0 -1
  132. /package/dist/searchcraft-javascript-sdk/{p-0a8c2538.entry.js.map → p-562e923d.entry.js.map} +0 -0
  133. /package/dist/searchcraft-javascript-sdk/{p-40791ead.entry.js.map → p-5959cd6a.entry.js.map} +0 -0
  134. /package/dist/searchcraft-javascript-sdk/{p-4d18a44a.entry.js.map → p-eb632a89.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["searchcraftAutoSearchFormModuleCss","SearchcraftAutoSearchFormStyle0","SearchcraftAutoSearchForm","this","debounceTimeout","debounceDelay","searchStore","useSearchcraftStore","getState","handleInputChange","event","query","detail","querySubmit","emit","clearTimeout","setTimeout","console","log","runSearch","handleClearInput","clearInput","error","searchResults","async","trim","setQuery","search","JSON","stringify","handleFormSubmit","preventDefault","apiKey","endpointURL","index","componentDidLoad","searchcraft","SearchcraftCore","config","initialize","render","formClass","rightToLeftOrientation","parsedCustomStyles","parseCustomStyles","customStylesForInput","h","key","class","onSubmit","label","labelForInput","customStyles","inputCaptionValue","onClearInput","onSearchInputChange","placeholderValue","errorMessage","searchcraftBaseSearchResultModuleCss","SearchcraftBaseSearchResultStyle0","SearchcraftBaseSearchResult","buttonCallback","keyDownCallback","resultCallback","handleButtonClick","handleContainerClick","isInteractive","isLightTheme","themeMode","containerStyle","Object","assign","id","onClick","onKeyDown","style","tabindex","type","alt","imageDescription","src","imageSource","headingText","subheadingText","primaryContent","secondaryContent","tertiaryContent","buttonText","searchcraftBaseSearchResultsModuleCss","SearchcraftBaseSearchResultsStyle0","SearchcraftBaseSearchResults","searchKeys","length","warn","unsubscribe","subscribe","state","disconnectedCallback","_a","data","parsedSearchKeys","parseSearchKeys","customStylesForResults","_d","_c","_b","hits","map","document","doc","result","dynamicProperties","extractDynamicProperties","customElement","hostElement","querySelector","customElementClone","cloneNode","removeAttribute","setAttribute","outerHTML","_g","_f","_e","name","SearchcraftClearIconSet","width","height","viewBox","fill","xmlns","d","stroke","searchcraftClearInputButtonModuleCss","SearchcraftClearInputButtonStyle0","SearchcraftClearInputButton","handleClearClick","theme","classNames","isRequesting","searchcraftErrorMessageModuleCss","SearchcraftErrorMessageStyle0","SearchcraftErrorMessage","errorMessageStyle","searchcraftInputModuleCss","SearchcraftInputStyle0","SearchcraftInput","input","target","searchInputChange","value","containerClassName","inputClassName","validatedCustomStyles","placeholderStyle","fontSize","placeholderFontSize","formClassName","Fragment","onChange","bind","placeholder","inputCaptionClassName","searchcraftInputCaptionModuleCss","SearchcraftInputCaptionStyle0","SearchcraftInputCaption","searchcraftInputIconModuleCss","SearchcraftInputIconStyle0","SearchcraftInputIcon","searchcraftInputLabelModuleCss","SearchcraftInputLabelStyle0","SearchcraftInputLabel","labelStyle","inputLabelClassName","htmlFor","SearchcraftSearchIconSet","searchcraftSpinnerDarkModuleCss","SearchcraftSpinnerDarkStyle0","SearchcraftSpinnerDark","searchcraftSpinnerLightModuleCss","SearchcraftSpinnerLightStyle0","SearchcraftSpinnerLight"],"sources":["src/components/searchcraft-auto-search-form/searchcraft-auto-search-form.module.scss?tag=searchcraft-auto-search-form&encapsulation=shadow","src/components/searchcraft-auto-search-form/searchcraft-auto-search-form.tsx","src/components/searchcraft-base-search-result/searchcraft-base-search-result.module.scss?tag=searchcraft-base-search-result&encapsulation=shadow","src/components/searchcraft-base-search-result/searchcraft-base-search-result.tsx","src/components/searchcraft-base-search-results/searchcraft-base-search-results.module.scss?tag=searchcraft-base-search-results&encapsulation=shadow","src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx","src/assets/searchcraft-clear-icon-set.tsx","src/components/searchcraft-clear-input-button/searchcraft-clear-input-button.module.scss?tag=searchcraft-clear-input-button&encapsulation=shadow","src/components/searchcraft-clear-input-button/searchcraft-clear-input-button.tsx","src/components/searchcraft-error-message/searchcraft-error-message.module.scss?tag=searchcraft-error-message&encapsulation=shadow","src/components/searchcraft-error-message/searchcraft-error-message.tsx","src/components/searchcraft-input/searchcraft-input.module.scss?tag=searchcraft-input&encapsulation=shadow","src/components/searchcraft-input/searchcraft-input.tsx","src/components/searchcraft-input-caption/searchcraft-input-caption.module.scss?tag=searchcraft-input-caption&encapsulation=shadow","src/components/searchcraft-input-caption/searchcraft-input-caption.tsx","src/components/searchcraft-input-icon/searchcraft-input-icon.module.scss?tag=searchcraft-input-icon&encapsulation=shadow","src/components/searchcraft-input-icon/searchcraft-input-icon.tsx","src/components/searchcraft-input-label/searchcraft-input-label.module.scss?tag=searchcraft-input-label&encapsulation=shadow","src/components/searchcraft-input-label/searchcraft-input-label.tsx","src/assets/searchcraft-search-icon-set.tsx","src/components/searchcraft-spinner-dark/searchcraft-spinner-dark.module.scss?tag=searchcraft-spinner-dark&encapsulation=shadow","src/components/searchcraft-spinner-dark/searchcraft-spinner-dark.tsx","src/components/searchcraft-spinner-light/searchcraft-spinner-light.module.scss?tag=searchcraft-spinner-light&encapsulation=shadow","src/components/searchcraft-spinner-light/searchcraft-spinner-light.tsx"],"sourcesContent":[":root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n.formLTR {\n text-align: left;\n width: 100%;\n}\n\n.formRTL {\n text-align: right;\n width: 100%;\n}\n\n.searchContainer {\n align-items: center;\n display: flex;\n width: 100%;\n}","import {\n Component,\n Prop,\n State,\n Event,\n type EventEmitter,\n h,\n} from '@stencil/core';\nimport {\n type CoreConfigSDK,\n CoreSDK as SearchcraftCore,\n} from '@searchcraft/core';\n\nimport type { ScInputCustomEvent } from '@components/searchcraft-input/searchcraft-input';\nimport { parseCustomStyles } from '@utils/utils';\nimport { useSearchcraftStore } from '@provider/store';\n\n@Component({\n tag: 'searchcraft-auto-search-form',\n styleUrl: 'searchcraft-auto-search-form.module.scss',\n shadow: true,\n})\nexport class SearchcraftAutoSearchForm {\n @Prop() autoSearchFormClass = '';\n @Prop() clearInput: () => void = () => {};\n @Prop() config: CoreConfigSDK = {\n apiKey: '',\n endpointURL: '',\n index: [],\n };\n @Prop() customStylesForInput: string | Record<string, string> = {};\n @Prop() inputCaptionValue = '';\n @Prop() labelForInput = '';\n @Prop() placeholderValue = 'Search here';\n @Prop() rightToLeftOrientation = false;\n @Prop() searchContainerClass = '';\n\n @Event() querySubmit: EventEmitter<string>;\n\n @State() error = false;\n @State() query = '';\n @State() searchResults = '';\n\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private debounceDelay = 300; // 300ms debounce delay\n private searchStore = useSearchcraftStore.getState();\n\n componentDidLoad() {\n const searchcraft = new SearchcraftCore(this.config);\n this.searchStore.initialize(searchcraft, true);\n console.log('Component initialized');\n }\n\n handleInputChange = (event: ScInputCustomEvent<string>) => {\n this.query = event.detail;\n this.querySubmit.emit(this.query);\n\n // Clear the previous debounce timeout\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n // Set a new debounce timeout\n this.debounceTimeout = setTimeout(() => {\n console.log('Debounced search triggered');\n this.runSearch();\n }, this.debounceDelay);\n };\n\n handleClearInput = () => {\n this.query = '';\n console.log('Input cleared');\n\n if (typeof this.clearInput === 'function') {\n this.clearInput();\n }\n\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.error = false;\n this.searchResults = '';\n };\n\n private runSearch = async () => {\n if (this.query.trim() === '') {\n this.error = true;\n this.searchResults = '';\n } else {\n this.error = false;\n this.searchStore.setQuery(this.query);\n\n try {\n await this.searchStore.search();\n this.searchResults = JSON.stringify(this.searchStore.searchResults);\n } catch (error) {\n this.error = true;\n }\n }\n };\n\n handleFormSubmit = async (event: Event) => {\n event.preventDefault();\n await this.runSearch();\n };\n\n render() {\n const formClass = this.rightToLeftOrientation ? 'formRTL' : 'formLTR';\n const parsedCustomStyles = parseCustomStyles(this.customStylesForInput);\n return (\n <form class={`${formClass}`} onSubmit={this.handleFormSubmit}>\n <searchcraft-input-label label={this.labelForInput} />\n <div class='searchContainer'>\n <searchcraft-input\n customStyles={parsedCustomStyles}\n input-caption-value={this.inputCaptionValue}\n onClearInput={this.handleClearInput}\n onSearchInputChange={this.handleInputChange}\n placeholder-value={this.placeholderValue}\n query={this.query}\n right-to-left-orientation={this.rightToLeftOrientation}\n />\n </div>\n {this.error && (\n <searchcraft-error-message errorMessage='Please enter a search query.' />\n )}\n </form>\n );\n }\n}\n","@import '../../utils/theme';\n\n:root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n@mixin interactive-result-container-base {\n align-items: flex-start;\n border-radius: 16px;\n display: flex;\n position: relative;\n flex-direction: column;\n gap: 16px;\n padding: 8px;\n\n @media (min-width: 600px) {\n flex-direction: row;\n }\n}\n\n.interactiveResultContainerLight {\n background-color: $light-search-result-container-background;\n @include interactive-result-container-base;\n}\n\n.interactiveResultContainerDark {\n background-color: $dark-search-result-container-background;\n @include interactive-result-container-base;\n}\n\n.resultContainer {\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n @media (min-width: 600px) {\n flex-direction: row;\n }\n}\n\n.interactiveIconLarge {\n display: inline-block;\n position: absolute;\n right: 5px;\n top: 8px;\n\n\n @media (max-width: 600px) {\n display: none;\n }\n}\n\n.interactiveIconSmall {\n position: absolute;\n right: 5px;\n top: -2px;\n display: inline-block;\n\n\n @media (min-width: 600px) {\n display: none;\n }\n}\n\n.imageContainer {\n max-height: 540px;\n max-width: 100%;\n\n @media (min-width: 600px) {\n max-height: 100%;\n max-width: 50%;\n }\n}\n\n.contentContainer {\n max-height: 100%;\n max-width: 100%;\n\n @media (min-width: 600px) {\n max-width: 50%;\n }\n}\n\n@mixin image-base {\n aspect-ratio: 2 / 1;\n border-radius: 8px;\n max-height: 100%;\n max-width: 100%;\n}\n\n.imageLight {\n @include image-base;\n border: 1px solid $light-search-result-image-border;\n}\n\n.imageDark {\n @include image-base;\n border: 1px solid $dark-search-result-image-border;\n}\n\n@mixin heading-base {\n font-family: var(--font-stack);\n font-size: 16px;\n font-weight: 700;\n line-height: 20px;\n margin-bottom: 4px;\n margin-top: 0px;\n position: relative;\n}\n\n.headingLight {\n @include heading-base;\n color: $light-search-result-heading-color;\n}\n\n.headingDark {\n @include heading-base;\n color: $dark-search-result-heading-color;\n}\n\n@mixin subheading-base {\n font-family: var(--font-stack);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n margin-bottom: 4px;\n margin-top: 0px;\n}\n\n.subheadingLight {\n @include subheading-base;\n color: $light-search-result-subheading-color;\n}\n\n.subheadingDark {\n @include subheading-base;\n color: $dark-search-result-subheading-color\n}\n\n@mixin body-content-base {\n font-family: var(--font-stack);\n font-size: 16px;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 4px;\n margin-top: 0px;\n}\n\n.primaryContentLight {\n @include body-content-base;\n color: $light-search-result-body-content-color;\n}\n\n.primaryContentDark {\n @include body-content-base;\n color: $dark-search-result-body-content-color;\n}\n\n.secondaryContentLight {\n @include body-content-base;\n color: $light-search-result-body-content-color;\n}\n\n.secondaryContentDark {\n @include body-content-base;\n color: $dark-search-result-body-content-color;\n}\n\n.tertiaryContentLight {\n @include body-content-base;\n color: $light-search-result-body-content-color;\n}\n\n.tertiaryContentDark {\n @include body-content-base;\n color: $dark-search-result-body-content-color;\n}","import { Component, Event, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-base-search-result',\n styleUrl: 'searchcraft-base-search-result.module.scss',\n shadow: true,\n})\nexport class SearchcraftBaseSearchResult {\n @Prop() buttonText = ''; // Label for the button\n @Prop() imageDescription = ''; // Alternative text for the image\n @Prop() imageSource = ''; // Source URL for the image\n @Prop() isInteractive = false; // Determines if the result is interactive\n @Prop() primaryContent = ''; // Primary body content\n @Prop() secondaryContent = ''; // Secondary body content\n @Prop() tertiaryContent = ''; // Tertiary body content\n @Prop() headingText = ''; // Text for the heading\n @Prop() subheadingText = ''; // Text for the subheading\n @Prop() themeMode: 'light' | 'dark' = 'light'; // Light or dark theme context\n @Prop() customStyles: Record<string, string> = {}; // Custom styles passed from parent\n\n @Event() buttonCallback: () => void = () => {}; // Callback for button click\n @Event() keyDownCallback: () => void = () => {}; // Callback for key down event\n @Event() resultCallback: () => void = () => {}; // Callback for result container click\n\n private handleButtonClick = () => {\n this.buttonCallback();\n };\n\n private handleContainerClick = () => {\n if (this.isInteractive) {\n this.resultCallback();\n }\n };\n\n render() {\n const isLightTheme = this.themeMode === 'light';\n const containerStyle = { ...this.customStyles };\n return (\n <div\n class={\n this.isInteractive\n ? isLightTheme\n ? 'interactiveResultContainerLight'\n : 'interactiveResultContainerDark'\n : 'resultContainer'\n }\n id='searchcraft-item'\n onClick={this.handleContainerClick}\n onKeyDown={this.keyDownCallback}\n style={containerStyle}\n tabindex='0'\n >\n {this.isInteractive && (\n <div class='interactiveIconLarge'>\n {isLightTheme ? (\n <searchcraft-clear-icon-set type='arrow-light' />\n ) : (\n <searchcraft-clear-icon-set type='arrow-dark' />\n )}\n </div>\n )}\n <div class='imageContainer'>\n <img\n alt={this.imageDescription}\n class={isLightTheme ? 'imageLight' : 'imageDark'}\n src={this.imageSource}\n />\n </div>\n <div class='contentContainer'>\n <h2 class={isLightTheme ? 'headingLight' : 'headingDark'}>\n {this.headingText}\n {this.isInteractive && (\n <div class='interactiveIconSmall'>\n {isLightTheme ? (\n <searchcraft-clear-icon-set type='arrow-light' />\n ) : (\n <searchcraft-clear-icon-set type='arrow-dark' />\n )}\n </div>\n )}\n </h2>\n <h3 class={isLightTheme ? 'subheadingLight' : 'subheadingDark'}>\n {this.subheadingText}\n </h3>\n <p\n class={isLightTheme ? 'primaryContentLight' : 'primaryContentDark'}\n >\n {this.primaryContent}\n </p>\n <p\n class={\n isLightTheme ? 'secondaryContentLight' : 'secondaryContentDark'\n }\n >\n {this.secondaryContent}\n </p>\n <p\n class={\n isLightTheme ? 'tertiaryContentLight' : 'tertiaryContentDark'\n }\n >\n {this.tertiaryContent}\n </p>\n {this.buttonText && (\n <button onClick={this.handleButtonClick} type='button'>\n {this.buttonText}\n </button>\n )}\n </div>\n </div>\n );\n }\n}\n",":root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n.resultsContainer {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin: 100px 20px;\n\n & > p {\n align-self: center;\n }\n\n & > div {\n margin-bottom: 20px;\n img {\n height: 300px;\n width: 200px;\n }\n }\n}\n","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","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-clear-icon-set',\n shadow: true,\n})\nexport class SearchcraftClearIconSet {\n /**\n * Type of the icon to display.\n * Options: 'clear-light', 'clear-dark', 'arrow-light', 'arrow-dark'\n */\n @Prop() type: 'clear-light' | 'clear-dark' | 'arrow-light' | 'arrow-dark' =\n 'clear-light';\n\n render() {\n switch (this.type) {\n case 'clear-light':\n return (\n <svg\n width='22'\n height='22'\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 id='icon-title'>Searchcraft Clear Input Icon Light</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='black'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'clear-dark':\n return (\n <svg\n width='22'\n height='22'\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 id='icon-title'>Searchcraft Clear Input Icon Dark</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='white'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'arrow-light':\n return (\n <svg\n width='20'\n height='21'\n viewBox='0 0 20 21'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='icon-title'\n >\n <title id='icon-title'>Searchcraft Arrow Right Icon Light</title>\n <path\n d='M7.5 15.0444L12.5 10.0444L7.5 5.04443'\n stroke='#737373'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'arrow-dark':\n return (\n <svg\n width='8'\n height='12'\n viewBox='0 0 8 12'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='icon-title'\n >\n <title id='icon-title'>Searchcraft Arrow Right Icon Dark</title>\n <path\n d='M1.5 11L6.5 6L1.5 1'\n stroke='#BFBFBF'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n\n default:\n return null;\n }\n }\n}\n",":root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n.inputClearButtonLTR {\n align-items: center;\n background: none;\n border: none;\n display: flex;\n height: 20px;\n justify-content: center;\n padding: 0;\n position: absolute;\n right: 25px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n}\n\n.inputClearButtonRTL {\n align-items: center;\n background: none;\n border: none;\n display: flex;\n height: 20px;\n justify-content: center;\n left: 25px;\n padding: 0;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n}","import {\n Component,\n Event,\n type EventEmitter,\n Prop,\n h,\n State,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\n@Component({\n tag: 'searchcraft-clear-input-button',\n styleUrl: 'searchcraft-clear-input-button.module.scss',\n shadow: true,\n})\nexport class SearchcraftClearInputButton {\n @Prop() isRequesting? = false;\n @Prop() rightToLeftOrientation = false;\n\n // Updated `clearInput` to an EventEmitter\n @Event() clearInput: EventEmitter<void>;\n\n @State() theme = 'light';\n\n private isLightTheme() {\n return this.theme === 'light';\n }\n\n // Added a click handler to emit the event\n private handleClearClick = (event: MouseEvent) => {\n event.preventDefault(); // Prevent default if necessary\n this.clearInput.emit(); // Emit the event\n };\n\n render() {\n return this.rightToLeftOrientation ? (\n <button\n class={classNames('inputClearButtonRTL', '.sc-clear-input-button-rtl')}\n onClick={this.handleClearClick}\n type='button'\n >\n {this.isRequesting ? (\n this.isLightTheme ? (\n <searchcraft-spinner-light />\n ) : (\n <searchcraft-spinner-dark />\n )\n ) : this.isLightTheme ? (\n <searchcraft-clear-icon-set type='clear-light' />\n ) : (\n <searchcraft-clear-icon-set type='clear-dark' />\n )}\n </button>\n ) : (\n <button\n class={classNames('inputClearButtonLTR', '.sc-clear-input-button-ltr')}\n onClick={this.handleClearClick}\n type='button'\n >\n {this.isRequesting ? (\n this.isLightTheme ? (\n <searchcraft-spinner-light />\n ) : (\n <searchcraft-spinner-dark />\n )\n ) : this.isLightTheme ? (\n <searchcraft-clear-icon-set type='clear-light' />\n ) : (\n <searchcraft-clear-icon-set type='clear-dark' />\n )}\n </button>\n );\n }\n}\n","@import '../../utils/theme';\n\n:root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n@mixin error-message-base {\n font-family: var(--font-stack);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n margin-top: 4px;\n}\n\n.errorMessageLight {\n @include error-message-base;\n color: $light-input-caption-color-error;\n}\n\n.errorMessageDark {\n @include error-message-base;\n color: $dark-input-caption-color-error;\n}","import { Component, Prop, h } from '@stencil/core';\nimport classNames from 'classnames';\n\n@Component({\n tag: 'searchcraft-error-message',\n styleUrl: 'searchcraft-error-message.module.scss',\n shadow: true,\n})\nexport class SearchcraftErrorMessage {\n /**\n * The error message to display. Defaults to a standard message if not provided.\n */\n @Prop() errorMessage?: string;\n\n /**\n * The theme, which determines the style (light or dark).\n */\n @Prop() theme: 'light' | 'dark' = 'light';\n\n render() {\n const errorMessageStyle =\n this.theme === 'light' ? 'errorMessageLight' : 'errorMessageDark';\n\n return (\n <p class={classNames(errorMessageStyle)}>\n {this.errorMessage || 'Search term is required.'}\n </p>\n );\n }\n}\n","@import '../../utils/theme';\n\n:root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n@mixin input-container-base {\n position: relative;\n width: 100%;\n}\n\n@mixin input-base {\n border: none;\n border-radius: 8px;\n font-family: var(--font-stack);\n outline: none;\n padding-bottom: 15px;\n padding-top: 15px;\n width: 100%;\n\n &::placeholder {\n font-family: var(--font-stack);\n font-size: 16px;\n }\n}\n\n@mixin input-base-light {\n @include input-base;\n background-color: $light-input-background-color;\n color: $light-input-label-color;\n\n &::placeholder {\n color: $light-input-placeholder-color;\n }\n\n &:focus {\n outline: 2px solid $light-input-outline-focus;\n }\n}\n\n@mixin input-base-dark {\n @include input-base;\n background-color: $dark-input-background-color;\n color: $dark-input-label-color;\n\n &::placeholder {\n color: $dark-input-placeholder-color;\n }\n\n &:focus {\n outline: 2px solid $dark-input-outline-focus;\n }\n}\n\n@mixin input-error-base-light {\n @include input-base-light;\n outline: 2px solid $light-input-error-outline;\n\n &:focus-visible {\n outline: 2px solid $light-input-error-outline,\n }\n}\n\n@mixin input-error-base-dark {\n @include input-base-dark;\n outline: 2px solid $dark-input-error-outline;\n\n &:focus-visible {\n outline: 2px solid $dark-input-error-outline;\n }\n}\n\n.inputContainerLTR {\n @include input-container-base;\n}\n\n.inputContainerRTL {\n @include input-container-base;\n margin-left: 8px;\n}\n\n@mixin align-LTR {\n margin-right: 8px;\n padding-left: 36px;\n padding-right: 16px;\n}\n\n.inputLightLTR {\n @include input-base-light;\n @include align-LTR;\n}\n\n.inputDarkLTR {\n @include input-base-dark;\n @include align-LTR;\n}\n\n.inputErrorLightLTR {\n @include input-error-base-light;\n @include align-LTR;\n}\n\n.inputErrorDarkLTR {\n @include input-error-base-dark;\n @include align-LTR;\n}\n\n@mixin align-RTL {\n margin-left: 8px;\n padding-left: 16px;\n padding-right: 36px;\n text-align: right;\n}\n\n.inputLightRTL {\n @include input-base-light;\n @include align-RTL;\n}\n\n.inputDarkRTL {\n @include input-base-dark;\n @include align-RTL;\n}\n\n.inputErrorLightRTL {\n @include input-error-base-light;\n @include align-RTL;\n}\n\n.inputErrorDarkRTL {\n @include input-error-base-dark;\n @include align-RTL;\n}\n\n.inputWrapper {\n align-items: center;\n display: flex;\n position: relative;\n width: 100%;\n}\n","import {\n Component,\n h,\n Prop,\n State,\n Event,\n Fragment,\n type EventEmitter,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { parseCustomStyles } from '@utils/utils';\n\nexport interface ScInputCustomEvent<T> extends CustomEvent<T> {\n detail: T;\n target: HTMLSearchcraftInputElement;\n}\n\n@Component({\n tag: 'searchcraft-input',\n styleUrl: 'searchcraft-input.module.scss',\n shadow: true,\n})\nexport class SearchcraftInput {\n @Prop() customStyles: string | Record<string, string> = {};\n @Prop() error = false;\n @Prop() formClassName = '';\n @Prop() inputCaptionClassName = '';\n @Prop() inputCaptionValue = '';\n @Prop() inputClassName = '';\n @Prop() placeholderValue = 'Enter Search';\n @Prop() rightToLeftOrientation = false;\n @Prop() query = '';\n\n @Event() clearInput: EventEmitter<void>;\n @Event() searchInputChange: EventEmitter<string>;\n\n @State() theme = 'light';\n\n private get isLightTheme() {\n return this.theme === 'light';\n }\n\n handleInputChange(event: Event) {\n const input = event.target as HTMLInputElement;\n this.searchInputChange.emit(input.value);\n }\n\n handleClearInput() {\n if (this.clearInput) {\n this.clearInput.emit();\n }\n }\n\n render() {\n const containerClassName = this.rightToLeftOrientation\n ? 'inputContainerRTL'\n : 'inputContainerLTR';\n\n const inputClassName = classNames(\n this.error\n ? this.isLightTheme\n ? 'inputErrorLightRTL'\n : 'inputErrorDarkRTL'\n : this.isLightTheme\n ? 'inputLightLTR'\n : 'inputDarkLTR',\n 'searchcraft-input',\n );\n\n const validatedCustomStyles = parseCustomStyles(this.customStyles);\n\n const placeholderStyle = {\n fontSize: validatedCustomStyles.placeholderFontSize || '16px',\n };\n return (\n <div\n class={classNames(\n containerClassName,\n this.formClassName,\n 'searchcraft-input-form',\n )}\n >\n {this.rightToLeftOrientation ? (\n <Fragment>\n <input\n class={classNames(inputClassName, 'searchcraft-input')}\n id='searchcraft-input-id'\n onChange={this.handleInputChange.bind(this)}\n placeholder={this.placeholderValue}\n type='text'\n value={this.query}\n style={validatedCustomStyles}\n />\n <style>\n {`\n #searchcraft-input-id::placeholder {\n font-size: ${placeholderStyle.fontSize};\n }\n `}\n </style>\n {this.inputCaptionValue && (\n <searchcraft-input-caption\n inputCaptionClassName={this.inputCaptionClassName}\n inputCaptionValue={this.inputCaptionValue}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n )}\n {this.query.length > 0 && (\n <searchcraft-clear-input-button\n onClearInput={this.handleClearInput}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n )}\n <searchcraft-input-icon\n error={this.error}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n </Fragment>\n ) : (\n <div class='inputWrapper'>\n <searchcraft-input-icon\n error={this.error}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n <input\n class={classNames(inputClassName, 'searchcraft-input')}\n id='searchcraft-input-id'\n onChange={this.handleInputChange.bind(this)}\n placeholder={this.placeholderValue}\n type='text'\n value={this.query}\n style={validatedCustomStyles}\n />\n <style>\n {`\n #searchcraft-input-id::placeholder {\n font-size: ${placeholderStyle.fontSize};\n }\n `}\n </style>\n {this.inputCaptionValue && (\n <searchcraft-input-caption\n inputCaptionClassName={this.inputCaptionClassName}\n inputCaptionValue={this.inputCaptionValue}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n )}\n {this.query.length > 0 && (\n <searchcraft-clear-input-button\n onClearInput={this.handleClearInput}\n rightToLeftOrientation={this.rightToLeftOrientation}\n />\n )}\n </div>\n )}\n </div>\n );\n }\n}\n","@import '../../utils/theme';\n\n:root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n@mixin input-caption-base {\n font-family: var(--font-stack);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n margin-top: 4px;\n}\n\n@mixin input-caption-base-light {\n @include input-caption-base;\n color: $light-input-caption-color;\n}\n\n@mixin input-caption-base-dark {\n @include input-caption-base;\n color: $dark-input-caption-color;\n}\n\n.inputCaptionLightLTR {\n @include input-caption-base-light;\n}\n\n.inputCaptionDarkLTR {\n @include input-caption-base-dark;\n}\n\n.inputCaptionErrorLightLTR {\n @include input-caption-base;\n color: $light-input-caption-color-error;\n}\n\n.inputCaptionErrorDarkLTR {\n @include input-caption-base;\n color: $dark-input-caption-color-error;\n}\n\n.inputCaptionLightRTL {\n @include input-caption-base-light;\n text-align: right;\n}\n\n.inputCaptionDarkRTL {\n @include input-caption-base-dark;\n text-align: right;\n}\n\n.inputCaptionErrorLightRTL {\n @include input-caption-base;\n color: $light-input-caption-color-error;\n text-align: right;\n}\n\n.inputCaptionErrorDarkRTL {\n @include input-caption-base;\n color: $dark-input-caption-color-error;\n text-align: right;\n}","import { Component, Prop, h, State } from '@stencil/core';\nimport classNames from 'classnames';\n\n@Component({\n tag: 'searchcraft-input-caption',\n styleUrl: 'searchcraft-input-caption.module.scss',\n shadow: true,\n})\nexport class SearchcraftInputCaption {\n @Prop() error?: boolean;\n @Prop() inputCaptionClassName? = '';\n @Prop() inputCaptionValue = 'Enter Search';\n @Prop() rightToLeftOrientation = false;\n @State() theme = 'light';\n\n private isLightTheme() {\n return this.theme === 'light';\n }\n\n render() {\n return this.rightToLeftOrientation ? (\n <p\n class={classNames(\n this.error\n ? this.isLightTheme\n ? 'inputCaptionErrorLightRTL'\n : 'inputCaptionErrorDarkRTL'\n : this.isLightTheme\n ? 'inputCaptionLightRTL'\n : 'inputCaptionDarkRTL',\n this.inputCaptionClassName,\n '.searchcraft-input-caption',\n )}\n >\n {this.inputCaptionValue}\n </p>\n ) : (\n <p\n class={classNames(\n this.error\n ? this.isLightTheme\n ? 'inputCaptionErrorLightLTR'\n : 'inputCaptionErrorDarkLTR'\n : this.isLightTheme\n ? 'inputCaptionLightLTR'\n : 'inputCaptionDarkLTR',\n this.inputCaptionClassName,\n '.searchcraft-input-caption',\n )}\n >\n {this.inputCaptionValue}\n </p>\n );\n }\n}\n",":root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n.inputIconLTR {\n height: 20px;\n left: 15px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n}\n\n.inputIconRTL {\n height: 20px;\n position: absolute;\n right: 15px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n}","import { Component, Prop, h, State } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-input-icon',\n styleUrl: 'searchcraft-input-icon.module.scss',\n shadow: true,\n})\nexport class SearchcraftInputIcon {\n @Prop() error?: boolean;\n @Prop() rightToLeftOrientation = false;\n @State() theme = 'light';\n\n private isLightTheme() {\n return this.theme === 'light';\n }\n\n render() {\n return this.error ? (\n <div\n class={this.rightToLeftOrientation ? 'inputIconRTL' : 'inputIconLTR'}\n >\n {this.isLightTheme ? (\n <searchcraft-search-icon-set type='error-light' />\n ) : (\n <searchcraft-search-icon-set type='error-dark' />\n )}\n </div>\n ) : (\n <div\n class={this.rightToLeftOrientation ? 'inputIconRTL' : 'inputIconLTR'}\n >\n {this.isLightTheme ? (\n <searchcraft-search-icon-set type='search-light' />\n ) : (\n <searchcraft-search-icon-set type='search-dark' />\n )}\n </div>\n );\n }\n}\n","@import '../../utils/theme';\n\n:root {\n --font-stack: Helvetica, Arial, sans-serif;\n}\n\n@mixin input-label-base {\n font-family: var(--font-stack);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n margin-top: 4px;\n}\n\n.labelLight {\n @include input-label-base;\n color: $light-input-label-color;\n}\n\n.labelDark {\n @include input-label-base;\n color: $dark-input-label-color;\n}","import { Component, Prop, h, State } from '@stencil/core';\nimport classNames from 'classnames';\n\n@Component({\n tag: 'searchcraft-input-label',\n styleUrl: 'searchcraft-input-label.module.scss',\n shadow: true,\n})\nexport class SearchcraftInputLabel {\n @Prop() inputLabelClassName? = '';\n @Prop() label?: string; // Make label optional\n @State() theme = 'light';\n\n private isLightTheme() {\n return this.theme === 'light';\n }\n\n render() {\n // Render nothing if no label prop is provided\n if (!this.label) {\n return null;\n }\n\n const labelStyle = this.isLightTheme() ? 'labelLight' : 'labelDark';\n\n return (\n <label\n class={classNames(labelStyle, this.inputLabelClassName)}\n htmlFor='searchcraft-input-id'\n >\n {this.label}\n </label>\n );\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-search-icon-set',\n shadow: true,\n})\nexport class SearchcraftSearchIconSet {\n /**\n * Type of the icon to display.\n * Options: ''search-light', search-dark', 'error-light', 'error-dark'\n */\n @Prop() type: 'search-light' | 'search-dark' | 'error-light' | 'error-dark' =\n 'search-dark';\n\n render() {\n switch (this.type) {\n case 'search-light':\n return (\n <svg\n width='20'\n height='20'\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 id='searchcraft-title'>Searchcraft Search Icon Light</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='#404040'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'search-dark':\n return (\n <svg\n width='18'\n height='18'\n viewBox='0 0 18 18'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='searchcraft-title'\n >\n <title id='searchcraft-title'>Searchcraft Search Icon Dark</title>\n <path\n d='M16.5 16.5L12.875 12.875M14.8333 8.16667C14.8333 11.8486 11.8486 14.8333 8.16667 14.8333C4.48477 14.8333 1.5 11.8486 1.5 8.16667C1.5 4.48477 4.48477 1.5 8.16667 1.5C11.8486 1.5 14.8333 4.48477 14.8333 8.16667Z'\n stroke='#E6E6E6'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'error-light':\n return (\n <svg\n width='20'\n height='20'\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 id='searchcraft-title'>\n Searchcraft Error Search Icon Light\n </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='#737373'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n case 'error-dark':\n return (\n <svg\n width='18'\n height='18'\n viewBox='0 0 18 18'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-labelledby='searchcraft-title'\n >\n <title id='searchcraft-title'>\n Searchcraft Error Search Icon Dark\n </title>\n <path\n d='M16.5 16.5L12.875 12.875M14.8333 8.16667C14.8333 11.8486 11.8486 14.8333 8.16667 14.8333C4.48477 14.8333 1.5 11.8486 1.5 8.16667C1.5 4.48477 4.48477 1.5 8.16667 1.5C11.8486 1.5 14.8333 4.48477 14.8333 8.16667Z'\n stroke='#BFBFBF'\n stroke-width='1.5'\n stroke-linecap='round'\n stroke-linejoin='round'\n />\n </svg>\n );\n default:\n return null;\n }\n }\n}\n","$spinner-size: 20px;\n\n.spinnerContainer {\n background-color: transparent;\n height: $spinner-size;\n width: $spinner-size;\n}\n\n.spinnerDark {\n height: 100%;\n width: 100%;\n background: conic-gradient(#000 50%, #FFFFFF);\n clip-path: circle(50%);\n mask-image: radial-gradient(circle at center, rgba(0,0,0,0) calc($spinner-size/3), rgba(0,0,0,1) calc($spinner-size/3));\n animation: spinning 1s linear infinite;\n}\n\n.spinnerLight {\n height: 100%;\n width: 100%;\n background: conic-gradient(#737373 50%, #FFFFFF);\n clip-path: circle(50%);\n mask-image: radial-gradient(circle at center, rgba(0,0,0,0) calc($spinner-size/3), rgba(0,0,0,1) calc($spinner-size/3));\n animation: spinning 1s linear infinite;\n}\n\n@keyframes spinning {\n 0% { transform: rotate(0deg); }\n 50% {transform: rotate(180deg);}\n 100% { transform: rotate(360deg); }\n}","import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-spinner-dark',\n styleUrl: 'searchcraft-spinner-dark.module.scss',\n shadow: true,\n})\nexport class SearchcraftSpinnerDark {\n render() {\n return (\n <div class='spinnerContainer'>\n <div class='spinnerDark' />\n </div>\n );\n }\n}\n","$spinner-size: 20px;\n\n.spinnerContainer {\n background-color: transparent;\n height: $spinner-size;\n width: $spinner-size;\n}\n\n.spinnerLight {\n height: 100%;\n width: 100%;\n background: conic-gradient(#737373 50%, #FFFFFF);\n clip-path: circle(50%);\n mask-image: radial-gradient(circle at center, rgba(0,0,0,0) calc($spinner-size/3), rgba(0,0,0,1) calc($spinner-size/3));\n animation: spinning 1s linear infinite;\n}\n\n@keyframes spinning {\n 0% { transform: rotate(0deg); }\n 50% {transform: rotate(180deg);}\n 100% { transform: rotate(360deg); }\n}","import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'searchcraft-spinner-light',\n styleUrl: 'searchcraft-spinner-light.module.scss',\n shadow: true,\n})\nexport class SearchcraftSpinnerLight {\n render() {\n return (\n <div class='spinnerContainer'>\n <div class='spinnerLight' />\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{r as t,c as s,h as e}from"./p-329c3f66.js";import{u as a,a as i,g as h}from"./p-6f0eaec6.js";const c=".formLTR{font-family:Helvetica, Arial, sans-serif;text-align:left}.formRTL{font-family:Helvetica, Arial, sans-serif;text-align:right}.searchContainer{align-items:center;display:flex}";const r=c;const f=class{constructor(e){t(this,e);this.clearInput=s(this,"clearInput",7);this.clearInput=()=>{};this.searchStore=a.getState();this.themeStore=i.getState();this.componentDidLoad=()=>{const t=new h(this.config);this.searchStore.initialize(t,true)};this.handleFormSubmit=async t=>{t.preventDefault();if(this.query.trim()===""){this.error=true}else{this.error=false;this.searchStore.setQuery(this.query);await this.searchStore.search();this.searchResults=JSON.stringify(this.searchStore.searchResults)}};this.handleSearchInputChange=t=>{this.query=t.detail};this.handleClearInput=()=>{this.query="";this===null||this===void 0?void 0:this.clearInput()};this.toggleTheme=()=>{this.themeStore.toggleTheme()};this.config={apiKey:"",endpointURL:"",index:[]};this.errorMessage="Search was unsuccessful";this.labelForInput="Search";this.rightToLeftOrientation=false;this.error=false;this.query="";this.searchResults=null}render(){return e("form",{key:"6460e91d9c4a48c40476c18762b8b4873c157653",class:this.rightToLeftOrientation?"formRTL":"formLTR",onSubmit:this.handleFormSubmit},e("searchcraft-input-label",{key:"9d0a89868c4dafae20e7437101c5639466fc2ffa",label:this.labelForInput}),e("div",{key:"441c0923111995fc0b04b0acb799ade4b2018be0",class:"searchContainer"},this.rightToLeftOrientation&&e("searchcraft-button",{key:"2a0dc24c906917cd1ec5bd605e25a0a67bffee21"}),e("searchcraft-input",{key:"6744a36c97e03fbd10cc354653e32f0f7eac1c00",onClearInput:this.handleClearInput,rightToLeftOrientation:this.rightToLeftOrientation,onSearchInputChange:this.handleSearchInputChange,query:this.query}),!this.rightToLeftOrientation&&e("searchcraft-button",{key:"50ea437efebe7a62d6122fb6a76942861003884a",onButtonClick:this.handleFormSubmit})),this.error&&e("searchcraft-error-message",{key:"ae4b2fa7d874771af0b88757244abe5d50679d55",errorMessage:this.errorMessage}))}};f.style=r;export{f as searchcraft_base_search_form};
2
- //# sourceMappingURL=p-0a8c2538.entry.js.map
1
+ import{r as t,c as s,h as e}from"./p-0ba9029b.js";import{u as a,a as i,g as h}from"./p-36c95064.js";const r=".formLTR{font-family:Helvetica, Arial, sans-serif;text-align:left}.formRTL{font-family:Helvetica, Arial, sans-serif;text-align:right}.searchContainer{align-items:center;display:flex}";const c=r;const f=class{constructor(e){t(this,e);this.clearInput=s(this,"clearInput",7);this.clearInput=()=>{};this.searchStore=a.getState();this.themeStore=i.getState();this.componentDidLoad=()=>{const t=new h(this.config);this.searchStore.initialize(t,true)};this.handleFormSubmit=async t=>{t.preventDefault();if(this.query.trim()===""){this.error=true}else{this.error=false;this.searchStore.setQuery(this.query);await this.searchStore.search();this.searchResults=JSON.stringify(this.searchStore.searchResults)}};this.handleSearchInputChange=t=>{this.query=t.detail};this.handleClearInput=()=>{this.query="";this===null||this===void 0?void 0:this.clearInput()};this.toggleTheme=()=>{this.themeStore.toggleTheme()};this.config={apiKey:"",endpointURL:"",index:[]};this.errorMessage="Search was unsuccessful";this.labelForInput="Search";this.rightToLeftOrientation=false;this.error=false;this.query="";this.searchResults=null}render(){return e("form",{key:"6460e91d9c4a48c40476c18762b8b4873c157653",class:this.rightToLeftOrientation?"formRTL":"formLTR",onSubmit:this.handleFormSubmit},e("searchcraft-input-label",{key:"9d0a89868c4dafae20e7437101c5639466fc2ffa",label:this.labelForInput}),e("div",{key:"441c0923111995fc0b04b0acb799ade4b2018be0",class:"searchContainer"},this.rightToLeftOrientation&&e("searchcraft-button",{key:"2a0dc24c906917cd1ec5bd605e25a0a67bffee21"}),e("searchcraft-input",{key:"6744a36c97e03fbd10cc354653e32f0f7eac1c00",onClearInput:this.handleClearInput,rightToLeftOrientation:this.rightToLeftOrientation,onSearchInputChange:this.handleSearchInputChange,query:this.query}),!this.rightToLeftOrientation&&e("searchcraft-button",{key:"50ea437efebe7a62d6122fb6a76942861003884a",onButtonClick:this.handleFormSubmit})),this.error&&e("searchcraft-error-message",{key:"ae4b2fa7d874771af0b88757244abe5d50679d55",errorMessage:this.errorMessage}))}};f.style=c;export{f as searchcraft_base_search_form};
2
+ //# sourceMappingURL=p-562e923d.entry.js.map
@@ -1,2 +1,2 @@
1
- import{r as t,c as i,h as o,F as r}from"./p-329c3f66.js";import{c as s}from"./p-5cdc6210.js";const n=":root{--font-stack:Helvetica, Arial, sans-serif}.buttonLight{border-radius:8px;display:flex;font-family:var(--font-stack);font-size:16px;font-weight:700;line-height:20px;padding:11px 20px;position:relative;background-color:#000;border:1px solid #E6E6E6;color:#FFF}.buttonLight:hover{cursor:pointer}.buttonLight:hover{background-color:#2E2E2E}.buttonLight:focus{outline:2px solid #000000}.buttonDark{border-radius:8px;display:flex;font-family:var(--font-stack);font-size:16px;font-weight:700;line-height:20px;padding:11px 20px;position:relative;background-color:#FFF;border:1px solid #404040;color:#292929}.buttonDark:hover{cursor:pointer}.buttonDark:hover{background-color:#FAFAFA}.buttonDark:focus{outline:2px solid #404040}.spinnerMarginRight{left:4px;margin-right:4px;position:absolute}.spinnerMarginLeft{left:4px;margin-left:4px;position:absolute}.buttonLabel{animation:right-and-back 0.2s;margin-left:4px;position:relative}@keyframes right-and-back{0%{right:-6px}50%{right:-12px}75%{right:-6px}100%{right:0px}}";const a=n;const e=class{constructor(o){t(this,o);this.buttonClick=i(this,"buttonClick",7);this.handleClick=()=>{this.buttonClick.emit()};this.iconElement=undefined;this.iconOnly=false;this.iconPosition="left";this.label="Search";this.isRequesting=false;this.theme="light"}getButtonStyle(){return this.theme==="light"?"buttonLight":"buttonDark"}render(){const t=this.getButtonStyle();return o(r,{key:"f10a9faa6357ef626c4e5414a5c8bdc1fe0b63a1"},this.iconOnly?o("button",{class:s(t,"searchcraft-button"),onClick:this.handleClick,type:"submit"},this.isRequesting?o("searchcraft-spinner-dark",null):this.iconElement):o("button",{class:s(t,"searchcraft-button"),onClick:this.handleClick,type:"submit"},this.iconPosition==="left"&&this.isRequesting?o("div",{class:"spinner-margin-right"},o("searchcraft-spinner-dark",null)):this.iconElement,o("span",{class:s(this.isRequesting&&"button-label","searchcraft-button-label")},this.label)))}};e.style=a;export{e as searchcraft_button};
2
- //# sourceMappingURL=p-40791ead.entry.js.map
1
+ import{r as t,c as i,h as o,F as r}from"./p-0ba9029b.js";import{c as s}from"./p-5cdc6210.js";const n=":root{--font-stack:Helvetica, Arial, sans-serif}.buttonLight{border-radius:8px;display:flex;font-family:var(--font-stack);font-size:16px;font-weight:700;line-height:20px;padding:11px 20px;position:relative;background-color:#000;border:1px solid #E6E6E6;color:#FFF}.buttonLight:hover{cursor:pointer}.buttonLight:hover{background-color:#2E2E2E}.buttonLight:focus{outline:2px solid #000000}.buttonDark{border-radius:8px;display:flex;font-family:var(--font-stack);font-size:16px;font-weight:700;line-height:20px;padding:11px 20px;position:relative;background-color:#FFF;border:1px solid #404040;color:#292929}.buttonDark:hover{cursor:pointer}.buttonDark:hover{background-color:#FAFAFA}.buttonDark:focus{outline:2px solid #404040}.spinnerMarginRight{left:4px;margin-right:4px;position:absolute}.spinnerMarginLeft{left:4px;margin-left:4px;position:absolute}.buttonLabel{animation:right-and-back 0.2s;margin-left:4px;position:relative}@keyframes right-and-back{0%{right:-6px}50%{right:-12px}75%{right:-6px}100%{right:0px}}";const a=n;const e=class{constructor(o){t(this,o);this.buttonClick=i(this,"buttonClick",7);this.handleClick=()=>{this.buttonClick.emit()};this.iconElement=undefined;this.iconOnly=false;this.iconPosition="left";this.label="Search";this.isRequesting=false;this.theme="light"}getButtonStyle(){return this.theme==="light"?"buttonLight":"buttonDark"}render(){const t=this.getButtonStyle();return o(r,{key:"d95f39680caa437650f45f089c25273ddf24e076"},this.iconOnly?o("button",{class:s(t,"searchcraft-button"),onClick:this.handleClick,type:"submit"},this.isRequesting?o("searchcraft-spinner-dark",null):this.iconElement):o("button",{class:s(t,"searchcraft-button"),onClick:this.handleClick,type:"submit"},this.iconPosition==="left"&&this.isRequesting?o("div",{class:"spinner-margin-right"},o("searchcraft-spinner-dark",null)):this.iconElement,o("span",{class:s(this.isRequesting&&"button-label","searchcraft-button-label")},this.label)))}};e.style=a;export{e as searchcraft_button};
2
+ //# sourceMappingURL=p-5959cd6a.entry.js.map
@@ -0,0 +1,2 @@
1
+ function r(r){if(typeof r==="string"){try{return JSON.parse(r)}catch(t){console.error("Invalid customStyles format:",r);return{}}}return r||{}}function t(r){try{const t=JSON.parse(r);if(Array.isArray(t)&&t.every((r=>typeof r==="string"))){return t}console.warn("searchKeys must be a JSON array of strings. Defaulting to an empty array.");return[]}catch(r){console.error("Failed to parse searchKeys:",r);return[]}}function e(r,t){const e={};t.forEach((t=>{e[t]=r[t]||""}));return e}export{t as a,e,r as p};
2
+ //# sourceMappingURL=p-5e3152c4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseCustomStyles","styles","JSON","parse","error","console","parseSearchKeys","searchKeys","parsedKeys","Array","isArray","every","key","warn","extractDynamicProperties","document","keys","extractedProperties","forEach"],"sources":["src/utils/utils.ts"],"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"],"mappings":"SAKgBA,EACdC,GAEA,UAAWA,IAAW,SAAU,CAC9B,IACE,OAAOC,KAAKC,MAAMF,E,CAClB,MAAOG,GACPC,QAAQD,MAAM,+BAAgCH,GAC9C,MAAO,E,EAGX,OAAOA,GAAU,EACnB,C,SAEgBK,EAAgBC,GAC9B,IAEE,MAAMC,EAAaN,KAAKC,MAAMI,GAC9B,GACEE,MAAMC,QAAQF,IACdA,EAAWG,OAAOC,UAAeA,IAAQ,WACzC,CACA,OAAOJ,C,CAETH,QAAQQ,KACN,6EAEF,MAAO,E,CACP,MAAOT,GACPC,QAAQD,MAAM,8BAA+BA,GAC7C,MAAO,E,CAEX,C,SAEgBU,EACdC,EACAC,GAEA,MAAMC,EAAuD,GAC7DD,EAAKE,SAASN,IACZK,EAAoBL,GAAOG,EAASH,IAAQ,EAAE,IAEhD,OAAOK,CACT,Q","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{r as e,h as t}from"./p-329c3f66.js";const o=class{constructor(t){e(this,t)}render(){return t("svg",{key:"f9436b04edcceb412ba9f81dec897e6075f22007",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":"button-icon-title"},t("title",{key:"a9c430e91b2ab60a128393dda5d788e4de4a0401",id:"button-icon-title"},"Searchcraft Button Icon"),t("path",{key:"52a99156089e2cbf7de1f355bea2ffafd1b66dde",d:"M2.725 5.79959L10 10.0079L17.275 5.79959M10 18.3996V9.99959M17.5 13.3329V6.66626C17.4997 6.37399 17.4225 6.08693 17.2763 5.8339C17.13 5.58086 16.9198 5.37073 16.6667 5.22459L10.8333 1.89126C10.58 1.74498 10.2926 1.66797 10 1.66797C9.70744 1.66797 9.42003 1.74498 9.16667 1.89126L3.33333 5.22459C3.08022 5.37073 2.86998 5.58086 2.72372 5.8339C2.57745 6.08693 2.5003 6.37399 2.5 6.66626V13.3329C2.5003 13.6252 2.57745 13.9123 2.72372 14.1653C2.86998 14.4183 3.08022 14.6285 3.33333 14.7746L9.16667 18.1079C9.42003 18.2542 9.70744 18.3312 10 18.3312C10.2926 18.3312 10.58 18.2542 10.8333 18.1079L16.6667 14.7746C16.9198 14.6285 17.13 14.4183 17.2763 14.1653C17.4225 13.9123 17.4997 13.6252 17.5 13.3329Z",stroke:"white","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}))}};export{o as searchcraft_button_icon};
2
- //# sourceMappingURL=p-4d18a44a.entry.js.map
1
+ import{r as e,h as t}from"./p-0ba9029b.js";const o=class{constructor(t){e(this,t)}render(){return t("svg",{key:"f9436b04edcceb412ba9f81dec897e6075f22007",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":"button-icon-title"},t("title",{key:"a9c430e91b2ab60a128393dda5d788e4de4a0401",id:"button-icon-title"},"Searchcraft Button Icon"),t("path",{key:"52a99156089e2cbf7de1f355bea2ffafd1b66dde",d:"M2.725 5.79959L10 10.0079L17.275 5.79959M10 18.3996V9.99959M17.5 13.3329V6.66626C17.4997 6.37399 17.4225 6.08693 17.2763 5.8339C17.13 5.58086 16.9198 5.37073 16.6667 5.22459L10.8333 1.89126C10.58 1.74498 10.2926 1.66797 10 1.66797C9.70744 1.66797 9.42003 1.74498 9.16667 1.89126L3.33333 5.22459C3.08022 5.37073 2.86998 5.58086 2.72372 5.8339C2.57745 6.08693 2.5003 6.37399 2.5 6.66626V13.3329C2.5003 13.6252 2.57745 13.9123 2.72372 14.1653C2.86998 14.4183 3.08022 14.6285 3.33333 14.7746L9.16667 18.1079C9.42003 18.2542 9.70744 18.3312 10 18.3312C10.2926 18.3312 10.58 18.2542 10.8333 18.1079L16.6667 14.7746C16.9198 14.6285 17.13 14.4183 17.2763 14.1653C17.4225 13.9123 17.4997 13.6252 17.5 13.3329Z",stroke:"white","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"}))}};export{o as searchcraft_button_icon};
2
+ //# sourceMappingURL=p-eb632a89.entry.js.map
@@ -1,2 +1,2 @@
1
- import{p as e,b as t}from"./p-329c3f66.js";export{s as setNonce}from"./p-329c3f66.js";import{g as a}from"./p-e1255160.js";var r=()=>{const t=import.meta.url;const a={};if(t!==""){a.resourcesUrl=new URL(".",t).href}return e(a)};r().then((async e=>{await a();return t([["p-c0cb5bb1",[[1,"searchcraft-auto-search-form",{autoSearchFormClass:[1,"auto-search-form-class"],clearInput:[16],config:[16],customStylesForInput:[1,"custom-styles-for-input"],inputCaptionValue:[1,"input-caption-value"],labelForInput:[1,"label-for-input"],placeholderValue:[1,"placeholder-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],searchContainerClass:[1,"search-container-class"],error:[32],query:[32],searchResults:[32]}],[1,"searchcraft-base-search-results",{query:[32],searchResults:[32]}],[1,"searchcraft-base-search-result",{buttonCallbackFn:[16],buttonLabel:[1,"button-label"],callbackFn:[16],imageAltText:[1,"image-alt-text"],imageSrc:[1,"image-src"],interactiveResult:[4,"interactive-result"],keyDownCallbackFn:[16],resultBodyContent:[1,"result-body-content"],resultHeading:[1,"result-heading"],resultSubheading:[1,"result-subheading"],theme:[1]}],[1,"searchcraft-input",{customStyles:[1,"custom-styles"],error:[4],formClassName:[1,"form-class-name"],inputCaptionClassName:[1,"input-caption-class-name"],inputCaptionValue:[1,"input-caption-value"],inputClassName:[1,"input-class-name"],placeholderValue:[1,"placeholder-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],query:[1],theme:[32]}],[1,"searchcraft-input-label",{inputLabelClassName:[1,"input-label-class-name"],label:[1],theme:[32]}],[1,"searchcraft-clear-input-button",{isRequesting:[4,"is-requesting"],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-input-icon",{error:[4],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-error-message",{errorMessage:[1,"error-message"],theme:[1]}],[1,"searchcraft-input-caption",{error:[4],inputCaptionClassName:[1,"input-caption-class-name"],inputCaptionValue:[1,"input-caption-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-search-icon-set",{type:[1]}],[1,"searchcraft-spinner-light"],[1,"searchcraft-spinner-dark"],[1,"searchcraft-clear-icon-set",{type:[1]}]]],["p-0a8c2538",[[1,"searchcraft-base-search-form",{config:[16],errorMessage:[1,"error-message"],labelForInput:[1,"label-for-input"],rightToLeftOrientation:[4,"right-to-left-orientation"],error:[32],query:[32],searchResults:[32]}]]],["p-4d18a44a",[[1,"searchcraft-button-icon"]]],["p-40791ead",[[1,"searchcraft-button",{iconElement:[16],iconOnly:[4,"icon-only"],iconPosition:[1,"icon-position"],label:[1],isRequesting:[32],theme:[32]}]]]],e)}));
1
+ import{p as e,b as t}from"./p-0ba9029b.js";export{s as setNonce}from"./p-0ba9029b.js";import{g as a}from"./p-e1255160.js";var r=()=>{const t=import.meta.url;const a={};if(t!==""){a.resourcesUrl=new URL(".",t).href}return e(a)};r().then((async e=>{await a();return t([["p-437c6ef9",[[1,"searchcraft-auto-search-form",{autoSearchFormClass:[1,"auto-search-form-class"],clearInput:[16],config:[16],customStylesForInput:[1,"custom-styles-for-input"],inputCaptionValue:[1,"input-caption-value"],labelForInput:[1,"label-for-input"],placeholderValue:[1,"placeholder-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],searchContainerClass:[1,"search-container-class"],error:[32],query:[32],searchResults:[32]}],[1,"searchcraft-base-search-results",{searchKeys:[1,"search-keys"],customStylesForResults:[1,"custom-styles-for-results"],query:[32],searchResults:[32]}],[1,"searchcraft-base-search-result",{buttonText:[1,"button-text"],imageDescription:[1,"image-description"],imageSource:[1,"image-source"],isInteractive:[4,"is-interactive"],primaryContent:[1,"primary-content"],secondaryContent:[1,"secondary-content"],tertiaryContent:[1,"tertiary-content"],headingText:[1,"heading-text"],subheadingText:[1,"subheading-text"],themeMode:[1,"theme-mode"],customStyles:[16]}],[1,"searchcraft-input",{customStyles:[1,"custom-styles"],error:[4],formClassName:[1,"form-class-name"],inputCaptionClassName:[1,"input-caption-class-name"],inputCaptionValue:[1,"input-caption-value"],inputClassName:[1,"input-class-name"],placeholderValue:[1,"placeholder-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],query:[1],theme:[32]}],[1,"searchcraft-input-label",{inputLabelClassName:[1,"input-label-class-name"],label:[1],theme:[32]}],[1,"searchcraft-clear-input-button",{isRequesting:[4,"is-requesting"],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-input-icon",{error:[4],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-error-message",{errorMessage:[1,"error-message"],theme:[1]}],[1,"searchcraft-input-caption",{error:[4],inputCaptionClassName:[1,"input-caption-class-name"],inputCaptionValue:[1,"input-caption-value"],rightToLeftOrientation:[4,"right-to-left-orientation"],theme:[32]}],[1,"searchcraft-search-icon-set",{type:[1]}],[1,"searchcraft-spinner-light"],[1,"searchcraft-spinner-dark"],[1,"searchcraft-clear-icon-set",{type:[1]}]]],["p-562e923d",[[1,"searchcraft-base-search-form",{config:[16],errorMessage:[1,"error-message"],labelForInput:[1,"label-for-input"],rightToLeftOrientation:[4,"right-to-left-orientation"],error:[32],query:[32],searchResults:[32]}]]],["p-eb632a89",[[1,"searchcraft-button-icon"]]],["p-5959cd6a",[[1,"searchcraft-button",{iconElement:[16],iconOnly:[4,"icon-only"],iconPosition:[1,"icon-position"],label:[1],isRequesting:[32],theme:[32]}]]]],e)}));
2
2
  //# sourceMappingURL=searchcraft-javascript-sdk.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["patchBrowser","importMeta","url","opts","resourcesUrl","URL","href","promiseResolve","then","async","options","globalScripts","bootstrapLazy","autoSearchFormClass","clearInput","config","customStylesForInput","inputCaptionValue","labelForInput","placeholderValue","rightToLeftOrientation","searchContainerClass","error","query","searchResults","buttonCallbackFn","buttonLabel","callbackFn","imageAltText","imageSrc","interactiveResult","keyDownCallbackFn","resultBodyContent","resultHeading","resultSubheading","theme","customStyles","formClassName","inputCaptionClassName","inputClassName","inputLabelClassName","label","isRequesting","errorMessage","type","iconElement","iconOnly","iconPosition"],"sources":["../../node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.22.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, doc, H, promiseResolve } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? Array.from(doc.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"mappings":"0HAOA,IAAIA,EAAe,KAUjB,MAAMC,cAAyBC,IAC/B,MAAMC,EAAqE,GAC3E,GAAIF,IAAe,GAAI,CACrBE,EAAKC,aAAe,IAAIC,IAAI,IAAKJ,GAAYK,IACjD,CACE,OAAOC,EAAeJ,EAAK,EClB7BH,IAAeQ,MAAKC,MAAOC,UACnBC,IACN,OAAOC,EAAc,kDAAuC,CAAAC,oBAAA,6BAAAC,WAAA,KAAAC,OAAA,KAAAC,qBAAA,8BAAAC,kBAAA,0BAAAC,cAAA,sBAAAC,iBAAA,wBAAAC,uBAAA,gCAAAC,qBAAA,6BAAAC,MAAA,KAAAC,MAAA,KAAAC,cAAA,6CAAAD,MAAA,KAAAC,cAAA,4CAAAC,iBAAA,KAAAC,YAAA,mBAAAC,WAAA,KAAAC,aAAA,qBAAAC,SAAA,gBAAAC,kBAAA,yBAAAC,kBAAA,KAAAC,kBAAA,0BAAAC,cAAA,qBAAAC,iBAAA,wBAAAC,MAAA,8BAAAC,aAAA,oBAAAd,MAAA,IAAAe,cAAA,sBAAAC,sBAAA,+BAAArB,kBAAA,0BAAAsB,eAAA,uBAAApB,iBAAA,wBAAAC,uBAAA,gCAAAG,MAAA,IAAAY,MAAA,qCAAAK,oBAAA,6BAAAC,MAAA,IAAAN,MAAA,4CAAAO,aAAA,oBAAAtB,uBAAA,gCAAAe,MAAA,oCAAAb,MAAA,IAAAF,uBAAA,gCAAAe,MAAA,uCAAAQ,aAAA,oBAAAR,MAAA,sCAAAb,MAAA,IAAAgB,sBAAA,+BAAArB,kBAAA,0BAAAG,uBAAA,gCAAAe,MAAA,yCAAAS,KAAA,sGAAAA,KAAA,0DAAA7B,OAAA,KAAA4B,aAAA,oBAAAzB,cAAA,sBAAAE,uBAAA,gCAAAE,MAAA,KAAAC,MAAA,KAAAC,cAAA,gGAAAqB,YAAA,KAAAC,SAAA,gBAAAC,aAAA,oBAAAN,MAAA,IAAAC,aAAA,KAAAP,MAAA,UAAAzB,EAAA","ignoreList":[]}
1
+ {"version":3,"names":["patchBrowser","importMeta","url","opts","resourcesUrl","URL","href","promiseResolve","then","async","options","globalScripts","bootstrapLazy","autoSearchFormClass","clearInput","config","customStylesForInput","inputCaptionValue","labelForInput","placeholderValue","rightToLeftOrientation","searchContainerClass","error","query","searchResults","searchKeys","customStylesForResults","buttonText","imageDescription","imageSource","isInteractive","primaryContent","secondaryContent","tertiaryContent","headingText","subheadingText","themeMode","customStyles","formClassName","inputCaptionClassName","inputClassName","theme","inputLabelClassName","label","isRequesting","errorMessage","type","iconElement","iconOnly","iconPosition"],"sources":["../../node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.22.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, doc, H, promiseResolve } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? Array.from(doc.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"mappings":"0HAOA,IAAIA,EAAe,KAUjB,MAAMC,cAAyBC,IAC/B,MAAMC,EAAqE,GAC3E,GAAIF,IAAe,GAAI,CACrBE,EAAKC,aAAe,IAAIC,IAAI,IAAKJ,GAAYK,IACjD,CACE,OAAOC,EAAeJ,EAAK,EClB7BH,IAAeQ,MAAKC,MAAOC,UACnBC,IACN,OAAOC,EAAc,kDAAuC,CAAAC,oBAAA,6BAAAC,WAAA,KAAAC,OAAA,KAAAC,qBAAA,8BAAAC,kBAAA,0BAAAC,cAAA,sBAAAC,iBAAA,wBAAAC,uBAAA,gCAAAC,qBAAA,6BAAAC,MAAA,KAAAC,MAAA,KAAAC,cAAA,6CAAAC,WAAA,kBAAAC,uBAAA,gCAAAH,MAAA,KAAAC,cAAA,4CAAAG,WAAA,kBAAAC,iBAAA,wBAAAC,YAAA,mBAAAC,cAAA,qBAAAC,eAAA,sBAAAC,iBAAA,wBAAAC,gBAAA,uBAAAC,YAAA,mBAAAC,eAAA,sBAAAC,UAAA,iBAAAC,aAAA,+BAAAA,aAAA,oBAAAf,MAAA,IAAAgB,cAAA,sBAAAC,sBAAA,+BAAAtB,kBAAA,0BAAAuB,eAAA,uBAAArB,iBAAA,wBAAAC,uBAAA,gCAAAG,MAAA,IAAAkB,MAAA,qCAAAC,oBAAA,6BAAAC,MAAA,IAAAF,MAAA,4CAAAG,aAAA,oBAAAxB,uBAAA,gCAAAqB,MAAA,oCAAAnB,MAAA,IAAAF,uBAAA,gCAAAqB,MAAA,uCAAAI,aAAA,oBAAAJ,MAAA,sCAAAnB,MAAA,IAAAiB,sBAAA,+BAAAtB,kBAAA,0BAAAG,uBAAA,gCAAAqB,MAAA,yCAAAK,KAAA,sGAAAA,KAAA,0DAAA/B,OAAA,KAAA8B,aAAA,oBAAA3B,cAAA,sBAAAE,uBAAA,gCAAAE,MAAA,KAAAC,MAAA,KAAAC,cAAA,gGAAAuB,YAAA,KAAAC,SAAA,gBAAAC,aAAA,oBAAAN,MAAA,IAAAC,aAAA,KAAAH,MAAA,UAAA/B,EAAA","ignoreList":[]}
@@ -1,15 +1,18 @@
1
1
  export declare class SearchcraftBaseSearchResult {
2
- buttonCallbackFn: () => void;
3
- buttonLabel: string;
4
- callbackFn: () => void;
5
- imageAltText: string;
6
- imageSrc: string;
7
- interactiveResult: boolean;
8
- keyDownCallbackFn: () => void;
9
- resultBodyContent: string;
10
- resultHeading: string;
11
- resultSubheading: string;
12
- theme: 'light' | 'dark';
2
+ buttonText: string;
3
+ imageDescription: string;
4
+ imageSource: string;
5
+ isInteractive: boolean;
6
+ primaryContent: string;
7
+ secondaryContent: string;
8
+ tertiaryContent: string;
9
+ headingText: string;
10
+ subheadingText: string;
11
+ themeMode: 'light' | 'dark';
12
+ customStyles: Record<string, string>;
13
+ buttonCallback: () => void;
14
+ keyDownCallback: () => void;
15
+ resultCallback: () => void;
13
16
  private handleButtonClick;
14
17
  private handleContainerClick;
15
18
  render(): any;
@@ -1,7 +1,18 @@
1
- import type { SearchResult } from '@searchcraft/core';
1
+ import type { SearchcraftResponse } from '@searchcraft/core';
2
2
  export declare class SearchcraftBaseSearchResults {
3
3
  query: string;
4
- searchResults: SearchResult | null;
4
+ searchResults: SearchcraftResponse | null;
5
+ /**
6
+ * Array of keys to dynamically extract properties from each document.
7
+ * Must be explicitly set by the parent component.
8
+ */
9
+ searchKeys: string;
10
+ /**
11
+ * Custom styles to apply to search results.
12
+ * Expected format: JSON string, e.g., '{"borderRadius": "10px", "padding": "16px"}'
13
+ */
14
+ customStylesForResults: string | Record<string, string>;
15
+ hostElement: HTMLElement;
5
16
  private unsubscribe;
6
17
  componentDidLoad(): void;
7
18
  disconnectedCallback(): void;
@@ -26,19 +26,27 @@ export namespace Components {
26
26
  "rightToLeftOrientation": boolean;
27
27
  }
28
28
  interface SearchcraftBaseSearchResult {
29
- "buttonCallbackFn": () => void;
30
- "buttonLabel": string;
31
- "callbackFn": () => void;
32
- "imageAltText": string;
33
- "imageSrc": string;
34
- "interactiveResult": boolean;
35
- "keyDownCallbackFn": () => void;
36
- "resultBodyContent": string;
37
- "resultHeading": string;
38
- "resultSubheading": string;
39
- "theme": 'light' | 'dark';
29
+ "buttonText": string;
30
+ "customStyles": Record<string, string>;
31
+ "headingText": string;
32
+ "imageDescription": string;
33
+ "imageSource": string;
34
+ "isInteractive": boolean;
35
+ "primaryContent": string;
36
+ "secondaryContent": string;
37
+ "subheadingText": string;
38
+ "tertiaryContent": string;
39
+ "themeMode": 'light' | 'dark';
40
40
  }
41
41
  interface SearchcraftBaseSearchResults {
42
+ /**
43
+ * Custom styles to apply to search results. Expected format: JSON string, e.g., '{"borderRadius": "10px", "padding": "16px"}'
44
+ */
45
+ "customStylesForResults": string | Record<string, string>;
46
+ /**
47
+ * Array of keys to dynamically extract properties from each document. Must be explicitly set by the parent component.
48
+ */
49
+ "searchKeys": string;
42
50
  }
43
51
  interface SearchcraftButton {
44
52
  "iconElement"?: Element;
@@ -112,6 +120,10 @@ export interface SearchcraftBaseSearchFormCustomEvent<T> extends CustomEvent<T>
112
120
  detail: T;
113
121
  target: HTMLSearchcraftBaseSearchFormElement;
114
122
  }
123
+ export interface SearchcraftBaseSearchResultCustomEvent<T> extends CustomEvent<T> {
124
+ detail: T;
125
+ target: HTMLSearchcraftBaseSearchResultElement;
126
+ }
115
127
  export interface SearchcraftButtonCustomEvent<T> extends CustomEvent<T> {
116
128
  detail: T;
117
129
  target: HTMLSearchcraftButtonElement;
@@ -159,7 +171,20 @@ declare global {
159
171
  prototype: HTMLSearchcraftBaseSearchFormElement;
160
172
  new (): HTMLSearchcraftBaseSearchFormElement;
161
173
  };
174
+ interface HTMLSearchcraftBaseSearchResultElementEventMap {
175
+ "buttonCallback": any;
176
+ "keyDownCallback": any;
177
+ "resultCallback": any;
178
+ }
162
179
  interface HTMLSearchcraftBaseSearchResultElement extends Components.SearchcraftBaseSearchResult, HTMLStencilElement {
180
+ addEventListener<K extends keyof HTMLSearchcraftBaseSearchResultElementEventMap>(type: K, listener: (this: HTMLSearchcraftBaseSearchResultElement, ev: SearchcraftBaseSearchResultCustomEvent<HTMLSearchcraftBaseSearchResultElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
181
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
182
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
183
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
184
+ removeEventListener<K extends keyof HTMLSearchcraftBaseSearchResultElementEventMap>(type: K, listener: (this: HTMLSearchcraftBaseSearchResultElement, ev: SearchcraftBaseSearchResultCustomEvent<HTMLSearchcraftBaseSearchResultElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
185
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
186
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
187
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
163
188
  }
164
189
  var HTMLSearchcraftBaseSearchResultElement: {
165
190
  prototype: HTMLSearchcraftBaseSearchResultElement;
@@ -317,19 +342,30 @@ declare namespace LocalJSX {
317
342
  "rightToLeftOrientation"?: boolean;
318
343
  }
319
344
  interface SearchcraftBaseSearchResult {
320
- "buttonCallbackFn"?: () => void;
321
- "buttonLabel"?: string;
322
- "callbackFn"?: () => void;
323
- "imageAltText"?: string;
324
- "imageSrc"?: string;
325
- "interactiveResult"?: boolean;
326
- "keyDownCallbackFn"?: () => void;
327
- "resultBodyContent"?: string;
328
- "resultHeading"?: string;
329
- "resultSubheading"?: string;
330
- "theme"?: 'light' | 'dark';
345
+ "buttonText"?: string;
346
+ "customStyles"?: Record<string, string>;
347
+ "headingText"?: string;
348
+ "imageDescription"?: string;
349
+ "imageSource"?: string;
350
+ "isInteractive"?: boolean;
351
+ "onButtonCallback"?: (event: SearchcraftBaseSearchResultCustomEvent<any>) => void;
352
+ "onKeyDownCallback"?: (event: SearchcraftBaseSearchResultCustomEvent<any>) => void;
353
+ "onResultCallback"?: (event: SearchcraftBaseSearchResultCustomEvent<any>) => void;
354
+ "primaryContent"?: string;
355
+ "secondaryContent"?: string;
356
+ "subheadingText"?: string;
357
+ "tertiaryContent"?: string;
358
+ "themeMode"?: 'light' | 'dark';
331
359
  }
332
360
  interface SearchcraftBaseSearchResults {
361
+ /**
362
+ * Custom styles to apply to search results. Expected format: JSON string, e.g., '{"borderRadius": "10px", "padding": "16px"}'
363
+ */
364
+ "customStylesForResults"?: string | Record<string, string>;
365
+ /**
366
+ * Array of keys to dynamically extract properties from each document. Must be explicitly set by the parent component.
367
+ */
368
+ "searchKeys"?: string;
333
369
  }
334
370
  interface SearchcraftButton {
335
371
  "iconElement"?: Element;
@@ -8,5 +8,5 @@
8
8
  * to consume components of this package as outlined in the `README.md`.
9
9
  */
10
10
  export type * from './components';
11
- export { parseCustomStyles } from './utils/utils';
11
+ export { extractDynamicProperties, parseCustomStyles, parseSearchKeys, } from './utils/utils';
12
12
  export { useSearchcraftStore, useThemeStore } from './provider/store';
@@ -1,10 +1,10 @@
1
- import { type SearchError, type SearchResult, type CoreSDK as SearchcraftCore } from '@searchcraft/core';
1
+ import { type CoreSDK as SearchcraftCore, type SearchcraftResponse } from '@searchcraft/core';
2
2
  interface SearchcraftState {
3
3
  query: string;
4
4
  isRequesting: boolean;
5
- searchResults: SearchResult | SearchError | null;
5
+ searchResults: SearchcraftResponse | null;
6
6
  setQuery: (query: string) => void;
7
- setSearchResults: (results: SearchResult | SearchError | null) => void;
7
+ setSearchResults: (results: SearchcraftResponse | null) => void;
8
8
  setIsRequesting: (isRequesting: boolean) => void;
9
9
  search: () => Promise<void>;
10
10
  initialize: (searchcraft: SearchcraftCore, debug?: boolean) => void;
@@ -4,3 +4,5 @@
4
4
  * @returns {Record<string, string>} - Parsed styles as an object.
5
5
  */
6
6
  export declare function parseCustomStyles(styles: string | Record<string, string>): Record<string, string>;
7
+ export declare function parseSearchKeys(searchKeys: string): string[];
8
+ export declare function extractDynamicProperties(document: Record<string, string | number>, keys: string[]): Record<string, string | number>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@searchcraft/javascript-sdk",
3
3
  "private": false,
4
- "version": "0.1.1",
4
+ "version": "0.1.2",
5
5
  "description": "Searchcraft Javascript SDK",
6
6
  "author": "Searchcraft",
7
7
  "license": "Apache-2.0",