app-tutor-ai-consumer 1.2.0 → 1.3.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 (62) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/config/vitest/__mocks__/sparkie.tsx +12 -0
  3. package/config/vitest/vitest.config.mts +1 -0
  4. package/environments/.env.test +2 -2
  5. package/package.json +2 -1
  6. package/public/assets/svg/tutor-onboarding.svg +128 -0
  7. package/src/@types/declarations.d.ts +4 -3
  8. package/src/config/optimizely/optimizely-provider.tsx +3 -3
  9. package/src/config/optimizely/optimizely.ts +1 -1
  10. package/src/config/styles/global.css +1 -0
  11. package/src/config/styles/utilities/bg-utilities.module.css +11 -0
  12. package/src/config/styles/utilities/text-utilities.module.css +6 -0
  13. package/src/config/tests/handlers.ts +3 -0
  14. package/src/lib/components/button/button.tsx +86 -0
  15. package/src/lib/components/button/index.ts +1 -0
  16. package/src/lib/components/index.ts +1 -0
  17. package/src/lib/hooks/index.ts +1 -0
  18. package/src/lib/hooks/use-ref-event-listener/index.ts +2 -0
  19. package/src/lib/hooks/use-ref-event-listener/use-ref-event-listener.tsx +32 -0
  20. package/src/main/main.spec.tsx +17 -7
  21. package/src/main/main.tsx +2 -13
  22. package/src/modules/messages/components/chat-input/chat-input.atom.ts +12 -0
  23. package/src/modules/{create-message → messages}/components/chat-input/chat-input.tsx +6 -2
  24. package/src/modules/{create-message → messages}/components/chat-input/index.ts +1 -0
  25. package/src/modules/{create-message → messages}/components/chat-input/types.ts +1 -0
  26. package/src/modules/messages/components/index.ts +2 -0
  27. package/src/modules/messages/components/messages-list/index.ts +2 -0
  28. package/src/modules/messages/components/messages-list/messages-list.tsx +24 -0
  29. package/src/modules/messages/constants.ts +1 -0
  30. package/src/modules/messages/index.ts +3 -0
  31. package/src/modules/messages/service.ts +63 -0
  32. package/src/modules/messages/types.ts +47 -0
  33. package/src/modules/sparkie/constants.ts +21 -0
  34. package/src/modules/sparkie/index.ts +3 -0
  35. package/src/modules/sparkie/service.ts +94 -0
  36. package/src/modules/sparkie/types.ts +47 -0
  37. package/src/modules/sparkie/utils/validate-firebase-config.spec.ts +17 -0
  38. package/src/modules/sparkie/utils/validate-firebase-config.ts +12 -0
  39. package/src/modules/widget/__tests__/widget-settings-props.builder.ts +121 -0
  40. package/src/modules/widget/components/chat-page/chat-page.tsx +20 -0
  41. package/src/modules/widget/components/chat-page/index.ts +2 -0
  42. package/src/modules/widget/components/constants.tsx +9 -0
  43. package/src/modules/widget/components/container/container.tsx +32 -0
  44. package/src/modules/widget/components/container/index.ts +2 -0
  45. package/src/{main → modules/widget/components/container}/styles.module.css +1 -5
  46. package/src/modules/widget/components/container/types.ts +3 -0
  47. package/src/modules/widget/components/greetings-card/greetings-card.tsx +1 -1
  48. package/src/modules/widget/components/greetings-card/styles.module.css +1 -3
  49. package/src/modules/widget/components/index.ts +3 -0
  50. package/src/modules/widget/components/onboarding-page/index.ts +1 -0
  51. package/src/modules/widget/components/onboarding-page/onboarding-page.tsx +38 -0
  52. package/src/modules/widget/components/onboarding-page/styles.module.css +7 -0
  53. package/src/modules/widget/components/starter-page/index.ts +1 -0
  54. package/src/modules/widget/components/starter-page/starter-page.tsx +41 -0
  55. package/src/modules/widget/hooks/index.ts +1 -0
  56. package/src/modules/widget/hooks/use-init-sparkie/index.ts +1 -0
  57. package/src/modules/widget/hooks/use-init-sparkie/use-init-sparkie.tsx +18 -0
  58. package/src/modules/widget/store/index.ts +1 -0
  59. package/src/modules/widget/store/widget-tabs.atom.ts +53 -0
  60. package/tailwind.config.js +95 -1
  61. package/config/vitest/index.ts +0 -1
  62. package/src/modules/create-message/components/index.ts +0 -1
