instantsearch-ui-components 0.4.0 → 0.6.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 (46) hide show
  1. package/dist/cjs/components/FrequentlyBoughtTogether.js +78 -0
  2. package/dist/cjs/components/Hits.js +41 -8
  3. package/dist/cjs/components/LookingSimilar.js +78 -0
  4. package/dist/cjs/components/RelatedProducts.js +78 -0
  5. package/dist/cjs/components/TrendingItems.js +78 -0
  6. package/dist/cjs/components/index.js +44 -0
  7. package/dist/cjs/components/recommend-shared/DefaultEmpty.js +14 -0
  8. package/dist/cjs/components/recommend-shared/DefaultHeader.js +24 -0
  9. package/dist/cjs/components/recommend-shared/DefaultItem.js +13 -0
  10. package/dist/cjs/components/recommend-shared/ListView.js +30 -0
  11. package/dist/cjs/components/recommend-shared/index.js +49 -0
  12. package/dist/cjs/types/Recommend.js +1 -0
  13. package/dist/cjs/types/index.js +22 -0
  14. package/dist/cjs/types/shared.js +1 -0
  15. package/dist/cjs/version.js +1 -1
  16. package/dist/es/components/FrequentlyBoughtTogether.d.ts +4 -0
  17. package/dist/es/components/FrequentlyBoughtTogether.js +71 -0
  18. package/dist/es/components/Hits.d.ts +31 -3
  19. package/dist/es/components/Hits.js +41 -8
  20. package/dist/es/components/LookingSimilar.d.ts +4 -0
  21. package/dist/es/components/LookingSimilar.js +71 -0
  22. package/dist/es/components/RelatedProducts.d.ts +4 -0
  23. package/dist/es/components/RelatedProducts.js +71 -0
  24. package/dist/es/components/TrendingItems.d.ts +4 -0
  25. package/dist/es/components/TrendingItems.js +71 -0
  26. package/dist/es/components/index.d.ts +4 -0
  27. package/dist/es/components/index.js +5 -1
  28. package/dist/es/components/recommend-shared/DefaultEmpty.d.ts +3 -0
  29. package/dist/es/components/recommend-shared/DefaultEmpty.js +8 -0
  30. package/dist/es/components/recommend-shared/DefaultHeader.d.ts +3 -0
  31. package/dist/es/components/recommend-shared/DefaultHeader.js +18 -0
  32. package/dist/es/components/recommend-shared/DefaultItem.d.ts +3 -0
  33. package/dist/es/components/recommend-shared/DefaultItem.js +7 -0
  34. package/dist/es/components/recommend-shared/ListView.d.ts +3 -0
  35. package/dist/es/components/recommend-shared/ListView.js +24 -0
  36. package/dist/es/components/recommend-shared/index.d.ts +4 -0
  37. package/dist/es/components/recommend-shared/index.js +4 -0
  38. package/dist/es/types/Recommend.d.ts +71 -0
  39. package/dist/es/types/Recommend.js +1 -0
  40. package/dist/es/types/index.d.ts +2 -0
  41. package/dist/es/types/index.js +3 -1
  42. package/dist/es/types/shared.d.ts +1 -0
  43. package/dist/es/types/shared.js +1 -0
  44. package/dist/es/version.d.ts +1 -1
  45. package/dist/es/version.js +1 -1
  46. package/package.json +2 -2
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ import { cx } from "../lib/index.js";
8
+ import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
9
+ export function createFrequentlyBoughtTogetherComponent(_ref) {
10
+ var createElement = _ref.createElement,
11
+ Fragment = _ref.Fragment;
12
+ return function FrequentlyBoughtTogether(userProps) {
13
+ var _userProps$classNames = userProps.classNames,
14
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
15
+ _userProps$emptyCompo = userProps.emptyComponent,
16
+ EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
17
+ createElement: createElement,
18
+ Fragment: Fragment
19
+ }) : _userProps$emptyCompo,
20
+ _userProps$headerComp = userProps.headerComponent,
21
+ HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
22
+ createElement: createElement,
23
+ Fragment: Fragment
24
+ }) : _userProps$headerComp,
25
+ _userProps$itemCompon = userProps.itemComponent,
26
+ ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
27
+ createElement: createElement,
28
+ Fragment: Fragment
29
+ }) : _userProps$itemCompon,
30
+ _userProps$view = userProps.view,
31
+ View = _userProps$view === void 0 ? createListViewComponent({
32
+ createElement: createElement,
33
+ Fragment: Fragment
34
+ }) : _userProps$view,
35
+ items = userProps.items,
36
+ status = userProps.status,
37
+ userTranslations = userProps.translations,
38
+ sendEvent = userProps.sendEvent,
39
+ props = _objectWithoutProperties(userProps, _excluded);
40
+ var translations = _objectSpread({
41
+ title: 'Frequently bought together',
42
+ sliderLabel: 'Frequently bought together products'
43
+ }, userTranslations);
44
+ var cssClasses = {
45
+ root: cx('ais-FrequentlyBoughtTogether', classNames.root),
46
+ emptyRoot: cx('ais-FrequentlyBoughtTogether', classNames.root, 'ais-FrequentlyBoughtTogether--empty', classNames.emptyRoot, props.className),
47
+ title: cx('ais-FrequentlyBoughtTogether-title', classNames.title),
48
+ container: cx('ais-FrequentlyBoughtTogether-container', classNames.container),
49
+ list: cx('ais-FrequentlyBoughtTogether-list', classNames.list),
50
+ item: cx('ais-FrequentlyBoughtTogether-item', classNames.item)
51
+ };
52
+ if (items.length === 0 && status === 'idle') {
53
+ return createElement("section", _extends({}, props, {
54
+ className: cssClasses.emptyRoot
55
+ }), createElement(EmptyComponent, null));
56
+ }
57
+ return createElement("section", _extends({}, props, {
58
+ className: cssClasses.root
59
+ }), createElement(HeaderComponent, {
60
+ classNames: cssClasses,
61
+ items: items,
62
+ translations: translations
63
+ }), createElement(View, {
64
+ classNames: cssClasses,
65
+ translations: translations,
66
+ itemComponent: ItemComponent,
67
+ items: items,
68
+ sendEvent: sendEvent
69
+ }));
70
+ };
71
+ }
@@ -1,8 +1,19 @@
1
- import type { ComponentProps, Renderer } from '../types';
1
+ import type { ComponentProps, Renderer, SendEventForHits } from '../types';
2
2
  type Hit = Record<string, unknown> & {
3
3
  objectID: string;
4
4
  };
