the-foxy-library 1.0.0

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 (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/components/index.d.ts +33 -0
  4. package/dist/components/iv-accordion.d.ts +11 -0
  5. package/dist/components/iv-banner.d.ts +11 -0
  6. package/dist/components/iv-button.d.ts +11 -0
  7. package/dist/components/iv-card.d.ts +11 -0
  8. package/dist/components/iv-carousel.d.ts +11 -0
  9. package/dist/components/iv-dynamic-products-carousel.d.ts +11 -0
  10. package/dist/components/iv-dynamic-products.d.ts +11 -0
  11. package/dist/components/iv-filters.d.ts +11 -0
  12. package/dist/components/iv-layout.d.ts +11 -0
  13. package/dist/components/iv-link.d.ts +11 -0
  14. package/dist/components/iv-modal.d.ts +11 -0
  15. package/dist/components/iv-predictive-search.d.ts +11 -0
  16. package/dist/components/iv-recently-viewed.d.ts +11 -0
  17. package/dist/components/iv-sidebar.d.ts +11 -0
  18. package/dist/components/iv-spinner.d.ts +11 -0
  19. package/dist/components/iv-suggest.d.ts +11 -0
  20. package/dist/components/iv-tabs.d.ts +11 -0
  21. package/dist/components/iv-toast-container.d.ts +11 -0
  22. package/dist/components/iv-toast.d.ts +11 -0
  23. package/dist/components/iv-wishlist-view.d.ts +11 -0
  24. package/dist/components/iv-wishlist.d.ts +11 -0
  25. package/dist/components/sw-in-grid-content.d.ts +11 -0
  26. package/dist/components/sw-size-guide.d.ts +11 -0
  27. package/dist/intravenous/factory-1QinX-o0.js +275 -0
  28. package/dist/intravenous/factory-1QinX-o0.js.map +1 -0
  29. package/dist/intravenous/factory-JClanx-E.js +596 -0
  30. package/dist/intravenous/factory-JClanx-E.js.map +1 -0
  31. package/dist/intravenous/factory-mrqy6XUM.js +36 -0
  32. package/dist/intravenous/factory-mrqy6XUM.js.map +1 -0
  33. package/dist/intravenous/index-Py50VI8u.js +4761 -0
  34. package/dist/intravenous/index-Py50VI8u.js.map +1 -0
  35. package/dist/intravenous/index.esm.js +17 -0
  36. package/dist/intravenous/index.esm.js.map +1 -0
  37. package/dist/intravenous/intravenous.esm.js +48 -0
  38. package/dist/intravenous/intravenous.esm.js.map +1 -0
  39. package/dist/intravenous/iv-accordion.entry.esm.js.map +1 -0
  40. package/dist/intravenous/iv-accordion.entry.js +35 -0
  41. package/dist/intravenous/iv-banner.entry.esm.js.map +1 -0
  42. package/dist/intravenous/iv-banner.entry.js +28 -0
  43. package/dist/intravenous/iv-button.entry.esm.js.map +1 -0
  44. package/dist/intravenous/iv-button.entry.js +40 -0
  45. package/dist/intravenous/iv-card.entry.esm.js.map +1 -0
  46. package/dist/intravenous/iv-card.entry.js +82 -0
  47. package/dist/intravenous/iv-carousel.entry.esm.js.map +1 -0
  48. package/dist/intravenous/iv-carousel.entry.js +16 -0
  49. package/dist/intravenous/iv-dynamic-products-carousel.entry.esm.js.map +1 -0
  50. package/dist/intravenous/iv-dynamic-products-carousel.entry.js +114 -0
  51. package/dist/intravenous/iv-dynamic-products.entry.esm.js.map +1 -0
  52. package/dist/intravenous/iv-dynamic-products.entry.js +97 -0
  53. package/dist/intravenous/iv-filters.entry.esm.js.map +1 -0
  54. package/dist/intravenous/iv-filters.entry.js +19 -0
  55. package/dist/intravenous/iv-layout.entry.esm.js.map +1 -0
  56. package/dist/intravenous/iv-layout.entry.js +60 -0
  57. package/dist/intravenous/iv-link.entry.esm.js.map +1 -0
  58. package/dist/intravenous/iv-link.entry.js +25 -0
  59. package/dist/intravenous/iv-modal.entry.esm.js.map +1 -0
  60. package/dist/intravenous/iv-modal.entry.js +19 -0
  61. package/dist/intravenous/iv-predictive-search.entry.esm.js.map +1 -0
  62. package/dist/intravenous/iv-predictive-search.entry.js +311 -0
  63. package/dist/intravenous/iv-recently-viewed.entry.esm.js.map +1 -0
  64. package/dist/intravenous/iv-recently-viewed.entry.js +101 -0
  65. package/dist/intravenous/iv-sidebar.entry.esm.js.map +1 -0
  66. package/dist/intravenous/iv-sidebar.entry.js +24 -0
  67. package/dist/intravenous/iv-spinner.entry.esm.js.map +1 -0
  68. package/dist/intravenous/iv-spinner.entry.js +19 -0
  69. package/dist/intravenous/iv-suggest.entry.esm.js.map +1 -0
  70. package/dist/intravenous/iv-suggest.entry.js +72 -0
  71. package/dist/intravenous/iv-tabs.entry.esm.js.map +1 -0
  72. package/dist/intravenous/iv-tabs.entry.js +22 -0
  73. package/dist/intravenous/iv-toast-container.entry.esm.js.map +1 -0
  74. package/dist/intravenous/iv-toast-container.entry.js +44 -0
  75. package/dist/intravenous/iv-toast.entry.esm.js.map +1 -0
  76. package/dist/intravenous/iv-toast.entry.js +23 -0
  77. package/dist/intravenous/iv-wishlist-view.entry.esm.js.map +1 -0
  78. package/dist/intravenous/iv-wishlist-view.entry.js +21 -0
  79. package/dist/intravenous/iv-wishlist.entry.esm.js.map +1 -0
  80. package/dist/intravenous/iv-wishlist.entry.js +73 -0
  81. package/dist/intravenous/loader.esm.js.map +1 -0
  82. package/dist/intravenous/sw-in-grid-content.entry.esm.js.map +1 -0
  83. package/dist/intravenous/sw-in-grid-content.entry.js +18 -0
  84. package/dist/intravenous/sw-size-guide.entry.esm.js.map +1 -0
  85. package/dist/intravenous/sw-size-guide.entry.js +111 -0
  86. package/dist/types/components/iv-accordion/iv-accordion.d.ts +12 -0
  87. package/dist/types/components/iv-banner/iv-banner.d.ts +7 -0
  88. package/dist/types/components/iv-button/iv-button.d.ts +12 -0
  89. package/dist/types/components/iv-card/iv-card.d.ts +15 -0
  90. package/dist/types/components/iv-carousel/iv-carousel.d.ts +3 -0
  91. package/dist/types/components/iv-dynamic-products/iv-dynamic-products.d.ts +26 -0
  92. package/dist/types/components/iv-dynamic-products-carousel/iv-dynamic-products-carousel.d.ts +29 -0
  93. package/dist/types/components/iv-filters/iv-filters.d.ts +3 -0
  94. package/dist/types/components/iv-layout/iv-layout.d.ts +12 -0
  95. package/dist/types/components/iv-link/iv-link.d.ts +9 -0
  96. package/dist/types/components/iv-modal/iv-modal.d.ts +3 -0
  97. package/dist/types/components/iv-predictive-search/iv-predictive-search.d.ts +44 -0
  98. package/dist/types/components/iv-recently-viewed/iv-recently-viewed.d.ts +17 -0
  99. package/dist/types/components/iv-sidebar/iv-sidebar.d.ts +5 -0
  100. package/dist/types/components/iv-spinner/iv-spinner.d.ts +4 -0
  101. package/dist/types/components/iv-suggest/iv-suggest.d.ts +21 -0
  102. package/dist/types/components/iv-tabs/iv-tabs.d.ts +7 -0
  103. package/dist/types/components/iv-toast/iv-toast.d.ts +7 -0
  104. package/dist/types/components/iv-toast-container/iv-toast-container.d.ts +8 -0
  105. package/dist/types/components/iv-wishlist/iv-wishlist.d.ts +16 -0
  106. package/dist/types/components/iv-wishlist-view/iv-wishlist-view.d.ts +3 -0
  107. package/dist/types/components/sw-in-grid-content/sw-in-grid-content.d.ts +3 -0
  108. package/dist/types/components/sw-size-guide/sw-size-guide.d.ts +14 -0
  109. package/dist/types/components.d.ts +943 -0
  110. package/dist/types/global/app.d.ts +1 -0
  111. package/dist/types/index.d.ts +11 -0
  112. package/dist/types/stencil-public-runtime.d.ts +1746 -0
  113. package/dist/types/utils/caching/factory.d.ts +72 -0
  114. package/dist/types/utils/config/factory.d.ts +2 -0
  115. package/dist/types/utils/error_handling/factory.d.ts +58 -0
  116. package/dist/types/utils/helpers/factory.d.ts +6 -0
  117. package/dist/types/utils/store/store.d.ts +21 -0
  118. package/dist/types/utils/storefront_api/factory.d.ts +22 -0
  119. package/dist/types/utils/utils.d.ts +1 -0
  120. package/loader/cdn.js +1 -0
  121. package/loader/index.cjs.js +1 -0
  122. package/loader/index.d.ts +24 -0
  123. package/loader/index.es2017.js +1 -0
  124. package/loader/index.js +2 -0
  125. package/package.json +54 -0
@@ -0,0 +1,97 @@
1
+ import { r as registerInstance, d as state, h } from './index-Py50VI8u.js';
2
+ import { f as fetchProducts } from './factory-1QinX-o0.js';
3
+ import { c as createErrorHandler, p as productCache } from './factory-JClanx-E.js';
4
+
5
+ const ivDynamicProductsCss = ".iv-dynamic-products{box-sizing:border-box;width:var(--iv-dynamic-products-width, 100%);max-width:var(--iv-dynamic-products-max-width, 100%);margin:var(--iv-dynamic-products-margin, 0);padding:var(--iv-dynamic-products-padding, 0);background:var(--iv-dynamic-products-bg, transparent);border:var(--iv-dynamic-products-border, none);border-radius:var(--iv-dynamic-products-radius, 0);box-shadow:var(--iv-dynamic-products-shadow, none);color:var(--iv-dynamic-products-color, inherit);--iv-layout-gap:var(--iv-dynamic-products-gap, 1.5rem)}.iv-dynamic-products-title{margin:var(--iv-dynamic-products-title-margin, 0 0 1rem 0);font-size:var(--iv-dynamic-products-title-font-size, clamp(1.125rem, 1vw + 1rem, 1.75rem));font-weight:var(--iv-dynamic-products-title-font-weight, 600);line-height:var(--iv-dynamic-products-title-line-height, 1.2);letter-spacing:var(--iv-dynamic-products-title-letter-spacing, normal)}.iv-dynamic-products-error,.iv-dynamic-products-empty{padding:var(--iv-dynamic-products-state-padding, 1rem);border:var(--iv-dynamic-products-state-border, none);background:var(--iv-dynamic-products-state-bg, transparent);color:var(--iv-dynamic-products-state-color, inherit);font-size:var(--iv-dynamic-products-state-font-size, 0.875rem);text-align:var(--iv-dynamic-products-state-text-align, center)}.iv-dynamic-products-products{width:100%;margin:var(--iv-dynamic-products-products-margin, 0);padding:var(--iv-dynamic-products-products-padding, 0)}.iv-layout--iv-dynamic-products-layout{--iv-layout-gap:var(--iv-dynamic-products-grid-gap, var(--iv-dynamic-products-gap, 1.5rem));align-items:var(--iv-dynamic-products-grid-align, stretch);justify-content:var(--iv-dynamic-products-grid-justify, flex-start)}.iv-dynamic-products .iv-card{margin:var(--iv-dynamic-products-card-margin, 0);--iv-card-padding:var(--iv-dynamic-products-card-padding, var(--iv-card-padding, 0))}@media (min-width: 40rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-md, var(--iv-dynamic-products-gap, 1.5rem))}}@media (min-width: 64rem){.iv-dynamic-products{--iv-dynamic-products-gap:var(--iv-dynamic-products-gap-lg, var(--iv-dynamic-products-gap, 1.5rem))}}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout{display:flex !important;overflow-x:auto;scrollbar-width:var(--iv-dynamic-products-scrollbar-width, thin);-webkit-overflow-scrolling:touch}.iv-dynamic-products--scroll-x .iv-layout--iv-dynamic-products-layout>*{flex:0 0 var(--iv-dynamic-products-scroll-item-width, 75%)}@media (prefers-reduced-motion: reduce){.iv-dynamic-products{scroll-behavior:auto}}";
6
+
7
+ const BLOCK = 'iv-dynamic-products';
8
+ const IvDynamicProducts = class {
9
+ constructor(hostRef) {
10
+ registerInstance(this, hostRef);
11
+ }
12
+ // @Prop() type: 'CREATED_AT' | 'BEST_SELLING' | 'PRICE' | 'TITLE' | 'RELEVANCE' = 'BEST_SELLING';
13
+ type = 'CREATED';
14
+ limit = 8;
15
+ reversed = false;
16
+ componenttitle;
17
+ titletag = 'h2';
18
+ collectionhandle = 'all';
19
+ carousel = false;
20
+ requestedfields;
21
+ calltoaction = false;
22
+ buttontext;
23
+ addtocarttext;
24
+ emptystring = 'No products found';
25
+ gridlayout; // If this and carousel all false, default to flex
26
+ cachettl; // override TTL (ms)
27
+ stale = true; // enable stale-while-revalidate
28
+ products = [];
29
+ errorMsg;
30
+ staleData = false; // indicates we are showing stale data while refreshing
31
+ errors = createErrorHandler({ component: 'iv-dynamic-products' });
32
+ handlePropChange() { this.loadProducts(true); }
33
+ async componentWillLoad() {
34
+ await this.loadProducts(false);
35
+ }
36
+ ;
37
+ buildParams() {
38
+ return {
39
+ handle: this.collectionhandle || 'all',
40
+ sort: this.type,
41
+ fields: this.requestedfields,
42
+ limit: this.limit,
43
+ currency: state.currencyCode,
44
+ reversed: this.reversed
45
+ };
46
+ }
47
+ ;
48
+ async loadProducts(fromWatch) {
49
+ const params = this.buildParams();
50
+ const ttl = this.cachettl || 1000 * 60 * 5;
51
+ state.loading = !fromWatch;
52
+ try {
53
+ const data = await productCache.getOrSetData(params, async () => {
54
+ const fresh = await fetchProducts(this.limit, this.collectionhandle, this.type, this.requestedfields, this.reversed);
55
+ return fresh;
56
+ }, {
57
+ ttl,
58
+ staleWhileRevalidate: this.stale,
59
+ transform: (fresh) => fresh
60
+ });
61
+ const metaCheck = productCache.getData(params);
62
+ this.staleData = metaCheck.isExpired && metaCheck.isStale;
63
+ this.products = data || [];
64
+ }
65
+ catch (err) {
66
+ this.errorMsg = 'Failed to load products';
67
+ this.errors.handle({
68
+ error: err,
69
+ scope: 'loadProducts',
70
+ userMessage: 'Unable to load products right now.',
71
+ devMessage: 'fetchProducts failed in iv-dynamic-products',
72
+ severity: 'error'
73
+ });
74
+ }
75
+ finally {
76
+ state.loading = false;
77
+ }
78
+ ;
79
+ }
80
+ ;
81
+ render() {
82
+ const TAG = this.titletag;
83
+ return (h("div", { key: '1edacce6b6c3fb45b024e3269f17e8f61c111079', class: BLOCK, "data-stale": this.staleData ? 'true' : 'false' }, this.componenttitle && h(TAG, { key: 'cec4801adf95d33d12656dc5232533db827304da', class: `${BLOCK}-title` }, this.componenttitle), state.loading ? (h("iv-spinner", null)) : this.errorMsg ? (h("div", { class: `${BLOCK}-error` }, this.errorMsg)) : this.products.length === 0 ? (h("div", { class: `${BLOCK}-empty` }, this.emptystring)) : (h("div", { class: `${BLOCK}-products` }, h("iv-layout", { classModifier: `${BLOCK}-layout`, gridTemplateAreas: this.gridlayout }, this.products.map(product => (h("iv-card", { cardtype: 'products', calltoaction: this.calltoaction, buttontext: this.buttontext, addtocarttext: this.addtocarttext, data: product, classmodifier: `${BLOCK}-card` })))), this.staleData && (h("div", { class: `${BLOCK}-stale-indicator`, "aria-live": "polite" }, "Refreshing\u2026"))))));
84
+ }
85
+ ;
86
+ static get watchers() { return {
87
+ "type": ["handlePropChange"],
88
+ "limit": ["handlePropChange"],
89
+ "collectionhandle": ["handlePropChange"],
90
+ "requestedfields": ["handlePropChange"]
91
+ }; }
92
+ };
93
+ ;
94
+ IvDynamicProducts.style = ivDynamicProductsCss;
95
+
96
+ export { IvDynamicProducts as iv_dynamic_products };
97
+ //# sourceMappingURL=iv-dynamic-products.entry.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iv-filters.entry.esm.js","sources":["src/components/iv-filters/iv-filters.scss?tag=iv-filters","src/components/iv-filters/iv-filters.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, h } from '@stencil/core';\n\nconst BLOCK = 'iv-filters';\n\n@Component({\n tag: 'iv-filters',\n styleUrl: 'iv-filters.scss',\n shadow: false\n})\n\nexport class IvFilters {\n\n render() {\n \n return (\n <div class={BLOCK}>\n\n </div>\n );\n\n };\n\n};"],"names":[],"mappings":";;AAAA,MAAM,YAAY,GAAG,sBAAsB;;ACE3C,MAAM,KAAK,GAAG,YAAY;MAQb,SAAS,GAAA,MAAA;;;;IAEpB,MAAM,GAAA;AAEJ,QAAA,QACE,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,KAAK,EAAA,CAEX;;;;AAKX;;;;;"}
@@ -0,0 +1,19 @@
1
+ import { r as registerInstance, h } from './index-Py50VI8u.js';
2
+
3
+ const ivFiltersCss = ":host{display:block}";
4
+
5
+ const BLOCK = 'iv-filters';
6
+ const IvFilters = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ }
10
+ render() {
11
+ return (h("div", { key: '38d025ce702f690b605f5f5251a6158b68adb085', class: BLOCK }));
12
+ }
13
+ ;
14
+ };
15
+ ;
16
+ IvFilters.style = ivFiltersCss;
17
+
18
+ export { IvFilters as iv_filters };
19
+ //# sourceMappingURL=iv-filters.entry.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iv-layout.entry.esm.js","sources":["src/components/iv-layout/iv-layout.scss?tag=iv-layout","src/components/iv-layout/iv-layout.tsx"],"sourcesContent":["// Base iv-layout styles.\n// Usage notes:\n// - Component sets display + gap inline (grid if gridTemplateAreas prop, else flex).\n// - Designers override --iv-layout-* vars for spacing / sizing without editing component code.\n// - In flex mode, children auto share space equally via flex:1 (override via --iv-layout-flex-child).\n\n.iv-layout {\n box-sizing: border-box;\n width: var(--iv-layout-width, 100%);\n max-width: var(--iv-layout-max-width, 100%);\n margin: var(--iv-layout-margin, 0);\n padding: var(--iv-layout-padding, 0);\n gap: var(--iv-layout-gap, 1rem); \n align-items: var(--iv-layout-align, stretch);\n justify-content: var(--iv-layout-justify, flex-start);\n flex-wrap: var(--iv-layout-flex-wrap, wrap);\n grid-auto-rows: var(--iv-layout-grid-auto-rows, auto);\n grid-auto-columns: var(--iv-layout-grid-auto-columns, auto);\n grid-auto-flow: var(--iv-layout-grid-auto-flow, row);\n grid-template-columns: var(--iv-layout-grid-template-columns, none);\n grid-template-rows: var(--iv-layout-grid-template-rows, none);\n background: var(--iv-layout-bg, transparent);\n border: var(--iv-layout-border, none);\n border-radius: var(--iv-layout-radius, 0);\n box-shadow: var(--iv-layout-shadow, none);\n}\n\n.iv-layout > * {\n flex: var(--iv-layout-flex-child, 1 1 0);\n min-width: var(--iv-layout-child-min-width, 0);\n max-width: var(--iv-layout-child-max-width, 100%);\n box-sizing: border-box;\n}\n\n.iv-layout--tight { --iv-layout-gap: var(--iv-layout-tight-gap, 0.5rem); }\n\n.iv-layout--relaxed { --iv-layout-gap: var(--iv-layout-relaxed-gap, 2rem); }\n\n.iv-layout--scroll-x {\n display: flex !important;\n overflow-x: auto;\n scrollbar-width: var(--iv-layout-scrollbar-width, thin);\n -webkit-overflow-scrolling: touch;\n}\n\n.iv-layout--scroll-x > * { flex: 0 0 var(--iv-layout-scroll-item-width, 80%); }\n\n.iv-layout--debug > * { outline: 1px dashed var(--iv-layout-debug-color, magenta); }\n\n@media (min-width: 40rem) {\n .iv-layout { --iv-layout-gap: var(--iv-layout-gap-md, var(--iv-layout-gap, 1rem)); }\n}\n\n@media (min-width: 64rem) {\n .iv-layout { --iv-layout-gap: var(--iv-layout-gap-lg, var(--iv-layout-gap, 1rem)); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .iv-layout { scroll-behavior: auto; }\n}","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'iv-layout',\n styleUrl: 'iv-layout.scss',\n shadow: false,\n})\n\nexport class IvLayout {\n\n @Prop() sectionId?: string;\n @Prop() gridTemplateAreas?: string;\n @Prop() gap: string = '2rem';\n @Prop() verticalAlign: string = 'center';\n @Prop() horizontalAlign: string = 'center';\n @Prop() wrapperTag: string = 'div';\n @Prop() classModifier?: string;\n\n private handleNamedSlots() {\n const slots: Array<string> = [];\n if(this.gridTemplateAreas) {\n const areaNames = this.gridTemplateAreas.replace(/\"/g, '') .split(/\\s+/).filter(Boolean);\n areaNames.forEach(slot => {\n if(!slots.includes(slot)) slots.push(slot);\n });\n };\n return slots;\n };\n\n private generateGridStyes() {\n let gridStyles: { [key: string]: string } = {};\n if(this.gridTemplateAreas) {\n gridStyles = {\n display: 'grid',\n gridTemplateAreas: this.gridTemplateAreas,\n gap: this.gap \n }\n } else {\n gridStyles = {\n display: 'flex',\n gap: this.gap,\n alignItems: this.verticalAlign,\n justifyContent: this.horizontalAlign\n };\n };\n return gridStyles;\n };\n\n render() {\n\n const Tag = this.wrapperTag as any;\n \n return (\n <Tag \n id={this.sectionId ? this.sectionId : undefined} \n class={`iv-layout${this.classModifier ? ` iv-layout--${this.classModifier}` : ''}`}\n style={this.generateGridStyes()}>\n {this.gridTemplateAreas ? (\n this.handleNamedSlots().map(slot => (\n <div style={{ gridArea: slot }}>\n <slot name={slot} />\n </div> \n ))\n ) : (\n <slot />\n )}\n </Tag>\n );\n\n };\n\n};"],"names":[],"mappings":";;AAAA,MAAM,WAAW,GAAG,sqDAAsqD;;MCQ7qD,QAAQ,GAAA,MAAA;;;;AAEX,IAAA,SAAS;AACT,IAAA,iBAAiB;IACjB,GAAG,GAAW,MAAM;IACpB,aAAa,GAAW,QAAQ;IAChC,eAAe,GAAW,QAAQ;IAClC,UAAU,GAAW,KAAK;AAC1B,IAAA,aAAa;IAEb,gBAAgB,GAAA;QACtB,MAAM,KAAK,GAAkB,EAAE;AAC/B,QAAA,IAAG,IAAI,CAAC,iBAAiB,EAAE;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACxF,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAG;AACvB,gBAAA,IAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5C,aAAC,CAAC;;QACH;AACD,QAAA,OAAO,KAAK;;;IAGN,iBAAiB,GAAA;QACvB,IAAI,UAAU,GAA8B,EAAE;AAC9C,QAAA,IAAG,IAAI,CAAC,iBAAiB,EAAE;AACzB,YAAA,UAAU,GAAG;AACX,gBAAA,OAAO,EAAE,MAAM;gBACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,GAAG,EAAE,IAAI,CAAC;aACX;;aACI;AACL,YAAA,UAAU,GAAG;AACX,gBAAA,OAAO,EAAE,MAAM;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,aAAa;gBAC9B,cAAc,EAAE,IAAI,CAAC;aACtB;;QACF;AACD,QAAA,OAAO,UAAU;;;IAGnB,MAAM,GAAA;AAEJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAiB;QAElC,QACE,CAAA,CAAC,GAAG,EAAA,EAAA,GAAA,EAAA,0CAAA,EACF,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,SAAS,EAC/C,KAAK,EAAE,CAAY,SAAA,EAAA,IAAI,CAAC,aAAa,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,aAAa,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EAClF,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAA,EAC9B,IAAI,CAAC,iBAAiB,IACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,KAC9B,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAA,EAC5B,CAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,IAAI,EAAI,CAAA,CAChB,CACP,CAAC,KAEF,CAAA,CAAA,MAAA,EAAA,IAAA,CAAQ,CACT,CACG;;;;AAKX;;;;;"}
@@ -0,0 +1,60 @@
1
+ import { r as registerInstance, h } from './index-Py50VI8u.js';
2
+
3
+ const ivLayoutCss = ".iv-layout{box-sizing:border-box;width:var(--iv-layout-width, 100%);max-width:var(--iv-layout-max-width, 100%);margin:var(--iv-layout-margin, 0);padding:var(--iv-layout-padding, 0);gap:var(--iv-layout-gap, 1rem);align-items:var(--iv-layout-align, stretch);justify-content:var(--iv-layout-justify, flex-start);flex-wrap:var(--iv-layout-flex-wrap, wrap);grid-auto-rows:var(--iv-layout-grid-auto-rows, auto);grid-auto-columns:var(--iv-layout-grid-auto-columns, auto);grid-auto-flow:var(--iv-layout-grid-auto-flow, row);grid-template-columns:var(--iv-layout-grid-template-columns, none);grid-template-rows:var(--iv-layout-grid-template-rows, none);background:var(--iv-layout-bg, transparent);border:var(--iv-layout-border, none);border-radius:var(--iv-layout-radius, 0);box-shadow:var(--iv-layout-shadow, none)}.iv-layout>*{flex:var(--iv-layout-flex-child, 1 1 0);min-width:var(--iv-layout-child-min-width, 0);max-width:var(--iv-layout-child-max-width, 100%);box-sizing:border-box}.iv-layout--tight{--iv-layout-gap:var(--iv-layout-tight-gap, 0.5rem)}.iv-layout--relaxed{--iv-layout-gap:var(--iv-layout-relaxed-gap, 2rem)}.iv-layout--scroll-x{display:flex !important;overflow-x:auto;scrollbar-width:var(--iv-layout-scrollbar-width, thin);-webkit-overflow-scrolling:touch}.iv-layout--scroll-x>*{flex:0 0 var(--iv-layout-scroll-item-width, 80%)}.iv-layout--debug>*{outline:1px dashed var(--iv-layout-debug-color, magenta)}@media (min-width: 40rem){.iv-layout{--iv-layout-gap:var(--iv-layout-gap-md, var(--iv-layout-gap, 1rem))}}@media (min-width: 64rem){.iv-layout{--iv-layout-gap:var(--iv-layout-gap-lg, var(--iv-layout-gap, 1rem))}}@media (prefers-reduced-motion: reduce){.iv-layout{scroll-behavior:auto}}";
4
+
5
+ const IvLayout = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ }
9
+ sectionId;
10
+ gridTemplateAreas;
11
+ gap = '2rem';
12
+ verticalAlign = 'center';
13
+ horizontalAlign = 'center';
14
+ wrapperTag = 'div';
15
+ classModifier;
16
+ handleNamedSlots() {
17
+ const slots = [];
18
+ if (this.gridTemplateAreas) {
19
+ const areaNames = this.gridTemplateAreas.replace(/"/g, '').split(/\s+/).filter(Boolean);
20
+ areaNames.forEach(slot => {
21
+ if (!slots.includes(slot))
22
+ slots.push(slot);
23
+ });
24
+ }
25
+ ;
26
+ return slots;
27
+ }
28
+ ;
29
+ generateGridStyes() {
30
+ let gridStyles = {};
31
+ if (this.gridTemplateAreas) {
32
+ gridStyles = {
33
+ display: 'grid',
34
+ gridTemplateAreas: this.gridTemplateAreas,
35
+ gap: this.gap
36
+ };
37
+ }
38
+ else {
39
+ gridStyles = {
40
+ display: 'flex',
41
+ gap: this.gap,
42
+ alignItems: this.verticalAlign,
43
+ justifyContent: this.horizontalAlign
44
+ };
45
+ }
46
+ ;
47
+ return gridStyles;
48
+ }
49
+ ;
50
+ render() {
51
+ const Tag = this.wrapperTag;
52
+ return (h(Tag, { key: '19f08166a24dd8d93ba5e63f0da2f3da56f83f47', id: this.sectionId ? this.sectionId : undefined, class: `iv-layout${this.classModifier ? ` iv-layout--${this.classModifier}` : ''}`, style: this.generateGridStyes() }, this.gridTemplateAreas ? (this.handleNamedSlots().map(slot => (h("div", { style: { gridArea: slot } }, h("slot", { name: slot }))))) : (h("slot", null))));
53
+ }
54
+ ;
55
+ };
56
+ ;
57
+ IvLayout.style = ivLayoutCss;
58
+
59
+ export { IvLayout as iv_layout };
60
+ //# sourceMappingURL=iv-layout.entry.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iv-link.entry.esm.js","sources":["src/components/iv-link/iv-link.scss?tag=iv-link","src/components/iv-link/iv-link.tsx"],"sourcesContent":["","import { Component, h, Prop } from '@stencil/core';\n\nconst BLOCK = 'iv-link';\n\n@Component({\n tag: 'iv-link',\n styleUrl: 'iv-link.scss',\n shadow: false,\n})\n\nexport class IvLink {\n\n @Prop() classmodifier?: string;\n @Prop() linktype: 'inline' | 'wrapper' | 'nav' | 'button' = 'inline'\n @Prop() linkhref?: string;\n @Prop() linktarget: '_self' | '_blank' | '_parent' | '_top' = '_self';\n @Prop() linkrel: string = 'noopener noreferrer';\n @Prop() linkariaLabel?: string;\n\n render() {\n \n return (\n <a\n class={`${BLOCK} ${this.classmodifier || undefined} ${this.linktype}`}\n href={this.linkhref}\n target={this.linktarget}\n rel={this.linkrel}\n aria-label={this.linkariaLabel}>\n <slot></slot>\n </a>\n );\n\n };\n\n};"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG,EAAE;;ACEpB,MAAM,KAAK,GAAG,SAAS;MAQV,MAAM,GAAA,MAAA;;;;AAET,IAAA,aAAa;IACb,QAAQ,GAA4C,QAAQ;AAC5D,IAAA,QAAQ;IACR,UAAU,GAA4C,OAAO;IAC7D,OAAO,GAAW,qBAAqB;AACvC,IAAA,aAAa;IAErB,MAAM,GAAA;AAEJ,QAAA,QACE,CACE,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,IAAI,CAAC,aAAa,IAAI,SAAS,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAA,EACrE,IAAI,EAAE,IAAI,CAAC,QAAQ,EACnB,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,GAAG,EAAE,IAAI,CAAC,OAAO,EACL,YAAA,EAAA,IAAI,CAAC,aAAa,EAAA,EAC9B,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACX;;;;AAKT;;;;;"}
@@ -0,0 +1,25 @@
1
+ import { r as registerInstance, h } from './index-Py50VI8u.js';
2
+
3
+ const ivLinkCss = "";
4
+
5
+ const BLOCK = 'iv-link';
6
+ const IvLink = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ }
10
+ classmodifier;
11
+ linktype = 'inline';
12
+ linkhref;
13
+ linktarget = '_self';
14
+ linkrel = 'noopener noreferrer';
15
+ linkariaLabel;
16
+ render() {
17
+ return (h("a", { key: '304231cef224b1ab11cb382e87cd25971d535a4f', class: `${BLOCK} ${this.classmodifier || undefined} ${this.linktype}`, href: this.linkhref, target: this.linktarget, rel: this.linkrel, "aria-label": this.linkariaLabel }, h("slot", { key: 'be4ef6eca3f393799e07a88d64edc66fbdf79b1a' })));
18
+ }
19
+ ;
20
+ };
21
+ ;
22
+ IvLink.style = ivLinkCss;
23
+
24
+ export { IvLink as iv_link };
25
+ //# sourceMappingURL=iv-link.entry.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iv-modal.entry.esm.js","sources":["src/components/iv-modal/iv-modal.scss?tag=iv-modal&encapsulation=shadow","src/components/iv-modal/iv-modal.tsx"],"sourcesContent":[".iv-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0,0,0,0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n}\n\n.iv-modal {\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 24px rgba(0,0,0,0.18);\n padding: 2rem;\n min-width: 320px;\n max-width: 90vw;\n max-height: 90vh;\n overflow-y: auto;\n position: relative;\n}\n\n.iv-modal-close {\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: none;\n border: none;\n font-size: 2rem;\n cursor: pointer;\n color: #333;\n}\n\n.iv-modal-wishlist {\n margin-top: 1rem;\n}\n\n.iv-modal-wishlist-item {\n border-bottom: 1px solid #eee;\n padding: 1rem 0;\n display: flex;\n gap: 1rem;\n align-items: center;\n}\n\n.iv-modal-wishlist-field {\n font-size: 1rem;\n color: #222;\n}\n\n.iv-modal-wishlist-empty {\n text-align: center;\n color: #888;\n padding: 2rem 0;\n}\n","import { Component, Host, h } from '@stencil/core';\nimport { state, toggleModal } from '../../utils/store/store';\n\nconst BLOCK = 'iv-modal';\n\n@Component({\n tag: 'iv-modal',\n styleUrl: 'iv-modal.scss',\n shadow: true\n})\n\nexport class IvModal {\n\n render() {\n\n return (\n <Host>\n {state.modalIsOpen && (\n <div class={`${BLOCK}-overlay`} role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"iv-modal-title\" aria-describedby={`${BLOCK}-content`} onClick={() => toggleModal()}>\n <div class={BLOCK} onClick={e => e.stopPropagation()}>\n <iv-button class={`${BLOCK}-close`} aria-label=\"Close modal\" onClick={() => toggleModal()}>&times;</iv-button>\n {state.modalContent === 'wishlist' ? (\n <iv-wishlist-view />\n ) : (\n state.modalContent && <slot name={state.modalContent}></slot>\n )}\n </div>\n </div>\n )}\n </Host>\n );\n\n };\n\n};"],"names":[],"mappings":";;AAAA,MAAM,UAAU,GAAG,kuBAAkuB;;ACGrvB,MAAM,KAAK,GAAG,UAAU;MAQX,OAAO,GAAA,MAAA;;;;IAElB,MAAM,GAAA;AAEJ,QAAA,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACF,KAAK,CAAC,WAAW,KAChB,4DAAK,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU,EAAE,IAAI,EAAC,QAAQ,EAAY,YAAA,EAAA,MAAM,EAAiB,iBAAA,EAAA,gBAAgB,sBAAmB,GAAG,KAAK,CAAA,QAAA,CAAU,EAAE,OAAO,EAAE,MAAM,WAAW,EAAE,EAAA,EACjK,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAA,EAClD,CAAA,CAAA,WAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAW,KAAK,EAAE,CAAA,EAAG,KAAK,CAAQ,MAAA,CAAA,EAAa,YAAA,EAAA,aAAa,EAAC,OAAO,EAAE,MAAM,WAAW,EAAE,EAAqB,EAAA,QAAA,CAAA,EAC7G,KAAK,CAAC,YAAY,KAAK,UAAU,IAChC,CAAoB,CAAA,kBAAA,EAAA,IAAA,CAAA,KAEpB,KAAK,CAAC,YAAY,IAAI,CAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,KAAK,CAAC,YAAY,EAAS,CAAA,CAC9D,CACG,CACF,CACP,CACI;;;;AAKZ;;;;;"}
@@ -0,0 +1,19 @@
1
+ import { r as registerInstance, h, a as Host, d as state, t as toggleModal } from './index-Py50VI8u.js';
2
+
3
+ const ivModalCss = ".iv-modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0, 0, 0, 0.5);display:flex;align-items:center;justify-content:center;z-index:9999}.iv-modal{background:#fff;border-radius:8px;box-shadow:0 4px 24px rgba(0, 0, 0, 0.18);padding:2rem;min-width:320px;max-width:90vw;max-height:90vh;overflow-y:auto;position:relative}.iv-modal-close{position:absolute;top:1rem;right:1rem;background:none;border:none;font-size:2rem;cursor:pointer;color:#333}.iv-modal-wishlist{margin-top:1rem}.iv-modal-wishlist-item{border-bottom:1px solid #eee;padding:1rem 0;display:flex;gap:1rem;align-items:center}.iv-modal-wishlist-field{font-size:1rem;color:#222}.iv-modal-wishlist-empty{text-align:center;color:#888;padding:2rem 0}";
4
+
5
+ const BLOCK = 'iv-modal';
6
+ const IvModal = class {
7
+ constructor(hostRef) {
8
+ registerInstance(this, hostRef);
9
+ }
10
+ render() {
11
+ return (h(Host, { key: '72e951677e51567b2ea8f5dc96c6a841bad26b6c' }, state.modalIsOpen && (h("div", { key: '751d28eae1e2da0472d925b909c87e4f40f513fb', class: `${BLOCK}-overlay`, role: "dialog", "aria-modal": "true", "aria-labelledby": "iv-modal-title", "aria-describedby": `${BLOCK}-content`, onClick: () => toggleModal() }, h("div", { key: '596d2c16272a128144383d35b5902e374048e881', class: BLOCK, onClick: e => e.stopPropagation() }, h("iv-button", { key: 'cd010dfa69e121e941e26f4c5d47aa0e9c298b70', class: `${BLOCK}-close`, "aria-label": "Close modal", onClick: () => toggleModal() }, "\u00D7"), state.modalContent === 'wishlist' ? (h("iv-wishlist-view", null)) : (state.modalContent && h("slot", { name: state.modalContent })))))));
12
+ }
13
+ ;
14
+ };
15
+ ;
16
+ IvModal.style = ivModalCss;
17
+
18
+ export { IvModal as iv_modal };
19
+ //# sourceMappingURL=iv-modal.entry.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iv-predictive-search.entry.esm.js","sources":["src/components/iv-predictive-search/iv-predictive-search.scss?tag=iv-predictive-search","src/components/iv-predictive-search/iv-predictive-search.tsx"],"sourcesContent":["// Predictive Search Base Styles\n// Neutral, token-driven; designers override --iv-predictive-* vars upstream.\n\n.iv-predictive-search {\n box-sizing: border-box;\n width: var(--iv-predictive-width, 100%);\n max-width: var(--iv-predictive-max-width, 100%);\n margin: var(--iv-predictive-margin, 0);\n padding: var(--iv-predictive-padding, 0);\n position: relative;\n background: var(--iv-predictive-background, transparent);\n border: var(--iv-predictive-border, none);\n border-radius: var(--iv-predictive-border-radius, 0);\n box-shadow: var(--iv-predictive-box-shadow, none);\n font-family: var(--iv-predictive-font-family, inherit);\n font-size: var(--iv-predictive-font-size, 1rem);\n color: var(--iv-predictive-text-color, inherit);\n transition: var(--iv-predictive-transition, box-shadow .2s ease, border-color .2s ease);\n}\n\n.iv-predictive-search-wrapper {\n box-sizing: border-box;\n padding: var(--iv-predictive-wrapper-padding, 0);\n display: var(--iv-predictive-wrapper-display, block);\n gap: var(--iv-predictive-wrapper-gap, .5rem);\n}\n\n.iv-predictive-search-wrapper.label-top .iv-predictive-search-label { display: block; }\n\n.iv-predictive-search-wrapper.label-inline {\n display: flex;\n align-items: center;\n gap: var(--iv-predictive-inline-gap, .5rem);\n}\n\n.iv-predictive-search-label {\n margin: var(--iv-predictive-label-margin, 0 0 .25rem 0);\n font-size: var(--iv-predictive-label-font-size, 1rem);\n font-weight: var(--iv-predictive-label-font-weight, 500);\n color: var(--iv-predictive-label-color, inherit);\n line-height: var(--iv-predictive-label-line-height, 1.2);\n}\n\n.iv-predictive-search-input {\n box-sizing: border-box;\n width: 100%;\n background: var(--iv-predictive-input-background, transparent);\n color: var(--iv-predictive-input-color, inherit);\n border: var(--iv-predictive-input-border, 1px solid currentColor);\n border-radius: var(--iv-predictive-input-border-radius, 0);\n padding: var(--iv-predictive-input-padding, .5rem .75rem);\n font-size: var(--iv-predictive-input-font-size, inherit);\n line-height: var(--iv-predictive-input-line-height, 1.2);\n outline: none;\n transition: var(--iv-predictive-input-transition, border-color .2s ease, box-shadow .2s ease);\n}\n\n.iv-predictive-search-input:focus {\n border: var(--iv-predictive-input-focus-border, var(--iv-predictive-input-border, 1px solid currentColor));\n box-shadow: var(--iv-predictive-input-focus-shadow, 0 0 0 2px rgba(0,0,0,.15));\n}\n\n.iv-predictive-search-results {\n position: var(--iv-predictive-results-position, absolute);\n top: var(--iv-predictive-results-top, 100%);\n left: var(--iv-predictive-results-left, 0);\n right: var(--iv-predictive-results-right, 0);\n z-index: var(--iv-predictive-results-z-index, 10);\n margin: var(--iv-predictive-results-margin, .5rem 0 0 0);\n padding: var(--iv-predictive-results-padding, .5rem);\n background: var(--iv-predictive-results-background, var(--iv-predictive-background, transparent));\n border: var(--iv-predictive-results-border, var(--iv-predictive-border, none));\n border-radius: var(--iv-predictive-results-border-radius, var(--iv-predictive-border-radius, 0));\n box-shadow: var(--iv-predictive-results-box-shadow, var(--iv-predictive-box-shadow, none));\n box-sizing: border-box;\n}\n\n.iv-predictive-search-prediction-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--iv-predictive-list-gap, .5rem);\n}\n\n.iv-predictive-search-prediction-item {\n background: var(--iv-predictive-item-background, transparent);\n border-radius: var(--iv-predictive-item-border-radius, 0);\n transition: var(--iv-predictive-item-transition, background .2s ease, color .2s ease);\n}\n\n.iv-predictive-search-prediction-item:hover {\n background: var(--iv-predictive-item-hover-background, var(--iv-predictive-item-background, transparent));\n}\n\n.iv-predictive-search-prediction-link {\n display: flex;\n align-items: center;\n text-decoration: none;\n color: var(--iv-predictive-link-color, inherit);\n padding: var(--iv-predictive-link-padding, .25rem .5rem);\n border-radius: var(--iv-predictive-link-border-radius, 0);\n gap: var(--iv-predictive-link-gap, .5rem);\n background: var(--iv-predictive-link-background, transparent);\n transition: var(--iv-predictive-link-transition, background .2s ease, color .2s ease);\n}\n\n.iv-predictive-search-prediction-link:hover {\n color: var(--iv-predictive-link-hover-color, var(--iv-predictive-link-color, inherit));\n background: var(--iv-predictive-link-hover-background, var(--iv-predictive-link-background, transparent));\n}\n\n.iv-predictive-search-prediction-link .prediction-image {\n width: var(--iv-predictive-image-width, 48px);\n height: var(--iv-predictive-image-height, 48px);\n object-fit: var(--iv-predictive-image-object-fit, cover);\n border-radius: var(--iv-predictive-image-border-radius, 0);\n background: var(--iv-predictive-image-background, transparent);\n border: var(--iv-predictive-image-border, none);\n flex: 0 0 auto;\n}\n\n.iv-predictive-search-prediction-link .prediction-part {\n font-size: var(--iv-predictive-part-font-size, 1rem);\n color: var(--iv-predictive-part-color, inherit);\n margin-right: var(--iv-predictive-part-margin-right, 0);\n}\n\n.iv-predictive-search-no-results {\n padding: var(--iv-predictive-no-results-padding, .5rem);\n font-size: var(--iv-predictive-no-results-font-size, .875rem);\n color: var(--iv-predictive-no-results-color, inherit);\n text-align: var(--iv-predictive-no-results-text-align, center);\n opacity: var(--iv-predictive-no-results-opacity, .8);\n}\n\n.iv-predictive-search-see-all {\n margin-top: var(--iv-predictive-see-all-margin-top, .75rem);\n text-align: var(--iv-predictive-see-all-text-align, right);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .iv-predictive-search,\n .iv-predictive-search-input,\n .iv-predictive-search-prediction-item,\n .iv-predictive-search-prediction-link { transition: none; }\n}","import { Component, h, Prop, State, Event } from '@stencil/core';\nimport { state } from '../../utils/store/store';\nimport { formatMoney, getCurrencySymbol } from '../../utils/helpers/factory';\n\nconst ALLOWED_FIELDS = [\n 'featured_image', 'image', 'title', 'price', 'price_formatted', 'currency', 'description', 'vendor', 'url',\n 'id', 'handle', 'author', 'published_at', 'product_type', 'type', 'tags'\n];\n\nconst ALLOWED_RESOURCES = ['page', 'collection', 'product', 'article'];\n\nconst FIELD_ALIASES: Record<string, string> = {\n type: 'product_type',\n img: 'image'\n};\n\nconst BLOCK = 'iv-predictive-search';\n\n@Component({\n tag: 'iv-predictive-search',\n styleUrl: 'iv-predictive-search.scss',\n shadow: false,\n})\n\nexport class IvPredictiveSearch {\n\n @Prop() searchlabel?: string;\n @Prop() labelposition?: 'inline' | 'top' = 'top'; \n @Prop() action?: string;\n @Prop() method: 'get' | 'post' = 'get';\n @Prop() placeholder?: string;\n @Prop() minchars: number = 3;\n @Prop() debounce: number = 300; \n @Prop() resultslimit: number = 5;\n @Prop() showspinner?: boolean;\n @Prop() noresultstext: string = 'No results found';\n @Prop() requestedfields: string = 'title';\n @Prop() requestedresources: string = 'product,article,page,collection';\n @Prop() showallbuttontext?: string;\n @Prop() querybuttontext?: string;\n @Prop() clearbutton?: string;\n @Prop() expandable: boolean = false;\n @Prop() tablayout?: string;\n @Prop() gridlayout?: string;\n \n @State() searchTerm: string;\n @State() searchReturnData: any[] = [];\n @State() noResults: boolean = false;\n\n @Event() searchTermsChanged: any;\n\n // Internals\n private debounceTimer: any;\n private abortController?: AbortController;\n private cache = new Map<string, any>(); \n\n // Helpers\n private normalizeAction(a?: string) {\n return (a && a.trim() ? a : '/search').replace(/\\/+$/, '');\n };\n\n private parseRequestedFields(): string[] {\n const raw = (this.requestedfields || '')\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n .map(f => FIELD_ALIASES[f] || f);\n const fields = Array.from(new Set(raw.filter(f => ALLOWED_FIELDS.includes(f))));\n if(!fields.includes('resource')) fields.push('resource');\n return fields;\n };\n\n private normalizeImageUrl(src: any): string | undefined {\n const s = typeof src === 'string' ? src : (src?.url || src?.src || undefined);\n if(!s) return undefined;\n return s.startsWith('//') ? `https:${s}` : s;\n };\n\n // Getters\n private get hasRenderableResults(): boolean {\n return !!this.searchTerm && this.searchTerm.length >= this.minchars && this.searchReturnData.length > 0;\n };\n\n private get resultsListId(): string {\n return `${BLOCK}-results`;\n };\n\n private get tabLabels(): string[] {\n const resources = Array.from(new Set(this.searchReturnData.map(item => item.resource)));\n return resources;\n };\n\n private get useGridLayout(): boolean {\n return !!this.gridlayout;\n };\n\n private get gridTemplateAreas(): string {\n return this.gridlayout\n ? this.gridlayout.split(',').map(row => `\"${row.trim()}\"`).join(' ')\n : '';\n };\n\n private get gridAreaNames(): string[] {\n return Array.from(new Set(this.searchReturnData.map(item => item.resource)));\n };\n\n // Methods\n private confirmRequestedResources(): string {\n const resources = this.requestedresources\n .split(',')\n .map(r => r.trim())\n .filter(Boolean)\n .filter(r => ALLOWED_RESOURCES.includes(r));\n if(resources.length === 0) {\n console.warn('No valid resources specified, defaulting to \"product,article,page,collection\"');\n return 'product,article,page,collection';\n };\n return resources.join(',');\n };\n\n private async fetchPredictive(term: string) {\n const trimmed = term.trim();\n if(!trimmed || trimmed.length < this.minchars) {\n this.searchReturnData = [];\n this.noResults = false;\n return;\n };\n if(this.cache.has(trimmed)) {\n this.searchReturnData = this.cache.get(trimmed);\n this.noResults = (this.searchReturnData?.length ?? 0) === 0;\n return;\n };\n if(this.abortController) this.abortController.abort();\n this.abortController = new AbortController();\n const base = this.normalizeAction(this.action);\n const params = new URLSearchParams();\n params.set('q', trimmed);\n params.set('resources[type]', this.confirmRequestedResources()); \n params.set('resources[limit]', String(this.resultslimit));\n const url = `${base}/suggest.json?${params.toString()}`;\n state.loading = true;\n try {\n const res = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'Cache-Control': 'no-store',\n },\n cache: 'no-store',\n signal: this.abortController.signal,\n });\n if(!res.ok) throw new Error(`${res.status}: ${res.statusText}`);\n const json = await res.json();\n const normalized = this.normalizeShopifyResponse(json);\n this.searchReturnData = normalized;\n this.noResults = normalized.length === 0;\n this.cache.set(trimmed, normalized);\n } catch(err) {\n if((err as any)?.name !== 'AbortError') {\n console.error('Predictive search error:', err);\n this.searchReturnData = [];\n this.noResults = false;\n };\n } finally {\n state.loading = false;\n this.searchTermsChanged.emit(trimmed);\n };\n };\n\n private normalizeShopifyResponse(payload: any): any[] {\n const out: any[] = [];\n const buckets =\n payload?.resources?.results ??\n payload?.resources ??\n {};\n const mapType = (key: string) =>\n key === 'products' ? 'product' :\n key === 'collections' ? 'collection' :\n key === 'articles' ? 'article' :\n key === 'pages' ? 'page' : key;\n const pushItems = (items: any[], typeKey: string) => {\n const resource = mapType(typeKey);\n items.forEach(item => out.push(this.pickFieldsByResource(item, resource)));\n };\n ['products', 'collections', 'articles', 'pages'].forEach(typeKey => {\n const list = buckets?.[typeKey] || [];\n if(Array.isArray(list)) pushItems(list, typeKey);\n });\n return out;\n };\n\n private pickFieldsByResource(item: any, resource: string) {\n const url = item?.url || item?.online_store_url || item?.path || '';\n const handle = item?.handle || '';\n const id = item?.id ?? item?.legacyResourceId ?? item?.legacy_resource_id ?? undefined;\n const title = item?.title || item?.name || item?.page_title || '';\n const description =\n item?.body ||\n item?.body_html ||\n item?.excerpt ||\n item?.description ||\n '';\n const vendor = item?.vendor || item?.author || '';\n const author = item?.author || '';\n const published_at = item?.published_at || item?.created_at || '';\n const product_type = item?.product_type || item?.type || '';\n const image =\n this.normalizeImageUrl(item?.featured_image?.url ?? item?.featured_image) ||\n this.normalizeImageUrl(item?.image?.url ?? item?.image?.src ?? item?.image) ||\n this.normalizeImageUrl(Array.isArray(item?.images) ? item.images[0] : undefined);\n const image_alt =\n (typeof item?.featured_image === 'object' && (item?.featured_image?.alt || item?.featured_image?.altText)) ||\n (typeof item?.image === 'object' && (item?.image?.alt || item?.image?.altText)) ||\n (Array.isArray(item?.images) && typeof item.images[0] === 'object' && (item.images[0]?.alt || item.images[0]?.altText)) ||\n title || '';\n const price =\n item?.price_min?.toString?.() ||\n item?.price?.toString?.() ||\n (Array.isArray(item?.variants) ? item.variants[0]?.price?.toString?.() : undefined);\n const price_formatted = price ? formatMoney(Number(price), state.currencyCode) : undefined;\n const normalized: Record<string, any> = {\n resource, url, id, handle, title, image, featured_image: image, image_alt, price, description,\n vendor, author, published_at, product_type,\n tags: item?.tags || [],\n currency: getCurrencySymbol(state.currencyCode),\n price_formatted,\n };\n\n const requested = this.parseRequestedFields();\n const renderable = requested\n .map(f => (f === 'type' ? 'product_type' : f))\n .filter(Boolean);\n if(!renderable.includes('resource')) renderable.push('resource');\n if(!renderable.includes('url')) renderable.push('url');\n\n const result: any = {};\n for(const key of renderable) {\n if(normalized[key] !== undefined && normalized[key] !== null && normalized[key] !== '') {\n result[key] = normalized[key];\n };\n };\n if(normalized.image_alt) result.image_alt = normalized.image_alt;\n if(normalized.price) {\n result.price_formatted = normalized.price_formatted ?? formatMoney(Number(normalized.price), state.currencyCode);\n if(normalized.currency) result.currency = normalized.currency;\n };\n return result;\n };\n\n private handleSearchInput = (event: Event) => {\n const value = (event.target as HTMLInputElement).value || '';\n this.searchTerm = value;\n if(this.querybuttontext) return;\n clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.fetchPredictive(value);\n }, this.debounce); \n };\n\n private handleSearchSubmit = (event: Event) => {\n event.preventDefault();\n this.fetchPredictive(this.searchTerm);\n };\n\n private renderResults(groupBy: string) {\n if(!this.searchTerm || this.searchTerm.length < this.minchars) return null;\n return (\n <>\n <div class=\"results-group-title\">\n <span class=\"tertiary-title\">{groupBy}</span>\n </div>\n <ul id={this.resultsListId} class={`${BLOCK}-prediction-list`} role=\"listbox\">\n {this.searchReturnData.map((result, idx) => (\n result.resource === groupBy && result.url && (\n <li key={idx} class={`${BLOCK}-prediction-item`} role=\"option\">\n <a class={`${BLOCK}-prediction-link`} href={result.url}>\n {this.parseRequestedFields()\n .filter(f => f !== 'resource' && f !== 'url')\n .filter(field => field === 'image' || field === 'featured_image')\n .map((field, fIdx) => {\n const val = result[field];\n if(val === undefined || val === null || val === '') return null;\n return <img key={fIdx} class=\"prediction-image\" src={val} alt={result.image_alt || result.title || ''} />;\n })\n }\n <div class={`${BLOCK}-prediction-details`}>\n {this.parseRequestedFields()\n .filter(f => f !== 'resource' && f !== 'url')\n .filter(field => field !== 'image' && field !== 'featured_image')\n .map((field, fIdx) => {\n const key = field === 'type' ? 'product_type' : field;\n const val = result[key];\n if(val === undefined || val === null || val === '') return null;\n if(key === 'price') {\n const display = result.price_formatted ?? formatMoney(Number(val), state.currencyCode);\n return <span key={fIdx} class={`prediction-part prediction-${key}-span`}>{display}</span>;\n }\n return <span key={fIdx} class={`prediction-part prediction-${key}-span`}>{val}</span>;\n })\n }\n </div>\n </a>\n </li>\n )\n ))}\n </ul>\n </>\n );\n };\n\n render() {\n const hasResults = this.hasRenderableResults;\n const base = this.normalizeAction(this.action);\n const seeAllHref = `${base}?q=${encodeURIComponent(this.searchTerm || '')}`;\n const shouldShowPanel = !!this.searchTerm && this.searchTerm.length >= this.minchars;\n return (\n <form\n class={`${BLOCK}${this.expandable ? ' expandable' : ''}`}\n action={this.action} \n method={this.method} \n role=\"search\"\n onSubmit={this.handleSearchSubmit}>\n <div class={`${BLOCK}-wrapper ${this.labelposition ? `label-${this.labelposition}` : ''}`}>\n {this.searchlabel && (\n <label class={`${BLOCK}-label`} htmlFor=\"Search\">{this.searchlabel}</label>\n )}\n <input\n id=\"Search\"\n class={`${BLOCK}-input`}\n type=\"search\"\n name=\"q\"\n value={this.searchTerm}\n onInput={this.handleSearchInput}\n role=\"combobox\"\n aria-expanded={hasResults ? 'true' : 'false'}\n aria-owns={this.resultsListId}\n aria-controls={this.resultsListId}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\" \n placeholder={this.placeholder}/>\n {this.querybuttontext && (\n <iv-button classmodifier={`${BLOCK}-submit`} type=\"submit\">\n <span class=\"inner-button\" innerHTML={this.querybuttontext}></span>\n </iv-button>\n )}\n {this.clearbutton && (\n <iv-button classmodifier={`${BLOCK}-clear`} type=\"button\" onClick={() => {\n this.searchTerm = '';\n this.searchReturnData = [];\n this.noResults = false;\n this.searchTermsChanged.emit('');\n }}>\n <span class=\"inner-button\" innerHTML={this.clearbutton}></span>\n </iv-button>\n )}\n </div>\n {this.showspinner && <iv-spinner show={this.showspinner && state.loading} />}\n <div class={`${BLOCK}-results`}>\n {shouldShowPanel && (\n this.searchReturnData.length > 0 ? (\n this.useGridLayout ? (\n <iv-layout \n gridTemplateAreas={this.gridTemplateAreas}\n classModifier={BLOCK}>\n {this.gridAreaNames.map(resource => (\n <div slot={resource}>\n {this.renderResults(resource)}\n </div>\n ))}\n </iv-layout>\n ) : (\n <iv-tabs\n classModifier={BLOCK}\n labels={this.tabLabels}\n tabLayout={this.tablayout as 'horizontal' | 'vertical'}>\n {this.tabLabels.map((label:string, index) => (\n <div slot={`tab-content-${index}`}>\n {this.renderResults(label)}\n </div> \n ))}\n </iv-tabs>\n )\n ) : this.noResults && !state.loading ? (\n <div class={`${BLOCK}-no-results`}>\n <p>{this.noresultstext}</p>\n </div>\n ) : null\n )}\n </div>\n {this.showallbuttontext && hasResults && (\n <div class={`${BLOCK}-see-all`}>\n <a class=\"btn btn-link\" href={seeAllHref}>{this.showallbuttontext}</a>\n </div>\n )}\n </form>\n\n );\n\n };\n \n};\n\n/* TO DO \nI reckon this code can be simmplified, because we now pass resoruce types, so we no longer need to build them from gridlayout\n*/"],"names":[],"mappings":"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"}