zero-to-app 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +929 -0
- package/dist/brand/brandConfig.d.ts +48 -0
- package/dist/brand/brandConfig.d.ts.map +1 -0
- package/dist/brand/brandConfig.js +41 -0
- package/dist/brand/brandConfig.js.map +1 -0
- package/dist/brand/brandContext.d.ts +10 -0
- package/dist/brand/brandContext.d.ts.map +1 -0
- package/dist/brand/brandContext.js +16 -0
- package/dist/brand/brandContext.js.map +1 -0
- package/dist/brand/brandTypes.d.ts +54 -0
- package/dist/brand/brandTypes.d.ts.map +1 -0
- package/dist/brand/brandTypes.js +2 -0
- package/dist/brand/brandTypes.js.map +1 -0
- package/dist/brand/index.d.ts +4 -0
- package/dist/brand/index.d.ts.map +1 -0
- package/dist/brand/index.js +5 -0
- package/dist/brand/index.js.map +1 -0
- package/dist/components/action/ActionRow.d.ts +25 -0
- package/dist/components/action/ActionRow.d.ts.map +1 -0
- package/dist/components/action/ActionRow.js +66 -0
- package/dist/components/action/ActionRow.js.map +1 -0
- package/dist/components/action/index.d.ts +2 -0
- package/dist/components/action/index.d.ts.map +1 -0
- package/dist/components/action/index.js +3 -0
- package/dist/components/action/index.js.map +1 -0
- package/dist/components/card/Card.d.ts +11 -0
- package/dist/components/card/Card.d.ts.map +1 -0
- package/dist/components/card/Card.js +32 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/card/index.d.ts +2 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +2 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/chat/ChatContainer.d.ts +27 -0
- package/dist/components/chat/ChatContainer.d.ts.map +1 -0
- package/dist/components/chat/ChatContainer.js +52 -0
- package/dist/components/chat/ChatContainer.js.map +1 -0
- package/dist/components/chat/ChatInput.d.ts +9 -0
- package/dist/components/chat/ChatInput.d.ts.map +1 -0
- package/dist/components/chat/ChatInput.js +219 -0
- package/dist/components/chat/ChatInput.js.map +1 -0
- package/dist/components/chat/ChatMessages.d.ts +9 -0
- package/dist/components/chat/ChatMessages.d.ts.map +1 -0
- package/dist/components/chat/ChatMessages.js +35 -0
- package/dist/components/chat/ChatMessages.js.map +1 -0
- package/dist/components/chat/EmptyChat.d.ts +18 -0
- package/dist/components/chat/EmptyChat.d.ts.map +1 -0
- package/dist/components/chat/EmptyChat.js +64 -0
- package/dist/components/chat/EmptyChat.js.map +1 -0
- package/dist/components/chat/Message.d.ts +8 -0
- package/dist/components/chat/Message.d.ts.map +1 -0
- package/dist/components/chat/Message.js +47 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/chat/index.d.ts +6 -0
- package/dist/components/chat/index.d.ts.map +1 -0
- package/dist/components/chat/index.js +7 -0
- package/dist/components/chat/index.js.map +1 -0
- package/dist/components/chat/types.d.ts +34 -0
- package/dist/components/chat/types.d.ts.map +1 -0
- package/dist/components/chat/types.js +2 -0
- package/dist/components/chat/types.js.map +1 -0
- package/dist/components/form/DropDownSelect.d.ts +12 -0
- package/dist/components/form/DropDownSelect.d.ts.map +1 -0
- package/dist/components/form/DropDownSelect.js +63 -0
- package/dist/components/form/DropDownSelect.js.map +1 -0
- package/dist/components/form/EmailSubscriptionForm.d.ts +14 -0
- package/dist/components/form/EmailSubscriptionForm.d.ts.map +1 -0
- package/dist/components/form/EmailSubscriptionForm.js +58 -0
- package/dist/components/form/EmailSubscriptionForm.js.map +1 -0
- package/dist/components/form/FormErrors.d.ts +7 -0
- package/dist/components/form/FormErrors.d.ts.map +1 -0
- package/dist/components/form/FormErrors.js +35 -0
- package/dist/components/form/FormErrors.js.map +1 -0
- package/dist/components/form/FormInput.d.ts +14 -0
- package/dist/components/form/FormInput.d.ts.map +1 -0
- package/dist/components/form/FormInput.js +35 -0
- package/dist/components/form/FormInput.js.map +1 -0
- package/dist/components/form/FormSeparator.d.ts +6 -0
- package/dist/components/form/FormSeparator.d.ts.map +1 -0
- package/dist/components/form/FormSeparator.js +25 -0
- package/dist/components/form/FormSeparator.js.map +1 -0
- package/dist/components/form/index.d.ts +6 -0
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/index.js +7 -0
- package/dist/components/form/index.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +12 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout/Footer.d.ts +3 -0
- package/dist/components/layout/Footer.d.ts.map +1 -0
- package/dist/components/layout/Footer.js +60 -0
- package/dist/components/layout/Footer.js.map +1 -0
- package/dist/components/layout/MinimalFooter.d.ts +8 -0
- package/dist/components/layout/MinimalFooter.d.ts.map +1 -0
- package/dist/components/layout/MinimalFooter.js +57 -0
- package/dist/components/layout/MinimalFooter.js.map +1 -0
- package/dist/components/layout/MobileFooterBar.d.ts +7 -0
- package/dist/components/layout/MobileFooterBar.d.ts.map +1 -0
- package/dist/components/layout/MobileFooterBar.js +18 -0
- package/dist/components/layout/MobileFooterBar.js.map +1 -0
- package/dist/components/layout/ParallaxScrollView.d.ts +11 -0
- package/dist/components/layout/ParallaxScrollView.d.ts.map +1 -0
- package/dist/components/layout/ParallaxScrollView.js +67 -0
- package/dist/components/layout/ParallaxScrollView.js.map +1 -0
- package/dist/components/layout/WebPageLayout.d.ts +17 -0
- package/dist/components/layout/WebPageLayout.d.ts.map +1 -0
- package/dist/components/layout/WebPageLayout.js +103 -0
- package/dist/components/layout/WebPageLayout.js.map +1 -0
- package/dist/components/layout/index.d.ts +6 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +9 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/list/List.d.ts +10 -0
- package/dist/components/list/List.d.ts.map +1 -0
- package/dist/components/list/List.js +18 -0
- package/dist/components/list/List.js.map +1 -0
- package/dist/components/list/ListButton.d.ts +13 -0
- package/dist/components/list/ListButton.d.ts.map +1 -0
- package/dist/components/list/ListButton.js +24 -0
- package/dist/components/list/ListButton.js.map +1 -0
- package/dist/components/list/ListDivider.d.ts +7 -0
- package/dist/components/list/ListDivider.d.ts.map +1 -0
- package/dist/components/list/ListDivider.js +23 -0
- package/dist/components/list/ListDivider.js.map +1 -0
- package/dist/components/list/index.d.ts +4 -0
- package/dist/components/list/index.d.ts.map +1 -0
- package/dist/components/list/index.js +4 -0
- package/dist/components/list/index.js.map +1 -0
- package/dist/components/media/Carousel.d.ts +18 -0
- package/dist/components/media/Carousel.d.ts.map +1 -0
- package/dist/components/media/Carousel.js +60 -0
- package/dist/components/media/Carousel.js.map +1 -0
- package/dist/components/media/FeatureCard.d.ts +9 -0
- package/dist/components/media/FeatureCard.d.ts.map +1 -0
- package/dist/components/media/FeatureCard.js +68 -0
- package/dist/components/media/FeatureCard.js.map +1 -0
- package/dist/components/media/HorizontalCarousel.d.ts +17 -0
- package/dist/components/media/HorizontalCarousel.d.ts.map +1 -0
- package/dist/components/media/HorizontalCarousel.js +60 -0
- package/dist/components/media/HorizontalCarousel.js.map +1 -0
- package/dist/components/media/ImageCarousel.d.ts +14 -0
- package/dist/components/media/ImageCarousel.d.ts.map +1 -0
- package/dist/components/media/ImageCarousel.js +21 -0
- package/dist/components/media/ImageCarousel.js.map +1 -0
- package/dist/components/media/MediaTile.d.ts +30 -0
- package/dist/components/media/MediaTile.d.ts.map +1 -0
- package/dist/components/media/MediaTile.js +51 -0
- package/dist/components/media/MediaTile.js.map +1 -0
- package/dist/components/media/SkeletonMediaTile.d.ts +17 -0
- package/dist/components/media/SkeletonMediaTile.d.ts.map +1 -0
- package/dist/components/media/SkeletonMediaTile.js +67 -0
- package/dist/components/media/SkeletonMediaTile.js.map +1 -0
- package/dist/components/media/index.d.ts +7 -0
- package/dist/components/media/index.d.ts.map +1 -0
- package/dist/components/media/index.js +8 -0
- package/dist/components/media/index.js.map +1 -0
- package/dist/components/navigation/AppbarWeb.d.ts +18 -0
- package/dist/components/navigation/AppbarWeb.d.ts.map +1 -0
- package/dist/components/navigation/AppbarWeb.js +70 -0
- package/dist/components/navigation/AppbarWeb.js.map +1 -0
- package/dist/components/navigation/IconButtonGroup.d.ts +7 -0
- package/dist/components/navigation/IconButtonGroup.d.ts.map +1 -0
- package/dist/components/navigation/IconButtonGroup.js +33 -0
- package/dist/components/navigation/IconButtonGroup.js.map +1 -0
- package/dist/components/navigation/Logo.d.ts +16 -0
- package/dist/components/navigation/Logo.d.ts.map +1 -0
- package/dist/components/navigation/Logo.js +64 -0
- package/dist/components/navigation/Logo.js.map +1 -0
- package/dist/components/navigation/MobileMenuDrawer.d.ts +13 -0
- package/dist/components/navigation/MobileMenuDrawer.d.ts.map +1 -0
- package/dist/components/navigation/MobileMenuDrawer.js +184 -0
- package/dist/components/navigation/MobileMenuDrawer.js.map +1 -0
- package/dist/components/navigation/ScreenHeader.d.ts +30 -0
- package/dist/components/navigation/ScreenHeader.d.ts.map +1 -0
- package/dist/components/navigation/ScreenHeader.js +127 -0
- package/dist/components/navigation/ScreenHeader.js.map +1 -0
- package/dist/components/navigation/iconUtils.d.ts +24 -0
- package/dist/components/navigation/iconUtils.d.ts.map +1 -0
- package/dist/components/navigation/iconUtils.js +53 -0
- package/dist/components/navigation/iconUtils.js.map +1 -0
- package/dist/components/navigation/index.d.ts +6 -0
- package/dist/components/navigation/index.d.ts.map +1 -0
- package/dist/components/navigation/index.js +7 -0
- package/dist/components/navigation/index.js.map +1 -0
- package/dist/components/tile/Tile.d.ts +18 -0
- package/dist/components/tile/Tile.d.ts.map +1 -0
- package/dist/components/tile/Tile.js +41 -0
- package/dist/components/tile/Tile.js.map +1 -0
- package/dist/components/tile/index.d.ts +2 -0
- package/dist/components/tile/index.d.ts.map +1 -0
- package/dist/components/tile/index.js +2 -0
- package/dist/components/tile/index.js.map +1 -0
- package/dist/components/ui/ArrowButton.d.ts +8 -0
- package/dist/components/ui/ArrowButton.d.ts.map +1 -0
- package/dist/components/ui/ArrowButton.js +30 -0
- package/dist/components/ui/ArrowButton.js.map +1 -0
- package/dist/components/ui/BlurButton.d.ts +16 -0
- package/dist/components/ui/BlurButton.d.ts.map +1 -0
- package/dist/components/ui/BlurButton.js +26 -0
- package/dist/components/ui/BlurButton.js.map +1 -0
- package/dist/components/ui/Button.d.ts +24 -0
- package/dist/components/ui/Button.d.ts.map +1 -0
- package/dist/components/ui/Button.js +60 -0
- package/dist/components/ui/Button.js.map +1 -0
- package/dist/components/ui/ErrorBoundary.d.ts +18 -0
- package/dist/components/ui/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ui/ErrorBoundary.js +37 -0
- package/dist/components/ui/ErrorBoundary.js.map +1 -0
- package/dist/components/ui/IconButton.d.ts +13 -0
- package/dist/components/ui/IconButton.d.ts.map +1 -0
- package/dist/components/ui/IconButton.js +27 -0
- package/dist/components/ui/IconButton.js.map +1 -0
- package/dist/components/ui/LoadingIndicator.d.ts +6 -0
- package/dist/components/ui/LoadingIndicator.d.ts.map +1 -0
- package/dist/components/ui/LoadingIndicator.js +15 -0
- package/dist/components/ui/LoadingIndicator.js.map +1 -0
- package/dist/components/ui/NotificationBadge.d.ts +8 -0
- package/dist/components/ui/NotificationBadge.d.ts.map +1 -0
- package/dist/components/ui/NotificationBadge.js +24 -0
- package/dist/components/ui/NotificationBadge.js.map +1 -0
- package/dist/components/ui/SkeletonCard.d.ts +14 -0
- package/dist/components/ui/SkeletonCard.d.ts.map +1 -0
- package/dist/components/ui/SkeletonCard.js +50 -0
- package/dist/components/ui/SkeletonCard.js.map +1 -0
- package/dist/components/ui/StyledText.d.ts +17 -0
- package/dist/components/ui/StyledText.d.ts.map +1 -0
- package/dist/components/ui/StyledText.js +27 -0
- package/dist/components/ui/StyledText.js.map +1 -0
- package/dist/components/ui/StyledTextInput.d.ts +10 -0
- package/dist/components/ui/StyledTextInput.d.ts.map +1 -0
- package/dist/components/ui/StyledTextInput.js +62 -0
- package/dist/components/ui/StyledTextInput.js.map +1 -0
- package/dist/components/ui/TextLink.d.ts +14 -0
- package/dist/components/ui/TextLink.d.ts.map +1 -0
- package/dist/components/ui/TextLink.js +25 -0
- package/dist/components/ui/TextLink.js.map +1 -0
- package/dist/components/ui/ToggleIconButton.d.ts +14 -0
- package/dist/components/ui/ToggleIconButton.d.ts.map +1 -0
- package/dist/components/ui/ToggleIconButton.js +19 -0
- package/dist/components/ui/ToggleIconButton.js.map +1 -0
- package/dist/components/ui/index.d.ts +13 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +14 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/context/scrollContext.d.ts +8 -0
- package/dist/context/scrollContext.d.ts.map +1 -0
- package/dist/context/scrollContext.js +16 -0
- package/dist/context/scrollContext.js.map +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useDimensions.d.ts +31 -0
- package/dist/hooks/useDimensions.d.ts.map +1 -0
- package/dist/hooks/useDimensions.js +44 -0
- package/dist/hooks/useDimensions.js.map +1 -0
- package/dist/hooks/useWindowHeight.d.ts +7 -0
- package/dist/hooks/useWindowHeight.d.ts.map +1 -0
- package/dist/hooks/useWindowHeight.js +10 -0
- package/dist/hooks/useWindowHeight.js.map +1 -0
- package/dist/hooks/useWindowWidth.d.ts +20 -0
- package/dist/hooks/useWindowWidth.d.ts.map +1 -0
- package/dist/hooks/useWindowWidth.js +27 -0
- package/dist/hooks/useWindowWidth.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/theme/index.d.ts +3 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +4 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme.d.ts +15 -0
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/theme/theme.js +38 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/theme/themeConfig.d.ts +19 -0
- package/dist/theme/themeConfig.d.ts.map +1 -0
- package/dist/theme/themeConfig.js +43 -0
- package/dist/theme/themeConfig.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useEffect, useContext, useRef } from 'react';
|
|
3
|
+
import { View, StyleSheet, Platform, TextInput, ActivityIndicator, } from 'react-native';
|
|
4
|
+
import { IconButton } from '../ui';
|
|
5
|
+
import { useBrand } from '../../brand';
|
|
6
|
+
import { ThemeContext } from '../../theme';
|
|
7
|
+
const PLACEHOLDER_COLOR = '#999999'; // Grey color for placeholder text
|
|
8
|
+
// Web-specific textarea component for reliable auto-resize
|
|
9
|
+
const WebTextarea = ({ value, onChangeText, placeholder, placeholderTextColor, style, onKeyDown, inputHeight, setInputHeight, isSingleLine, maxHeight, isTyping, fontSize, }) => {
|
|
10
|
+
const textareaRef = useRef(null);
|
|
11
|
+
const adjustHeight = React.useCallback(() => {
|
|
12
|
+
if (textareaRef.current) {
|
|
13
|
+
// Reset height to auto to get accurate scrollHeight
|
|
14
|
+
textareaRef.current.style.height = 'auto';
|
|
15
|
+
const scrollHeight = textareaRef.current.scrollHeight;
|
|
16
|
+
const clampedHeight = Math.max(MIN_HEIGHT, Math.min(scrollHeight, maxHeight));
|
|
17
|
+
setInputHeight(clampedHeight);
|
|
18
|
+
textareaRef.current.style.height = `${clampedHeight}px`;
|
|
19
|
+
}
|
|
20
|
+
}, [maxHeight, setInputHeight]);
|
|
21
|
+
// Only adjust height when user is typing (not in initial dummy state)
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (isTyping) {
|
|
24
|
+
// Use requestAnimationFrame to ensure DOM is ready
|
|
25
|
+
const rafId = requestAnimationFrame(() => {
|
|
26
|
+
adjustHeight();
|
|
27
|
+
});
|
|
28
|
+
return () => cancelAnimationFrame(rafId);
|
|
29
|
+
}
|
|
30
|
+
}, [value, adjustHeight, isTyping]);
|
|
31
|
+
const handleInput = (e) => {
|
|
32
|
+
onChangeText(e.target.value);
|
|
33
|
+
// Height adjustment happens in useEffect
|
|
34
|
+
};
|
|
35
|
+
const handleKeyDown = (e) => {
|
|
36
|
+
if (onKeyDown) {
|
|
37
|
+
onKeyDown(e);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Flatten style array and extract values
|
|
41
|
+
const flattenedStyle = Array.isArray(style)
|
|
42
|
+
? Object.assign({}, ...style.filter(Boolean))
|
|
43
|
+
: style || {};
|
|
44
|
+
// Extract padding values from flattened style
|
|
45
|
+
const paddingHorizontal = flattenedStyle.paddingHorizontal || flattenedStyle.paddingLeft || 10;
|
|
46
|
+
const paddingVertical = flattenedStyle.paddingVertical || flattenedStyle.paddingTop || 10;
|
|
47
|
+
// Extract color explicitly - it's critical for web
|
|
48
|
+
const textColor = flattenedStyle.color;
|
|
49
|
+
// Set placeholder color via CSS
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (textareaRef.current && placeholderTextColor) {
|
|
52
|
+
const textarea = textareaRef.current;
|
|
53
|
+
const styleId = 'chat-input-placeholder-style';
|
|
54
|
+
let styleElement = document.getElementById(styleId);
|
|
55
|
+
if (!styleElement) {
|
|
56
|
+
styleElement = document.createElement('style');
|
|
57
|
+
styleElement.id = styleId;
|
|
58
|
+
document.head.appendChild(styleElement);
|
|
59
|
+
}
|
|
60
|
+
// Use a data attribute to target this specific textarea
|
|
61
|
+
textarea.setAttribute('data-placeholder-color', placeholderTextColor);
|
|
62
|
+
styleElement.textContent = `textarea[data-placeholder-color="${placeholderTextColor}"]::placeholder { color: ${placeholderTextColor} !important; }`;
|
|
63
|
+
}
|
|
64
|
+
}, [placeholderTextColor]);
|
|
65
|
+
return React.createElement('textarea', {
|
|
66
|
+
ref: textareaRef,
|
|
67
|
+
value: value,
|
|
68
|
+
onChange: handleInput,
|
|
69
|
+
onKeyDown: handleKeyDown,
|
|
70
|
+
placeholder: placeholder,
|
|
71
|
+
style: {
|
|
72
|
+
height: `${inputHeight}px`,
|
|
73
|
+
resize: 'none',
|
|
74
|
+
overflow: 'hidden',
|
|
75
|
+
fontFamily: flattenedStyle.fontFamily || 'inherit',
|
|
76
|
+
fontSize: flattenedStyle.fontSize || fontSize,
|
|
77
|
+
lineHeight: flattenedStyle.lineHeight || 'inherit',
|
|
78
|
+
color: textColor || '#000000', // Explicitly set color, don't rely on inherit
|
|
79
|
+
backgroundColor: 'transparent',
|
|
80
|
+
border: 'none',
|
|
81
|
+
outline: 'none',
|
|
82
|
+
paddingLeft: paddingHorizontal,
|
|
83
|
+
paddingRight: paddingHorizontal,
|
|
84
|
+
paddingTop: paddingVertical,
|
|
85
|
+
paddingBottom: paddingVertical,
|
|
86
|
+
margin: 0,
|
|
87
|
+
display: 'inline-block',
|
|
88
|
+
verticalAlign: isSingleLine ? 'middle' : 'top',
|
|
89
|
+
width: '100%',
|
|
90
|
+
boxSizing: 'border-box',
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
const MIN_HEIGHT = 40; // One line height
|
|
95
|
+
const DEFAULT_MAX_HEIGHT = 120; // Maximum height (4-5 lines)
|
|
96
|
+
const ChatInput = ({ isLoading, sendMessage, maxHeight = DEFAULT_MAX_HEIGHT }) => {
|
|
97
|
+
const theme = useContext(ThemeContext);
|
|
98
|
+
const brand = useBrand();
|
|
99
|
+
const [message, setMessage] = useState('');
|
|
100
|
+
const [inputHeight, setInputHeight] = useState(MIN_HEIGHT);
|
|
101
|
+
const textInputRef = useRef(null);
|
|
102
|
+
const isSingleLine = inputHeight <= MIN_HEIGHT;
|
|
103
|
+
const isTyping = message.length > 0;
|
|
104
|
+
const borderRadius = isTyping ? brand.borderRadius : 9999;
|
|
105
|
+
const handleChangeText = (text) => {
|
|
106
|
+
setMessage(text);
|
|
107
|
+
};
|
|
108
|
+
const handleSubmit = () => {
|
|
109
|
+
if (!isLoading && message.trim()) {
|
|
110
|
+
sendMessage(message);
|
|
111
|
+
setMessage('');
|
|
112
|
+
setInputHeight(MIN_HEIGHT); // Reset height when message is sent
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
// Mobile: Enter sends message
|
|
116
|
+
const handleKeyPress = (e) => {
|
|
117
|
+
if (Platform.OS !== 'web' && e.nativeEvent.key === 'Enter') {
|
|
118
|
+
handleSubmit();
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
// Web: Enter sends message, Shift+Enter creates newline
|
|
122
|
+
const handleKeyDown = (e) => {
|
|
123
|
+
if (Platform.OS === 'web' && e.key === 'Enter' && !e.shiftKey) {
|
|
124
|
+
e.preventDefault();
|
|
125
|
+
handleSubmit();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const handleContentSizeChange = (e) => {
|
|
129
|
+
const { height } = e.nativeEvent.contentSize;
|
|
130
|
+
const clampedHeight = Math.max(MIN_HEIGHT, Math.min(height, maxHeight));
|
|
131
|
+
setInputHeight(clampedHeight);
|
|
132
|
+
};
|
|
133
|
+
// Reset height when message is cleared
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
if (!message) {
|
|
136
|
+
setInputHeight(MIN_HEIGHT);
|
|
137
|
+
}
|
|
138
|
+
}, [message]);
|
|
139
|
+
return (_jsxs(View, { style: [styles.container, { backgroundColor: theme.values.cardBackgroundColor, borderRadius, ...(!theme.values.isDark && { borderColor: theme.values.borderColor, borderWidth: 1 }) }, Platform.OS === 'web' && { maxWidth: 1000 }], children: [_jsxs(View, { style: [
|
|
140
|
+
styles.inputRow,
|
|
141
|
+
{
|
|
142
|
+
backgroundColor: theme.values.cardBackgroundColor,
|
|
143
|
+
borderRadius,
|
|
144
|
+
},
|
|
145
|
+
], children: [!isTyping && (_jsx(View, { style: styles.leftActionButtons, children: _jsx(IconButton, { onPress: () => { }, iconName: 'plus' }) })), _jsx(View, { style: styles.inputWrapper, children: _jsx(View, { style: styles.inputContainer, children: Platform.OS === 'web' ? (_jsx(WebTextarea, { value: message, onChangeText: handleChangeText, placeholder: isTyping ? undefined : 'Ask anything', placeholderTextColor: PLACEHOLDER_COLOR, onKeyDown: handleKeyDown, inputHeight: inputHeight, setInputHeight: setInputHeight, isSingleLine: isSingleLine, maxHeight: maxHeight, isTyping: isTyping, fontSize: brand.fontSizes.medium, style: [
|
|
146
|
+
styles.textInput,
|
|
147
|
+
{
|
|
148
|
+
color: theme.values.color,
|
|
149
|
+
paddingHorizontal: 10,
|
|
150
|
+
paddingVertical: 10,
|
|
151
|
+
},
|
|
152
|
+
styles.webInput,
|
|
153
|
+
] })) : (_jsx(TextInput, { ref: textInputRef, value: message, scrollEnabled: inputHeight >= maxHeight, onChangeText: handleChangeText, placeholder: isTyping ? undefined : 'Ask anything', placeholderTextColor: PLACEHOLDER_COLOR, onKeyPress: handleKeyPress, onContentSizeChange: handleContentSizeChange, multiline: true, style: [
|
|
154
|
+
styles.textInput,
|
|
155
|
+
{
|
|
156
|
+
color: theme.values.color,
|
|
157
|
+
textAlignVertical: isSingleLine ? 'center' : 'top',
|
|
158
|
+
maxHeight: maxHeight,
|
|
159
|
+
},
|
|
160
|
+
] })) }) }), !isTyping && (_jsxs(View, { style: styles.rightActionButtons, children: [_jsx(IconButton, { onPress: () => { }, iconName: 'mic' }), _jsx(View, { style: styles.sendButtonWrapper, children: isLoading ? (_jsx(ActivityIndicator, { size: "small", color: brand.colors.primary })) : (_jsx(IconButton, { onPress: handleSubmit, iconName: 'send', color: '#FFFFFF', backgroundColor: brand.colors.primary })) })] }))] }), isTyping && (_jsxs(View, { style: [styles.actionButtonsRow, { backgroundColor: theme.values.cardBackgroundColor }], children: [_jsx(View, { style: styles.leftActionButtons, children: _jsx(IconButton, { onPress: () => { }, iconName: 'plus' }) }), _jsxs(View, { style: styles.rightActionButtons, children: [_jsx(IconButton, { onPress: () => { }, iconName: 'mic' }), _jsx(View, { style: styles.sendButtonWrapper, children: isLoading ? (_jsx(ActivityIndicator, { size: "small", color: brand.colors.primary })) : (_jsx(IconButton, { onPress: handleSubmit, iconName: 'send', color: '#FFFFFF', backgroundColor: brand.colors.primary })) })] })] }))] }));
|
|
161
|
+
};
|
|
162
|
+
const styles = StyleSheet.create({
|
|
163
|
+
container: {
|
|
164
|
+
width: '100%',
|
|
165
|
+
overflow: 'hidden',
|
|
166
|
+
gap: 20,
|
|
167
|
+
padding: 10,
|
|
168
|
+
},
|
|
169
|
+
inputRow: {
|
|
170
|
+
flexDirection: 'row',
|
|
171
|
+
alignItems: 'center',
|
|
172
|
+
gap: 10,
|
|
173
|
+
},
|
|
174
|
+
actionButtonsRow: {
|
|
175
|
+
flexDirection: 'row',
|
|
176
|
+
alignItems: 'center',
|
|
177
|
+
justifyContent: 'space-between',
|
|
178
|
+
gap: 10,
|
|
179
|
+
},
|
|
180
|
+
leftActionButtons: {
|
|
181
|
+
justifyContent: 'center',
|
|
182
|
+
alignItems: 'center',
|
|
183
|
+
},
|
|
184
|
+
rightActionButtons: {
|
|
185
|
+
flexDirection: 'row',
|
|
186
|
+
alignItems: 'center',
|
|
187
|
+
gap: 8,
|
|
188
|
+
},
|
|
189
|
+
inputWrapper: {
|
|
190
|
+
flex: 1,
|
|
191
|
+
},
|
|
192
|
+
inputContainer: {
|
|
193
|
+
width: '100%',
|
|
194
|
+
...Platform.select({
|
|
195
|
+
web: {
|
|
196
|
+
overflow: 'scroll',
|
|
197
|
+
scrollbarWidth: 'none',
|
|
198
|
+
},
|
|
199
|
+
}),
|
|
200
|
+
},
|
|
201
|
+
textInput: {
|
|
202
|
+
width: '100%',
|
|
203
|
+
fontSize: 16,
|
|
204
|
+
borderWidth: 0,
|
|
205
|
+
},
|
|
206
|
+
webInput: {
|
|
207
|
+
// @ts-ignore - Web-specific styles
|
|
208
|
+
outlineStyle: 'none',
|
|
209
|
+
WebkitAppearance: 'none',
|
|
210
|
+
MozAppearance: 'none',
|
|
211
|
+
appearance: 'none',
|
|
212
|
+
},
|
|
213
|
+
sendButtonWrapper: {
|
|
214
|
+
justifyContent: 'center',
|
|
215
|
+
alignItems: 'center',
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
export default ChatInput;
|
|
219
|
+
//# sourceMappingURL=ChatInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../components/chat/ChatInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ChatMessagesProps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* ChatMessages - Displays list of chat messages with scroll functionality
|
|
5
|
+
* Pure content component, layout-agnostic
|
|
6
|
+
*/
|
|
7
|
+
declare const ChatMessages: ({ messages, scrollViewRef, isLoading, loadingAnimation, }: ChatMessagesProps) => React.JSX.Element;
|
|
8
|
+
export default ChatMessages;
|
|
9
|
+
//# sourceMappingURL=ChatMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessages.d.ts","sourceRoot":"","sources":["../../../components/chat/ChatMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI5C;;;GAGG;AACH,QAAA,MAAM,YAAY,GAAI,2DAKnB,iBAAiB,KAAG,KAAK,CAAC,GAAG,CAAC,OAgEhC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { View, ScrollView, Platform } from 'react-native';
|
|
4
|
+
import Message from './Message';
|
|
5
|
+
import LottieView from 'lottie-react-native';
|
|
6
|
+
import { ErrorBoundary, StyledText } from '../ui';
|
|
7
|
+
/**
|
|
8
|
+
* ChatMessages - Displays list of chat messages with scroll functionality
|
|
9
|
+
* Pure content component, layout-agnostic
|
|
10
|
+
*/
|
|
11
|
+
const ChatMessages = ({ messages, scrollViewRef, isLoading, loadingAnimation, }) => {
|
|
12
|
+
const localScrollRef = useRef(null);
|
|
13
|
+
const ref = scrollViewRef || localScrollRef;
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (ref.current && messages.length > 0 && typeof ref.current.scrollToEnd === 'function') {
|
|
16
|
+
ref.current.scrollToEnd({ animated: false });
|
|
17
|
+
}
|
|
18
|
+
}, [messages]);
|
|
19
|
+
// Platform-specific adjustments
|
|
20
|
+
const isWeb = Platform.OS === 'web';
|
|
21
|
+
return (_jsxs(ScrollView, { ref: ref, showsHorizontalScrollIndicator: false, contentContainerStyle: {
|
|
22
|
+
paddingTop: 20,
|
|
23
|
+
paddingHorizontal: 20,
|
|
24
|
+
}, showsVerticalScrollIndicator: true, keyboardShouldPersistTaps: "handled", children: [messages.map((message, index) => (_jsx(Message, { text: message.text, isSent: message.isSent }, index))), isLoading && (_jsx(View, { style: { width: 100, height: isWeb ? 50 : 100 }, children: loadingAnimation &&
|
|
25
|
+
typeof loadingAnimation !== 'number' &&
|
|
26
|
+
(typeof loadingAnimation === 'string' ||
|
|
27
|
+
(typeof loadingAnimation === 'object' &&
|
|
28
|
+
loadingAnimation != null &&
|
|
29
|
+
'uri' in loadingAnimation &&
|
|
30
|
+
typeof loadingAnimation.uri === 'string')) ? (_jsx(ErrorBoundary, { fallback: _jsx(View, { style: { width: 100, height: 100, justifyContent: 'center', alignItems: 'center' }, children: _jsx(StyledText, { fontSize: "sm", color: "#666", children: "Loading..." }) }), onError: (error) => console.error('Lottie animation error:', error), children: _jsx(LottieView, { source: typeof loadingAnimation === 'string'
|
|
31
|
+
? loadingAnimation
|
|
32
|
+
: { uri: loadingAnimation.uri }, autoPlay: true, loop: true, style: { width: 100, height: 100 } }) })) : (_jsx(View, { style: { width: 100, height: 100, justifyContent: 'center', alignItems: 'center' }, children: _jsx(StyledText, { fontSize: "sm", color: "#666", children: "Loading..." }) })) }))] }));
|
|
33
|
+
};
|
|
34
|
+
export default ChatMessages;
|
|
35
|
+
//# sourceMappingURL=ChatMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessages.js","sourceRoot":"","sources":["../../../components/chat/ChatMessages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ImageSourcePropType } from 'react-native';
|
|
3
|
+
interface EmptyChatProps {
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
sendMessage: (message: string) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Mascot image. Can be an ImageSourcePropType (require) or string URI.
|
|
8
|
+
*/
|
|
9
|
+
mascotImage: ImageSourcePropType | string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* EmptyChat - Pure content component for empty chat state
|
|
13
|
+
* Displays mascot, welcome text, and chat input
|
|
14
|
+
* Layout-agnostic: parent handles WebPageLayout, background, etc.
|
|
15
|
+
*/
|
|
16
|
+
declare const EmptyChat: ({ isLoading, sendMessage, mascotImage }: EmptyChatProps) => React.JSX.Element;
|
|
17
|
+
export default EmptyChat;
|
|
18
|
+
//# sourceMappingURL=EmptyChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyChat.d.ts","sourceRoot":"","sources":["../../../components/chat/EmptyChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAS,mBAAmB,EAA8B,MAAM,cAAc,CAAC;AAatF,UAAU,cAAc;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAC3C;AAED;;;;GAIG;AACH,QAAA,MAAM,SAAS,GAAI,yCAAyC,cAAc,KAAG,KAAK,CAAC,GAAG,CAAC,OA6DtF,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useContext } from 'react';
|
|
3
|
+
import { Image, StyleSheet, View, Platform } from 'react-native';
|
|
4
|
+
import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withTiming, Easing, } from 'react-native-reanimated';
|
|
5
|
+
import { StyledText } from '../ui';
|
|
6
|
+
import { ThemeContext } from '../../theme';
|
|
7
|
+
import { useDimensions } from '../../hooks';
|
|
8
|
+
import ChatInput from './ChatInput';
|
|
9
|
+
/**
|
|
10
|
+
* EmptyChat - Pure content component for empty chat state
|
|
11
|
+
* Displays mascot, welcome text, and chat input
|
|
12
|
+
* Layout-agnostic: parent handles WebPageLayout, background, etc.
|
|
13
|
+
*/
|
|
14
|
+
const EmptyChat = ({ isLoading, sendMessage, mascotImage }) => {
|
|
15
|
+
const theme = useContext(ThemeContext);
|
|
16
|
+
const dimensions = useDimensions();
|
|
17
|
+
// Create shared value for the hover animation
|
|
18
|
+
const translateY = useSharedValue(0);
|
|
19
|
+
// Set up the floating animation
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
translateY.value = withRepeat(withTiming(-15, {
|
|
22
|
+
duration: 1000,
|
|
23
|
+
easing: Easing.inOut(Easing.sin),
|
|
24
|
+
}), -1, // infinite repeat
|
|
25
|
+
true);
|
|
26
|
+
}, [translateY]);
|
|
27
|
+
// Create animated style
|
|
28
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
29
|
+
return {
|
|
30
|
+
transform: [{ translateY: translateY.value }],
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
// Detect mobile web breakpoint
|
|
34
|
+
const isMobileWeb = Platform.OS === 'web' && dimensions.breakpoint === 'small';
|
|
35
|
+
const isWeb = Platform.OS === 'web';
|
|
36
|
+
// Responsive mascot sizing
|
|
37
|
+
const mascotWidth = isMobileWeb ? 100 : 160;
|
|
38
|
+
const mascotHeight = isMobileWeb ? 150 : 240;
|
|
39
|
+
// Responsive container styles
|
|
40
|
+
const containerGap = isMobileWeb ? 24 : (isWeb ? 40 : 20);
|
|
41
|
+
const containerPadding = isMobileWeb ? 16 : 20;
|
|
42
|
+
const containerMinHeight = isMobileWeb ? undefined : (isWeb ? 400 : undefined);
|
|
43
|
+
// Handle image source
|
|
44
|
+
const imageSource = typeof mascotImage === 'string' ? { uri: mascotImage } : mascotImage;
|
|
45
|
+
return (_jsxs(View, { style: [
|
|
46
|
+
styles.container,
|
|
47
|
+
Platform.OS === 'ios' && { paddingBottom: 100 },
|
|
48
|
+
{ gap: containerGap, padding: containerPadding },
|
|
49
|
+
containerMinHeight && { minHeight: containerMinHeight },
|
|
50
|
+
], children: [_jsx(Animated.View, { style: animatedStyle, children: _jsx(Image, { source: imageSource, style: [styles.mascot, { width: mascotWidth, height: mascotHeight }] }) }), _jsx(StyledText, { fontSize: isWeb ? 'lg' : 'md', align: "center", color: theme.values.color, children: "Get personalized recommendations and answers to your nightlife questions." }), _jsx(ChatInput, { isLoading: isLoading, sendMessage: sendMessage })] }));
|
|
51
|
+
};
|
|
52
|
+
export default EmptyChat;
|
|
53
|
+
const styles = StyleSheet.create({
|
|
54
|
+
container: {
|
|
55
|
+
alignItems: 'center',
|
|
56
|
+
justifyContent: 'center',
|
|
57
|
+
width: '100%',
|
|
58
|
+
flex: 1, // Use flex: 1 on all platforms
|
|
59
|
+
},
|
|
60
|
+
mascot: {
|
|
61
|
+
// Size is set dynamically based on breakpoint
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=EmptyChat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyChat.js","sourceRoot":"","sources":["../../../components/chat/EmptyChat.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../components/chat/Message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,QAAA,MAAM,OAAO,GAAI,kBAAkB,YAAY,KAAG,KAAK,CAAC,GAAG,CAAC,OA+C3D,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
import { View, StyleSheet } from 'react-native';
|
|
4
|
+
import { ThemeContext } from '../../theme';
|
|
5
|
+
import { useBrand } from '../../brand';
|
|
6
|
+
import { StyledText } from '../ui';
|
|
7
|
+
const Message = ({ text, isSent }) => {
|
|
8
|
+
const theme = React.useContext(ThemeContext);
|
|
9
|
+
const brand = useBrand();
|
|
10
|
+
const styles = useMemo(() => StyleSheet.create({
|
|
11
|
+
messageBubble: {
|
|
12
|
+
padding: 12,
|
|
13
|
+
borderRadius: brand.borderRadius,
|
|
14
|
+
marginVertical: 4,
|
|
15
|
+
maxWidth: '80%',
|
|
16
|
+
flexDirection: 'row',
|
|
17
|
+
alignItems: 'flex-end',
|
|
18
|
+
},
|
|
19
|
+
sentMessage: {
|
|
20
|
+
alignSelf: 'flex-end',
|
|
21
|
+
backgroundColor: brand.colors.primary,
|
|
22
|
+
marginLeft: '20%',
|
|
23
|
+
},
|
|
24
|
+
receivedMessage: {
|
|
25
|
+
alignSelf: 'flex-start',
|
|
26
|
+
backgroundColor: '#e0e0e0',
|
|
27
|
+
marginRight: '20%',
|
|
28
|
+
},
|
|
29
|
+
}), [brand]);
|
|
30
|
+
return (_jsx(View, { style: [
|
|
31
|
+
styles.messageBubble,
|
|
32
|
+
isSent
|
|
33
|
+
? styles.sentMessage
|
|
34
|
+
: [
|
|
35
|
+
styles.receivedMessage,
|
|
36
|
+
{
|
|
37
|
+
backgroundColor: theme.values.cardBackgroundColor,
|
|
38
|
+
...(!theme.values.isDark && !isSent && {
|
|
39
|
+
borderWidth: 1,
|
|
40
|
+
borderColor: theme.values.borderColor,
|
|
41
|
+
}),
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
], children: _jsx(StyledText, { color: isSent ? 'white' : theme.values.color, fontSize: 16, children: text }) }));
|
|
45
|
+
};
|
|
46
|
+
export default Message;
|
|
47
|
+
//# sourceMappingURL=Message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../components/chat/Message.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOnC,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAgB,EAAqB,EAAE;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAC7C,aAAa,EAAE;YACb,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,CAAC;YACjB,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,UAAU;SACvB;QACD,WAAW,EAAE;YACX,SAAS,EAAE,UAAU;YACrB,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YACrC,UAAU,EAAE,KAAK;SAClB;QACD,eAAe,EAAE;YACf,SAAS,EAAE,YAAY;YACvB,eAAe,EAAE,SAAS;YAC1B,WAAW,EAAE,KAAK;SACnB;KACF,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,KAAC,IAAI,IACH,KAAK,EAAE;YACL,MAAM,CAAC,aAAa;YACpB,MAAM;gBACJ,CAAC,CAAC,MAAM,CAAC,WAAW;gBACpB,CAAC,CAAC;oBACE,MAAM,CAAC,eAAe;oBACtB;wBACE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,mBAAmB;wBACjD,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI;4BACrC,WAAW,EAAE,CAAC;4BACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;yBACtC,CAAC;qBACH;iBACF;SACN,YACD,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,YACnE,IAAI,GACM,GACR,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as ChatContainer } from './ChatContainer';
|
|
2
|
+
export { default as ChatMessages } from './ChatMessages';
|
|
3
|
+
export { default as EmptyChat } from './EmptyChat';
|
|
4
|
+
export { default as ChatInput } from './ChatInput';
|
|
5
|
+
export * from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../components/chat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Export chat components from local files
|
|
2
|
+
export { default as ChatContainer } from './ChatContainer';
|
|
3
|
+
export { default as ChatMessages } from './ChatMessages';
|
|
4
|
+
export { default as EmptyChat } from './EmptyChat';
|
|
5
|
+
export { default as ChatInput } from './ChatInput';
|
|
6
|
+
export * from './types';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../components/chat/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ImageSourcePropType, ScrollView } from 'react-native';
|
|
3
|
+
export interface ChatPart {
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ChatHistory {
|
|
7
|
+
role: 'user' | 'model';
|
|
8
|
+
parts: ChatPart[];
|
|
9
|
+
}
|
|
10
|
+
export interface ChatResponse {
|
|
11
|
+
candidates: {
|
|
12
|
+
content: {
|
|
13
|
+
parts: ChatPart[];
|
|
14
|
+
};
|
|
15
|
+
}[];
|
|
16
|
+
history: ChatHistory[];
|
|
17
|
+
}
|
|
18
|
+
export interface ChatContainerProps {
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export interface ChatMessagesProps {
|
|
22
|
+
messages: {
|
|
23
|
+
text: string;
|
|
24
|
+
isSent: boolean;
|
|
25
|
+
}[];
|
|
26
|
+
scrollViewRef: React.RefObject<ScrollView | null>;
|
|
27
|
+
isLoading: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Optional loading animation source. Can be an ImageSourcePropType (require) or string URI.
|
|
30
|
+
* If not provided, defaults to the default loading animation asset.
|
|
31
|
+
*/
|
|
32
|
+
loadingAnimation?: ImageSourcePropType | string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../components/chat/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE;YACP,KAAK,EAAE,QAAQ,EAAE,CAAC;SACnB,CAAC;KACH,EAAE,CAAC;IACJ,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC9C,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;CACjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../components/chat/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Option {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
}
|
|
5
|
+
interface DropDownSelectProps {
|
|
6
|
+
options: Option[];
|
|
7
|
+
initialValue: string;
|
|
8
|
+
onSelect: (value: string) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const DropDownSelect: ({ options, onSelect, initialValue }: DropDownSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export default DropDownSelect;
|
|
12
|
+
//# sourceMappingURL=DropDownSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropDownSelect.d.ts","sourceRoot":"","sources":["../../../components/form/DropDownSelect.tsx"],"names":[],"mappings":"AAgBA,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,QAAA,MAAM,cAAc,GAAI,qCAAqC,mBAAmB,4CA2F/E,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState, useMemo } from 'react';
|
|
3
|
+
import { View, Pressable, StyleSheet, } from 'react-native';
|
|
4
|
+
import { StyledText } from '../ui';
|
|
5
|
+
import { useBrand } from '../../brand';
|
|
6
|
+
import Feather from '@expo/vector-icons/Feather';
|
|
7
|
+
import { ThemeContext } from '../../theme';
|
|
8
|
+
import { Card } from '../card';
|
|
9
|
+
import { ListButton } from '../list';
|
|
10
|
+
import { ListDivider } from '../list';
|
|
11
|
+
import { FlashList } from '@shopify/flash-list';
|
|
12
|
+
const DropDownSelect = ({ options, onSelect, initialValue }) => {
|
|
13
|
+
const [selectedValue, setSelectedValue] = useState(initialValue);
|
|
14
|
+
const [isDropdownVisible, setDropdownVisible] = useState(false);
|
|
15
|
+
const [buttonLayout, setButtonLayout] = useState(null);
|
|
16
|
+
const handleOptionSelect = (option) => {
|
|
17
|
+
setSelectedValue(option.label); // Update local state with selected option
|
|
18
|
+
setDropdownVisible(false); // Close the dropdown
|
|
19
|
+
onSelect(option.value); // Notify parent component about the selected value
|
|
20
|
+
};
|
|
21
|
+
// Initialize theme
|
|
22
|
+
const theme = useContext(ThemeContext);
|
|
23
|
+
const brand = useBrand();
|
|
24
|
+
const styles = useMemo(() => StyleSheet.create({
|
|
25
|
+
container: {
|
|
26
|
+
position: 'relative',
|
|
27
|
+
zIndex: 10,
|
|
28
|
+
},
|
|
29
|
+
dropdownButton: {
|
|
30
|
+
flexDirection: 'row',
|
|
31
|
+
justifyContent: 'space-between',
|
|
32
|
+
alignItems: 'center',
|
|
33
|
+
borderWidth: 1,
|
|
34
|
+
padding: 10,
|
|
35
|
+
borderRadius: brand.borderRadius,
|
|
36
|
+
},
|
|
37
|
+
dropdownList: {
|
|
38
|
+
position: 'absolute',
|
|
39
|
+
zIndex: 999, // Ensure dropdown appears above other content
|
|
40
|
+
},
|
|
41
|
+
dropdownItem: {
|
|
42
|
+
padding: 10,
|
|
43
|
+
borderBottomWidth: 1,
|
|
44
|
+
},
|
|
45
|
+
}), [brand]);
|
|
46
|
+
return (_jsxs(View, { style: styles.container, children: [_jsxs(Pressable, { style: [
|
|
47
|
+
styles.dropdownButton,
|
|
48
|
+
{
|
|
49
|
+
borderRadius: brand.borderRadius,
|
|
50
|
+
borderColor: theme.values.borderColor,
|
|
51
|
+
},
|
|
52
|
+
], onPress: () => setDropdownVisible(!isDropdownVisible), onLayout: (event) => setButtonLayout(event.nativeEvent.layout), children: [_jsx(StyledText, { fontSize: 'sm', uppercase: true, bold: true, children: isDropdownVisible ? '\n' : selectedValue }), _jsx(Feather, { name: "chevron-down", size: 20, color: theme.values.color })] }), isDropdownVisible && buttonLayout && (_jsx(View, { style: [
|
|
53
|
+
styles.dropdownList,
|
|
54
|
+
{
|
|
55
|
+
marginTop: 10,
|
|
56
|
+
top: buttonLayout.y + buttonLayout.height, // Position right below the button
|
|
57
|
+
left: buttonLayout.x, // Align with button's left
|
|
58
|
+
width: buttonLayout.width, // Match the button's width
|
|
59
|
+
},
|
|
60
|
+
], children: _jsx(Card, { children: _jsx(FlashList, { data: options, keyExtractor: (item) => item.value, renderItem: ({ item }) => (_jsxs(_Fragment, { children: [_jsx(ListButton, { text: item.label, onPress: () => handleOptionSelect(item), uppercase: true }), _jsx(ListDivider, {})] })), estimatedItemSize: 50 }) }) }))] }));
|
|
61
|
+
};
|
|
62
|
+
export default DropDownSelect;
|
|
63
|
+
//# sourceMappingURL=DropDownSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropDownSelect.js","sourceRoot":"","sources":["../../../components/form/DropDownSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface EmailSubscriptionFormProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
buttonText?: string;
|
|
6
|
+
successView?: React.ReactNode;
|
|
7
|
+
onSubmit: (email: string) => Promise<{
|
|
8
|
+
success: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
declare const EmailSubscriptionForm: React.FC<EmailSubscriptionFormProps>;
|
|
13
|
+
export default EmailSubscriptionForm;
|
|
14
|
+
//# sourceMappingURL=EmailSubscriptionForm.d.ts.map
|