5
- type SendEventForHits = (...props: unknown[]) => void;
5
+ type Banner = {
6
+ image: {
7
+ urls: Array<{
8
+ url: string;
9
+ }>;
10
+ title?: string;
11
+ };
12
+ link?: {
13
+ url: string;
14
+ target?: '_blank' | '_self';
15
+ };
16
+ };
6
17
  export type HitsProps<THit> = ComponentProps<'div'> & {
7
18
  hits: THit[];
8
19
  itemComponent: (props: {
@@ -15,7 +26,12 @@ export type HitsProps<THit> = ComponentProps<'div'> & {
15
26
  sendEvent: SendEventForHits;
16
27
  classNames?: Partial<HitsClassNames>;
17
28
  emptyComponent?: (props: {
29
+ className?: string;
30
+ }) => JSX.Element;
31
+ banner?: Banner;
32
+ bannerComponent?: (props: {
18
33
  className: string;
34
+ banner: Banner;
19
35
  }) => JSX.Element;
20
36
  };
21
37
  export type HitsClassNames = {
@@ -35,6 +51,18 @@ export type HitsClassNames = {
35
51
  * Class names to apply to each item element
36
52
  */
37
53
  item: string | string[];
54
+ /**
55
+ * Class names to apply to the banner element
56
+ */
57
+ bannerRoot: string | string[];
58
+ /**
59
+ * Class names to apply to the banner image element
60
+ */
61
+ bannerImage: string | string[];
62
+ /**
63
+ * Class names to apply to the banner link element
64
+ */
65
+ bannerLink: string | string[];
38
66
  };
39
- export declare function createHitsComponent({ createElement }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
67
+ export declare function createHitsComponent({ createElement, Fragment }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
40
68
  export {};
@@ -1,12 +1,42 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent"];
3
+ var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent", "banner", "bannerComponent"];
4
4
  import { cx } from "../lib/index.js";
5
5
 
6
6
  // Should be imported from a shared package in the future
7
7
 
8
- export function createHitsComponent(_ref) {
8
+ function createDefaultBannerComponent(_ref) {
9
9
  var createElement = _ref.createElement;
10
+ return function DefaultBanner(_ref2) {
11
+ var classNames = _ref2.classNames,
12
+ banner = _ref2.banner;
13
+ if (!banner.image.urls[0].url) {
14
+ return null;
15
+ }
16
+ return createElement("aside", {
17
+ className: cx('ais-Hits-banner', classNames.bannerRoot)
18
+ }, banner.link ? createElement("a", {
19
+ className: cx('ais-Hits-banner-link', classNames.bannerLink),
20
+ href: banner.link.url,
21
+ target: banner.link.target
22
+ }, createElement("img", {
23
+ className: cx('ais-Hits-banner-image', classNames.bannerImage),
24
+ src: banner.image.urls[0].url,
25
+ alt: banner.image.title
26
+ })) : createElement("img", {
27
+ className: cx('ais-Hits-banner-image', classNames.bannerImage),
28
+ src: banner.image.urls[0].url,
29
+ alt: banner.image.title
30
+ }));
31
+ };
32
+ }
33
+ export function createHitsComponent(_ref3) {
34
+ var createElement = _ref3.createElement,
35
+ Fragment = _ref3.Fragment;
36
+ var DefaultBannerComponent = createDefaultBannerComponent({
37
+ createElement: createElement,
38
+ Fragment: Fragment
39
+ });
10
40
  return function Hits(userProps) {
11
41
  var _userProps$classNames = userProps.classNames,
12
42
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
@@ -14,15 +44,18 @@ export function createHitsComponent(_ref) {
14
44
  ItemComponent = userProps.itemComponent,
15
45
  sendEvent = userProps.sendEvent,
16
46
  EmptyComponent = userProps.emptyComponent,
47
+ banner = userProps.banner,
48
+ BannerComponent = userProps.bannerComponent,
17
49
  props = _objectWithoutProperties(userProps, _excluded);
18
- if (hits.length === 0 && EmptyComponent) {
19
- return createElement(EmptyComponent, {
20
- className: cx('ais-Hits', classNames.root, cx('ais-Hits--empty', classNames.emptyRoot), props.className)
21
- });
22
- }
23
50
  return createElement("div", _extends({}, props, {
24
51
  className: cx('ais-Hits', classNames.root, hits.length === 0 && cx('ais-Hits--empty', classNames.emptyRoot), props.className)
25
- }), createElement("ol", {
52
+ }), banner && (BannerComponent ? createElement(BannerComponent, {
53
+ className: cx('ais-Hits-banner', classNames.bannerRoot),
54
+ banner: banner
55
+ }) : createElement(DefaultBannerComponent, {
56
+ classNames: classNames,
57
+ banner: banner
58
+ })), hits.length === 0 && EmptyComponent ? createElement(EmptyComponent, null) : createElement("ol", {
26
59
  className: cx('ais-Hits-list', classNames.list)
27
60
  }, hits.map(function (hit, index) {
28
61
  return createElement(ItemComponent, {
@@ -0,0 +1,4 @@
1
+ /** @jsx createElement */
2
+ import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
3
+ export type LookingSimilarProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
4
+ export declare function createLookingSimilarComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: LookingSimilarProps<TObject, Record<string, unknown>>) => JSX.Element;
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ import { cx } from "../lib/index.js";
8
+ import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
9
+ export function createLookingSimilarComponent(_ref) {
10
+ var createElement = _ref.createElement,
11
+ Fragment = _ref.Fragment;
12
+ return function LookingSimilar(userProps) {
13
+ var _userProps$classNames = userProps.classNames,
14
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
15
+ _userProps$emptyCompo = userProps.emptyComponent,
16
+ EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
17
+ createElement: createElement,
18
+ Fragment: Fragment
19
+ }) : _userProps$emptyCompo,
20
+ _userProps$headerComp = userProps.headerComponent,
21
+ HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
22
+ createElement: createElement,
23
+ Fragment: Fragment
24
+ }) : _userProps$headerComp,
25
+ _userProps$itemCompon = userProps.itemComponent,
26
+ ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
27
+ createElement: createElement,
28
+ Fragment: Fragment
29
+ }) : _userProps$itemCompon,
30
+ _userProps$view = userProps.view,
31
+ View = _userProps$view === void 0 ? createListViewComponent({
32
+ createElement: createElement,
33
+ Fragment: Fragment
34
+ }) : _userProps$view,
35
+ items = userProps.items,
36
+ status = userProps.status,
37
+ userTranslations = userProps.translations,
38
+ sendEvent = userProps.sendEvent,
39
+ props = _objectWithoutProperties(userProps, _excluded);
40
+ var translations = _objectSpread({
41
+ title: 'Looking similar',
42
+ sliderLabel: 'Looking similar'
43
+ }, userTranslations);
44
+ var cssClasses = {
45
+ root: cx('ais-LookingSimilar', classNames.root),
46
+ emptyRoot: cx('ais-LookingSimilar', classNames.root, 'ais-LookingSimilar--empty', classNames.emptyRoot, props.className),
47
+ title: cx('ais-LookingSimilar-title', classNames.title),
48
+ container: cx('ais-LookingSimilar-container', classNames.container),
49
+ list: cx('ais-LookingSimilar-list', classNames.list),
50
+ item: cx('ais-LookingSimilar-item', classNames.item)
51
+ };
52
+ if (items.length === 0 && status === 'idle') {
53
+ return createElement("section", _extends({}, props, {
54
+ className: cssClasses.emptyRoot
55
+ }), createElement(EmptyComponent, null));
56
+ }
57
+ return createElement("section", _extends({}, props, {
58
+ className: cssClasses.root
59
+ }), createElement(HeaderComponent, {
60
+ classNames: cssClasses,
61
+ items: items,
62
+ translations: translations
63
+ }), createElement(View, {
64
+ classNames: cssClasses,
65
+ translations: translations,
66
+ itemComponent: ItemComponent,
67
+ items: items,
68
+ sendEvent: sendEvent
69
+ }));
70
+ };
71
+ }
@@ -0,0 +1,4 @@
1
+ /** @jsx createElement */
2
+ import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
3
+ export type RelatedProductsProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
4
+ export declare function createRelatedProductsComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: RelatedProductsProps<TObject, Record<string, unknown>>) => JSX.Element;
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ import { cx } from "../lib/index.js";
8
+ import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
9
+ export function createRelatedProductsComponent(_ref) {
10
+ var createElement = _ref.createElement,
11
+ Fragment = _ref.Fragment;
12
+ return function RelatedProducts(userProps) {
13
+ var _userProps$classNames = userProps.classNames,
14
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
15
+ _userProps$emptyCompo = userProps.emptyComponent,
16
+ EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
17
+ createElement: createElement,
18
+ Fragment: Fragment
19
+ }) : _userProps$emptyCompo,
20
+ _userProps$headerComp = userProps.headerComponent,
21
+ HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
22
+ createElement: createElement,
23
+ Fragment: Fragment
24
+ }) : _userProps$headerComp,
25
+ _userProps$itemCompon = userProps.itemComponent,
26
+ ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
27
+ createElement: createElement,
28
+ Fragment: Fragment
29
+ }) : _userProps$itemCompon,
30
+ _userProps$view = userProps.view,
31
+ View = _userProps$view === void 0 ? createListViewComponent({
32
+ createElement: createElement,
33
+ Fragment: Fragment
34
+ }) : _userProps$view,
35
+ items = userProps.items,
36
+ status = userProps.status,
37
+ userTranslations = userProps.translations,
38
+ sendEvent = userProps.sendEvent,
39
+ props = _objectWithoutProperties(userProps, _excluded);
40
+ var translations = _objectSpread({
41
+ title: 'Related products',
42
+ sliderLabel: 'Related products'
43
+ }, userTranslations);
44
+ var cssClasses = {
45
+ root: cx('ais-RelatedProducts', classNames.root),
46
+ emptyRoot: cx('ais-RelatedProducts', classNames.root, 'ais-RelatedProducts--empty', classNames.emptyRoot, props.className),
47
+ title: cx('ais-RelatedProducts-title', classNames.title),
48
+ container: cx('ais-RelatedProducts-container', classNames.container),
49
+ list: cx('ais-RelatedProducts-list', classNames.list),
50
+ item: cx('ais-RelatedProducts-item', classNames.item)
51
+ };
52
+ if (items.length === 0 && status === 'idle') {
53
+ return createElement("section", _extends({}, props, {
54
+ className: cssClasses.emptyRoot
55
+ }), createElement(EmptyComponent, null));
56
+ }
57
+ return createElement("section", _extends({}, props, {
58
+ className: cssClasses.root
59
+ }), createElement(HeaderComponent, {
60
+ classNames: cssClasses,
61
+ items: items,
62
+ translations: translations
63
+ }), createElement(View, {
64
+ classNames: cssClasses,
65
+ translations: translations,
66
+ itemComponent: ItemComponent,
67
+ items: items,
68
+ sendEvent: sendEvent
69
+ }));
70
+ };
71
+ }
@@ -0,0 +1,4 @@
1
+ /** @jsx createElement */
2
+ import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
3
+ export type TrendingItemsProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
4
+ export declare function createTrendingItemsComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: TrendingItemsProps<TObject, Record<string, unknown>>) => JSX.Element;
@@ -0,0 +1,71 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ import { cx } from "../lib/index.js";
8
+ import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
9
+ export function createTrendingItemsComponent(_ref) {
10
+ var createElement = _ref.createElement,
11
+ Fragment = _ref.Fragment;
12
+ return function TrendingItems(userProps) {
13
+ var _userProps$classNames = userProps.classNames,
14
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
15
+ _userProps$emptyCompo = userProps.emptyComponent,
16
+ EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
17
+ createElement: createElement,
18
+ Fragment: Fragment
19
+ }) : _userProps$emptyCompo,
20
+ _userProps$headerComp = userProps.headerComponent,
21
+ HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
22
+ createElement: createElement,
23
+ Fragment: Fragment
24
+ }) : _userProps$headerComp,
25
+ _userProps$itemCompon = userProps.itemComponent,
26
+ ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
27
+ createElement: createElement,
28
+ Fragment: Fragment
29
+ }) : _userProps$itemCompon,
30
+ _userProps$view = userProps.view,
31
+ View = _userProps$view === void 0 ? createListViewComponent({
32
+ createElement: createElement,
33
+ Fragment: Fragment
34
+ }) : _userProps$view,
35
+ items = userProps.items,
36
+ status = userProps.status,
37
+ userTranslations = userProps.translations,
38
+ sendEvent = userProps.sendEvent,
39
+ props = _objectWithoutProperties(userProps, _excluded);
40
+ var translations = _objectSpread({
41
+ title: 'Trending items',
42
+ sliderLabel: 'Trending items'
43
+ }, userTranslations);
44
+ var cssClasses = {
45
+ root: cx('ais-TrendingItems', classNames.root),
46
+ emptyRoot: cx('ais-TrendingItems', classNames.root, 'ais-TrendingItems--empty', classNames.emptyRoot, props.className),
47
+ title: cx('ais-TrendingItems-title', classNames.title),
48
+ container: cx('ais-TrendingItems-container', classNames.container),
49
+ list: cx('ais-TrendingItems-list', classNames.list),
50
+ item: cx('ais-TrendingItems-item', classNames.item)
51
+ };
52
+ if (items.length === 0 && status === 'idle') {
53
+ return createElement("section", _extends({}, props, {
54
+ className: cssClasses.emptyRoot
55
+ }), createElement(EmptyComponent, null));
56
+ }
57
+ return createElement("section", _extends({}, props, {
58
+ className: cssClasses.root
59
+ }), createElement(HeaderComponent, {
60
+ classNames: cssClasses,
61
+ items: items,
62
+ translations: translations
63
+ }), createElement(View, {
64
+ classNames: cssClasses,
65
+ translations: translations,
66
+ itemComponent: ItemComponent,
67
+ items: items,
68
+ sendEvent: sendEvent
69
+ }));
70
+ };
71
+ }
@@ -1,2 +1,6 @@
1
+ export * from './FrequentlyBoughtTogether';
1
2
  export * from './Highlight';
