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.
- package/CHANGELOG.md +11 -0
- package/config/vitest/__mocks__/sparkie.tsx +12 -0
- package/config/vitest/vitest.config.mts +1 -0
- package/environments/.env.test +2 -2
- package/package.json +2 -1
- package/public/assets/svg/tutor-onboarding.svg +128 -0
- package/src/@types/declarations.d.ts +4 -3
- package/src/config/optimizely/optimizely-provider.tsx +3 -3
- package/src/config/optimizely/optimizely.ts +1 -1
- package/src/config/styles/global.css +1 -0
- package/src/config/styles/utilities/bg-utilities.module.css +11 -0
- package/src/config/styles/utilities/text-utilities.module.css +6 -0
- package/src/config/tests/handlers.ts +3 -0
- package/src/lib/components/button/button.tsx +86 -0
- package/src/lib/components/button/index.ts +1 -0
- package/src/lib/components/index.ts +1 -0
- package/src/lib/hooks/index.ts +1 -0
- package/src/lib/hooks/use-ref-event-listener/index.ts +2 -0
- package/src/lib/hooks/use-ref-event-listener/use-ref-event-listener.tsx +32 -0
- package/src/main/main.spec.tsx +17 -7
- package/src/main/main.tsx +2 -13
- package/src/modules/messages/components/chat-input/chat-input.atom.ts +12 -0
- package/src/modules/{create-message → messages}/components/chat-input/chat-input.tsx +6 -2
- package/src/modules/{create-message → messages}/components/chat-input/index.ts +1 -0
- package/src/modules/{create-message → messages}/components/chat-input/types.ts +1 -0
- package/src/modules/messages/components/index.ts +2 -0
- package/src/modules/messages/components/messages-list/index.ts +2 -0
- package/src/modules/messages/components/messages-list/messages-list.tsx +24 -0
- package/src/modules/messages/constants.ts +1 -0
- package/src/modules/messages/index.ts +3 -0
- package/src/modules/messages/service.ts +63 -0
- package/src/modules/messages/types.ts +47 -0
- package/src/modules/sparkie/constants.ts +21 -0
- package/src/modules/sparkie/index.ts +3 -0
- package/src/modules/sparkie/service.ts +94 -0
- package/src/modules/sparkie/types.ts +47 -0
- package/src/modules/sparkie/utils/validate-firebase-config.spec.ts +17 -0
- package/src/modules/sparkie/utils/validate-firebase-config.ts +12 -0
- package/src/modules/widget/__tests__/widget-settings-props.builder.ts +121 -0
- package/src/modules/widget/components/chat-page/chat-page.tsx +20 -0
- package/src/modules/widget/components/chat-page/index.ts +2 -0
- package/src/modules/widget/components/constants.tsx +9 -0
- package/src/modules/widget/components/container/container.tsx +32 -0
- package/src/modules/widget/components/container/index.ts +2 -0
- package/src/{main → modules/widget/components/container}/styles.module.css +1 -5
- package/src/modules/widget/components/container/types.ts +3 -0
- package/src/modules/widget/components/greetings-card/greetings-card.tsx +1 -1
- package/src/modules/widget/components/greetings-card/styles.module.css +1 -3
- package/src/modules/widget/components/index.ts +3 -0
- package/src/modules/widget/components/onboarding-page/index.ts +1 -0
- package/src/modules/widget/components/onboarding-page/onboarding-page.tsx +38 -0
- package/src/modules/widget/components/onboarding-page/styles.module.css +7 -0
- package/src/modules/widget/components/starter-page/index.ts +1 -0
- package/src/modules/widget/components/starter-page/starter-page.tsx +41 -0
- package/src/modules/widget/hooks/index.ts +1 -0
- package/src/modules/widget/hooks/use-init-sparkie/index.ts +1 -0
- package/src/modules/widget/hooks/use-init-sparkie/use-init-sparkie.tsx +18 -0
- package/src/modules/widget/store/index.ts +1 -0
- package/src/modules/widget/store/widget-tabs.atom.ts +53 -0
- package/tailwind.config.js +95 -1
- package/config/vitest/index.ts +0 -1
- 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,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
|
|
@@ -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
|
}
|
|
@@ -14,7 +14,7 @@ function GreetingsCard({ author, tutorName }: GreetingsCardProps) {
|
|
|
14
14
|
const { t } = useTranslation()
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
|
-
<div className='flex flex-
|
|
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(
|
|
@@ -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 @@
|
|
|
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
|
+
}
|
|
@@ -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)
|
package/tailwind.config.js
CHANGED
|
@@ -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
|
}
|
package/config/vitest/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '../../src/config/tests'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './chat-input'
|