@asante-org/leybold-design-system 1.2.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 (171) hide show
  1. package/README.md +163 -0
  2. package/dist/.next/types/app/layout.d.ts +9 -0
  3. package/dist/.next/types/app/page.d.ts +9 -0
  4. package/dist/.storybook/algoliaProvider.d.ts +42 -0
  5. package/dist/assets/.gitkeep +2 -0
  6. package/dist/assets/ai-banner-desktop.png +0 -0
  7. package/dist/assets/ai-banner-mobile.png +0 -0
  8. package/dist/assets/carousel-card.png +0 -0
  9. package/dist/assets/desktop-layout-alt.svg +27 -0
  10. package/dist/assets/desktop-layout.svg +29 -0
  11. package/dist/assets/globe.svg +7 -0
  12. package/dist/assets/language-selector-bg.png +0 -0
  13. package/dist/assets/leybold-footer-logo.svg +19 -0
  14. package/dist/assets/leybold-white.svg +19 -0
  15. package/dist/assets/list-card-alt.png +0 -0
  16. package/dist/assets/list-card.png +0 -0
  17. package/dist/assets/list-link-a.png +0 -0
  18. package/dist/assets/list-link-b.png +0 -0
  19. package/dist/assets/list-link-c.png +0 -0
  20. package/dist/assets/list-product-overlay-tip-active.svg +3 -0
  21. package/dist/assets/list-product-overlay-tip.svg +3 -0
  22. package/dist/assets/list-product.png +0 -0
  23. package/dist/assets/logo-example.svg +9 -0
  24. package/dist/assets/logo.svg +19 -0
  25. package/dist/assets/phone-layout.svg +14 -0
  26. package/dist/assets/red-tip.svg +10 -0
  27. package/dist/assets/search-product.png +0 -0
  28. package/dist/assets/tablet-layout.svg +28 -0
  29. package/dist/fonts/calibri.ttf +0 -0
  30. package/dist/fonts/calibrib.ttf +0 -0
  31. package/dist/fonts/calibril.ttf +0 -0
  32. package/dist/index.esm.js +2859 -0
  33. package/dist/index.esm.js.map +1 -0
  34. package/dist/index.esm.scss +5602 -0
  35. package/dist/index.js +2858 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/index.scss +5602 -0
  38. package/dist/src/app/layout.d.ts +9 -0
  39. package/dist/src/app/page.d.ts +2 -0
  40. package/dist/src/components/AIBanner/AIBanner.d.ts +15 -0
  41. package/dist/src/components/AIBanner/AIBanner.stories.d.ts +7 -0
  42. package/dist/src/components/AIBanner/index.d.ts +2 -0
  43. package/dist/src/components/Button/Button.d.ts +80 -0
  44. package/dist/src/components/Button/Button.stories.d.ts +25 -0
  45. package/dist/src/components/Button/index.d.ts +2 -0
  46. package/dist/src/components/ContentCardHorizontal/ContentCardHorizontal.d.ts +3 -0
  47. package/dist/src/components/ContentCardHorizontal/ContentCardHorizontal.stories.d.ts +10 -0
  48. package/dist/src/components/ContentCardHorizontal/index.d.ts +2 -0
  49. package/dist/src/components/Filters/AppliedFilterTag.d.ts +27 -0
  50. package/dist/src/components/Filters/AppliedFilters.d.ts +24 -0
  51. package/dist/src/components/Filters/Filter.types.d.ts +204 -0
  52. package/dist/src/components/Filters/FilterAccordion.d.ts +6 -0
  53. package/dist/src/components/Filters/FilterItem.d.ts +6 -0
  54. package/dist/src/components/Filters/FilterSearch.d.ts +6 -0
  55. package/dist/src/components/Filters/Filters.stories.d.ts +24 -0
  56. package/dist/src/components/Filters/FiltersPanel.d.ts +10 -0
  57. package/dist/src/components/Filters/index.d.ts +7 -0
  58. package/dist/src/components/Image/Image.d.ts +4 -0
  59. package/dist/src/components/Image/Image.stories.d.ts +16 -0
  60. package/dist/src/components/Image/Image.types.d.ts +34 -0
  61. package/dist/src/components/Image/index.d.ts +2 -0
  62. package/dist/src/components/InstantResults/FederatedInstantResultsLayout.d.ts +3 -0
  63. package/dist/src/components/InstantResults/FederatedInstantResultsLayout.stories.d.ts +13 -0
  64. package/dist/src/components/InstantResults/index.d.ts +9 -0
  65. package/dist/src/components/LanguageSelector/LanguageSelector.d.ts +7 -0
  66. package/dist/src/components/LanguageSelector/LanguageSelector.stories.d.ts +32 -0
  67. package/dist/src/components/LanguageSelector/LanguageSelector.types.d.ts +64 -0
  68. package/dist/src/components/LanguageSelector/LanguageSelectorLink.d.ts +20 -0
  69. package/dist/src/components/LanguageSelector/LocationDropdown.d.ts +6 -0
  70. package/dist/src/components/LanguageSelector/LocationSelectorLink.d.ts +20 -0
  71. package/dist/src/components/LanguageSelector/index.d.ts +7 -0
  72. package/dist/src/components/Pagination/Pagination.d.ts +3 -0
  73. package/dist/src/components/Pagination/Pagination.stories.d.ts +16 -0
  74. package/dist/src/components/Pagination/Pagination.types.d.ts +98 -0
  75. package/dist/src/components/Pagination/PaginationButton.d.ts +3 -0
  76. package/dist/src/components/Pagination/PaginationEllipsis.d.ts +3 -0
  77. package/dist/src/components/Pagination/PaginationItem.d.ts +3 -0
  78. package/dist/src/components/Pagination/index.d.ts +5 -0
  79. package/dist/src/components/ProductCardDetails/ProductCardDetails.d.ts +4 -0
  80. package/dist/src/components/ProductCardDetails/ProductCardDetails.stories.d.ts +10 -0
  81. package/dist/src/components/ProductCardDetails/index.d.ts +2 -0
  82. package/dist/src/components/ProductCardHorizontal/ProductCardHorizontal.d.ts +4 -0
  83. package/dist/src/components/ProductCardHorizontal/ProductCardHorizontal.stories.d.ts +11 -0
  84. package/dist/src/components/ProductCardHorizontal/index.d.ts +2 -0
  85. package/dist/src/components/ProductCardVertical/ProductCardVertical.d.ts +22 -0
  86. package/dist/src/components/ProductCardVertical/ProductCardVertical.types.d.ts +50 -0
  87. package/dist/src/components/ProductCardVertical/index.d.ts +2 -0
  88. package/dist/src/components/ResultsColumn/ResultsColumn.d.ts +3 -0
  89. package/dist/src/components/ResultsColumn/index.d.ts +2 -0
  90. package/dist/src/components/ResultsCount/ResultsCount.d.ts +7 -0
  91. package/dist/src/components/ResultsCount/index.d.ts +2 -0
  92. package/dist/src/components/ResultsView/FederatedResultsView.d.ts +3 -0
  93. package/dist/src/components/ResultsView/FederatedResultsView.stories.d.ts +11 -0
  94. package/dist/src/components/ResultsView/ResultsList.d.ts +3 -0
  95. package/dist/src/components/ResultsView/index.d.ts +3 -0
  96. package/dist/src/components/SearchBar/SearchBar.d.ts +3 -0
  97. package/dist/src/components/SearchBar/SearchBar.stories.d.ts +9 -0
  98. package/dist/src/components/SearchBar/SearchIcon.d.ts +5 -0
  99. package/dist/src/components/SearchBar/SearchInput.d.ts +10 -0
  100. package/dist/src/components/SearchBar/SearchSubmitButton.d.ts +10 -0
  101. package/dist/src/components/SearchBar/index.d.ts +8 -0
  102. package/dist/src/components/SearchModal/ModalCloseButton.d.ts +7 -0
  103. package/dist/src/components/SearchModal/SearchModal.d.ts +3 -0
  104. package/dist/src/components/SearchModal/SearchModal.stories.d.ts +8 -0
  105. package/dist/src/components/SearchModal/index.d.ts +4 -0
  106. package/dist/src/components/SearchTriggerButton/SearchTriggerButton.d.ts +3 -0
  107. package/dist/src/components/SearchTriggerButton/SearchTriggerButton.stories.d.ts +8 -0
  108. package/dist/src/components/SearchTriggerButton/index.d.ts +2 -0
  109. package/dist/src/components/SeeAllLinkButton/SeeAllLinkButton.d.ts +7 -0
  110. package/dist/src/components/SeeAllLinkButton/index.d.ts +2 -0
  111. package/dist/src/experience/Carousel/Carousel.d.ts +36 -0
  112. package/dist/src/experience/Carousel/Carousel.stories.d.ts +7 -0
  113. package/dist/src/experience/Carousel/index.d.ts +2 -0
  114. package/dist/src/experience/Footer/Footer.d.ts +201 -0
  115. package/dist/src/experience/Footer/Footer.stories.d.ts +28 -0
  116. package/dist/src/experience/Footer/icons/AtlasCopcoIcon.d.ts +10 -0
  117. package/dist/src/experience/Footer/icons/ExternalLinkIcon.d.ts +10 -0
  118. package/dist/src/experience/Footer/icons/index.d.ts +2 -0
  119. package/dist/src/experience/Footer/index.d.ts +2 -0
  120. package/dist/src/experience/GeneratedList/GeneratedList.d.ts +40 -0
  121. package/dist/src/experience/GeneratedList/GeneratedList.stories.d.ts +7 -0
  122. package/dist/src/experience/GeneratedList/GeneratedList.types.d.ts +131 -0
  123. package/dist/src/experience/GeneratedList/GeneratedListExternalLink.stories.d.ts +7 -0
  124. package/dist/src/experience/GeneratedList/GeneratedListList.stories.d.ts +9 -0
  125. package/dist/src/experience/GeneratedList/GeneratedListProduct.stories.d.ts +7 -0
  126. package/dist/src/experience/GeneratedList/_Card.d.ts +8 -0
  127. package/dist/src/experience/GeneratedList/_CardMobile.d.ts +8 -0
  128. package/dist/src/experience/GeneratedList/_ExternalLink.d.ts +8 -0
  129. package/dist/src/experience/GeneratedList/_List.d.ts +8 -0
  130. package/dist/src/experience/GeneratedList/_Product.d.ts +9 -0
  131. package/dist/src/experience/GeneratedList/index.d.ts +2 -0
  132. package/dist/src/experience/Header/Header.d.ts +20 -0
  133. package/dist/src/experience/Header/Header.stories.d.ts +9 -0
  134. package/dist/src/experience/Header/HeaderNavButton.d.ts +9 -0
  135. package/dist/src/experience/Header/MegaMenu.d.ts +10 -0
  136. package/dist/src/experience/Header/MenuLink.d.ts +8 -0
  137. package/dist/src/experience/Header/MobileHeader.stories.d.ts +6 -0
  138. package/dist/src/experience/Header/MobileMenu.d.ts +9 -0
  139. package/dist/src/experience/Header/MobileNavBar.d.ts +13 -0
  140. package/dist/src/experience/Header/index.d.ts +6 -0
  141. package/dist/src/experience/algolia-dynamic-search/AlgoliaDynamicSearch.d.ts +4 -0
  142. package/dist/src/experience/algolia-dynamic-search/AlgoliaDynamicSearch.stories.d.ts +7 -0
  143. package/dist/src/experience/algolia-dynamic-search/index.d.ts +3 -0
  144. package/dist/src/experience/federated-search/FederatedSearchExperience.d.ts +39 -0
  145. package/dist/src/experience/federated-search/FederatedSearchExperience.stories.d.ts +10 -0
  146. package/dist/src/experience/federated-search/FederatedSearchWithAlgolia.stories.d.ts +7 -0
  147. package/dist/src/experience/federated-search/components/AssistanceBanner/AssistanceBanner.d.ts +22 -0
  148. package/dist/src/experience/federated-search/components/AssistanceBanner/AssistanceBanner.types.d.ts +29 -0
  149. package/dist/src/experience/federated-search/components/AssistanceBanner/AssistanceIcon.d.ts +2 -0
  150. package/dist/src/experience/federated-search/components/AssistanceBanner/index.d.ts +3 -0
  151. package/dist/src/experience/federated-search/components/FilterDrawer/FilterDrawer.d.ts +24 -0
  152. package/dist/src/experience/federated-search/components/FilterDrawer/FilterDrawer.types.d.ts +22 -0
  153. package/dist/src/experience/federated-search/components/FilterDrawer/index.d.ts +2 -0
  154. package/dist/src/experience/federated-search/components/TabButton/TabButton.d.ts +31 -0
  155. package/dist/src/experience/federated-search/components/TabButton/TabButton.types.d.ts +32 -0
  156. package/dist/src/experience/federated-search/components/TabButton/index.d.ts +2 -0
  157. package/dist/src/experience/federated-search/index.d.ts +2 -0
  158. package/dist/src/experience/qr-form-journey/QrFormJourney.d.ts +3 -0
  159. package/dist/src/experience/qr-form-journey/QrFormJourney.stories.d.ts +8 -0
  160. package/dist/src/experience/qr-form-journey/index.d.ts +1 -0
  161. package/dist/src/hooks/useFederatedSearchMock.d.ts +36 -0
  162. package/dist/src/index.d.ts +29 -0
  163. package/dist/src/stories/foundation/Buttons/ButtonComponents.d.ts +56 -0
  164. package/dist/src/stories/foundation/Typography/TypographyComponents.d.ts +46 -0
  165. package/dist/src/stories/foundation/_components/StoryLayout.d.ts +11 -0
  166. package/dist/src/types/buttons.d.ts +4 -0
  167. package/dist/src/types/cards.d.ts +50 -0
  168. package/dist/src/types/search.d.ts +139 -0
  169. package/dist/src/utils/styles/index.d.ts +1 -0
  170. package/dist/tsconfig.tsbuildinfo +1 -0
  171. package/package.json +115 -0
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ import { FederatedSearchProps } from "../../types/search";
3
+ /**
4
+ * FederatedSearchExperience - Top-level search experience component
5
+ *
6
+ * This component orchestrates the entire federated search experience, including:
7
+ * - Modal container
8
+ * - Search input
9
+ * - Instant results (2-column layout)
10
+ * - Full results view with tabs and filters
11
+ *
12
+ * The component is fully controlled and does not contain any data fetching logic.
13
+ * All data and callbacks are passed in via props, making it suitable for use in AEM
14
+ * where a controller layer will handle Algolia integration.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <FederatedSearchExperience
19
+ * isOpen={isOpen}
20
+ * onOpen={handleOpen}
21
+ * onClose={handleClose}
22
+ * query={query}
23
+ * onQueryChange={setQuery}
24
+ * onSearchSubmit={handleSubmit}
25
+ * products={products}
26
+ * contents={contents}
27
+ * isLoadingProducts={isLoadingProducts}
28
+ * isLoadingContents={isLoadingContents}
29
+ * onSeeAllProducts={handleSeeAllProducts}
30
+ * onSeeAllContents={handleSeeAllContents}
31
+ * onSeeAllCombined={handleSeeAllCombined}
32
+ * activeView={activeView}
33
+ * onChangeView={setActiveView}
34
+ * activeTab={activeTab}
35
+ * onTabChange={setActiveTab}
36
+ * />
37
+ * ```
38
+ */
39
+ export declare const FederatedSearchExperience: React.FC<FederatedSearchProps>;
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { FederatedSearchExperience } from './FederatedSearchExperience';
3
+ declare const meta: Meta<typeof FederatedSearchExperience>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof FederatedSearchExperience>;
6
+ export declare const Default: Story;
7
+ export declare const WithResults: Story;
8
+ export declare const FullResultsView: Story;
9
+ export declare const LoadingState: Story;
10
+ export declare const NoResults: Story;
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { FederatedSearchExperience } from "./FederatedSearchExperience";
3
+ declare const meta: Meta<typeof FederatedSearchExperience>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof FederatedSearchExperience>;
6
+ export declare const WithRealAlgolia: Story;
7
+ export declare const WithPrefilledQuery: Story;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { AssistanceBannerProps } from './AssistanceBanner.types';
3
+ /**
4
+ * AssistanceBanner - Help widget for search sidebar
5
+ *
6
+ * Displays a call-to-action for users who need assistance finding products.
7
+ * Features chat icon, heading, description, and contact link with chevron.
8
+ *
9
+ * Desktop only - hidden on mobile to save space.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * <AssistanceBanner
14
+ * title="Need Assistance?"
15
+ * description="Can't find what you're looking for? Our team is ready to help."
16
+ * linkText="Contact support"
17
+ * linkUrl="/contact"
18
+ * />
19
+ * ```
20
+ */
21
+ export declare const AssistanceBanner: React.FC<AssistanceBannerProps>;
22
+ export default AssistanceBanner;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Props for AssistanceBanner component
3
+ */
4
+ export interface AssistanceBannerProps {
5
+ /**
6
+ * Banner heading text
7
+ */
8
+ title?: string;
9
+ /**
10
+ * Banner description/body text
11
+ */
12
+ description?: string;
13
+ /**
14
+ * Contact link text
15
+ */
16
+ linkText?: string;
17
+ /**
18
+ * Contact link URL
19
+ */
20
+ linkUrl?: string;
21
+ /**
22
+ * Link click handler (optional, for programmatic control)
23
+ */
24
+ onLinkClick?: () => void;
25
+ /**
26
+ * Additional CSS classes
27
+ */
28
+ className?: string;
29
+ }
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const AssistanceIcon: React.FC<React.SVGProps<SVGSVGElement>>;
@@ -0,0 +1,3 @@
1
+ export { AssistanceBanner } from './AssistanceBanner';
2
+ export { AssistanceIcon } from './AssistanceIcon';
3
+ export type { AssistanceBannerProps } from './AssistanceBanner.types';
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { FilterDrawerProps } from './FilterDrawer.types';
3
+ /**
4
+ * FilterDrawer - Mobile slide-in filter panel
5
+ *
6
+ * Slides in from the right with a dark overlay. Used on mobile to show filters
7
+ * when screen space is limited. Includes focus trap, escape key handling, and
8
+ * body scroll prevention.
9
+ *
10
+ * Desktop: Hidden (filters shown in sidebar)
11
+ * Mobile: Slide-in drawer overlay
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <FilterDrawer
16
+ * isOpen={isFilterDrawerOpen}
17
+ * onClose={() => setIsFilterDrawerOpen(false)}
18
+ * >
19
+ * <FiltersPanel facets={facets} onFacetToggle={handleToggle} />
20
+ * </FilterDrawer>
21
+ * ```
22
+ */
23
+ export declare const FilterDrawer: React.FC<FilterDrawerProps>;
24
+ export default FilterDrawer;
@@ -0,0 +1,22 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * Props for FilterDrawer component
4
+ */
5
+ export interface FilterDrawerProps {
6
+ /**
7
+ * Whether drawer is currently open/visible
8
+ */
9
+ isOpen: boolean;
10
+ /**
11
+ * Close handler (called on overlay click, Escape key, or X button)
12
+ */
13
+ onClose: () => void;
14
+ /**
15
+ * Drawer content (typically FiltersPanel component)
16
+ */
17
+ children: React.ReactNode;
18
+ /**
19
+ * Additional CSS classes
20
+ */
21
+ className?: string;
22
+ }
@@ -0,0 +1,2 @@
1
+ export { FilterDrawer } from './FilterDrawer';
2
+ export type { FilterDrawerProps } from './FilterDrawer.types';
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { TabButtonProps } from './TabButton.types';
3
+ /**
4
+ * TabButton - Tab navigation component with result counts
5
+ *
6
+ * Supports two layout variants:
7
+ * - Desktop: Background colours, top red underline when active, rounded corners
8
+ * - Mobile: Text-only with bottom border underline when active
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Desktop variant
13
+ * <TabButton
14
+ * label="WEB SHOP RESULTS"
15
+ * count={542}
16
+ * isActive={true}
17
+ * onClick={() => setActiveTab('products')}
18
+ * variant="desktop"
19
+ * />
20
+ *
21
+ * // Mobile variant
22
+ * <TabButton
23
+ * label="WEB SHOP"
24
+ * isActive={false}
25
+ * onClick={() => setActiveTab('content')}
26
+ * variant="mobile"
27
+ * />
28
+ * ```
29
+ */
30
+ export declare const TabButton: React.FC<TabButtonProps>;
31
+ export default TabButton;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Props for TabButton component
3
+ */
4
+ export interface TabButtonProps {
5
+ /**
6
+ * Tab label text (e.g., "WEB SHOP RESULTS", "WEBSITE")
7
+ */
8
+ label: string;
9
+ /**
10
+ * Optional result count to display with label
11
+ * When provided, formats as "{count} {label}"
12
+ */
13
+ count?: number;
14
+ /**
15
+ * Whether this tab is currently active/selected
16
+ */
17
+ isActive: boolean;
18
+ /**
19
+ * Click handler for tab selection
20
+ */
21
+ onClick: () => void;
22
+ /**
23
+ * Layout variant
24
+ * - desktop: Background colours, top underline, rounded corners
25
+ * - mobile: Text-only with bottom border
26
+ */
27
+ variant?: 'desktop' | 'mobile';
28
+ /**
29
+ * Additional CSS classes
30
+ */
31
+ className?: string;
32
+ }
@@ -0,0 +1,2 @@
1
+ export { TabButton } from './TabButton';
2
+ export type { TabButtonProps } from './TabButton.types';
@@ -0,0 +1,2 @@
1
+ export { FederatedSearchExperience } from './FederatedSearchExperience';
2
+ export type { FederatedSearchProps } from '../../types/search';
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import "./QrFormJourney.scss";
3
+ export declare const QrFormLeybold: (props: any) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { QrFormLeybold } from "./QrFormJourney";
3
+ declare const meta: Meta<typeof QrFormLeybold>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof QrFormLeybold>;
6
+ export declare const Default: Story;
7
+ export declare const AEM: Story;
8
+ export declare const China: Story;
@@ -0,0 +1 @@
1
+ export { QrFormLeybold } from "./QrFormJourney";
@@ -0,0 +1,36 @@
1
+ import { ProductResult, ContentResult, SearchView, SearchTab, Facet } from "../types/search";
2
+ interface UseFederatedSearchMockOptions {
3
+ debounceMs?: number;
4
+ simulateDelay?: boolean;
5
+ delayMs?: number;
6
+ }
7
+ export declare const useFederatedSearchMock: (options?: UseFederatedSearchMockOptions) => {
8
+ isOpen: boolean;
9
+ onOpen: () => void;
10
+ onClose: () => void;
11
+ query: string;
12
+ onQueryChange: (value: string) => void;
13
+ onSearchSubmit: () => void;
14
+ products: ProductResult[];
15
+ contents: ContentResult[];
16
+ isLoadingProducts: boolean;
17
+ isLoadingContents: boolean;
18
+ productsError: string | undefined;
19
+ contentsError: string | undefined;
20
+ onSeeAllProducts: () => void;
21
+ onSeeAllContents: () => void;
22
+ onSeeAllCombined: () => void;
23
+ activeView: SearchView;
24
+ onChangeView: (view: SearchView) => void;
25
+ activeTab: SearchTab;
26
+ onTabChange: (tab: SearchTab) => void;
27
+ facets: Facet[];
28
+ onFacetToggle: (attribute: string, value: string) => void;
29
+ currentPage: number;
30
+ totalPages: number;
31
+ onPageChange: (page: number) => void;
32
+ isFilterDrawerOpen: boolean;
33
+ onFilterDrawerToggle: () => void;
34
+ onFilterDrawerClose: () => void;
35
+ };
36
+ export {};
@@ -0,0 +1,29 @@
1
+ export { Button } from "./components/Button";
2
+ export type { ButtonProps } from "./components/Button";
3
+ export { Footer, FooterLink, FooterLinkGroup, FooterSocialIcons, FooterSocialIcon, FooterBottom, } from "./experience/Footer";
4
+ export type { FooterProps, FooterLinkItem, SocialLinkItem, FooterLogoProps, FooterLinkProps, FooterLinkGroupProps, FooterSocialIconsProps, FooterSocialIconProps, FooterBottomProps, } from "./experience/Footer";
5
+ export { Pagination, PaginationItem, PaginationButton, PaginationEllipsis, } from "./components/Pagination";
6
+ export type { PaginationProps, PaginationItemProps, PaginationButtonProps, PaginationEllipsisProps, } from "./components/Pagination";
7
+ export { AlgoliaDynamicSearchLeybold } from "./experience/algolia-dynamic-search";
8
+ export { QrFormLeybold } from "./experience/qr-form-journey";
9
+ export { AlgoliaDynamicSearchLeybold as AlgoliaDynamicSearch } from "./experience/algolia-dynamic-search";
10
+ export { QrFormLeybold as QrForm } from "./experience/qr-form-journey";
11
+ export { FederatedSearchExperience } from "./experience/federated-search";
12
+ export type { FederatedSearchProps } from "./types/search";
13
+ export { SearchTriggerButton } from "./components/SearchTriggerButton";
14
+ export { SearchModal, ModalCloseButton } from "./components/SearchModal";
15
+ export { SearchBar, SearchIcon, SearchInput, SearchSubmitButton } from "./components/SearchBar";
16
+ export { FederatedInstantResultsLayout } from "./components/InstantResults";
17
+ export { ResultsColumn } from "./components/ResultsColumn";
18
+ export { ResultsCount } from "./components/ResultsCount";
19
+ export { SeeAllLinkButton } from "./components/SeeAllLinkButton";
20
+ export { ProductCardHorizontal } from "./components/ProductCardHorizontal";
21
+ export { ProductCardVertical } from "./components/ProductCardVertical";
22
+ export { ContentCardHorizontal } from "./components/ContentCardHorizontal";
23
+ export { FederatedResultsView, ResultsList } from "./components/ResultsView";
24
+ export { FiltersPanel, FilterAccordion, FilterItem, FilterSearch, AppliedFilters, AppliedFilterTag, } from "./components/Filters";
25
+ export type { ProductResult, ContentResult, SearchView, SearchTab, SearchTriggerButtonProps, SearchModalProps, SearchBarProps, FederatedInstantResultsLayoutProps, ResultsColumnProps, ProductCardHorizontalProps, ContentCardHorizontalProps, FederatedResultsViewProps, ResultsListProps, Facet, FacetValue, } from "./types/search";
26
+ export type { FiltersPanelProps, FilterAccordionProps, FilterItemProps, FilterSearchProps, AppliedFiltersProps, AppliedFilterTagProps, } from "./components/Filters";
27
+ export type { ResultsCountProps } from "./components/ResultsCount";
28
+ export type { SeeAllLinkButtonProps } from "./components/SeeAllLinkButton";
29
+ export * from "./utils/styles";
@@ -0,0 +1,56 @@
1
+ import * as React from 'react';
2
+ import { ButtonVariant } from '../../../components/Button/Button';
3
+ export interface ButtonVariantData {
4
+ variant: ButtonVariant;
5
+ label: string;
6
+ description?: string;
7
+ category: 'high-emphasis' | 'medium-emphasis' | 'low-emphasis' | 'navigation';
8
+ }
9
+ export declare const BUTTON_VARIANTS: ButtonVariantData[];
10
+ interface ButtonShowcaseRowProps {
11
+ variant: ButtonVariant;
12
+ label: string;
13
+ showHover?: boolean;
14
+ showFocus?: boolean;
15
+ }
16
+ export declare const ButtonShowcaseRow: React.FC<ButtonShowcaseRowProps>;
17
+ interface ButtonGroupProps {
18
+ title: string;
19
+ description?: string;
20
+ variants: ButtonVariantData[];
21
+ }
22
+ export declare const ButtonGroup: React.FC<ButtonGroupProps>;
23
+ interface ButtonExampleProps {
24
+ variant: ButtonVariant;
25
+ label: string;
26
+ description: string;
27
+ }
28
+ export declare const ButtonExample: React.FC<ButtonExampleProps>;
29
+ export declare const StatesHeader: React.FC;
30
+ interface ViewportPanelProps {
31
+ title: string;
32
+ children: React.ReactNode;
33
+ }
34
+ export declare const ViewportPanel: React.FC<ViewportPanelProps>;
35
+ interface ButtonStateRowProps {
36
+ variant: ButtonVariant;
37
+ label: string;
38
+ rowLabel?: string;
39
+ darkBg?: boolean;
40
+ }
41
+ export declare const ButtonStateRow: React.FC<ButtonStateRowProps>;
42
+ export interface ButtonStateTableProps {
43
+ variants: Array<{
44
+ variant: ButtonVariant;
45
+ label: string;
46
+ rowLabel?: string;
47
+ darkBg?: boolean;
48
+ }>;
49
+ }
50
+ export declare const ButtonStateTable: React.FC<ButtonStateTableProps>;
51
+ export declare const getVariantsByCategory: (category: ButtonVariantData['category']) => ButtonVariantData[];
52
+ export declare const HIGH_EMPHASIS_VARIANTS: ButtonVariantData[];
53
+ export declare const MEDIUM_EMPHASIS_VARIANTS: ButtonVariantData[];
54
+ export declare const LOW_EMPHASIS_VARIANTS: ButtonVariantData[];
55
+ export declare const NAVIGATION_VARIANTS: ButtonVariantData[];
56
+ export {};
@@ -0,0 +1,46 @@
1
+ /// <reference types="react" />
2
+ export declare const TYPOGRAPHY_MOBILE: ({
3
+ label: string;
4
+ cssVar: string;
5
+ displaySize: string;
6
+ displayLineHeight: string;
7
+ displayLetterSpacing: string;
8
+ isBody?: undefined;
9
+ } | {
10
+ label: string;
11
+ cssVar: string;
12
+ displaySize: string;
13
+ displayLineHeight: string;
14
+ isBody: boolean;
15
+ displayLetterSpacing?: undefined;
16
+ })[];
17
+ export declare const TYPOGRAPHY_DESKTOP: ({
18
+ label: string;
19
+ cssVar: string;
20
+ displaySize: string;
21
+ displayLineHeight: string;
22
+ displayLetterSpacing: string;
23
+ isBody?: undefined;
24
+ } | {
25
+ label: string;
26
+ cssVar: string;
27
+ displaySize: string;
28
+ displayLineHeight: string;
29
+ isBody: boolean;
30
+ displayLetterSpacing?: undefined;
31
+ })[];
32
+ interface HeadingRowProps {
33
+ label: string;
34
+ cssVar: string;
35
+ displaySize: string;
36
+ displayLineHeight: string;
37
+ displayLetterSpacing?: string;
38
+ isBody?: boolean;
39
+ }
40
+ export declare const HeadingRow: ({ label, cssVar, displaySize, displayLineHeight, displayLetterSpacing, isBody }: HeadingRowProps) => JSX.Element;
41
+ interface ViewportPanelProps {
42
+ title: string;
43
+ items: HeadingRowProps[];
44
+ }
45
+ export declare const ViewportPanel: ({ title, items }: ViewportPanelProps) => JSX.Element;
46
+ export {};
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ interface StoryFooterProps {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare const StoryFooter: ({ children }: StoryFooterProps) => JSX.Element;
6
+ interface StoryHeaderProps {
7
+ title: string;
8
+ subtitle: string;
9
+ }
10
+ export declare const StoryHeader: ({ title, subtitle }: StoryHeaderProps) => JSX.Element;
11
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface ButtonProps {
2
+ label: string;
3
+ onClick: () => void;
4
+ }
@@ -0,0 +1,50 @@
1
+ /// <reference types="react" />
2
+ import { ButtonProps } from "./buttons";
3
+ export interface ProductCardHorizontalProps {
4
+ id?: string;
5
+ title: string;
6
+ url: string;
7
+ imageUrl?: string;
8
+ productId?: string;
9
+ price?: string;
10
+ description?: string;
11
+ className?: string;
12
+ button?: ButtonProps;
13
+ }
14
+ export interface ContentCardHorizontalProps {
15
+ id: string;
16
+ title: string;
17
+ url: string;
18
+ category?: string;
19
+ meta?: string;
20
+ excerpt?: string;
21
+ className?: string;
22
+ button?: ButtonProps;
23
+ variant?: "instant-view" | "results-view";
24
+ }
25
+ export type ProductCardHorizontalPartsProps = ProductCardHorizontalProps;
26
+ export interface ProductCardDetailsProps {
27
+ id?: string;
28
+ title: string;
29
+ description?: string;
30
+ price?: string;
31
+ code?: string;
32
+ imageUrl?: string;
33
+ className?: string;
34
+ button?: ButtonProps;
35
+ facets?: Array<{
36
+ name: string;
37
+ label: string;
38
+ returnsHTML?: boolean;
39
+ }>;
40
+ hit?: Record<string, unknown>;
41
+ ProductCardComponent?: React.FC<ProductCardHorizontalProps>;
42
+ relatedProducts?: Array<{
43
+ code: string;
44
+ name: string;
45
+ price_range: string;
46
+ img_product: string;
47
+ url: string;
48
+ }>;
49
+ hidespares?: string;
50
+ }
@@ -0,0 +1,139 @@
1
+ /// <reference types="react" />
2
+ export interface FacetValue {
3
+ value: string;
4
+ count: number;
5
+ isRefined: boolean;
6
+ }
7
+ export interface Facet {
8
+ id: string;
9
+ label: string;
10
+ attribute: string;
11
+ values: FacetValue[];
12
+ searchable?: boolean;
13
+ defaultExpanded?: boolean;
14
+ }
15
+ export interface ProductResult {
16
+ id: string;
17
+ title: string;
18
+ url: string;
19
+ imageUrl?: string;
20
+ productId?: string;
21
+ price?: string;
22
+ description?: string;
23
+ }
24
+ export interface ContentResult {
25
+ id: string;
26
+ title: string;
27
+ url: string;
28
+ category?: string;
29
+ meta?: string;
30
+ excerpt?: string;
31
+ }
32
+ export type SearchView = "instant" | "results";
33
+ export type SearchTab = "all" | "products" | "content";
34
+ export interface FederatedSearchProps {
35
+ isOpen: boolean;
36
+ onOpen(): void;
37
+ onClose(): void;
38
+ query: string;
39
+ onQueryChange(value: string): void;
40
+ onSearchSubmit(): void;
41
+ products: ProductResult[];
42
+ contents: ContentResult[];
43
+ isLoadingProducts: boolean;
44
+ isLoadingContents: boolean;
45
+ productsError?: string;
46
+ contentsError?: string;
47
+ onSeeAllProducts(): void;
48
+ onSeeAllContents(): void;
49
+ onSeeAllCombined(): void;
50
+ activeView: SearchView;
51
+ onChangeView(view: SearchView): void;
52
+ activeTab: SearchTab;
53
+ onTabChange(tab: SearchTab): void;
54
+ currentPage: number;
55
+ totalPages: number;
56
+ onPageChange(page: number): void;
57
+ facets: Facet[];
58
+ onFacetToggle(attribute: string, value: string): void;
59
+ isFilterDrawerOpen?: boolean;
60
+ onFilterDrawerToggle?: () => void;
61
+ onFilterDrawerClose?: () => void;
62
+ }
63
+ export interface SearchTriggerButtonProps {
64
+ onOpen(): void;
65
+ ariaLabel?: string;
66
+ label?: string;
67
+ className?: string;
68
+ }
69
+ export interface SearchModalProps {
70
+ isOpen: boolean;
71
+ onClose(): void;
72
+ title?: string;
73
+ children: React.ReactNode;
74
+ className?: string;
75
+ stickyHeaderContent?: React.ReactNode;
76
+ }
77
+ export interface SearchBarProps {
78
+ value: string;
79
+ onChange(value: string): void;
80
+ onSubmit(): void;
81
+ placeholder?: string;
82
+ autoFocus?: boolean;
83
+ className?: string;
84
+ variant?: "instant" | "results";
85
+ }
86
+ export interface FederatedInstantResultsLayoutProps {
87
+ query: string;
88
+ products: ProductResult[];
89
+ contents: ContentResult[];
90
+ isLoadingProducts: boolean;
91
+ isLoadingContents: boolean;
92
+ productsError?: string;
93
+ contentsError?: string;
94
+ onSeeAllProducts(): void;
95
+ onSeeAllContents(): void;
96
+ onSeeAllCombined(): void;
97
+ }
98
+ export interface ResultsColumnProps {
99
+ title: string;
100
+ count: number;
101
+ isLoading: boolean;
102
+ error?: string;
103
+ onSeeAll(): void;
104
+ children: React.ReactNode;
105
+ className?: string;
106
+ }
107
+ export interface FederatedResultsViewProps {
108
+ query: string;
109
+ onQueryChange(value: string): void;
110
+ onSearchSubmit(): void;
111
+ activeTab: SearchTab;
112
+ onTabChange(tab: SearchTab): void;
113
+ products: ProductResult[];
114
+ contents: ContentResult[];
115
+ isLoadingProducts: boolean;
116
+ isLoadingContents: boolean;
117
+ productsError?: string;
118
+ contentsError?: string;
119
+ currentPage: number;
120
+ totalPages: number;
121
+ onPageChange(page: number): void;
122
+ facets: Facet[];
123
+ onFacetToggle(attribute: string, value: string): void;
124
+ isFilterDrawerOpen?: boolean;
125
+ onFilterDrawerToggle?: () => void;
126
+ onFilterDrawerClose?: () => void;
127
+ }
128
+ export interface FiltersPanelPropsOld {
129
+ className?: string;
130
+ }
131
+ export interface ResultsListProps {
132
+ type: "products" | "content" | "all";
133
+ products?: ProductResult[];
134
+ contents?: ContentResult[];
135
+ isLoading: boolean;
136
+ error?: string;
137
+ className?: string;
138
+ }
139
+ export type { ProductCardHorizontalProps, ContentCardHorizontalProps } from "./cards";
@@ -0,0 +1 @@
1
+ export {};