2
3
  export * from './Hits';
4
+ export * from './RelatedProducts';
5
+ export * from './TrendingItems';
6
+ export * from './LookingSimilar';
@@ -1,2 +1,6 @@
1
+ export * from "./FrequentlyBoughtTogether.js";
1
2
  export * from "./Highlight.js";
2
- export * from "./Hits.js";
3
+ export * from "./Hits.js";
4
+ export * from "./RelatedProducts.js";
5
+ export * from "./TrendingItems.js";
6
+ export * from "./LookingSimilar.js";
@@ -0,0 +1,3 @@
1
+ /** @jsx createElement */
2
+ import type { Renderer } from '../../types';
3
+ export declare function createDefaultEmptyComponent({ createElement, Fragment, }: Renderer): () => JSX.Element;
@@ -0,0 +1,8 @@
1
+ export function createDefaultEmptyComponent(_ref) {
2
+ var createElement = _ref.createElement,
3
+ Fragment = _ref.Fragment;
4
+ var _ref2 = createElement(Fragment, null, "No results");
5
+ return function DefaultEmpty() {
6
+ return _ref2;
7
+ };
8
+ }
@@ -0,0 +1,3 @@
1
+ /** @jsx createElement */
2
+ import type { RecommendInnerComponentProps, Renderer } from '../../types';
3
+ export declare function createDefaultHeaderComponent({ createElement }: Renderer): <TObject>(userProps: RecommendInnerComponentProps<TObject>) => JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ export function createDefaultHeaderComponent(_ref) {
2
+ var createElement = _ref.createElement;
3
+ return function DefaultHeader(userProps) {
4
+ var _userProps$classNames = userProps.classNames,
5
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
6
+ items = userProps.items,
7
+ translations = userProps.translations;
8
+ if (!items || items.length < 1) {
9
+ return null;
10
+ }
11
+ if (!translations.title) {
12
+ return null;
13
+ }
14
+ return createElement("h3", {
15
+ className: classNames.title
16
+ }, translations.title);
17
+ };
18
+ }
@@ -0,0 +1,3 @@
1
+ /** @jsx createElement */
2
+ import type { RecommendItemComponentProps, Renderer } from '../../types';
3
+ export declare function createDefaultItemComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: RecommendItemComponentProps<TObject>) => JSX.Element;
@@ -0,0 +1,7 @@
1
+ export function createDefaultItemComponent(_ref) {
2
+ var createElement = _ref.createElement,
3
+ Fragment = _ref.Fragment;
4
+ return function DefaultItem(userProps) {
5
+ return createElement(Fragment, null, JSON.stringify(userProps.item, null, 2));
6
+ };
7
+ }
@@ -0,0 +1,3 @@
1
+ /** @jsx createElement */
2
+ import type { RecommendClassNames, RecommendTranslations, RecordWithObjectID, Renderer, RecommendViewProps } from '../../types';
3
+ export declare function createListViewComponent({ createElement }: Renderer): <TItem extends RecordWithObjectID>(userProps: RecommendViewProps<TItem, RecommendTranslations, Partial<RecommendClassNames>>) => JSX.Element;
@@ -0,0 +1,24 @@
1
+ export function createListViewComponent(_ref) {
2
+ var createElement = _ref.createElement;
3
+ return function ListView(userProps) {
4
+ var _userProps$classNames = userProps.classNames,
5
+ classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
6
+ ItemComponent = userProps.itemComponent,
7
+ items = userProps.items,
8
+ sendEvent = userProps.sendEvent;
9
+ return createElement("div", {
10
+ className: classNames.container
11
+ }, createElement("ol", {
12
+ className: classNames.list
13
+ }, items.map(function (item) {
14
+ return createElement("li", {
15
+ key: item.objectID,
16
+ className: classNames.item,
17
+ onClick: sendEvent,
18
+ onAuxClick: sendEvent
19
+ }, createElement(ItemComponent, {
20
+ item: item
21
+ }));
22
+ })));
23
+ };
24
+ }
@@ -0,0 +1,4 @@
1
+ export * from './DefaultEmpty';
2
+ export * from './DefaultHeader';
3
+ export * from './DefaultItem';
4
+ export * from './ListView';
@@ -0,0 +1,4 @@
1
+ export * from "./DefaultEmpty.js";
2
+ export * from "./DefaultHeader.js";
3
+ export * from "./DefaultItem.js";
4
+ export * from "./ListView.js";
@@ -0,0 +1,71 @@
1
+ import type { SendEventForHits } from '.';
2
+ export type RecommendClassNames = {
3
+ /**
4
+ * Class names to apply to the root element
5
+ */
6
+ root: string;
7
+ /**
8
+ * Class names to apply to the root element without results
9
+ */
10
+ emptyRoot: string;
11
+ /**
12
+ * Class names to apply to the title element
13
+ */
14
+ title: string;
15
+ /**
16
+ * Class names to apply to the container element
17
+ */
18
+ container: string;
19
+ /**
20
+ * Class names to apply to the list element
21
+ */
22
+ list: string;
23
+ /**
24
+ * Class names to apply to each item element
25
+ */
26
+ item: string;
27
+ };
28
+ export type RecommendTranslations = {
29
+ /**
30
+ * The title of the recommendation section
31
+ */
32
+ title: string;
33
+ /**
34
+ * The label of the horizontal slider
35
+ */
36
+ sliderLabel: string;
37
+ };
38
+ export type RecommendViewProps<TItem extends RecordWithObjectID, TTranslations extends Record<string, string>, TClassNames extends Record<string, string>> = {
39
+ classNames: TClassNames;
40
+ itemComponent: <TComponentProps extends Record<string, unknown> = Record<string, unknown>>(props: RecommendItemComponentProps<RecordWithObjectID<TItem>> & TComponentProps) => JSX.Element;
41
+ items: TItem[];
42
+ translations: TTranslations;
43
+ sendEvent: SendEventForHits;
44
+ };
45
+ export type RecommendComponentProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = {
46
+ itemComponent?: (props: RecommendItemComponentProps<RecordWithObjectID<TObject>> & TComponentProps) => JSX.Element;
47
+ items: Array<RecordWithObjectID<TObject>>;
48
+ classNames?: Partial<RecommendClassNames>;
49
+ emptyComponent?: (props: TComponentProps) => JSX.Element;
50
+ headerComponent?: (props: RecommendInnerComponentProps<TObject> & TComponentProps) => JSX.Element;
51
+ status: RecommendStatus;
52
+ translations?: Partial<RecommendTranslations>;
53
+ sendEvent: SendEventForHits;
54
+ view?: (props: RecommendViewProps<RecordWithObjectID<TObject>, Required<RecommendTranslations>, Record<string, string>> & TComponentProps) => JSX.Element;
55
+ };
56
+ export type RecommendInnerComponentProps<TObject> = {
57
+ classNames: Partial<RecommendClassNames>;
58
+ items: TObject[];
59
+ translations: Partial<RecommendTranslations>;
60
+ };
61
+ export type RecordWithObjectID<TObject = Record<string, unknown>> = TObject & {
62
+ objectID: string;
63
+ __position: number;
64
+ __queryID?: string;
65
+ };
66
+ export type RecommendItemComponentProps<TObject> = {
67
+ item: TObject;
68
+ onClick?: () => void;
69
+ onAuxClick?: () => void;
70
+ };
71
+ export type RecommendStatus = 'idle' | 'loading' | 'stalled' | 'error';
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1,3 @@
1
1
  export * from './Renderer';
2
+ export * from './Recommend';
3
+ export * from './shared';
@@ -1 +1,3 @@
1
- export * from "./Renderer.js";
1
+ export * from "./Renderer.js";
2
+ export * from "./Recommend.js";
3
+ export * from "./shared.js";
@@ -0,0 +1 @@
1
+ export type SendEventForHits = (...props: unknown[]) => void;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,2 +1,2 @@
1
- declare const _default: "0.4.0";
1
+ declare const _default: "0.6.0";
2
2
  export default _default;
@@ -1 +1 @@
1
- export default '0.4.0';
1
+ export default '0.6.0';