@envive-ai/react-toolkit-v3 0.3.11 → 0.3.13

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 (119) hide show
  1. package/dist/AnimatedText/AnimatedText.d.cts +3 -3
  2. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.cts +2 -2
  3. package/dist/CSSVariablesEditor/CssVariablesEditorComponent.d.ts +2 -2
  4. package/dist/Carousel/Carousel.d.cts +2 -2
  5. package/dist/Carousel/Carousel.d.ts +2 -2
  6. package/dist/Carousel/components/Container.cjs +11 -3
  7. package/dist/Carousel/components/Container.js +12 -4
  8. package/dist/ChatFooter/ChatFooter.d.cts +2 -2
  9. package/dist/ChatFooter/ChatFooter.d.ts +2 -2
  10. package/dist/ChatFooter/components/Layout.cjs +2 -8
  11. package/dist/ChatFooter/components/Layout.js +2 -8
  12. package/dist/ChatFooter/components/index.d.cts +5 -5
  13. package/dist/ChatFooter/components/index.d.ts +3 -3
  14. package/dist/ChatHeader/ChatHeader.d.cts +2 -2
  15. package/dist/ChatHeader/ChatHeader.d.ts +2 -2
  16. package/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +1 -1
  17. package/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +1 -1
  18. package/dist/ChatPreview/ChatPreview.d.cts +2 -2
  19. package/dist/ChatPreview/ChatPreview.d.ts +2 -2
  20. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.cts +2 -2
  21. package/dist/ChatPreviewComparison/ChatPreviewComparison.d.ts +2 -2
  22. package/dist/ChatPreviewComparison/components/Layout.cjs +4 -3
  23. package/dist/ChatPreviewComparison/components/Layout.js +4 -3
  24. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.cts +2 -2
  25. package/dist/ChatPreviewLoading/ChatPreviewLoading.d.ts +2 -2
  26. package/dist/Container/Container.d.cts +178 -178
  27. package/dist/Container/Container.d.ts +8 -8
  28. package/dist/DesignTokens/DesignTokensComponent.d.cts +2 -2
  29. package/dist/DesignTokens/DesignTokensComponent.d.ts +2 -2
  30. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.cts +2 -2
  31. package/dist/DocumentRetrievalCard/DocumentRetrievalCard.d.ts +2 -2
  32. package/dist/FloatingButton/FloatingButton.d.cts +2 -2
  33. package/dist/FloatingButton/FloatingButton.d.ts +2 -2
  34. package/dist/FloatingChat/FloatingChat.cjs +6 -3
  35. package/dist/FloatingChat/FloatingChat.d.cts +2 -2
  36. package/dist/FloatingChat/FloatingChat.d.ts +2 -2
  37. package/dist/FloatingChat/FloatingChat.js +6 -3
  38. package/dist/FloatingChat/hooks/useSnapSetup.cjs +10 -7
  39. package/dist/FloatingChat/hooks/useSnapSetup.js +10 -7
  40. package/dist/FullPageSalesAgent/FullPageSalesAgent.cjs +3 -2
  41. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.cts +2 -2
  42. package/dist/FullPageSalesAgent/FullPageSalesAgent.d.ts +2 -2
  43. package/dist/FullPageSalesAgent/FullPageSalesAgent.js +3 -2
  44. package/dist/FullPageSalesAgent/hooks/useContainerResizerObserver.cjs +3 -3
  45. package/dist/FullPageSalesAgent/hooks/useContainerResizerObserver.js +3 -3
  46. package/dist/Image/Image.cjs +5 -0
  47. package/dist/Image/Image.d.cts +2 -2
  48. package/dist/Image/Image.d.ts +2 -2
  49. package/dist/Image/Image.js +5 -0
  50. package/dist/ImageGallery/ImageGallery.d.cts +2 -2
  51. package/dist/MarkdownProcessor/MarkdownProcessor.cjs +14 -27
  52. package/dist/MarkdownProcessor/MarkdownProcessor.d.cts +3 -5
  53. package/dist/MarkdownProcessor/MarkdownProcessor.d.ts +1 -3
  54. package/dist/MarkdownProcessor/MarkdownProcessor.js +15 -26
  55. package/dist/MarkdownProcessor/components/index.cjs +1 -3
  56. package/dist/MarkdownProcessor/components/index.js +1 -3
  57. package/dist/MarkdownProcessor/utils/functions.cjs +1 -11
  58. package/dist/MarkdownProcessor/utils/functions.js +1 -10
  59. package/dist/ProductCard/ProductCard.d.cts +2 -2
  60. package/dist/ProductCard/components/Header.cjs +33 -7
  61. package/dist/ProductCard/components/Header.js +34 -8
  62. package/dist/PromptButton/PromptButton.d.cts +2 -2
  63. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.cts +2 -2
  64. package/dist/PromptButtonCarouselWithImage/PromptButtonCarouselWithImage.d.ts +2 -2
  65. package/dist/PromptCarousel/PromptCarousel.cjs +19 -28
  66. package/dist/PromptCarousel/PromptCarousel.d.cts +2 -2
  67. package/dist/PromptCarousel/PromptCarousel.d.ts +2 -2
  68. package/dist/PromptCarousel/PromptCarousel.js +19 -28
  69. package/dist/ReviewCard/ReviewCard.d.cts +2 -2
  70. package/dist/ReviewCard/ReviewCard.d.ts +2 -2
  71. package/dist/ReviewCard/components/index.d.cts +6 -6
  72. package/dist/ReviewCard/components/index.d.ts +4 -4
  73. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.cts +2 -2
  74. package/dist/SalesAgentProductCard/SalesAgentProductCard.d.ts +2 -2
  75. package/dist/SalesAgentProductCard/components/index.d.cts +8 -8
  76. package/dist/SalesAgentProductCard/components/index.d.ts +6 -6
  77. package/dist/SocialProof/SocialProof.d.cts +2 -2
  78. package/dist/SocialProof/SocialProof.d.ts +2 -2
  79. package/dist/Stack/Stack.d.ts +2 -2
  80. package/dist/TitledPromptCarousel/TitledPromptCarousel.d.ts +2 -2
  81. package/dist/TypingAnimation/TypingAnimation.cjs +58 -18
  82. package/dist/TypingAnimation/TypingAnimation.d.cts +2 -2
  83. package/dist/TypingAnimation/TypingAnimation.d.ts +2 -2
  84. package/dist/TypingAnimation/TypingAnimation.js +59 -19
  85. package/dist/Typography/Typography.d.cts +4 -4
  86. package/dist/Typography/Typography.d.ts +4 -4
  87. package/dist/WidgetTextField/WidgetTextField.d.cts +2 -2
  88. package/dist/WidgetTextField/WidgetTextField.d.ts +2 -2
  89. package/dist/WidgetWrapper/WidgetWrapper.d.cts +2 -2
  90. package/dist/WidgetWrapper/WidgetWrapper.d.ts +2 -2
  91. package/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.d.cts +2 -2
  92. package/dist/styles.css +1 -1
  93. package/dist/utils/useAnimatedTextMinHeight.cjs +28 -0
  94. package/dist/utils/useAnimatedTextMinHeight.js +27 -0
  95. package/package.json +1 -3
  96. package/src/components/Carousel/components/Container.tsx +15 -3
  97. package/src/components/ChatFooter/components/Layout.tsx +2 -14
  98. package/src/components/ChatHeader/hooks/useGetCloseButtonProperties.ts +1 -1
  99. package/src/components/ChatPreviewComparison/components/Layout.tsx +2 -2
  100. package/src/components/FloatingChat/FloatingChat.tsx +5 -2
  101. package/src/components/FloatingChat/hooks/useSnapSetup.ts +11 -4
  102. package/src/components/FullPageSalesAgent/FullPageSalesAgent.tsx +6 -2
  103. package/src/components/FullPageSalesAgent/components/Layout.tsx +1 -1
  104. package/src/components/FullPageSalesAgent/hooks/useContainerResizerObserver.ts +4 -3
  105. package/src/components/FullPageSalesAgent/hooks/useIsMobile.ts +1 -1
  106. package/src/components/Image/Image.tsx +2 -0
  107. package/src/components/MarkdownProcessor/MarkdownProcessor.tsx +3 -19
  108. package/src/components/MarkdownProcessor/__tests__/MarkdownProcessor.test.tsx +1 -39
  109. package/src/components/MarkdownProcessor/components/index.ts +0 -2
  110. package/src/components/MarkdownProcessor/utils/functions.tsx +0 -19
  111. package/src/components/ProductCard/components/Header.tsx +39 -9
  112. package/src/components/PromptCarousel/PromptCarousel.tsx +29 -31
  113. package/src/components/TypingAnimation/TypingAnimation.tsx +68 -22
  114. package/src/components/utils/useAnimatedTextMinHeight.ts +29 -0
  115. package/dist/ChatFooter/hooks/useGetButtonScrollProperties.cjs +0 -18
  116. package/dist/ChatFooter/hooks/useGetButtonScrollProperties.js +0 -17
  117. package/dist/MarkdownProcessor/components/MarkdownSubscript.cjs +0 -15
  118. package/dist/MarkdownProcessor/components/MarkdownSubscript.js +0 -14
  119. package/src/components/MarkdownProcessor/components/MarkdownSubscript.tsx +0 -22