@@ -0,0 +1,17 @@
1
+ import { firebaseConfig } from '../constants'
2
+
3
+ import { validateFirebaseConfig } from './validate-firebase-config'
4
+
5
+ describe('validateFirebaseConfig', () => {
6
+ it('should return true when all required configs are defined', () => {
7
+ expect(validateFirebaseConfig()).toBe(true)
8
+ })
9
+
10
+ it('should return false when firebase any process variable is undefined', () => {
11
+ Object.defineProperty(firebaseConfig, 'apiKey', {
12
+ value: undefined
13
+ })
14
+
15
+ expect(validateFirebaseConfig()).toBe(false)
16
+ })
17
+ })
@@ -0,0 +1,12 @@
1
+ import { firebaseConfig, firebaseConfigRequiredFields } from '../constants'
2
+
3
+ export const validateFirebaseConfig = () => {
4
+ for (const field of firebaseConfigRequiredFields) {
5
+ if (!firebaseConfig[field as keyof typeof firebaseConfig]) {
6
+ console.error(`Firebase configuration missing: ${field}`)
7
+ return false
8
+ }
9
+ }
10
+
11
+ return true
12
+ }
@@ -0,0 +1,121 @@
1
+ import type { ILanguages } from '@/src/config/i18n'
2
+ import { chance } from '@/src/config/tests'
3
+ import type { User, WidgetSettingProps } from '@/src/types'
4
+
5
+ class WidgetSettingPropsBuilder implements WidgetSettingProps {
6
+ hotmartToken: string
7
+ locale: ILanguages
8
+ conversationId: string
9
+ productId: number
10
+ productName: string
11
+ author?: string
12
+ clubName?: string
13
+ contactId?: string
14
+ namespace?: string
15
+ sessionId?: string
16
+ membershipId?: string
17
+ membershipSlug?: string
18
+ userId?: string
19
+ tutorName?: string
20
+ user?: User
21
+
22
+ constructor() {
23
+ this.hotmartToken = chance.guid()
24
+ this.locale = 'en'
25
+ this.conversationId = chance.guid()
26
+ this.productId = 4234
27
+ this.productName = 'Berim CDs'
28
+ }
29
+
30
+ withHotmartToken(hotmartToken: typeof this.hotmartToken) {
31
+ this.hotmartToken = hotmartToken
32
+
33
+ return this
34
+ }
35
+
36
+ withLocale(locale: typeof this.locale) {
37
+ this.locale = locale
38
+
39
+ return this
40
+ }
41
+
42
+ withConversationId(conversationId: typeof this.conversationId) {
43
+ this.conversationId = conversationId
44
+
45
+ return this
46
+ }
47
+
48
+ withProductId(productId: typeof this.productId) {
49
+ this.productId = productId
50
+
51
+ return this
52
+ }
53
+
54
+ withProductName(productName: typeof this.productName) {
55
+ this.productName = productName
56
+
57
+ return this
58
+ }
59
+
60
+ withAuthor(author: typeof this.author) {
61
+ this.author = author
62
+
63
+ return this
64
+ }
65
+
66
+ withClubName(clubName: typeof this.clubName) {
67
+ this.clubName = clubName
68
+
69
+ return this
70
+ }
71
+
72
+ withContactId(contactId: typeof this.contactId) {
73
+ this.contactId = contactId
74
+
75
+ return this
76
+ }
77
+
78
+ withNamespace(namespace: typeof this.namespace) {
79
+ this.namespace = namespace
80
+
81
+ return this
82
+ }
83
+
84
+ withSessionId(sessionId: typeof this.sessionId) {
85
+ this.sessionId = sessionId
86
+
87
+ return this
88
+ }
89
+
90
+ withMembershipId(membershipId: typeof this.membershipId) {
91
+ this.membershipId = membershipId
92
+
93
+ return this
94
+ }
95
+
96
+ withMembershipSlug(membershipSlug: typeof this.membershipSlug) {
97
+ this.membershipSlug = membershipSlug
98
+
99
+ return this
100
+ }
101
+
102
+ withUserId(userId: typeof this.userId) {
103
+ this.userId = userId
104
+
105
+ return this
106
+ }
107
+
108
+ withTutorName(tutorName: typeof this.tutorName) {
109
+ this.tutorName = tutorName
110
+
111
+ return this
112
+ }
113
+
114
+ withUser(user: typeof this.user) {
115
+ this.user = user
116
+
117
+ return this
118
+ }
119
+ }
120
+
121
+ export default WidgetSettingPropsBuilder
@@ -0,0 +1,20 @@
1
+ import { useRef } from 'react'
2
+
3
+ import { ChatInput, MessagesList } from '@/src/modules/messages/components'
4
+
5
+ function ChatPage() {
6
+ const chatInputRef = useRef<HTMLInputElement>(null)
7
+
8
+ return (
9
+ <div className='flex flex-1 flex-col justify-center'>
10
+ <div className='flex flex-1 flex-col justify-center px-5 py-4'>
11
+ <MessagesList />
12
+ </div>
13
+ <div className='border-t border-t-neutral-700 px-5 py-4'>
14
+ <ChatInput name='new-chat-msg-input' ref={chatInputRef} />
15
+ </div>
16
+ </div>
17
+ )
18
+ }
19
+
20
+ export default ChatPage
@@ -0,0 +1,2 @@
1
+ export * from './chat-page'
2
+ export { default as ChatPage } from './chat-page'
@@ -0,0 +1,9 @@
1
+ import { ChatPage } from './chat-page'
2
+ import { WidgetOnboardingPage } from './onboarding-page'
3
+ import { WidgetStarterPage } from './starter-page'
4
+
5
+ export const WIDGET_TABS = {
6
+ onboarding: <WidgetOnboardingPage />,
7
+ starter: <WidgetStarterPage />,
8
+ chat: <ChatPage />
9
+ }
@@ -0,0 +1,32 @@
1
+ import { useEffect } from 'react'
2
+ import { useQueryClient } from '@tanstack/react-query'
3
+
4
+ import { getInitSparkieQuery } from '../../hooks'
5
+ import { useWidgetSettingsAtom, useWidgetTabsAtom } from '../../store'
6
+ import { WIDGET_TABS } from '../constants'
7
+
8
+ function WidgetContainer() {
9
+ const [settings] = useWidgetSettingsAtom()
10
+ const initSparkieQuery = settings ? getInitSparkieQuery(settings) : null
11
+ const queryClient = useQueryClient()
12
+ const [widgetTabs] = useWidgetTabsAtom()
13
+
14
+ useEffect(() => {
15
+ if (!initSparkieQuery) return
16
+ void (async () => {
17
+ await queryClient.prefetchQuery(initSparkieQuery)
18
+ })()
19
+ }, [initSparkieQuery, queryClient])
20
+
21
+ if (!settings?.tutorName) return null
22
+
23
+ return (
24
+ <div className='flex min-h-svh flex-col items-center justify-center bg-neutral-900'>
25
+ <div className='flex flex-1 flex-col justify-center gap-6'>
26
+ {WIDGET_TABS[widgetTabs.currentTab]}
27
+ </div>
28
+ </div>
29
+ )
30
+ }
31
+
32
+ export default WidgetContainer
@@ -0,0 +1,2 @@
1
+ export { default as WidgetContainer } from './container'
2
+ export * from './types'
@@ -7,9 +7,5 @@
7
7
  rgb(from var(--ai-color-dark) r g b / 0.2) 46.97%,
