@discourser/design-system 0.15.1 → 0.18.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 (281) hide show
  1. package/dist/{chunk-UNWXE6UB.cjs → chunk-2P7Z5PVP.cjs} +817 -16
  2. package/dist/chunk-2P7Z5PVP.cjs.map +1 -0
  3. package/dist/{chunk-ABC7N32K.cjs → chunk-PFWU7QSM.cjs} +464 -8
  4. package/dist/chunk-PFWU7QSM.cjs.map +1 -0
  5. package/dist/{chunk-GD6Q2FUE.js → chunk-QC7LGFM3.js} +808 -18
  6. package/dist/chunk-QC7LGFM3.js.map +1 -0
  7. package/dist/{chunk-SBKRSXSZ.js → chunk-SNUJBT5R.js} +464 -8
  8. package/dist/chunk-SNUJBT5R.js.map +1 -0
  9. package/dist/components/Accordion.figma.d.ts +2 -0
  10. package/dist/components/Accordion.figma.d.ts.map +1 -0
  11. package/dist/components/Breadcrumb.d.ts +2 -0
  12. package/dist/components/Breadcrumb.d.ts.map +1 -1
  13. package/dist/components/Breadcrumb.figma.d.ts +2 -0
  14. package/dist/components/Breadcrumb.figma.d.ts.map +1 -0
  15. package/dist/components/ContentCard/ContentCard.d.ts +13 -0
  16. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
  17. package/dist/components/ContentCard/ContentCard.figma.d.ts +2 -0
  18. package/dist/components/ContentCard/ContentCard.figma.d.ts.map +1 -0
  19. package/dist/components/ContentCard/index.d.ts +2 -0
  20. package/dist/components/ContentCard/index.d.ts.map +1 -0
  21. package/dist/components/{Heading.d.ts → Header.d.ts} +3 -3
  22. package/dist/components/Header.d.ts.map +1 -0
  23. package/dist/components/Header.figma.d.ts +2 -0
  24. package/dist/components/Header.figma.d.ts.map +1 -0
  25. package/dist/components/Icons/AccountIcon.d.ts +6 -0
  26. package/dist/components/Icons/AccountIcon.d.ts.map +1 -0
  27. package/dist/components/Icons/AudienceIcon.d.ts +6 -0
  28. package/dist/components/Icons/AudienceIcon.d.ts.map +1 -0
  29. package/dist/components/Icons/AudienceIcon.figma.d.ts +2 -0
  30. package/dist/components/Icons/AudienceIcon.figma.d.ts.map +1 -0
  31. package/dist/components/Icons/AudioSpeakerIcon.d.ts +6 -0
  32. package/dist/components/Icons/AudioSpeakerIcon.d.ts.map +1 -0
  33. package/dist/components/Icons/AudioSpeakerIcon.figma.d.ts +2 -0
  34. package/dist/components/Icons/AudioSpeakerIcon.figma.d.ts.map +1 -0
  35. package/dist/components/Icons/BookmarkPlusIcon.d.ts +6 -0
  36. package/dist/components/Icons/BookmarkPlusIcon.d.ts.map +1 -0
  37. package/dist/components/Icons/BookmarkPlusIcon.figma.d.ts +2 -0
  38. package/dist/components/Icons/BookmarkPlusIcon.figma.d.ts.map +1 -0
  39. package/dist/components/Icons/ChevronUpIcon.d.ts +6 -0
  40. package/dist/components/Icons/ChevronUpIcon.d.ts.map +1 -0
  41. package/dist/components/Icons/ClipBoardIcon.d.ts +6 -0
  42. package/dist/components/Icons/ClipBoardIcon.d.ts.map +1 -0
  43. package/dist/components/Icons/ClipBoardIcon.figma.d.ts +2 -0
  44. package/dist/components/Icons/ClipBoardIcon.figma.d.ts.map +1 -0
  45. package/dist/components/Icons/ClockIcon.d.ts.map +1 -1
  46. package/dist/components/Icons/DashboardIcon.d.ts +6 -0
  47. package/dist/components/Icons/DashboardIcon.d.ts.map +1 -0
  48. package/dist/components/Icons/DiscourserLogo.d.ts +6 -0
  49. package/dist/components/Icons/DiscourserLogo.d.ts.map +1 -0
  50. package/dist/components/Icons/DiscourserLogo.figma.d.ts +2 -0
  51. package/dist/components/Icons/DiscourserLogo.figma.d.ts.map +1 -0
  52. package/dist/components/Icons/ExitStudioIcon.d.ts +6 -0
  53. package/dist/components/Icons/ExitStudioIcon.d.ts.map +1 -0
  54. package/dist/components/Icons/ExitStudioIcon.figma.d.ts +2 -0
  55. package/dist/components/Icons/ExitStudioIcon.figma.d.ts.map +1 -0
  56. package/dist/components/Icons/GripDotsVerticalIcon.d.ts.map +1 -1
  57. package/dist/components/Icons/HelpIcon.d.ts +6 -0
  58. package/dist/components/Icons/HelpIcon.d.ts.map +1 -0
  59. package/dist/components/Icons/MicrophoneIcon.d.ts +6 -0
  60. package/dist/components/Icons/MicrophoneIcon.d.ts.map +1 -0
  61. package/dist/components/Icons/MicrophoneIcon.figma.d.ts +2 -0
  62. package/dist/components/Icons/MicrophoneIcon.figma.d.ts.map +1 -0
  63. package/dist/components/Icons/NotebookIcon.d.ts +6 -0
  64. package/dist/components/Icons/NotebookIcon.d.ts.map +1 -0
  65. package/dist/components/Icons/NotebookPenIcon.d.ts +6 -0
  66. package/dist/components/Icons/NotebookPenIcon.d.ts.map +1 -0
  67. package/dist/components/Icons/NotebookPenIcon.figma.d.ts +2 -0
  68. package/dist/components/Icons/NotebookPenIcon.figma.d.ts.map +1 -0
  69. package/dist/components/Icons/PausePlayIcon.d.ts +6 -0
  70. package/dist/components/Icons/PausePlayIcon.d.ts.map +1 -0
  71. package/dist/components/Icons/PausePlayIcon.figma.d.ts +2 -0
  72. package/dist/components/Icons/PausePlayIcon.figma.d.ts.map +1 -0
  73. package/dist/components/Icons/PlayIcon.d.ts +6 -0
  74. package/dist/components/Icons/PlayIcon.d.ts.map +1 -0
  75. package/dist/components/Icons/PlayIcon.figma.d.ts +2 -0
  76. package/dist/components/Icons/PlayIcon.figma.d.ts.map +1 -0
  77. package/dist/components/Icons/RecordIcon.d.ts +6 -0
  78. package/dist/components/Icons/RecordIcon.d.ts.map +1 -0
  79. package/dist/components/Icons/RecordIcon.figma.d.ts +2 -0
  80. package/dist/components/Icons/RecordIcon.figma.d.ts.map +1 -0
  81. package/dist/components/Icons/RepeatQuestionIcon.d.ts +6 -0
  82. package/dist/components/Icons/RepeatQuestionIcon.d.ts.map +1 -0
  83. package/dist/components/Icons/RepeatQuestionIcon.figma.d.ts +2 -0
  84. package/dist/components/Icons/RepeatQuestionIcon.figma.d.ts.map +1 -0
  85. package/dist/components/Icons/RightArrowIcon.d.ts +6 -0
  86. package/dist/components/Icons/RightArrowIcon.d.ts.map +1 -0
  87. package/dist/components/Icons/ScenarioIcon.d.ts +6 -0
  88. package/dist/components/Icons/ScenarioIcon.d.ts.map +1 -0
  89. package/dist/components/Icons/ScrollTextIcon.d.ts +6 -0
  90. package/dist/components/Icons/ScrollTextIcon.d.ts.map +1 -0
  91. package/dist/components/Icons/ScrollTextIcon.figma.d.ts +2 -0
  92. package/dist/components/Icons/ScrollTextIcon.figma.d.ts.map +1 -0
  93. package/dist/components/Icons/SparklesIcon.d.ts +6 -0
  94. package/dist/components/Icons/SparklesIcon.d.ts.map +1 -0
  95. package/dist/components/Icons/SparklesIcon.figma.d.ts +2 -0
  96. package/dist/components/Icons/SparklesIcon.figma.d.ts.map +1 -0
  97. package/dist/components/Icons/SpeechIcon.d.ts +6 -0
  98. package/dist/components/Icons/SpeechIcon.d.ts.map +1 -0
  99. package/dist/components/Icons/SpeechIcon.figma.d.ts +2 -0
  100. package/dist/components/Icons/SpeechIcon.figma.d.ts.map +1 -0
  101. package/dist/components/Icons/StopPlayIcon.d.ts +6 -0
  102. package/dist/components/Icons/StopPlayIcon.d.ts.map +1 -0
  103. package/dist/components/Icons/StopPlayIcon.figma.d.ts +2 -0
  104. package/dist/components/Icons/StopPlayIcon.figma.d.ts.map +1 -0
  105. package/dist/components/Icons/TimerIcon.d.ts +6 -0
  106. package/dist/components/Icons/TimerIcon.d.ts.map +1 -0
  107. package/dist/components/Icons/TimerIcon.figma.d.ts +2 -0
  108. package/dist/components/Icons/TimerIcon.figma.d.ts.map +1 -0
  109. package/dist/components/Icons/UserProfileIcon.d.ts +6 -0
  110. package/dist/components/Icons/UserProfileIcon.d.ts.map +1 -0
  111. package/dist/components/Icons/UserProfileIcon.figma.d.ts +2 -0
  112. package/dist/components/Icons/UserProfileIcon.figma.d.ts.map +1 -0
  113. package/dist/components/Icons/index.d.ts +26 -1
  114. package/dist/components/Icons/index.d.ts.map +1 -1
  115. package/dist/components/NavigationMenu/NavigationMenu.d.ts +3 -0
  116. package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
  117. package/dist/components/NavigationMenu/NavigationMenu.figma.d.ts +2 -0
  118. package/dist/components/NavigationMenu/NavigationMenu.figma.d.ts.map +1 -0
  119. package/dist/components/NavigationMenu/index.d.ts +3 -0
  120. package/dist/components/NavigationMenu/index.d.ts.map +1 -0
  121. package/dist/components/NavigationMenu/types.d.ts +25 -0
  122. package/dist/components/NavigationMenu/types.d.ts.map +1 -0
  123. package/dist/components/QuickStartPage/QuickStartPage.d.ts +21 -0
  124. package/dist/components/QuickStartPage/QuickStartPage.d.ts.map +1 -0
  125. package/dist/components/QuickStartPage/index.d.ts +3 -0
  126. package/dist/components/QuickStartPage/index.d.ts.map +1 -0
  127. package/dist/components/ScenarioQueue/ScenarioQueue.figma.d.ts +2 -0
  128. package/dist/components/ScenarioQueue/ScenarioQueue.figma.d.ts.map +1 -0
  129. package/dist/components/ScenarioSettings/ScenarioSettings.d.ts +3 -0
  130. package/dist/components/ScenarioSettings/ScenarioSettings.d.ts.map +1 -0
  131. package/dist/components/ScenarioSettings/ScenarioSettings.figma.d.ts +2 -0
  132. package/dist/components/ScenarioSettings/ScenarioSettings.figma.d.ts.map +1 -0
  133. package/dist/components/ScenarioSettings/index.d.ts +3 -0
  134. package/dist/components/ScenarioSettings/index.d.ts.map +1 -0
  135. package/dist/components/ScenarioSettings/types.d.ts +54 -0
  136. package/dist/components/ScenarioSettings/types.d.ts.map +1 -0
  137. package/dist/components/index.cjs +86 -42
  138. package/dist/components/index.d.ts +14 -3
  139. package/dist/components/index.d.ts.map +1 -1
  140. package/dist/components/index.js +1 -1
  141. package/dist/figma-codex/config.d.ts +8 -0
  142. package/dist/figma-codex/config.d.ts.map +1 -0
  143. package/dist/figma-codex/fixtures/CompoundComponent/CompoundComponent.d.ts +6 -0
  144. package/dist/figma-codex/fixtures/CompoundComponent/CompoundComponent.d.ts.map +1 -0
  145. package/dist/figma-codex/fixtures/CompoundComponent/index.d.ts +2 -0
  146. package/dist/figma-codex/fixtures/CompoundComponent/index.d.ts.map +1 -0
  147. package/dist/figma-codex/fixtures/CompoundComponent.figma.d.ts +2 -0
  148. package/dist/figma-codex/fixtures/CompoundComponent.figma.d.ts.map +1 -0
  149. package/dist/figma-codex/fixtures/SimpleComponent.d.ts +8 -0
  150. package/dist/figma-codex/fixtures/SimpleComponent.d.ts.map +1 -0
  151. package/dist/figma-codex/fixtures/SimpleComponent.figma.d.ts +2 -0
  152. package/dist/figma-codex/fixtures/SimpleComponent.figma.d.ts.map +1 -0
  153. package/dist/figma-codex/generate.d.ts +6 -0
  154. package/dist/figma-codex/generate.d.ts.map +1 -0
  155. package/dist/figma-codex/parser.d.ts +18 -0
  156. package/dist/figma-codex/parser.d.ts.map +1 -0
  157. package/dist/figma-codex/resolver.d.ts +5 -0
  158. package/dist/figma-codex/resolver.d.ts.map +1 -0
  159. package/dist/figma-codex/schema.d.ts +60 -0
  160. package/dist/figma-codex/schema.d.ts.map +1 -0
  161. package/dist/figma-codex/writer.d.ts +8 -0
  162. package/dist/figma-codex/writer.d.ts.map +1 -0
  163. package/dist/figma-codex.json +679 -0
  164. package/dist/index.cjs +90 -46
  165. package/dist/index.js +2 -2
  166. package/dist/preset/index.cjs +2 -2
  167. package/dist/preset/index.d.ts.map +1 -1
  168. package/dist/preset/index.js +1 -1
  169. package/dist/preset/recipes/accordion.d.ts.map +1 -1
  170. package/dist/preset/recipes/breadcrumb.d.ts.map +1 -1
  171. package/dist/preset/recipes/content-card.d.ts +2 -0
  172. package/dist/preset/recipes/content-card.d.ts.map +1 -0
  173. package/dist/preset/recipes/index.d.ts +4 -0
  174. package/dist/preset/recipes/index.d.ts.map +1 -1
  175. package/dist/preset/recipes/navigation-menu.d.ts +2 -0
  176. package/dist/preset/recipes/navigation-menu.d.ts.map +1 -0
  177. package/dist/preset/recipes/scenario-settings.d.ts +2 -0
  178. package/dist/preset/recipes/scenario-settings.d.ts.map +1 -0
  179. package/package.json +26 -2
  180. package/src/components/Accordion.figma.tsx +20 -0
  181. package/src/components/Breadcrumb.figma.tsx +18 -0
  182. package/src/components/Breadcrumb.tsx +33 -15
  183. package/src/components/ContentCard/ContentCard.figma.tsx +21 -0
  184. package/src/components/ContentCard/ContentCard.test.tsx +197 -0
  185. package/src/components/ContentCard/ContentCard.tsx +19 -0
  186. package/src/components/ContentCard/index.ts +13 -0
  187. package/src/components/Header.figma.tsx +25 -0
  188. package/src/components/{Heading.tsx → Header.tsx} +2 -2
  189. package/src/components/Icons/AccountIcon.tsx +26 -0
  190. package/src/components/Icons/AudienceIcon.figma.tsx +10 -0
  191. package/src/components/Icons/AudienceIcon.tsx +20 -0
  192. package/src/components/Icons/AudioSpeakerIcon.figma.tsx +10 -0
  193. package/src/components/Icons/AudioSpeakerIcon.tsx +26 -0
  194. package/src/components/Icons/BookmarkPlusIcon.figma.tsx +10 -0
  195. package/src/components/Icons/BookmarkPlusIcon.tsx +26 -0
  196. package/src/components/Icons/ChevronUpIcon.tsx +24 -0
  197. package/src/components/Icons/ClipBoardIcon.figma.tsx +10 -0
  198. package/src/components/Icons/ClipBoardIcon.tsx +61 -0
  199. package/src/components/Icons/ClockIcon.tsx +6 -6
  200. package/src/components/Icons/DashboardIcon.tsx +47 -0
  201. package/src/components/Icons/Discourser-Logo.svg +14 -0
  202. package/src/components/Icons/DiscourserLogo.figma.tsx +10 -0
  203. package/src/components/Icons/DiscourserLogo.tsx +72 -0
  204. package/src/components/Icons/ExitStudioIcon.figma.tsx +10 -0
  205. package/src/components/Icons/ExitStudioIcon.tsx +34 -0
  206. package/src/components/Icons/GripDotsVerticalIcon.tsx +6 -6
  207. package/src/components/Icons/HelpIcon.tsx +26 -0
  208. package/src/components/Icons/MicrophoneIcon.figma.tsx +10 -0
  209. package/src/components/Icons/MicrophoneIcon.tsx +40 -0
  210. package/src/components/Icons/NotebookIcon.tsx +26 -0
  211. package/src/components/Icons/NotebookPenIcon.figma.tsx +10 -0
  212. package/src/components/Icons/NotebookPenIcon.tsx +26 -0
  213. package/src/components/Icons/PausePlayIcon.figma.tsx +10 -0
  214. package/src/components/Icons/PausePlayIcon.tsx +41 -0
  215. package/src/components/Icons/PlayIcon.figma.tsx +10 -0
  216. package/src/components/Icons/PlayIcon.tsx +33 -0
  217. package/src/components/Icons/RecordIcon.figma.tsx +10 -0
  218. package/src/components/Icons/RecordIcon.tsx +41 -0
  219. package/src/components/Icons/RepeatQuestionIcon.figma.tsx +10 -0
  220. package/src/components/Icons/RepeatQuestionIcon.tsx +26 -0
  221. package/src/components/Icons/RightArrowIcon.tsx +23 -0
  222. package/src/components/Icons/ScenarioIcon.tsx +26 -0
  223. package/src/components/Icons/ScrollTextIcon.figma.tsx +10 -0
  224. package/src/components/Icons/ScrollTextIcon.tsx +26 -0
  225. package/src/components/Icons/SparklesIcon.figma.tsx +10 -0
  226. package/src/components/Icons/SparklesIcon.tsx +26 -0
  227. package/src/components/Icons/SpeechIcon.figma.tsx +10 -0
  228. package/src/components/Icons/SpeechIcon.tsx +26 -0
  229. package/src/components/Icons/StopPlayIcon.figma.tsx +10 -0
  230. package/src/components/Icons/StopPlayIcon.tsx +35 -0
  231. package/src/components/Icons/TimerIcon.figma.tsx +10 -0
  232. package/src/components/Icons/TimerIcon.tsx +26 -0
  233. package/src/components/Icons/UserProfileIcon.figma.tsx +10 -0
  234. package/src/components/Icons/UserProfileIcon.tsx +26 -0
  235. package/src/components/Icons/index.ts +39 -2
  236. package/src/components/NavigationMenu/NavigationMenu.figma.tsx +26 -0
  237. package/src/components/NavigationMenu/NavigationMenu.test.tsx +524 -0
  238. package/src/components/NavigationMenu/NavigationMenu.tsx +102 -0
  239. package/src/components/NavigationMenu/index.ts +2 -0
  240. package/src/components/NavigationMenu/types.ts +27 -0
  241. package/src/components/QuickStartPage/QuickStartPage.tsx +627 -0
  242. package/src/components/QuickStartPage/index.ts +2 -0
  243. package/src/components/ScenarioQueue/ScenarioQueue.figma.tsx +37 -0
  244. package/src/components/ScenarioSettings/ScenarioSettings.figma.tsx +12 -0
  245. package/src/components/ScenarioSettings/ScenarioSettings.test.tsx +406 -0
  246. package/src/components/ScenarioSettings/ScenarioSettings.tsx +386 -0
  247. package/src/components/ScenarioSettings/index.ts +11 -0
  248. package/src/components/ScenarioSettings/types.ts +70 -0
  249. package/src/components/__tests__/Breadcrumb.test.tsx +94 -0
  250. package/src/components/index.ts +38 -4
  251. package/src/figma-codex/README.md +186 -0
  252. package/src/figma-codex/__tests__/config.test.ts +63 -0
  253. package/src/figma-codex/__tests__/generate.test.ts +78 -0
  254. package/src/figma-codex/__tests__/parser.test.ts +138 -0
  255. package/src/figma-codex/__tests__/resolver.test.ts +196 -0
  256. package/src/figma-codex/__tests__/writer.test.ts +111 -0
  257. package/src/figma-codex/config.ts +42 -0
  258. package/src/figma-codex/fixtures/CompoundComponent/CompoundComponent.tsx +17 -0
  259. package/src/figma-codex/fixtures/CompoundComponent/index.ts +1 -0
  260. package/src/figma-codex/fixtures/CompoundComponent.figma.tsx +14 -0
  261. package/src/figma-codex/fixtures/SimpleComponent.figma.tsx +10 -0
  262. package/src/figma-codex/fixtures/SimpleComponent.tsx +10 -0
  263. package/src/figma-codex/fixtures/expected-output.json +78 -0
  264. package/src/figma-codex/generate.ts +106 -0
  265. package/src/figma-codex/parser.ts +138 -0
  266. package/src/figma-codex/resolver.ts +280 -0
  267. package/src/figma-codex/schema.ts +79 -0
  268. package/src/figma-codex/writer.ts +54 -0
  269. package/src/preset/index.ts +6 -0
  270. package/src/preset/recipes/accordion.ts +8 -5
  271. package/src/preset/recipes/breadcrumb.ts +34 -2
  272. package/src/preset/recipes/content-card.ts +124 -0
  273. package/src/preset/recipes/index.ts +4 -0
  274. package/src/preset/recipes/navigation-menu.ts +97 -0
  275. package/src/preset/recipes/scenario-settings.ts +182 -0
  276. package/src/test/setup.ts +12 -9
  277. package/dist/chunk-ABC7N32K.cjs.map +0 -1
  278. package/dist/chunk-GD6Q2FUE.js.map +0 -1
  279. package/dist/chunk-SBKRSXSZ.js.map +0 -1
  280. package/dist/chunk-UNWXE6UB.cjs.map +0 -1
  281. package/dist/components/Heading.d.ts.map +0 -1