@@ -30,7 +30,7 @@ const FloatingChat = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTO
30
30
  const finalTheme = resolveTheme(theme);
31
31
  const [query, setQuery] = useState("");
32
32
  const chatMessagesRef = useRef(null);
33
- const { headerBackgroundColor, headerMode, welcomeMessageIconColor, showVerifiedBuyer, userQueryInputEnabled = true, showEnviveLogo, ignoreFirstModelResponse, neverShowSingleProductCards } = floatingChatConfig;
33
+ const { headerBackgroundColor, headerMode, welcomeMessageIconColor, showVerifiedBuyer, userQueryInputEnabled = true, showEnviveLogo, ignoreFirstModelResponse, neverShowSingleProductCards, partialViewConfig } = floatingChatConfig;
34
34
  const { welcomeMessageTitle, welcomeMessageText, chatFooterTextFieldPlaceholderText, disclaimerText } = hardcopyContent?.values ?? {};
35
35
  const { agentName, chatHeaderLogoDarkSrc, chatHeaderLogoLightSrc } = lookAndFeelConfig;
36
36
  const { messages, isResponseStreaming, isPendingResponse, suggestions, onSuggestionClicked, onTypedMessageSubmitted, onFormResponseSubmitted } = salesAgentData;
@@ -45,7 +45,10 @@ const FloatingChat = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTO
45
45
  onClose();