8
8
  rgb(from var(--hc-color-neutral-1000) r g b / 0.2) 57.9%
9
9
  ),
10
- linear-gradient(
11
- 0deg,
12
- var(--hc-color-neutral-1000),
13
- var(--hc-color-neutral-1000)
14
- );
10
+ linear-gradient(0deg, var(--hc-color-neutral-1000), var(--hc-color-neutral-1000));
15
11
  }
@@ -0,0 +1,3 @@
1
+ import type { WIDGET_TABS } from '../constants'
2
+
3
+ export type CurrentTabKey = keyof typeof WIDGET_TABS
@@ -14,7 +14,7 @@ function GreetingsCard({ author, tutorName }: GreetingsCardProps) {
14
14
  const { t } = useTranslation()
15
15
 
16
16
  return (
17
- <div className='flex flex-1 flex-col items-center justify-center text-neutral-50'>
17
+ <div className='flex flex-col items-center justify-center text-neutral-50'>
18
18
  <div className='flex flex-col items-center justify-center gap-4 text-center'>
19
19
  <figure
20
20
  className={clsx(
@@ -3,7 +3,5 @@
3
3
  }
4
4
 
5
5
  .faceTxt {
6
- background: linear-gradient(226.83deg, #7ab0ff 21.46%, #b48eff 95.76%);
7
- background-clip: text;
8
- -webkit-text-fill-color: transparent;
6
+ composes: gradientText from '../../../../config/styles/utilities/text-utilities.module.css';
9
7
  }
@@ -1 +1,4 @@
1
+ export * from './ai-avatar'
2
+ export * from './chat-page'
3
+ export * from './container'
1
4
  export * from './greetings-card'
@@ -0,0 +1 @@
1
+ export { default as WidgetOnboardingPage } from './onboarding-page'
@@ -0,0 +1,38 @@
1
+ import clsx from 'clsx'
2
+ import { useTranslation } from 'react-i18next'
3
+
4
+ import TutorOnboardingSVG from '@/public/assets/svg/tutor-onboarding.svg?url'
5
+ import { Button } from '@/src/lib/components'
6
+ import { useWidgetTabsAtom } from '../../store'
7
+
8
+ import styles from './styles.module.css'
9
+
10
+ function WidgetOnboardingPage() {
11
+ const [, setWidgetTabs] = useWidgetTabsAtom()
12
+ const { t } = useTranslation()
13
+
14
+ return (
15
+ <div className={clsx('flex flex-1 flex-col justify-center gap-6 px-4 py-6', styles.bg)}>
16
+ <div className='flex flex-1 flex-col justify-center gap-6 px-0.5'>
17
+ <div className='mx-auto max-w-[67%]'>
18
+ <img src={TutorOnboardingSVG} aria-hidden />
19
+ </div>
20
+ <div className='flex flex-col gap-2'>
21
+ <h3 className={clsx(styles.gradientTxt, 'text-center text-xl/tight font-semibold')}>
22
+ {t('onboarding.title')}
23
+ </h3>
24
+ <p className='text-center text-sm/snug font-normal text-gray-400'>
25
+ {t('onboarding.description')}
26
+ </p>
27
+ </div>
28
+ </div>
29
+ <div className='flex gap-4'>
30
+ <Button variant='brand' className='flex-1' onClick={() => setWidgetTabs('starter')}>
31
+ {t('general.buttons.start')}
32
+ </Button>
33
+ </div>
34
+ </div>
35
+ )
36
+ }
37
+
38
+ export default WidgetOnboardingPage
@@ -0,0 +1,7 @@
1
+ .gradientTxt {
2
+ composes: gradientText from '../../../../config/styles/utilities/text-utilities.module.css';
3
+ }
4
+
5
+ .bg {
6
+ composes: gradientBg from '../../../../config/styles/utilities/bg-utilities.module.css';
7
+ }
@@ -0,0 +1 @@
1
+ export { default as WidgetStarterPage } from './starter-page'
@@ -0,0 +1,41 @@
1
+ import { useRef } from 'react'
2
+
3
+ import { useRefEventListener } from '@/src/lib/hooks'
4
+ import { ChatInput, useChatInputValueAtom } from '@/src/modules/messages/components'
5
+ import { useWidgetSettingsAtom, useWidgetTabsAtom } from '../../store'
6
+ import { GreetingsCard } from '../greetings-card'
7
+
8
+ function WidgetStarterPage() {
9
+ const [settings] = useWidgetSettingsAtom()
10
+ const chatInputRef = useRef<HTMLInputElement>(null)
11
+ const [, setChatInputValue] = useChatInputValueAtom()
12
+ const [, setWidgetTabs] = useWidgetTabsAtom()
13
+
14
+ useRefEventListener<HTMLInputElement>({
15
+ config: {
16
+ ref: chatInputRef,
17
+ eventTypes: ['input', 'change'],
18
+ handler: (e) => {
19
+ const target = e.target as HTMLInputElement
20
+ setChatInputValue(target.value)
21
+ }
22
+ }
23
+ })
24
+
25
+ return (
26
+ <div className='flex flex-1 flex-col justify-center'>
27
+ <div className='flex flex-1 flex-col justify-center px-5 py-4'>
28
+ <GreetingsCard author={settings?.author ?? ''} tutorName={settings?.tutorName ?? ''} />
29
+ </div>
30
+ <div className='border-t border-t-neutral-700 px-5 py-4'>
31
+ <ChatInput
32
+ name='new-chat-msg-input'
33
+ ref={chatInputRef}
34
+ onSend={() => setWidgetTabs('chat')}
35
+ />
36
+ </div>
37
+ </div>
38
+ )
39
+ }
40
+
41
+ export default WidgetStarterPage
@@ -0,0 +1 @@
1
+ export * from './use-init-sparkie'
@@ -0,0 +1 @@
1
+ export * from './use-init-sparkie'
@@ -0,0 +1,18 @@
1
+ import { useQuery } from '@tanstack/react-query'
2
+
3
+ import { SparkieService } from '@/src/modules/sparkie'
4
+ import type { WidgetSettingProps } from '@/src/types'
5
+
6
+ export const getInitSparkieQuery = (settings: WidgetSettingProps) => ({
7
+ queryKey: ['SparkieService:initializeSparkie', settings.hotmartToken],
8
+ queryFn: () =>
9
+ SparkieService.initSparkie({
10
+ token: settings.hotmartToken,
11
+ skipPresenceSetup: true
12
+ }),
13
+ enabled: Boolean(settings?.hotmartToken?.trim())
14
+ })
15
+
16
+ export function useInitSparkie(settings: WidgetSettingProps) {
17
+ return useQuery(getInitSparkieQuery(settings))
18
+ }
@@ -1 +1,2 @@
1
1
  export * from './widget-settings.atom'
2
+ export * from './widget-tabs.atom'
@@ -0,0 +1,53 @@
1
+ import { atom, useAtom } from 'jotai'
2
+
3
+ import type { CurrentTabKey } from '../components'
4
+
5
+ export type WidgetTabsProps = {
6
+ currentTab: CurrentTabKey
7
+ history: Set<CurrentTabKey>
8
+ }
9
+
10
+ const INITIAL_PROPS: WidgetTabsProps = {
11
+ currentTab: 'onboarding',
12
+ history: new Set(['onboarding'])
13
+ }
14
+
15
+ export const widgetTabsAtom = atom<WidgetTabsProps>(INITIAL_PROPS)
16
+
17
+ export const setWidgetTabsAtom = atom(
18
+ (get) => get(widgetTabsAtom),
19
+ (get, set, currentTab: CurrentTabKey) => {
20
+ const currentValue = get(widgetTabsAtom)
21
+
22
+ if (currentValue.currentTab === currentTab) return
23
+
24
+ const history = new Set([...currentValue.history, currentTab])
25
+
26
+ const config: WidgetTabsProps = {
27
+ currentTab,
28
+ history
29
+ }
30
+
31
+ set(widgetTabsAtom, config)
32
+ }
33
+ )
34
+
35
+ export const goBackTabAtom = atom(null, (get, set) => {
36
+ const currentValue = get(widgetTabsAtom)
37
+ const historyArray = Array.from(currentValue.history)
38
+
39
+ if (historyArray.length <= 1) return
40
+
41
+ historyArray.pop()
42
+
43
+ const config: WidgetTabsProps = {
44
+ currentTab: historyArray[historyArray.length - 1],
45
+ history: new Set(historyArray)
46
+ }
47
+
48
+ set(widgetTabsAtom, config)
49
+ })
50
+
51
+ export const useGetWidgetTabsAtom = () => useAtom(widgetTabsAtom)
52
+ export const useWidgetTabsAtom = () => useAtom(setWidgetTabsAtom)
53
+ export const useWidgetGoBackTabAton = () => useAtom(goBackTabAtom)
@@ -2,7 +2,101 @@
2
2
  module.exports = {
3
3
  content: ['./src/**/*.{js,ts,jsx,tsx}', './public/**/*.html'],
4
4
  theme: {
5
- extend: {}
5
+ extend: {
6
+ colors: {
7
+ primary: {
8
+ 100: 'var(--hc-color-primary-100)',
9
+ 200: 'var(--hc-color-primary-200)',
10
+ 300: 'var(--hc-color-primary-300)',
11
+ 400: 'var(--hc-color-primary-400)',
12
+ 500: 'var(--hc-color-primary-500)',
13
+ 600: 'var(--hc-color-primary-600)',
14
+ 700: 'var(--hc-color-primary-700)'
15
+ },
16
+ secondary: {
17
+ 100: 'var(--hc-color-secondary-100)',
18
+ 200: 'var(--hc-color-secondary-200)',
19
+ 300: 'var(--hc-color-secondary-300)',
20
+ 400: 'var(--hc-color-secondary-400)',
21
+ 500: 'var(--hc-color-secondary-500)',
22
+ 600: 'var(--hc-color-secondary-600)',
23
+ 700: 'var(--hc-color-secondary-700)'
24
+ },
25
+ success: {
26
+ 100: 'var(--hc-color-success-100)',
27
+ 200: 'var(--hc-color-success-200)',
28
+ 300: 'var(--hc-color-success-300)',
29
+ 400: 'var(--hc-color-success-400)',
30
+ 500: 'var(--hc-color-success-500)',
31
+ 600: 'var(--hc-color-success-600)',
32
+ 700: 'var(--hc-color-success-700)'
33
+ },
34
+ warning: {
35
+ 100: 'var(--hc-color-warning-100)',
36
+ 200: 'var(--hc-color-warning-200)',
37
+ 300: 'var(--hc-color-warning-300)',
38
+ 400: 'var(--hc-color-warning-400)',
39
+ 500: 'var(--hc-color-warning-500)',
40
+ 600: 'var(--hc-color-warning-600)',
41
+ 700: 'var(--hc-color-warning-700)'
42
+ },
43
+ danger: {
44
+ 100: 'var(--hc-color-danger-100)',
45
+ 200: 'var(--hc-color-danger-200)',
46
+ 300: 'var(--hc-color-danger-300)',
47
+ 400: 'var(--hc-color-danger-400)',
48
+ 500: 'var(--hc-color-danger-500)',
49
+ 600: 'var(--hc-color-danger-600)',
50
+ 700: 'var(--hc-color-danger-700)'
51
+ },
52
+ info: {
53
+ 100: 'var(--hc-color-info-100)',
54
+ 200: 'var(--hc-color-info-200)',
55
+ 300: 'var(--hc-color-info-300)',
56
+ 400: 'var(--hc-color-info-400)',
57
+ 500: 'var(--hc-color-info-500)',
58
+ 600: 'var(--hc-color-info-600)',
59
+ 700: 'var(--hc-color-info-700)'
60
+ },
61
+ andromeda: {
62
+ 100: 'var(--hc-color-andromeda-100)',
63
+ 200: 'var(--hc-color-andromeda-200)',
64
+ 300: 'var(--hc-color-andromeda-300)',
65
+ 400: 'var(--hc-color-andromeda-400)',
66
+ 500: 'var(--hc-color-andromeda-500)',
67
+ 600: 'var(--hc-color-andromeda-600)',
68
+ 700: 'var(--hc-color-andromeda-700)'
69
+ },
70
+ sirius: {
71
+ 100: 'var(--hc-color-sirius-100)',
72
+ 200: 'var(--hc-color-sirius-200)',
73
+ 300: 'var(--hc-color-sirius-300)',
74
+ 400: 'var(--hc-color-sirius-400)',
75
+ 500: 'var(--hc-color-sirius-500)',
76
+ 600: 'var(--hc-color-sirius-600)',
77
+ 700: 'var(--hc-color-sirius-700)'
78
+ },
79
+ neutral: {
80
+ 0: 'var(--hc-color-neutral-0)',
81
+ 100: 'var(--hc-color-neutral-100)',
82
+ 200: 'var(--hc-color-neutral-200)',
83
+ 300: 'var(--hc-color-neutral-300)',
84
+ 400: 'var(--hc-color-neutral-400)',
85
+ 500: 'var(--hc-color-neutral-500)',
86
+ 600: 'var(--hc-color-neutral-600)',
87
+ 700: 'var(--hc-color-neutral-700)',
88
+ 800: 'var(--hc-color-neutral-800)',
89
+ 900: 'var(--hc-color-neutral-900)',
90
+ 1000: 'var(--hc-color-neutral-1000)'
91
+ },
92
+ ai: {
93
+ primary: 'var(--ai-color-primary)',
94
+ secondary: 'var(--ai-color-secondary)',
95
+ dark: 'var(--ai-color-dark)',
96
+ 'chat-response': 'var(--ai-color-chat-response)'
97
+ }
98
+ }
99
+ }
6
100
  },
7
101
  plugins: []
8
102
  }
@@ -1 +0,0 @@
1
- export * from '../../src/config/tests'
@@ -1 +0,0 @@
1
- export * from './chat-input'