@@ -0,0 +1,627 @@
1
+ import { css } from 'styled-system/css';
2
+ import { NavigationMenu } from '../NavigationMenu';
3
+ import { DiscourserLogo } from '../Icons/DiscourserLogo';
4
+ import { DashboardIcon } from '../Icons/DashboardIcon';
5
+ import { NotebookIcon } from '../Icons/NotebookIcon';
6
+ import { ScenarioIcon } from '../Icons/ScenarioIcon';
7
+ import { HelpIcon } from '../Icons/HelpIcon';
8
+ import { AccountIcon } from '../Icons/AccountIcon';
9
+ import { ClockIcon } from '../Icons/ClockIcon';
10
+ import { RightArrowIcon } from '../Icons/RightArrowIcon';
11
+ import type { NavSection } from '../NavigationMenu/types';
12
+
13
+ export interface QuickStartScenario {
14
+ title: string;
15
+ level: 'beginner' | 'intermediate' | 'advanced';
16
+ duration: string;
17
+ }
18
+
19
+ export interface QuickStartPageProps {
20
+ /** User's first name shown in the greeting */
21
+ userName: string;
22
+ /** The first scenario queued for the user */
23
+ firstScenario?: QuickStartScenario;
24
+ /** Currently active nav href */
25
+ activeHref?: string;
26
+ /** Nav sections — defaults to the standard Discourser nav */
27
+ navSections?: NavSection[];
28
+ onStartPracticing?: () => void;
29
+ onLearnAboutSetup?: () => void;
30
+ onNavigate?: (href: string) => void;
31
+ }
32
+
33
+ const levelLabel: Record<QuickStartScenario['level'], string> = {
34
+ beginner: 'Beginner level',
35
+ intermediate: 'Intermediate',
36
+ advanced: 'Advanced',
37
+ };
38
+
39
+ const levelColor: Record<QuickStartScenario['level'], string> = {
40
+ beginner: '#dcfce7',
41
+ intermediate: '#fef9c3',
42
+ advanced: '#fce7f3',
43
+ };
44
+
45
+ const levelTextColor: Record<QuickStartScenario['level'], string> = {
46
+ beginner: '#15803d',
47
+ intermediate: '#a16207',
48
+ advanced: '#be185d',
49
+ };
50
+
51
+ const DEFAULT_NAV_SECTIONS: NavSection[] = [
52
+ {
53
+ value: 'dashboard',
54
+ title: 'Dashboard',
55
+ icon: <DashboardIcon />,
56
+ items: [
57
+ { label: 'Quick Start', href: '/dashboard/quick-start' },
58
+ { label: 'Resume Session', href: '/dashboard/resume' },
59
+ { label: 'Progress', href: '/dashboard/progress' },
60
+ { label: 'Momentum', href: '/dashboard/momentum' },
61
+ { label: 'Recent Session', href: '/dashboard/recent' },
62
+ ],
63
+ },
64
+ {
65
+ value: 'notebook',
66
+ title: 'MyNotebook',
67
+ icon: <NotebookIcon />,
68
+ items: [
69
+ { label: 'Knowledge Base', href: '/notebook/knowledge' },
70
+ { label: 'Session Library', href: '/notebook/sessions' },
71
+ { label: 'Decision Patterns', href: '/notebook/decisions' },
72
+ { label: 'Personal Insights', href: '/notebook/insights' },
73
+ ],
74
+ },
75
+ {
76
+ value: 'scenarios',
77
+ title: 'Scenarios',
78
+ icon: <ScenarioIcon />,
79
+ items: [
80
+ { label: 'MyQueue', href: '/scenarios/queue' },
81
+ { label: 'Conversation Studio', href: '/scenarios/studio' },
82
+ { label: 'By Level', href: '/scenarios/level' },
83
+ { label: 'By Skill', href: '/scenarios/skill' },
84
+ ],
85
+ },
86
+ {
87
+ value: 'help',
88
+ title: 'Help',
89
+ icon: <HelpIcon />,
90
+ items: [
91
+ { label: 'How it Works', href: '/help/how-it-works' },
92
+ { label: 'Practice Tips', href: '/help/tips' },
93
+ { label: 'Technical Support', href: '/help/support' },
94
+ { label: 'Context', href: '/help/context' },
95
+ { label: 'Contact Support', href: '/help/contact' },
96
+ ],
97
+ },
98
+ {
99
+ value: 'account',
100
+ title: 'Account',
101
+ icon: <AccountIcon />,
102
+ items: [
103
+ { label: 'Profile', href: '/account/profile' },
104
+ { label: 'User Preferences', href: '/account/preferences' },
105
+ ],
106
+ },
107
+ ];
108
+
109
+ const DEFAULT_SCENARIO: QuickStartScenario = {
110
+ title: 'UX Interview Practice',
111
+ level: 'beginner',
112
+ duration: '~15-20 minutes',
113
+ };
114
+
115
+ export function QuickStartPage({
116
+ userName,
117
+ firstScenario = DEFAULT_SCENARIO,
118
+ activeHref = '/dashboard/quick-start',
119
+ navSections = DEFAULT_NAV_SECTIONS,
120
+ onStartPracticing,
121
+ onLearnAboutSetup,
122
+ onNavigate,
123
+ }: QuickStartPageProps) {
124
+ return (
125
+ <div
126
+ className={css({
127
+ display: 'flex',
128
+ minHeight: '100vh',
129
+ bg: 'neutral.95',
130
+ fontFamily: 'body',
131
+ })}
132
+ >
133
+ {/* ── Left nav ── */}
134
+ <aside
135
+ className={css({
136
+ width: '285px',
137
+ flexShrink: 0,
138
+ bg: 'white',
139
+ borderRight: '1px solid',
140
+ borderColor: 'neutral.90',
141
+ display: 'flex',
142
+ flexDirection: 'column',
143
+ overflow: 'hidden',
144
+ })}
145
+ >
146
+ <div
147
+ className={css({
148
+ px: '6',
149
+ py: '5',
150
+ borderBottom: '1px solid',
151
+ borderColor: 'neutral.90',
152
+ })}
153
+ >
154
+ <DiscourserLogo height="32px" color="currentColor" />
155
+ </div>
156
+ <div className={css({ flex: 1, overflow: 'auto', py: '2' })}>
157
+ <NavigationMenu
158
+ sections={navSections}
159
+ activeHref={activeHref}
160
+ defaultOpenSections={['dashboard']}
161
+ onNavigate={onNavigate}
162
+ />
163
+ </div>
164
+ </aside>
165
+
166
+ {/* ── Main stage ── */}
167
+ <main
168
+ className={css({
169
+ flex: 1,
170
+ display: 'flex',
171
+ flexDirection: 'column',
172
+ overflow: 'auto',
173
+ minWidth: 0,
174
+ })}
175
+ >
176
+ {/* Masthead */}
177
+ <div
178
+ className={css({
179
+ px: '10',
180
+ pt: '7',
181
+ pb: '5',
182
+ })}
183
+ >
184
+ {/* Breadcrumb */}
185
+ <nav
186
+ className={css({
187
+ display: 'flex',
188
+ alignItems: 'center',
189
+ gap: '2',
190
+ mb: '3',
191
+ fontSize: 'sm',
192
+ color: 'neutral.50',
193
+ })}
194
+ aria-label="Breadcrumb"
195
+ >
196
+ <span
197
+ className={css({
198
+ cursor: 'pointer',
199
+ _hover: { color: 'neutral.30' },
200
+ })}
201
+ >
202
+ Dashboard
203
+ </span>
204
+ <RightArrowIcon
205
+ width="14px"
206
+ height="14px"
207
+ className={css({ color: 'neutral.60' })}
208
+ />
209
+ <span
210
+ className={css({ color: 'neutral.20', fontWeight: 'medium' })}
211
+ >
212
+ Quick Start
213
+ </span>
214
+ </nav>
215
+
216
+ {/* Greeting */}
217
+ <p className={css({ fontSize: 'lg', color: 'neutral.30' })}>
218
+ Welcome,{' '}
219
+ <strong
220
+ className={css({ fontWeight: 'bold', color: 'neutral.10' })}
221
+ >
222
+ {userName}
223
+ </strong>
224
+ ! Let&apos;s get you practicing.
225
+ </p>
226
+ </div>
227
+
228
+ {/* Content grid */}
229
+ <div
230
+ className={css({
231
+ px: '10',
232
+ pb: '10',
233
+ display: 'flex',
234
+ flexDirection: 'column',
235
+ gap: '6',
236
+ })}
237
+ >
238
+ <h2
239
+ className={css({
240
+ fontSize: '2xl',
241
+ fontWeight: 'semibold',
242
+ color: 'neutral.10',
243
+ fontFamily: 'heading',
244
+ })}
245
+ >
246
+ How would you like to start?
247
+ </h2>
248
+
249
+ <div
250
+ className={css({
251
+ display: 'grid',
252
+ gridTemplateColumns: '1fr 340px',
253
+ gap: '6',
254
+ alignItems: 'start',
255
+ })}
256
+ >
257
+ {/* Left column — action cards */}
258
+ <div
259
+ className={css({
260
+ display: 'flex',
261
+ flexDirection: 'column',
262
+ gap: '4',
263
+ })}
264
+ >
265
+ {/* Dive Right In card */}
266
+ <div
267
+ className={css({
268
+ bg: 'white',
269
+ borderRadius: 'xl',
270
+ border: '1px solid',
271
+ borderColor: 'neutral.90',
272
+ boxShadow: '0px 1px 4px 0px rgba(0,0,0,0.08)',
273
+ p: '6',
274
+ display: 'flex',
275
+ flexDirection: 'column',
276
+ gap: '5',
277
+ })}
278
+ >
279
+ <h3
280
+ className={css({
281
+ fontSize: '3xl',
282
+ fontWeight: 'bold',
283
+ color: 'neutral.10',
284
+ fontFamily: 'heading',
285
+ lineHeight: 'tight',
286
+ })}
287
+ >
288
+ Dive Right In
289
+ </h3>
290
+
291
+ <p
292
+ className={css({
293
+ fontSize: 'xl',
294
+ color: 'neutral.20',
295
+ lineHeight: 'relaxed',
296
+ })}
297
+ >
298
+ Start practicing immediately with AI-selected scenarios based
299
+ on your goals and experience level
300
+ </p>
301
+
302
+ {/* Scenario preview */}
303
+ <div
304
+ className={css({
305
+ bg: 'neutral.99',
306
+ border: '1px solid',
307
+ borderColor: 'neutral.90',
308
+ borderRadius: 'lg',
309
+ p: '4',
310
+ display: 'flex',
311
+ flexDirection: 'column',
312
+ gap: '2',
313
+ })}
314
+ >
315
+ <p
316
+ className={css({
317
+ fontSize: 'xs',
318
+ color: 'neutral.50',
319
+ textTransform: 'uppercase',
320
+ letterSpacing: 'widest',
321
+ fontWeight: 'medium',
322
+ })}
323
+ >
324
+ First scenario:
325
+ </p>
326
+ <p
327
+ className={css({
328
+ fontSize: 'lg',
329
+ fontWeight: 'semibold',
330
+ color: 'neutral.10',
331
+ })}
332
+ >
333
+ {firstScenario.title}
334
+ </p>
335
+ <div
336
+ className={css({
337
+ display: 'flex',
338
+ alignItems: 'center',
339
+ gap: '3',
340
+ })}
341
+ >
342
+ <span
343
+ style={{
344
+ backgroundColor: levelColor[firstScenario.level],
345
+ color: levelTextColor[firstScenario.level],
346
+ fontSize: '12px',
347
+ fontWeight: 500,
348
+ padding: '2px 10px',
349
+ borderRadius: '999px',
350
+ }}
351
+ >
352
+ {levelLabel[firstScenario.level]}
353
+ </span>
354
+ <span
355
+ className={css({
356
+ display: 'flex',
357
+ alignItems: 'center',
358
+ gap: '1',
359
+ fontSize: 'sm',
360
+ color: 'neutral.40',
361
+ })}
362
+ >
363
+ <ClockIcon width="14px" height="14px" />
364
+ {firstScenario.duration}
365
+ </span>
366
+ </div>
367
+ </div>
368
+
369
+ {/* CTA button */}
370
+ <button
371
+ type="button"
372
+ onClick={onStartPracticing}
373
+ className={css({
374
+ w: 'full',
375
+ py: '2.5',
376
+ px: '6',
377
+ bg: 'neutral.10',
378
+ color: 'white',
379
+ fontSize: 'sm',
380
+ fontWeight: 'medium',
381
+ borderRadius: 'lg',
382
+ border: 'none',
383
+ cursor: 'pointer',
384
+ transition: 'background 0.15s',
385
+ _hover: { bg: 'neutral.20' },
386
+ })}
387
+ >
388
+ Start Practicing Now
389
+ </button>
390
+ </div>
391
+
392
+ {/* See the Setup First card */}
393
+ <div
394
+ className={css({
395
+ bg: 'white',
396
+ borderRadius: 'xl',
397
+ border: '1px solid',
398
+ borderColor: 'neutral.90',
399
+ boxShadow: '0px 1px 4px 0px rgba(0,0,0,0.08)',
400
+ p: '6',
401
+ display: 'flex',
402
+ flexDirection: 'column',
403
+ gap: '5',
404
+ })}
405
+ >
406
+ <h3
407
+ className={css({
408
+ fontSize: '3xl',
409
+ fontWeight: 'normal',
410
+ color: 'neutral.10',
411
+ fontFamily: 'heading',
412
+ lineHeight: 'tight',
413
+ })}
414
+ >
415
+ See the Setup First
416
+ </h3>
417
+
418
+ <p
419
+ className={css({
420
+ fontSize: 'xl',
421
+ color: 'neutral.20',
422
+ lineHeight: 'relaxed',
423
+ })}
424
+ >
425
+ Preview your personalized practice plan and adjust settings
426
+ before you begin
427
+ </p>
428
+
429
+ <ul
430
+ className={css({
431
+ listStyle: 'none',
432
+ p: '0',
433
+ m: '0',
434
+ display: 'flex',
435
+ flexDirection: 'column',
436
+ gap: '3',
437
+ })}
438
+ >
439
+ {[
440
+ 'View scenario details',
441
+ 'Adjust difficulty & topics',
442
+ 'See your learning queue',
443
+ "Then start when you're ready",
444
+ ].map((item) => (
445
+ <li
446
+ key={item}
447
+ className={css({
448
+ display: 'flex',
449
+ alignItems: 'center',
450
+ gap: '2',
451
+ fontSize: 'md',
452
+ color: 'neutral.20',
453
+ })}
454
+ >
455
+ <span
456
+ className={css({ color: 'neutral.40', flexShrink: 0 })}
457
+ >
458
+
459
+ </span>
460
+ {item}
461
+ </li>
462
+ ))}
463
+ </ul>
464
+
465
+ <button
466
+ type="button"
467
+ onClick={onLearnAboutSetup}
468
+ className={css({
469
+ w: 'full',
470
+ py: '2.5',
471
+ px: '6',
472
+ bg: 'transparent',
473
+ color: 'neutral.20',
474
+ fontSize: 'sm',
475
+ fontWeight: 'medium',
476
+ borderRadius: 'lg',
477
+ border: '1px solid',
478
+ borderColor: 'neutral.70',
479
+ cursor: 'pointer',
480
+ transition: 'border-color 0.15s',
481
+ _hover: { borderColor: 'neutral.40' },
482
+ })}
483
+ >
484
+ Learn About the Scenario Details
485
+ </button>
486
+ </div>
487
+ </div>
488
+
489
+ {/* Right column — info cards */}
490
+ <div
491
+ className={css({
492
+ display: 'flex',
493
+ flexDirection: 'column',
494
+ gap: '4',
495
+ })}
496
+ >
497
+ {/* First time practicing? */}
498
+ <div
499
+ className={css({
500
+ bg: 'white',
501
+ borderRadius: 'xl',
502
+ border: '1px solid',
503
+ borderColor: 'neutral.90',
504
+ boxShadow: '0px 1px 4px 0px rgba(0,0,0,0.08)',
505
+ overflow: 'hidden',
506
+ display: 'flex',
507
+ flexDirection: 'column',
508
+ })}
509
+ >
510
+ <div className={css({ p: '5', pb: '3' })}>
511
+ <h3
512
+ className={css({
513
+ fontSize: 'xl',
514
+ fontWeight: 'semibold',
515
+ color: 'neutral.10',
516
+ mb: '1',
517
+ })}
518
+ >
519
+ First time practicing?
520
+ </h3>
521
+ <p className={css({ fontSize: 'sm', color: 'neutral.40' })}>
522
+ Here&apos;s what to expect in your first session
523
+ </p>
524
+ </div>
525
+ {/* Gradient image placeholder */}
526
+ <div
527
+ style={{
528
+ background:
529
+ 'linear-gradient(150deg, #dbeafe 0%, #f3e8ff 100%)',
530
+ height: '160px',
531
+ margin: '0 16px 16px',
532
+ borderRadius: '10px',
533
+ display: 'flex',
534
+ alignItems: 'center',
535
+ justifyContent: 'center',
536
+ }}
537
+ >
538
+ <span style={{ fontSize: '48px' }}>🎯</span>
539
+ </div>
540
+ <div className={css({ px: '5', pb: '5' })}>
541
+ <button
542
+ type="button"
543
+ className={css({
544
+ fontSize: 'sm',
545
+ fontWeight: 'medium',
546
+ color: 'primary.40',
547
+ bg: 'transparent',
548
+ border: 'none',
549
+ cursor: 'pointer',
550
+ p: '0',
551
+ _hover: { color: 'primary.30' },
552
+ })}
553
+ >
554
+ Watch 2-min intro →
555
+ </button>
556
+ </div>
557
+ </div>
558
+
559
+ {/* Quick Tips */}
560
+ <div
561
+ className={css({
562
+ bg: 'white',
563
+ borderRadius: 'xl',
564
+ border: '1px solid',
565
+ borderColor: 'neutral.90',
566
+ boxShadow: '0px 1px 4px 0px rgba(0,0,0,0.08)',
567
+ p: '5',
568
+ display: 'flex',
569
+ flexDirection: 'column',
570
+ gap: '4',
571
+ })}
572
+ >
573
+ <h3
574
+ className={css({
575
+ fontSize: 'xl',
576
+ fontWeight: 'semibold',
577
+ color: 'neutral.10',
578
+ })}
579
+ >
580
+ Quick Tips
581
+ </h3>
582
+ <ul
583
+ className={css({
584
+ listStyle: 'none',
585
+ p: '0',
586
+ m: '0',
587
+ display: 'flex',
588
+ flexDirection: 'column',
589
+ gap: '3',
590
+ })}
591
+ >
592
+ {[
593
+ 'Practice sessions are private – no external pressure',
594
+ 'Try not to stop the conversation before answering',
595
+ 'Focus on thinking out loud, not perfect answers',
596
+ ].map((tip) => (
597
+ <li
598
+ key={tip}
599
+ className={css({
600
+ display: 'flex',
601
+ gap: '2',
602
+ fontSize: 'sm',
603
+ color: 'neutral.20',
604
+ lineHeight: 'relaxed',
605
+ })}
606
+ >
607
+ <span
608
+ className={css({
609
+ color: 'neutral.50',
610
+ flexShrink: 0,
611
+ mt: '0.5',
612
+ })}
613
+ >
614
+
615
+ </span>
616
+ {tip}
617
+ </li>
618
+ ))}
619
+ </ul>
620
+ </div>
621
+ </div>
622
+ </div>
623
+ </div>
624
+ </main>
625
+ </div>
626
+ );
627
+ }
@@ -0,0 +1,2 @@
1
+ export { QuickStartPage } from './QuickStartPage';
2
+ export type { QuickStartPageProps, QuickStartScenario } from './QuickStartPage';
@@ -0,0 +1,37 @@
1
+ import figma from '@figma/code-connect';
2
+ import { ScenarioQueue } from './ScenarioQueue';
3
+
4
+ const scenarios = [
5
+ {
6
+ id: '1',
7
+ title: 'UX Research & Design Interview',
8
+ category: 'UX Design',
9
+ difficulty: 'beginner' as const,
10
+ duration: '10-15 min',
11
+ status: 'queued' as const,
12
+ },
13
+ {
14
+ id: '2',
15
+ title: 'Business Analysis ROI Design Presentation',
16
+ category: 'Business',
17
+ difficulty: 'intermediate' as const,
18
+ duration: '15-25 min',
19
+ status: 'queued' as const,
20
+ },
21
+ {
22
+ id: '3',
23
+ title: 'Product Redesign Challenge',
24
+ category: 'Product',
25
+ difficulty: 'advanced' as const,
26
+ duration: '25-35 min',
27
+ status: 'queued' as const,
28
+ },
29
+ ];
30
+
31
+ figma.connect(
32
+ ScenarioQueue,
33
+ 'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=478-5757',
34
+ {
35
+ example: () => <ScenarioQueue scenarios={scenarios} />,
36
+ },
37
+ );
@@ -0,0 +1,12 @@
1
+ import figma from '@figma/code-connect'
2
+ import { ScenarioSettings } from './index'
3
+
4
+ figma.connect(ScenarioSettings, 'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8240', {
5
+ example: () => (
6
+ <ScenarioSettings
7
+ defaultValue={['duration', 'number-of-questions']}
8
+ defaultDuration="standard"
9
+ defaultQuestionCount="standard"
10
+ />
11
+ ),
12
+ })