46
46
  }
47
47
  };
48
- const { modalSheetControl, maxSwipeableViewHeight, isOpen, isMobile, snaps, initialSnap, shouldAutoExpand, currentSnapPercentage, handleSnapChange, animationKey, mobileHeaderHeight, shouldShowHeader, isFullView, isPartialView } = useSnapSetup({ isFloatingChatOpen });
48
+ const { modalSheetControl, maxSwipeableViewHeight, isOpen, isMobile, snaps, initialSnap, shouldAutoExpand, currentSnapPercentage, handleSnapChange, animationKey, mobileHeaderHeight, shouldShowHeader, isFullView, isPartialView } = useSnapSetup({
49
+ isFloatingChatOpen,
50
+ partialViewDisabled: partialViewConfig?.disabled ?? false
51
+ });
49
52
  const { showScrollButton, scrollToBottom, isFloatingLayout } = useScrollToBottom({
50
53
  messagesRef: chatMessagesRef,
51
54
  autoScrollDependencies: [
@@ -125,7 +128,7 @@ const FloatingChat = ({ id, className, style, testId, theme = Theme.GLOBAL_CUSTO
125
128
  setGeneralSuggestions([]);
126
129
  },
127
130
  textFieldPlaceholderText: chatFooterTextFieldPlaceholderText,
128
- promptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0 ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
131
+ promptSuggestions: isPendingResponse || isResponseStreaming ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
129
132
  handleButtonClick: (buttonText) => {
130
133
  const suggestion = suggestions.find((s) => s.content === buttonText && !s.isAnswer);
131
134
  if (suggestion) onSuggestionClicked(suggestion, ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
@@ -4,18 +4,21 @@ let react = require("react");
4
4
  let framer_motion = require("framer-motion");
5
5
 
6
6
  //#region src/components/FloatingChat/hooks/useSnapSetup.ts
7
- const useSnapSetup = ({ isFloatingChatOpen }) => {
7
+ const useSnapSetup = ({ isFloatingChatOpen, partialViewDisabled }) => {
8
8
  const maxSwipeableViewHeight = 89;
9
9
  const modalSheetControl = (0, react.useRef)(null);
10
10
  const { viewportWidth } = require_useCheckIsMobile.useCheckIsMobile();
11
11
  const isMobile = viewportWidth !== void 0 && viewportWidth < 512;
12
12
  const shouldAutoExpand = Boolean(isMobile && window?._spiffy?.selectedCustomizeOption);
13
- const snaps = shouldAutoExpand ? [43, 100] : [
14
- 0,
15
- 43,
16
- 100
17
- ];
18
- const initialSnap = 1;
13
+ const snaps = (() => {
14
+ if (partialViewDisabled) return shouldAutoExpand ? [100] : [0, 100];
15
+ return shouldAutoExpand ? [43, 100] : [
16
+ 0,
17
+ 43,
18
+ 100
19
+ ];
20
+ })();
21
+ const initialSnap = partialViewDisabled ? shouldAutoExpand ? 0 : 1 : 1;
19
22
  const [currentSnapPercentage, setCurrentSnapPercentage] = (0, react.useState)(snaps[initialSnap] || 43);
20
23
  const animationKey = (0, framer_motion.useMotionValue)(0);
21
24
  const snap43Percent = 57 / 100 * window.innerHeight;
@@ -3,18 +3,21 @@ import { useEffect, useRef, useState } from "react";
3
3
  import { useMotionValue, useTransform } from "framer-motion";
4
4
 
5
5
  //#region src/components/FloatingChat/hooks/useSnapSetup.ts
6
- const useSnapSetup = ({ isFloatingChatOpen }) => {
6
+ const useSnapSetup = ({ isFloatingChatOpen, partialViewDisabled }) => {
7
7
  const maxSwipeableViewHeight = 89;
8
8
  const modalSheetControl = useRef(null);
9
9
  const { viewportWidth } = useCheckIsMobile();
10
10
  const isMobile = viewportWidth !== void 0 && viewportWidth < 512;
11
11
  const shouldAutoExpand = Boolean(isMobile && window?._spiffy?.selectedCustomizeOption);
12
- const snaps = shouldAutoExpand ? [43, 100] : [
13
- 0,
14
- 43,
15
- 100
16
- ];
17
- const initialSnap = 1;
12
+ const snaps = (() => {
13
+ if (partialViewDisabled) return shouldAutoExpand ? [100] : [0, 100];
14
+ return shouldAutoExpand ? [43, 100] : [
15
+ 0,
16
+ 43,
17
+ 100
18
+ ];
19
+ })();
20
+ const initialSnap = partialViewDisabled ? shouldAutoExpand ? 0 : 1 : 1;
18
21
  const [currentSnapPercentage, setCurrentSnapPercentage] = useState(snaps[initialSnap] || 43);
19
22
  const animationKey = useMotionValue(0);
20
23
  const snap43Percent = 57 / 100 * window.innerHeight;
@@ -69,7 +69,7 @@ const FullPageSalesAgent = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, floatin
69
69
  isLoadingPromptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0,
70
70
  hideEnviveWatermark: !showEnviveLogo,
71
71
  textFieldPlaceholderText: chatFooterTextFieldPlaceholderText,
72
- promptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0 ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
72
+ promptSuggestions: isPendingResponse || isResponseStreaming ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
73
73
  handleButtonClick: (buttonText) => {
74
74
  const suggestion = suggestions.find((s) => s.content === buttonText && !s.isAnswer);
75
75
  if (suggestion) onSuggestionClicked(suggestion, __envive_ai_react_hooks_application_models.ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
@@ -80,7 +80,8 @@ const FullPageSalesAgent = ({ theme = require_theme.Theme.GLOBAL_CUSTOM, floatin
80
80
  onSubmit: () => {
81
81
  onTypedMessageSubmitted({
82
82
  query,
83
- userTyped: true
83
+ userTyped: true,
84
+ displayLocation: __envive_ai_react_hooks_application_models.ChatElementDisplayLocationV3.FLOATING_CHAT_TEXT_INPUT
84
85
  });
85
86
  setAnswerSuggestions([]);
86
87
  setGeneralSuggestions([]);
@@ -1,5 +1,5 @@
1
1
  import { Theme } from "../tokens/theme/theme.cjs";
2
- import * as react_jsx_runtime26 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime22 from "react/jsx-runtime";
3
3
  import { FloatingChatConfig, LookAndFeelConfig } from "@envive-ai/react-hooks/contexts/typesV3";
4
4
  import { HardcopyResponse } from "@envive-ai/react-hooks/contexts/hardcopyContext";
5
5
 
@@ -19,6 +19,6 @@ declare const FullPageSalesAgent: ({
19
19
  hardcopyContent,
20
20
  headerContainer,
21
21
  autoHeight
22
- }: FullPageSalesAgentProps) => react_jsx_runtime26.JSX.Element;
22
+ }: FullPageSalesAgentProps) => react_jsx_runtime22.JSX.Element;
23
23
  //#endregion
24
24
  export { FullPageSalesAgent };
@@ -1,5 +1,5 @@
1
1
  import { Theme } from "../packages/components-v3/tokens/theme/theme.js";
2
- import * as react_jsx_runtime20 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime23 from "react/jsx-runtime";
3
3
  import { FloatingChatConfig, LookAndFeelConfig } from "@envive-ai/react-hooks/contexts/typesV3";
4
4
  import { HardcopyResponse } from "@envive-ai/react-hooks/contexts/hardcopyContext";
5
5
 
@@ -19,6 +19,6 @@ declare const FullPageSalesAgent: ({
19
19
  hardcopyContent,
20
20
  headerContainer,
21
21
  autoHeight
22
- }: FullPageSalesAgentProps) => react_jsx_runtime20.JSX.Element;
22
+ }: FullPageSalesAgentProps) => react_jsx_runtime23.JSX.Element;
23
23
  //#endregion
24
24
  export { FullPageSalesAgent };
@@ -68,7 +68,7 @@ const FullPageSalesAgent = ({ theme = Theme.GLOBAL_CUSTOM, floatingChatConfig, l
68
68
  isLoadingPromptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0,
69
69
  hideEnviveWatermark: !showEnviveLogo,
70
70
  textFieldPlaceholderText: chatFooterTextFieldPlaceholderText,
71
- promptSuggestions: isPendingResponse || isResponseStreaming || generalSuggestions.length === 0 ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
71
+ promptSuggestions: isPendingResponse || isResponseStreaming ? ["Loading suggestions 1...", "Loading suggestions 2..."] : generalSuggestions,
72
72
  handleButtonClick: (buttonText) => {
73
73
  const suggestion = suggestions.find((s) => s.content === buttonText && !s.isAnswer);
74
74
  if (suggestion) onSuggestionClicked(suggestion, ChatElementDisplayLocationV3.FLOATING_CHAT_PROMPT_BUTTON);
@@ -79,7 +79,8 @@ const FullPageSalesAgent = ({ theme = Theme.GLOBAL_CUSTOM, floatingChatConfig, l
79
79
  onSubmit: () => {
80
80
  onTypedMessageSubmitted({
81
81
  query,
82
- userTyped: true
82
+ userTyped: true,
83
+ displayLocation: ChatElementDisplayLocationV3.FLOATING_CHAT_TEXT_INPUT
83
84
  });
84
85
  setAnswerSuggestions([]);
85
86
  setGeneralSuggestions([]);
@@ -5,10 +5,10 @@ let react = require("react");
5
5
  const useContainerResizerObserver = ({ headerContainer, autoHeight }) => {
6
6
  const [containerHeight, setContainerHeight] = (0, react.useState)("100%");
7
7
  (0, react.useEffect)(() => {
8
- if (!autoHeight) return null;
8
+ if (!autoHeight) return () => {};
9
9
  const watchResizing = () => {
10
- const header = document.querySelector(headerContainer)?.getBoundingClientRect()?.height || 0;
11
- setContainerHeight(window.innerHeight - header);
10
+ const { height = 0, top = 0 } = document.querySelector(headerContainer)?.getBoundingClientRect() || {};
11
+ setContainerHeight(window.innerHeight - (height + top));
12
12
  };
13
13
  window.addEventListener("resize", watchResizing);
14
14
  watchResizing();
@@ -4,10 +4,10 @@ import { useEffect, useState } from "react";
4
4
  const useContainerResizerObserver = ({ headerContainer, autoHeight }) => {
5
5
  const [containerHeight, setContainerHeight] = useState("100%");
6
6
  useEffect(() => {
7
- if (!autoHeight) return null;
7
+ if (!autoHeight) return () => {};
8
8
  const watchResizing = () => {
9
- const header = document.querySelector(headerContainer)?.getBoundingClientRect()?.height || 0;
10
- setContainerHeight(window.innerHeight - header);
9
+ const { height = 0, top = 0 } = document.querySelector(headerContainer)?.getBoundingClientRect() || {};
10
+ setContainerHeight(window.innerHeight - (height + top));
11
11
  };
12
12
  window.addEventListener("resize", watchResizing);
13
13
  watchResizing();
@@ -52,8 +52,13 @@ const Image = ({ id, testId, src, alt, aspectRatio = require_index.ImageAspectRa
52
52
  src,
53
53
  alt,
54
54
  className: (0, classnames.default)("envive-tw-h-full envive-tw-w-full", objectFitClass, isLoading && "envive-tw-opacity-0"),
55
+ style: {
56
+ userSelect: "none",
57
+ WebkitUserDrag: "none"
58
+ },
55
59
  onLoad: handleLoad,
56
60
  onError: handleError,
61
+ draggable: false,
57
62
  ...accessibilityProps,
58
63
  ...rest
59
64
  })]
@@ -1,5 +1,5 @@
1
1
  import { ImageProps } from "./types/index.cjs";
2
- import * as react_jsx_runtime27 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime25 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/Image/Image.d.ts
5
5
 
@@ -25,6 +25,6 @@ declare const Image: ({
25
25
  role,
26
26
  "aria-hidden": ariaHidden,
27
27
  ...rest
28
- }: ImageProps) => react_jsx_runtime27.JSX.Element;
28
+ }: ImageProps) => react_jsx_runtime25.JSX.Element;
29
29
  //#endregion
30
30
  export { Image };
@@ -1,5 +1,5 @@
1
1
  import { ImageProps } from "./types/index.js";
2
- import * as react_jsx_runtime15 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime20 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/Image/Image.d.ts
5
5
 
@@ -25,6 +25,6 @@ declare const Image: ({
25
25
  role,
26
26
  "aria-hidden": ariaHidden,
27
27
  ...rest
28
- }: ImageProps) => react_jsx_runtime15.JSX.Element;
28
+ }: ImageProps) => react_jsx_runtime20.JSX.Element;
29
29
  //#endregion
30
30
  export { Image };
@@ -50,8 +50,13 @@ const Image = ({ id, testId, src, alt, aspectRatio = ImageAspectRatio.GLOBAL_CUS
50
50
  src,
51
51
  alt,
52
52
  className: classNames("envive-tw-h-full envive-tw-w-full", objectFitClass, isLoading && "envive-tw-opacity-0"),
53
+ style: {
54
+ userSelect: "none",
55
+ WebkitUserDrag: "none"
56
+ },
53
57
  onLoad: handleLoad,
54
58
  onError: handleError,
59
+ draggable: false,
55
60
  ...accessibilityProps,
56
61
  ...rest
57
62
  })]
@@ -1,5 +1,5 @@
1
1
  import { ImageGalleryProps } from "./types/types.cjs";
2
- import * as react_jsx_runtime30 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime18 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/ImageGallery/ImageGallery.d.ts
5
5
 
@@ -40,6 +40,6 @@ declare const ImageGallery: ({
40
40
  "aria-describedby": ariaDescribedBy,
41
41
  role,
42
42
  "aria-hidden": ariaHidden
43
- }: ImageGalleryProps) => react_jsx_runtime30.JSX.Element;
43
+ }: ImageGalleryProps) => react_jsx_runtime18.JSX.Element;
44
44
  //#endregion
45
45
  export { ImageGallery };
@@ -5,39 +5,26 @@ let react = require("react");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  let react_markdown = require("react-markdown");
7
7
  react_markdown = require_rolldown_runtime.__toESM(react_markdown);
8
- let remark_gfm = require("remark-gfm");
9
- remark_gfm = require_rolldown_runtime.__toESM(remark_gfm);
10
- let rehype_raw = require("rehype-raw");
11
- rehype_raw = require_rolldown_runtime.__toESM(rehype_raw);
12
8
 
13
9
  //#region src/components/MarkdownProcessor/MarkdownProcessor.tsx
14
- const MarkdownProcessor = ({ content, clampParagraphs = void 0, textColor, textVariant, subTextVariant, subTextColor }) => {
10
+ const MarkdownProcessor = ({ content, clampParagraphs = void 0, textColor, textVariant }) => {
15
11
  const processedContent = content.replace(/<br\s*[\\/]?>/gi, "\n\n");
16
- const components = (0, react.useMemo)(() => ({
17
- li: require_index.MarkdownProcessorComponents.MarkdownListItem,
18
- ul: require_index.MarkdownProcessorComponents.MarkdownUnorderedList,
19
- ol: require_index.MarkdownProcessorComponents.MarkdownOrderedList,
20
- a: require_index.MarkdownProcessorComponents.MarkdownLink,
21
- p: require_functions.createMarkdownParagraphComponent({
12
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_markdown.default, {
13
+ components: (0, react.useMemo)(() => ({
14
+ li: require_index.MarkdownProcessorComponents.MarkdownListItem,
15
+ ul: require_index.MarkdownProcessorComponents.MarkdownUnorderedList,
16
+ ol: require_index.MarkdownProcessorComponents.MarkdownOrderedList,
17
+ a: require_index.MarkdownProcessorComponents.MarkdownLink,
18
+ p: require_functions.createMarkdownParagraphComponent({
19
+ clampParagraphs,
20
+ textColor,
21
+ textVariant
22
+ })
23
+ }), [
22
24
  clampParagraphs,
23
25
  textColor,
24
26
  textVariant
25
- }),
26
- sub: require_functions.createMarkdownSubscriptComponent({
27
- subTextVariant,
28
- subTextColor
29
- })
30
- }), [
31
- clampParagraphs,
32
- textColor,
33
- textVariant,
34
- subTextVariant,
35
- subTextColor
36
- ]);
37
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_markdown.default, {
38
- remarkPlugins: [remark_gfm.default],
39
- rehypePlugins: [rehype_raw.default],
40
- components,
27
+ ]),
41
28
  children: processedContent
42
29
  });
43
30
  };
@@ -1,14 +1,12 @@
1
1
  import { MarkdownProcessorProps } from "./types/types.cjs";
2
- import * as react_jsx_runtime24 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime17 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/MarkdownProcessor/MarkdownProcessor.d.ts
5
5
  declare const MarkdownProcessor: ({
6
6
  content,
7
7
  clampParagraphs,
8
8
  textColor,
9
- textVariant,
10
- subTextVariant,
11
- subTextColor
12
- }: MarkdownProcessorProps) => react_jsx_runtime24.JSX.Element;
9
+ textVariant
10
+ }: MarkdownProcessorProps) => react_jsx_runtime17.JSX.Element;
13
11
  //#endregion
14
12
  export { MarkdownProcessor };
@@ -6,9 +6,7 @@ declare const MarkdownProcessor: ({
6
6
  content,
7
7
  clampParagraphs,
8
8
  textColor,
9
- textVariant,
10
- subTextVariant,
11
- subTextColor
9
+ textVariant
12
10
  }: MarkdownProcessorProps) => react_jsx_runtime18.JSX.Element;
13
11
  //#endregion
14
12
  export { MarkdownProcessor };
@@ -1,39 +1,28 @@
1
1
  import { MarkdownProcessorComponents } from "./components/index.js";
2
- import { createMarkdownParagraphComponent, createMarkdownSubscriptComponent } from "./utils/functions.js";
2
+ import { createMarkdownParagraphComponent } from "./utils/functions.js";
3
3
  import { useMemo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import ReactMarkdown from "react-markdown";
6
- import remarkGfm from "remark-gfm";
7
- import rehypeRaw from "rehype-raw";
8
6
 
9
7
  //#region src/components/MarkdownProcessor/MarkdownProcessor.tsx
10
- const MarkdownProcessor = ({ content, clampParagraphs = void 0, textColor, textVariant, subTextVariant, subTextColor }) => {
8
+ const MarkdownProcessor = ({ content, clampParagraphs = void 0, textColor, textVariant }) => {
11
9
  const processedContent = content.replace(/<br\s*[\\/]?>/gi, "\n\n");
12
- const components = useMemo(() => ({
13
- li: MarkdownProcessorComponents.MarkdownListItem,
14
- ul: MarkdownProcessorComponents.MarkdownUnorderedList,
15
- ol: MarkdownProcessorComponents.MarkdownOrderedList,
16
- a: MarkdownProcessorComponents.MarkdownLink,
17
- p: createMarkdownParagraphComponent({
10
+ return /* @__PURE__ */ jsx(ReactMarkdown, {
11
+ components: useMemo(() => ({
12
+ li: MarkdownProcessorComponents.MarkdownListItem,
13
+ ul: MarkdownProcessorComponents.MarkdownUnorderedList,
14
+ ol: MarkdownProcessorComponents.MarkdownOrderedList,
15
+ a: MarkdownProcessorComponents.MarkdownLink,
16
+ p: createMarkdownParagraphComponent({
17
+ clampParagraphs,
18
+ textColor,
19
+ textVariant
20
+ })
21
+ }), [
18
22
  clampParagraphs,
19
23
  textColor,
20
24
  textVariant
21
- }),
22
- sub: createMarkdownSubscriptComponent({
23
- subTextVariant,
24
- subTextColor
25
- })
26
- }), [
27
- clampParagraphs,
28
- textColor,
29
- textVariant,
30
- subTextVariant,
31
- subTextColor
32
- ]);
33
- return /* @__PURE__ */ jsx(ReactMarkdown, {
34
- remarkPlugins: [remarkGfm],
35
- rehypePlugins: [rehypeRaw],
36
- components,
25
+ ]),
37
26
  children: processedContent
38
27
  });
39
28
  };
@@ -3,7 +3,6 @@ const require_MarkdownLink = require('./MarkdownLink.cjs');
3
3
  const require_MarkdownOrderedList = require('./MarkdownOrderedList.cjs');
4
4
  const require_MarkdownUnorderedList = require('./MarkdownUnorderedList.cjs');
5
5
  const require_MarkdownParagraph = require('./MarkdownParagraph.cjs');
6
- const require_MarkdownSubscript = require('./MarkdownSubscript.cjs');
7
6
 
8
7
  //#region src/components/MarkdownProcessor/components/index.ts
9
8
  const MarkdownProcessorComponents = {
@@ -11,8 +10,7 @@ const MarkdownProcessorComponents = {
11
10
  MarkdownLink: require_MarkdownLink.MarkdownLink,
12
11
  MarkdownOrderedList: require_MarkdownOrderedList.MarkdownOrderedList,
13
12
  MarkdownUnorderedList: require_MarkdownUnorderedList.MarkdownUnorderedList,
14
- MarkdownParagraph: require_MarkdownParagraph.MarkdownParagraph,
15
- MarkdownSubscript: require_MarkdownSubscript.MarkdownSubscript
13
+ MarkdownParagraph: require_MarkdownParagraph.MarkdownParagraph
16
14
  };
17
15
 
18
16
  //#endregion
@@ -3,7 +3,6 @@ import { MarkdownLink } from "./MarkdownLink.js";
3
3
  import { MarkdownOrderedList } from "./MarkdownOrderedList.js";
4
4
  import { MarkdownUnorderedList } from "./MarkdownUnorderedList.js";
5
5
  import { MarkdownParagraph } from "./MarkdownParagraph.js";
6
- import { MarkdownSubscript } from "./MarkdownSubscript.js";
7
6
 
8
7
  //#region src/components/MarkdownProcessor/components/index.ts
9
8
  const MarkdownProcessorComponents = {
@@ -11,8 +10,7 @@ const MarkdownProcessorComponents = {
11
10
  MarkdownLink,
12
11
  MarkdownOrderedList,
13
12
  MarkdownUnorderedList,
14
- MarkdownParagraph,
15
- MarkdownSubscript
13
+ MarkdownParagraph
16
14
  };
17
15
 
18
16
  //#endregion
@@ -13,16 +13,6 @@ const createMarkdownParagraphComponent = ({ clampParagraphs, textColor, textVari
13
13
  Component.displayName = "MarkdownParagraphComponent";
14
14
  return Component;
15
15
  };
16
- const createMarkdownSubscriptComponent = ({ subTextVariant, subTextColor }) => {
17
- const Component = ({ children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.MarkdownProcessorComponents.MarkdownSubscript, {
18
- subTextVariant,
19
- subTextColor,
20
- children
21
- });
22
- Component.displayName = "MarkdownSubscriptComponent";
23
- return Component;
24
- };
25
16
 
26
17
  //#endregion
27
- exports.createMarkdownParagraphComponent = createMarkdownParagraphComponent;
28
- exports.createMarkdownSubscriptComponent = createMarkdownSubscriptComponent;
18
+ exports.createMarkdownParagraphComponent = createMarkdownParagraphComponent;
@@ -12,15 +12,6 @@ const createMarkdownParagraphComponent = ({ clampParagraphs, textColor, textVari
12
12
  Component.displayName = "MarkdownParagraphComponent";
13
13
  return Component;
14
14
  };
15
- const createMarkdownSubscriptComponent = ({ subTextVariant, subTextColor }) => {
16
- const Component = ({ children }) => /* @__PURE__ */ jsx(MarkdownProcessorComponents.MarkdownSubscript, {
17
- subTextVariant,
18
- subTextColor,
19
- children
20
- });
21
- Component.displayName = "MarkdownSubscriptComponent";
22
- return Component;
23
- };
24
15
 
25
16
  //#endregion
26
- export { createMarkdownParagraphComponent, createMarkdownSubscriptComponent };
17
+ export { createMarkdownParagraphComponent };
@@ -1,5 +1,5 @@
1
1
  import { ProductCardProps } from "./types/index.cjs";
2
- import * as react_jsx_runtime13 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime2 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/ProductCard/ProductCard.d.ts
5
5
  declare const ProductCard: ({
@@ -18,6 +18,6 @@ declare const ProductCard: ({
18
18
  loop,
19
19
  onSelect,
20
20
  onInputClick
21
- }: ProductCardProps) => react_jsx_runtime13.JSX.Element;
21
+ }: ProductCardProps) => react_jsx_runtime2.JSX.Element;
22
22
  //#endregion
23
23
  export { ProductCard };
@@ -6,6 +6,7 @@ require('../../Stack/index.cjs');
6
6
  const require_index = require('../../Typography/types/index.cjs');
7
7
  const require_Typography = require('../../Typography/Typography.cjs');
8
8
  require('../../Typography/index.cjs');
9
+ const require_useAnimatedTextMinHeight = require('../../utils/useAnimatedTextMinHeight.cjs');
9
10
  const require_useGetHeaderProperties = require('../hooks/useGetHeaderProperties.cjs');
10
11
  let react = require("react");
11
12
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -13,10 +14,15 @@ let react_jsx_runtime = require("react/jsx-runtime");
13
14
  //#region src/components/ProductCard/components/Header.tsx
14
15
  const Header = ({ headline, italicizeHeadline, animatedText, textTypingDuration, textTransition, loop }) => {
15
16
  const { stackClasses, headlineClasses } = require_useGetHeaderProperties.useGetHeaderProperties(italicizeHeadline);
17
+ const { measuringRef, minHeight } = require_useAnimatedTextMinHeight.useAnimatedTextMinHeight(animatedText);
18
+ const biggestText = (0, react.useMemo)(() => {
19
+ return animatedText.reduce((maxText, currText) => {
20
+ return currText.length > maxText.length ? currText : maxText;
21
+ }, "");
22
+ }, [animatedText]);
16
23
  const animatedTextWrapper = (0, react.useCallback)((text) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.Typography, {
17
24
  variant: require_index.TypographyVariant.B3_MD,
18
25
  color: require_index.TypographyColor.TEXT_LIGHT,
19
- numberOfLines: 2,
20
26
  children: text
21
27
  }), []);
22
28
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Stack.Stack, {
@@ -28,12 +34,32 @@ const Header = ({ headline, italicizeHeadline, animatedText, textTypingDuration,
28
34
  className: headlineClasses,
29
35
  numberOfLines: 2,
30
36
  children: headline
31
- }), animatedText.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_AnimatedText.AnimatedText, {
32
- sequence: animatedText,
33
- getNodeWrapper: animatedTextWrapper,
34
- typingDuration: textTypingDuration,
35
- transition: textTransition,
36
- loop
37
+ }), animatedText.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38
+ style: { position: "relative" },
39
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40
+ ref: measuringRef,
41
+ "aria-hidden": "true",
42
+ style: {
43
+ position: "absolute",
44
+ visibility: "hidden",
45
+ pointerEvents: "none",
46
+ width: "100%"
47
+ },
48
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Typography.Typography, {
49
+ variant: require_index.TypographyVariant.B3_MD,
50
+ color: require_index.TypographyColor.TEXT_LIGHT,
51
+ children: biggestText
52
+ }) })
53
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
54
+ style: { minHeight },
55
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_AnimatedText.AnimatedText, {
56
+ sequence: animatedText,
57
+ getNodeWrapper: animatedTextWrapper,
58
+ typingDuration: textTypingDuration,
59
+ transition: textTransition,
60
+ loop
61
+ })
62
+ })]
37
63
  })]
38
64
  });
39
65
  };
@@ -5,17 +5,23 @@ import "../../Stack/index.js";
5
5
  import { TypographyColor, TypographyVariant } from "../../Typography/types/index.js";
6
6
  import { Typography } from "../../Typography/Typography.js";
7
7
  import "../../Typography/index.js";
8
+ import { useAnimatedTextMinHeight } from "../../utils/useAnimatedTextMinHeight.js";
8
9
  import { useGetHeaderProperties } from "../hooks/useGetHeaderProperties.js";
9
- import { useCallback } from "react";
10
+ import { useCallback, useMemo } from "react";
10
11
  import { jsx, jsxs } from "react/jsx-runtime";
11
12
 
12
13
  //#region src/components/ProductCard/components/Header.tsx
13
14
  const Header = ({ headline, italicizeHeadline, animatedText, textTypingDuration, textTransition, loop }) => {
14
15
  const { stackClasses, headlineClasses } = useGetHeaderProperties(italicizeHeadline);
16
+ const { measuringRef, minHeight } = useAnimatedTextMinHeight(animatedText);
17
+ const biggestText = useMemo(() => {
18
+ return animatedText.reduce((maxText, currText) => {
19
+ return currText.length > maxText.length ? currText : maxText;
20
+ }, "");
21
+ }, [animatedText]);
15
22
  const animatedTextWrapper = useCallback((text) => /* @__PURE__ */ jsx(Typography, {
16
23
  variant: TypographyVariant.B3_MD,
17
24
  color: TypographyColor.TEXT_LIGHT,
18
- numberOfLines: 2,
19
25
  children: text
20
26
  }), []);
21
27
  return /* @__PURE__ */ jsxs(Stack, {
@@ -27,12 +33,32 @@ const Header = ({ headline, italicizeHeadline, animatedText, textTypingDuration,
27
33
  className: headlineClasses,
28
34
  numberOfLines: 2,
29
35
  children: headline
30
- }), animatedText.length > 0 && /* @__PURE__ */ jsx(AnimatedText, {
31
- sequence: animatedText,
32
- getNodeWrapper: animatedTextWrapper,
33
- typingDuration: textTypingDuration,
34
- transition: textTransition,
35
- loop
36
+ }), animatedText.length > 0 && /* @__PURE__ */ jsxs("div", {
37
+ style: { position: "relative" },
38
+ children: [/* @__PURE__ */ jsx("div", {
39
+ ref: measuringRef,
40
+ "aria-hidden": "true",
41
+ style: {
42
+ position: "absolute",
43
+ visibility: "hidden",
44
+ pointerEvents: "none",
45
+ width: "100%"
46
+ },
47
+ children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Typography, {
48
+ variant: TypographyVariant.B3_MD,
49
+ color: TypographyColor.TEXT_LIGHT,
50
+ children: biggestText
51
+ }) })
52
+ }), /* @__PURE__ */ jsx("div", {
53
+ style: { minHeight },
54
+ children: /* @__PURE__ */ jsx(AnimatedText, {
55
+ sequence: animatedText,
56
+ getNodeWrapper: animatedTextWrapper,
57
+ typingDuration: textTypingDuration,
58
+ transition: textTransition,
59
+ loop
60
+ })
61
+ })]
36
62
  })]
37
63
  });
38
64
  };
@@ -1,5 +1,5 @@
1
1
  import { PromptButtonProps } from "./types/index.cjs";
2
- import * as react_jsx_runtime11 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/PromptButton/PromptButton.d.ts
5
5
  declare const PromptButton: ({
@@ -16,6 +16,6 @@ declare const PromptButton: ({
16
16
  onClick,
17
17
  ariaLabel,
18
18
  ariaDescribedBy
19
- }: PromptButtonProps) => react_jsx_runtime11.JSX.Element;
19
+ }: PromptButtonProps) => react_jsx_runtime1.JSX.Element;
20
20
  //#endregion
21
21
  export { PromptButton };