@nyuccl/smile 0.2.0-beta.3 → 0.2.0-beta.32

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 (285) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +57 -15
  3. package/dist/runtime/components/builtins/AdvertisementView.d.vue.ts +13 -1
  4. package/dist/runtime/components/builtins/AdvertisementView.vue +7 -3
  5. package/dist/runtime/components/builtins/AdvertisementView.vue.d.ts +13 -1
  6. package/dist/runtime/components/builtins/DebriefView.vue +3 -1
  7. package/dist/runtime/components/builtins/DemographicSurveyView.vue +8 -6
  8. package/dist/runtime/components/builtins/DeviceSurveyView.vue +5 -3
  9. package/dist/runtime/components/builtins/ExpView.vue +3 -1
  10. package/dist/runtime/components/builtins/ExperimentStatusBar.vue +3 -0
  11. package/dist/runtime/components/builtins/FavoriteColor.vue +3 -1
  12. package/dist/runtime/components/builtins/FavoriteNumber.vue +3 -1
  13. package/dist/runtime/components/builtins/InformedConsentModal.vue +3 -1
  14. package/dist/runtime/components/builtins/InformedConsentView.vue +1 -0
  15. package/dist/runtime/components/builtins/InstructionsQuiz.vue +7 -5
  16. package/dist/runtime/components/builtins/InstructionsView.vue +4 -2
  17. package/dist/runtime/components/builtins/LocalDevBanner.vue +16 -0
  18. package/dist/runtime/components/builtins/MTurkRecruitView.vue +1 -0
  19. package/dist/runtime/components/builtins/PresentationModeView.vue +9 -8
  20. package/dist/runtime/components/builtins/StatusBar.vue +7 -4
  21. package/dist/runtime/components/builtins/StudyPreviewText.vue +5 -3
  22. package/dist/runtime/components/builtins/TaskFeedbackSurveyView.vue +3 -1
  23. package/dist/runtime/components/builtins/ThanksView.vue +19 -18
  24. package/dist/runtime/components/builtins/WindowSizerView.vue +5 -3
  25. package/dist/runtime/components/builtins/WithdrawModal.vue +4 -2
  26. package/dist/runtime/components/builtins/WithdrawView.vue +4 -2
  27. package/dist/runtime/components/dev/RecruitmentChooserView.vue +537 -219
  28. package/dist/runtime/components/dev/ResponsiveDeviceContainer.vue +8 -5
  29. package/dist/runtime/components/dev/SmileDevPresentationView.vue +83 -0
  30. package/dist/runtime/components/dev/console/ConfigList.vue +8 -6
  31. package/dist/runtime/components/dev/console/ConsoleConfigPanel.vue +11 -6
  32. package/dist/runtime/components/dev/console/ConsoleDatabaseBrowsePanel.vue +6 -4
  33. package/dist/runtime/components/dev/console/ConsoleLogPanel.vue +65 -20
  34. package/dist/runtime/components/dev/console/DatabaseList.vue +8 -6
  35. package/dist/runtime/components/dev/console/SmileDevConsole.vue +7 -5
  36. package/dist/runtime/components/dev/devicePresets.d.ts +4 -4
  37. package/dist/runtime/components/dev/devicePresets.js +4 -4
  38. package/dist/runtime/components/dev/menu/DevConfigPanel.vue +3 -1
  39. package/dist/runtime/components/dev/menu/ResponsiveDeviceSelect.vue +1 -0
  40. package/dist/runtime/components/dev/menu/SmileDevAppMenu.vue +26 -23
  41. package/dist/runtime/components/dev/navbar/ColorModeButton.vue +5 -3
  42. package/dist/runtime/components/dev/navbar/DatabaseButtonGroup.vue +6 -4
  43. package/dist/runtime/components/dev/navbar/FullScreenButton.vue +4 -2
  44. package/dist/runtime/components/dev/navbar/PanelButtonGroup.d.vue.ts +3 -0
  45. package/dist/runtime/components/dev/navbar/PanelButtonGroup.vue +79 -0
  46. package/dist/runtime/components/dev/navbar/PanelButtonGroup.vue.d.ts +3 -0
  47. package/dist/runtime/components/dev/navbar/ReloadButton.vue +3 -1
  48. package/dist/runtime/components/dev/navbar/ResetButton.vue +3 -1
  49. package/dist/runtime/components/dev/navbar/RouteJumper.vue +9 -5
  50. package/dist/runtime/components/dev/navbar/SmileDevNavBar.vue +17 -25
  51. package/dist/runtime/components/dev/navbar/StepInfoButtonGroup.vue +5 -3
  52. package/dist/runtime/components/dev/navbar/ViewInfoButtonGroup.vue +13 -10
  53. package/dist/runtime/components/dev/presentation/DarkModeButton.vue +5 -3
  54. package/dist/runtime/components/dev/presentation/LogoutButton.vue +2 -1
  55. package/dist/runtime/components/dev/presentation/PresentationModeResetButton.vue +11 -2
  56. package/dist/runtime/components/dev/presentation/PresentationNavBar.d.vue.ts +13 -1
  57. package/dist/runtime/components/dev/presentation/PresentationNavBar.vue +11 -4
  58. package/dist/runtime/components/dev/presentation/PresentationNavBar.vue.d.ts +13 -1
  59. package/dist/runtime/components/dev/presentation/QRCodeButton.vue +4 -2
  60. package/dist/runtime/components/dev/sidebar/AppProgressPanel.vue +6 -4
  61. package/dist/runtime/components/dev/sidebar/ConfigurationVariablesPanel.vue +6 -4
  62. package/dist/runtime/components/dev/sidebar/DatabaseStatusInfoPanel.vue +1 -0
  63. package/dist/runtime/components/dev/sidebar/RandomizationSidebarPanel.vue +5 -3
  64. package/dist/runtime/components/dev/sidebar/SmileDevSideBar.vue +12 -5
  65. package/dist/runtime/components/dev/sidebar/StepDataViewer.d.vue.ts +2 -2
  66. package/dist/runtime/components/dev/sidebar/StepDataViewer.vue.d.ts +2 -2
  67. package/dist/runtime/components/dev/sidebar/StepExplorerPanel.vue +9 -7
  68. package/dist/runtime/components/dev/sidebar/StepNode.vue +3 -2
  69. package/dist/runtime/components/dev/sidebar/StudyInfoPanel.vue +3 -2
  70. package/dist/runtime/components/forms/MonthYearDayPicker.vue +1 -0
  71. package/dist/runtime/components/layouts/ConstrainedPage.d.vue.ts +1 -1
  72. package/dist/runtime/components/layouts/ConstrainedPage.vue.d.ts +1 -1
  73. package/dist/runtime/components/layouts/ConstrainedTaskWindow.d.vue.ts +2 -2
  74. package/dist/runtime/components/layouts/ConstrainedTaskWindow.vue.d.ts +2 -2
  75. package/dist/runtime/components/layouts/TitleTwoCol.d.vue.ts +1 -1
  76. package/dist/runtime/components/layouts/TitleTwoCol.vue.d.ts +1 -1
  77. package/dist/runtime/components/layouts/TwoCol.d.vue.ts +1 -1
  78. package/dist/runtime/components/layouts/TwoCol.vue.d.ts +1 -1
  79. package/dist/runtime/components/ui/avatar/Avatar.vue +1 -0
  80. package/dist/runtime/components/ui/avatar/AvatarFallback.vue +1 -0
  81. package/dist/runtime/components/ui/badge/Badge.vue +1 -0
  82. package/dist/runtime/components/ui/breadcrumb/BreadcrumbEllipsis.vue +1 -0
  83. package/dist/runtime/components/ui/breadcrumb/BreadcrumbItem.vue +1 -0
  84. package/dist/runtime/components/ui/breadcrumb/BreadcrumbLink.vue +1 -0
  85. package/dist/runtime/components/ui/breadcrumb/BreadcrumbList.vue +1 -0
  86. package/dist/runtime/components/ui/breadcrumb/BreadcrumbPage.vue +1 -0
  87. package/dist/runtime/components/ui/breadcrumb/BreadcrumbSeparator.vue +1 -0
  88. package/dist/runtime/components/ui/button/Button.vue +1 -0
  89. package/dist/runtime/components/ui/button/index.d.ts +1 -1
  90. package/dist/runtime/components/ui/button-group/ButtonGroup.d.vue.ts +1 -1
  91. package/dist/runtime/components/ui/button-group/ButtonGroup.vue +1 -0
  92. package/dist/runtime/components/ui/button-group/ButtonGroup.vue.d.ts +1 -1
  93. package/dist/runtime/components/ui/button-group/ButtonGroupItem.vue +1 -0
  94. package/dist/runtime/components/ui/calendar/Calendar.vue +1 -0
  95. package/dist/runtime/components/ui/calendar/CalendarCell.vue +1 -0
  96. package/dist/runtime/components/ui/calendar/CalendarCellTrigger.vue +1 -0
  97. package/dist/runtime/components/ui/calendar/CalendarGrid.vue +1 -0
  98. package/dist/runtime/components/ui/calendar/CalendarGridRow.vue +1 -0
  99. package/dist/runtime/components/ui/calendar/CalendarHeadCell.vue +1 -0
  100. package/dist/runtime/components/ui/calendar/CalendarHeader.vue +1 -0
  101. package/dist/runtime/components/ui/calendar/CalendarHeading.vue +1 -0
  102. package/dist/runtime/components/ui/calendar/CalendarNextButton.vue +1 -0
  103. package/dist/runtime/components/ui/calendar/CalendarPrevButton.vue +1 -0
  104. package/dist/runtime/components/ui/card/Card.vue +1 -0
  105. package/dist/runtime/components/ui/card/CardAction.vue +1 -0
  106. package/dist/runtime/components/ui/card/CardContent.vue +1 -0
  107. package/dist/runtime/components/ui/card/CardDescription.vue +1 -0
  108. package/dist/runtime/components/ui/card/CardFooter.vue +1 -0
  109. package/dist/runtime/components/ui/card/CardHeader.vue +1 -0
  110. package/dist/runtime/components/ui/card/CardTitle.vue +1 -0
  111. package/dist/runtime/components/ui/checkbox/Checkbox.d.vue.ts +5 -5
  112. package/dist/runtime/components/ui/checkbox/Checkbox.vue +1 -0
  113. package/dist/runtime/components/ui/checkbox/Checkbox.vue.d.ts +5 -5
  114. package/dist/runtime/components/ui/checkbox/index.d.ts +1 -1
  115. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.d.vue.ts +4 -4
  116. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -0
  117. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +4 -4
  118. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.d.vue.ts +2 -2
  119. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue +1 -0
  120. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +2 -2
  121. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -0
  122. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuLabel.vue +1 -0
  123. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -0
  124. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -0
  125. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuShortcut.vue +1 -0
  126. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.d.vue.ts +2 -2
  127. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue +1 -0
  128. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  129. package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -0
  130. package/dist/runtime/components/ui/input/Input.d.vue.ts +4 -4
  131. package/dist/runtime/components/ui/input/Input.vue +1 -0
  132. package/dist/runtime/components/ui/input/Input.vue.d.ts +4 -4
  133. package/dist/runtime/components/ui/label/Label.vue +1 -0
  134. package/dist/runtime/components/ui/multiselect/MultiSelect.d.vue.ts +1 -1
  135. package/dist/runtime/components/ui/multiselect/MultiSelect.vue +1 -0
  136. package/dist/runtime/components/ui/multiselect/MultiSelect.vue.d.ts +1 -1
  137. package/dist/runtime/components/ui/pagination/Pagination.vue +1 -0
  138. package/dist/runtime/components/ui/pagination/PaginationContent.vue +1 -0
  139. package/dist/runtime/components/ui/pagination/PaginationEllipsis.vue +1 -0
  140. package/dist/runtime/components/ui/pagination/PaginationFirst.vue +1 -0
  141. package/dist/runtime/components/ui/pagination/PaginationItem.vue +1 -0
  142. package/dist/runtime/components/ui/pagination/PaginationLast.vue +1 -0
  143. package/dist/runtime/components/ui/pagination/PaginationNext.vue +1 -0
  144. package/dist/runtime/components/ui/pagination/PaginationPrevious.vue +1 -0
  145. package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +2 -2
  146. package/dist/runtime/components/ui/popover/PopoverContent.vue +1 -0
  147. package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +2 -2
  148. package/dist/runtime/components/ui/progress/Progress.vue +1 -0
  149. package/dist/runtime/components/ui/resizable/ResizableHandle.vue +1 -0
  150. package/dist/runtime/components/ui/resizable/ResizablePanelGroup.vue +1 -0
  151. package/dist/runtime/components/ui/select/SelectContent.d.vue.ts +2 -2
  152. package/dist/runtime/components/ui/select/SelectContent.vue +1 -0
  153. package/dist/runtime/components/ui/select/SelectContent.vue.d.ts +2 -2
  154. package/dist/runtime/components/ui/select/SelectItem.vue +1 -0
  155. package/dist/runtime/components/ui/select/SelectLabel.vue +1 -0
  156. package/dist/runtime/components/ui/select/SelectScrollDownButton.vue +1 -0
  157. package/dist/runtime/components/ui/select/SelectScrollUpButton.vue +1 -0
  158. package/dist/runtime/components/ui/select/SelectSeparator.vue +1 -0
  159. package/dist/runtime/components/ui/select/SelectTrigger.vue +1 -0
  160. package/dist/runtime/components/ui/separator/Separator.vue +1 -0
  161. package/dist/runtime/components/ui/sheet/SheetContent.vue +1 -0
  162. package/dist/runtime/components/ui/sheet/SheetDescription.vue +1 -0
  163. package/dist/runtime/components/ui/sheet/SheetFooter.vue +1 -0
  164. package/dist/runtime/components/ui/sheet/SheetHeader.vue +1 -0
  165. package/dist/runtime/components/ui/sheet/SheetOverlay.vue +1 -0
  166. package/dist/runtime/components/ui/sheet/SheetTitle.vue +1 -0
  167. package/dist/runtime/components/ui/sidebar/Sidebar.vue +1 -0
  168. package/dist/runtime/components/ui/sidebar/SidebarContent.vue +1 -0
  169. package/dist/runtime/components/ui/sidebar/SidebarFooter.vue +1 -0
  170. package/dist/runtime/components/ui/sidebar/SidebarGroup.vue +1 -0
  171. package/dist/runtime/components/ui/sidebar/SidebarGroupAction.vue +1 -0
  172. package/dist/runtime/components/ui/sidebar/SidebarGroupContent.vue +1 -0
  173. package/dist/runtime/components/ui/sidebar/SidebarGroupLabel.vue +1 -0
  174. package/dist/runtime/components/ui/sidebar/SidebarHeader.vue +1 -0
  175. package/dist/runtime/components/ui/sidebar/SidebarInput.vue +1 -0
  176. package/dist/runtime/components/ui/sidebar/SidebarInset.vue +1 -0
  177. package/dist/runtime/components/ui/sidebar/SidebarMenu.vue +1 -0
  178. package/dist/runtime/components/ui/sidebar/SidebarMenuAction.vue +1 -0
  179. package/dist/runtime/components/ui/sidebar/SidebarMenuBadge.vue +1 -0
  180. package/dist/runtime/components/ui/sidebar/SidebarMenuButton.d.vue.ts +1 -1
  181. package/dist/runtime/components/ui/sidebar/SidebarMenuButton.vue.d.ts +1 -1
  182. package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.d.vue.ts +1 -1
  183. package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.vue +1 -0
  184. package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.vue.d.ts +1 -1
  185. package/dist/runtime/components/ui/sidebar/SidebarMenuItem.vue +1 -0
  186. package/dist/runtime/components/ui/sidebar/SidebarMenuSkeleton.vue +1 -0
  187. package/dist/runtime/components/ui/sidebar/SidebarMenuSub.vue +1 -0
  188. package/dist/runtime/components/ui/sidebar/SidebarMenuSubButton.vue +1 -0
  189. package/dist/runtime/components/ui/sidebar/SidebarMenuSubItem.vue +1 -0
  190. package/dist/runtime/components/ui/sidebar/SidebarProvider.vue +1 -0
  191. package/dist/runtime/components/ui/sidebar/SidebarRail.vue +1 -0
  192. package/dist/runtime/components/ui/sidebar/SidebarSeparator.vue +1 -0
  193. package/dist/runtime/components/ui/sidebar/SidebarTrigger.vue +1 -0
  194. package/dist/runtime/components/ui/skeleton/Skeleton.vue +1 -0
  195. package/dist/runtime/components/ui/sonner/Sonner.d.vue.ts +4 -4
  196. package/dist/runtime/components/ui/sonner/Sonner.vue.d.ts +4 -4
  197. package/dist/runtime/components/ui/stepper/Stepper.vue +1 -0
  198. package/dist/runtime/components/ui/stepper/StepperDescription.vue +1 -0
  199. package/dist/runtime/components/ui/stepper/StepperIndicator.vue +1 -0
  200. package/dist/runtime/components/ui/stepper/StepperItem.d.vue.ts +1 -1
  201. package/dist/runtime/components/ui/stepper/StepperItem.vue +1 -0
  202. package/dist/runtime/components/ui/stepper/StepperItem.vue.d.ts +1 -1
  203. package/dist/runtime/components/ui/stepper/StepperSeparator.vue +1 -0
  204. package/dist/runtime/components/ui/stepper/StepperTitle.vue +1 -0
  205. package/dist/runtime/components/ui/stepper/StepperTrigger.vue +1 -0
  206. package/dist/runtime/components/ui/switch/Switch.d.vue.ts +1 -1
  207. package/dist/runtime/components/ui/switch/Switch.vue +1 -0
  208. package/dist/runtime/components/ui/switch/Switch.vue.d.ts +1 -1
  209. package/dist/runtime/components/ui/switch/index.d.ts +1 -1
  210. package/dist/runtime/components/ui/table/Table.vue +1 -0
  211. package/dist/runtime/components/ui/table/TableBody.vue +1 -0
  212. package/dist/runtime/components/ui/table/TableCaption.vue +1 -0
  213. package/dist/runtime/components/ui/table/TableCell.vue +1 -0
  214. package/dist/runtime/components/ui/table/TableEmpty.vue +1 -0
  215. package/dist/runtime/components/ui/table/TableFooter.vue +1 -0
  216. package/dist/runtime/components/ui/table/TableHead.vue +1 -0
  217. package/dist/runtime/components/ui/table/TableHeader.vue +1 -0
  218. package/dist/runtime/components/ui/table/TableRow.vue +1 -0
  219. package/dist/runtime/components/ui/tabs/Tabs.vue +1 -0
  220. package/dist/runtime/components/ui/tabs/TabsContent.d.vue.ts +2 -2
  221. package/dist/runtime/components/ui/tabs/TabsContent.vue +1 -0
  222. package/dist/runtime/components/ui/tabs/TabsContent.vue.d.ts +2 -2
  223. package/dist/runtime/components/ui/tabs/TabsList.vue +1 -0
  224. package/dist/runtime/components/ui/tabs/TabsTrigger.d.vue.ts +2 -2
  225. package/dist/runtime/components/ui/tabs/TabsTrigger.vue +1 -0
  226. package/dist/runtime/components/ui/tabs/TabsTrigger.vue.d.ts +2 -2
  227. package/dist/runtime/components/ui/tags-input/TagsInput.d.vue.ts +2 -2
  228. package/dist/runtime/components/ui/tags-input/TagsInput.vue +1 -0
  229. package/dist/runtime/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  230. package/dist/runtime/components/ui/tags-input/TagsInputInput.vue +1 -0
  231. package/dist/runtime/components/ui/tags-input/TagsInputItem.d.vue.ts +2 -2
  232. package/dist/runtime/components/ui/tags-input/TagsInputItem.vue +1 -0
  233. package/dist/runtime/components/ui/tags-input/TagsInputItem.vue.d.ts +2 -2
  234. package/dist/runtime/components/ui/tags-input/TagsInputItemDelete.vue +1 -0
  235. package/dist/runtime/components/ui/tags-input/TagsInputItemText.vue +1 -0
  236. package/dist/runtime/components/ui/textarea/Textarea.d.vue.ts +4 -4
  237. package/dist/runtime/components/ui/textarea/Textarea.vue +1 -0
  238. package/dist/runtime/components/ui/textarea/Textarea.vue.d.ts +4 -4
  239. package/dist/runtime/components/ui/toggle/Toggle.d.vue.ts +1 -1
  240. package/dist/runtime/components/ui/toggle/Toggle.vue +1 -0
  241. package/dist/runtime/components/ui/toggle/Toggle.vue.d.ts +1 -1
  242. package/dist/runtime/components/ui/toggle-group/ToggleGroup.d.vue.ts +1 -1
  243. package/dist/runtime/components/ui/toggle-group/ToggleGroup.vue +1 -0
  244. package/dist/runtime/components/ui/toggle-group/ToggleGroup.vue.d.ts +1 -1
  245. package/dist/runtime/components/ui/toggle-group/ToggleGroupItem.vue +1 -0
  246. package/dist/runtime/components/ui/tooltip/TooltipContent.d.vue.ts +2 -2
  247. package/dist/runtime/components/ui/tooltip/TooltipContent.vue +1 -0
  248. package/dist/runtime/components/ui/tooltip/TooltipContent.vue.d.ts +2 -2
  249. package/dist/runtime/composables/useAPI.d.ts +2 -2
  250. package/dist/runtime/composables/useAPI.js +6 -11
  251. package/dist/runtime/core/config.d.ts +2 -0
  252. package/dist/runtime/core/config.js +2 -0
  253. package/dist/runtime/core/stepper/Stepper.js +1 -3
  254. package/dist/runtime/core/timeline/Timeline.js +1 -2
  255. package/dist/runtime/css/main.css +1 -1
  256. package/dist/runtime/css/smile.css +1 -1
  257. package/dist/runtime/layouts/development.vue +11 -76
  258. package/dist/runtime/layouts/experiment.d.vue.ts +2 -2
  259. package/dist/runtime/layouts/experiment.vue +1 -0
  260. package/dist/runtime/layouts/experiment.vue.d.ts +2 -2
  261. package/dist/runtime/layouts/presentation.vue +2 -0
  262. package/dist/runtime/middleware/timeline.global.js +2 -4
  263. package/dist/runtime/pages/[...slug].vue +2 -0
  264. package/dist/runtime/pages/dev/[...slug].vue +2 -0
  265. package/dist/runtime/pages/dev-login.vue +4 -2
  266. package/dist/runtime/pages/presentation/[...slug].vue +2 -0
  267. package/dist/runtime/plugins/dev-sync.client.js +0 -2
  268. package/dist/runtime/plugins/seed.client.js +1 -3
  269. package/dist/runtime/plugins/store-sync.client.js +8 -10
  270. package/dist/runtime/public/images/helpus.png +0 -0
  271. package/dist/runtime/public/images/smile.svg +78 -0
  272. package/dist/runtime/public/images/universitylogo.png +0 -0
  273. package/dist/runtime/server/api/auth/login.post.js +11 -2
  274. package/dist/runtime/server/api/qr.get.js +1 -2
  275. package/dist/runtime/server/middleware/dev-auth.js +10 -5
  276. package/dist/runtime/stores/log.js +4 -7
  277. package/dist/runtime/stores/smilestore.d.ts +161 -0
  278. package/dist/runtime/stores/smilestore.js +39 -7
  279. package/package.json +7 -5
  280. package/dist/runtime/components/dev/navbar/ViewButton.vue +0 -159
  281. package/dist/runtime/pages/info.vue +0 -462
  282. /package/dist/runtime/components/{dev/navbar/ViewButton.d.vue.ts → builtins/LocalDevBanner.d.vue.ts} +0 -0
  283. /package/dist/runtime/components/{dev/navbar/ViewButton.vue.d.ts → builtins/LocalDevBanner.vue.d.ts} +0 -0
  284. /package/dist/runtime/{pages/info.d.vue.ts → components/dev/SmileDevPresentationView.d.vue.ts} +0 -0
  285. /package/dist/runtime/{pages/info.vue.d.ts → components/dev/SmileDevPresentationView.vue.d.ts} +0 -0
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nyuccl/smile",
3
3
  "configKey": "smile",
4
- "version": "0.2.0-beta.3",
4
+ "version": "0.2.0-beta.32",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import { defineNuxtModule, createResolver, addServerScanDir, addServerImportsDir, addPlugin, addRouteMiddleware, addLayout, extendPages, addComponentsDir, addImports } from '@nuxt/kit';
1
+ import { defineNuxtModule, createResolver, addServerScanDir, addServerImportsDir, addPlugin, addRouteMiddleware, addLayout, extendPages, addComponentsDir, addImports, useLogger } from '@nuxt/kit';
2
2
  import { fileURLToPath } from 'node:url';
3
+ import { createRequire } from 'node:module';
4
+ import { dirname, join } from 'node:path';
5
+ import { readFileSync } from 'node:fs';
3
6
  import tailwindcss from '@tailwindcss/vite';
4
- import Icons from 'unplugin-icons/vite';
5
- import Components from 'unplugin-vue-components/vite';
6
- import IconsResolver from 'unplugin-icons/resolver';
7
7
 
8
8
  const module$1 = defineNuxtModule({
9
9
  meta: {
@@ -15,13 +15,21 @@ const module$1 = defineNuxtModule({
15
15
  setup(_options, _nuxt) {
16
16
  const resolver = createResolver(import.meta.url);
17
17
  const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url));
18
+ const _require = createRequire(import.meta.url);
18
19
  _nuxt.options.ssr = false;
19
20
  _nuxt.options.build.transpile.push(runtimeDir);
21
+ _nuxt.options.nitro = _nuxt.options.nitro || {};
22
+ _nuxt.options.nitro.publicAssets = _nuxt.options.nitro.publicAssets || [];
23
+ _nuxt.options.nitro.publicAssets.push({
24
+ dir: resolver.resolve("./runtime/public"),
25
+ baseURL: "/_smile"
26
+ });
20
27
  addServerScanDir(resolver.resolve("./runtime/server"));
21
28
  addServerImportsDir(resolver.resolve("./runtime/server/utils"));
22
29
  _nuxt.options.runtimeConfig = _nuxt.options.runtimeConfig || {};
23
30
  _nuxt.options.runtimeConfig.smile = {
24
31
  devPassword: process.env.SMILE_DEV_PASSWORD || "",
32
+ publicPresentation: process.env.SMILE_PUBLIC_PRESENTATION === "true",
25
33
  tursoUrl: process.env.TURSO_DATABASE_URL || "",
26
34
  tursoAuthToken: process.env.TURSO_AUTH_TOKEN || ""
27
35
  };
@@ -31,14 +39,35 @@ const module$1 = defineNuxtModule({
31
39
  projectRef: process.env.VITE_PROJECT_REF || ""
32
40
  };
33
41
  _nuxt.options.alias["#smile-dev"] = resolver.resolve("./runtime/components/dev");
42
+ _nuxt.options.alias["#smile-composables"] = resolver.resolve("./runtime/composables");
43
+ for (const dep of ["lucide-vue-next", "@vueuse/core", "motion", "clipboard"]) {
44
+ _nuxt.options.alias[dep] = dirname(_require.resolve(`${dep}/package.json`));
45
+ }
34
46
  _nuxt.options.vite.plugins = _nuxt.options.vite.plugins || [];
35
47
  _nuxt.options.vite.plugins.push(tailwindcss());
36
- _nuxt.options.vite.plugins.push(Components({
37
- resolvers: [IconsResolver()]
38
- }));
39
- _nuxt.options.vite.plugins.push(Icons({
40
- compiler: "vue3"
41
- }));
48
+ _nuxt.options.vite.optimizeDeps = _nuxt.options.vite.optimizeDeps || {};
49
+ _nuxt.options.vite.optimizeDeps.include = _nuxt.options.vite.optimizeDeps.include || [];
50
+ _nuxt.options.vite.optimizeDeps.include.push(
51
+ "@nyuccl/smile > seedrandom",
52
+ "@nyuccl/smile > lodash",
53
+ "@nyuccl/smile > clipboard",
54
+ "@nyuccl/smile > crypto-js/sha256",
55
+ "@nyuccl/smile > crypto-js/enc-base64",
56
+ "@nyuccl/smile > json-stable-stringify",
57
+ "@nyuccl/smile > qrcode-svg",
58
+ "@nyuccl/smile > lucide-vue-next",
59
+ "@nyuccl/smile > reka-ui",
60
+ "@nyuccl/smile > reka-ui/date",
61
+ "@nyuccl/smile > @internationalized/date",
62
+ "@nyuccl/smile > vue-sonner",
63
+ "@nyuccl/smile > class-variance-authority",
64
+ "@nyuccl/smile > clsx",
65
+ "@nyuccl/smile > tailwind-merge",
66
+ "@nyuccl/smile > @vueuse/core",
67
+ "@nyuccl/smile > uuid",
68
+ "@nyuccl/smile > axios",
69
+ "@nyuccl/smile > motion"
70
+ );
42
71
  _nuxt.options.css.push(resolver.resolve("./runtime/css/main.css"));
43
72
  addPlugin(resolver.resolve("./runtime/plugins/store-sync.client"));
44
73
  addPlugin(resolver.resolve("./runtime/plugins/seed.client"));
@@ -73,11 +102,6 @@ const module$1 = defineNuxtModule({
73
102
  path: "/dev-login",
74
103
  file: resolver.resolve("./runtime/pages/dev-login.vue")
75
104
  });
76
- pages.push({
77
- name: "info",
78
- path: "/info",
79
- file: resolver.resolve("./runtime/pages/info.vue")
80
- });
81
105
  });
82
106
  addComponentsDir({ path: resolver.resolve("./runtime/components/ui"), pathPrefix: false, global: true, extensions: ["vue"] });
83
107
  addComponentsDir({ path: resolver.resolve("./runtime/components/forms"), pathPrefix: false, global: true, extensions: ["vue"] });
@@ -96,6 +120,24 @@ const module$1 = defineNuxtModule({
96
120
  { name: "default", as: "useSmileStore", from: resolver.resolve("./runtime/stores/smilestore") },
97
121
  { name: "default", as: "useLog", from: resolver.resolve("./runtime/stores/log") }
98
122
  ]);
123
+ if (_nuxt.options.dev) {
124
+ const logger = useLogger("smile");
125
+ _nuxt.hook("listen", async (_server, listener) => {
126
+ const { colors } = await import('consola/utils');
127
+ const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "../package.json"), "utf-8"));
128
+ const fmt = (url) => colors.cyan(colors.underline(url));
129
+ const urls = await listener.getURLs();
130
+ const local = urls.find((u) => u.type === "local");
131
+ if (local) {
132
+ const base = local.url.replace(/\/$/, "");
133
+ logger.info(``);
134
+ logger.info(` ${colors.bold(`SMILE ${pkg.version}`)}`);
135
+ logger.info(` Experiment: ${fmt(base)}`);
136
+ logger.info(` Dev: ${fmt(`${base}/dev/`)}`);
137
+ logger.info(` Presentation: ${fmt(`${base}/presentation/`)}`);
138
+ }
139
+ });
140
+ }
99
141
  }
100
142
  });
101
143
 
@@ -1,3 +1,15 @@
1
1
  declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
- declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
3
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ imageWidth: {
5
+ type: (NumberConstructor | StringConstructor)[];
6
+ default: number;
7
+ };
8
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
9
+ imageWidth: {
10
+ type: (NumberConstructor | StringConstructor)[];
11
+ default: number;
12
+ };
13
+ }>> & Readonly<{}>, {
14
+ imageWidth: string | number;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,6 +1,10 @@
1
1
  <script setup>
2
2
  import { onMounted, ref, onBeforeUnmount } from "vue";
3
3
  import { animate } from "motion";
4
+ import useViewAPI from "../../composables/useViewAPI";
5
+ const props = defineProps({
6
+ imageWidth: { type: [String, Number], default: 320 }
7
+ });
4
8
  const api = useViewAPI();
5
9
  let timer;
6
10
  let clicked = false;
@@ -35,9 +39,9 @@ onBeforeUnmount(() => {
35
39
  >
36
40
  <img
37
41
  ref="logo"
38
- src="/brain.svg"
39
- width="220"
40
- class="dark-aware-img"
42
+ :src="api.config.advertisementImageFn"
43
+ :width="props.imageWidth"
44
+ :class="{ 'dark-aware-img': api.config.advertisementImageInvertDark }"
41
45
  >
42
46
 
43
47
  <h1
@@ -1,3 +1,15 @@
1
1
  declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
- declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
3
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ imageWidth: {
5
+ type: (NumberConstructor | StringConstructor)[];
6
+ default: number;
7
+ };
8
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
9
+ imageWidth: {
10
+ type: (NumberConstructor | StringConstructor)[];
11
+ default: number;
12
+ };
13
+ }>> & Readonly<{}>, {
14
+ imageWidth: string | number;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,4 +1,6 @@
1
1
  <script setup>
2
+ import { ArrowRight } from "lucide-vue-next";
3
+ import useViewAPI from "../../composables/useViewAPI";
2
4
  const api = useViewAPI();
3
5
  const _props = defineProps({
4
6
  debriefText: {
@@ -35,7 +37,7 @@ function finish() {
35
37
  @click="finish()"
36
38
  >
37
39
  next
38
- <i-fa6-solid-arrow-right />
40
+ <ArrowRight />
39
41
  </Button>
40
42
  </div>
41
43
  </div>
@@ -1,6 +1,8 @@
1
1
  <script setup>
2
+ import { ArrowLeft, ArrowRight, CalendarIcon, User } from "lucide-vue-next";
2
3
  import { reactive, computed, ref } from "vue";
3
- import { CalendarIcon } from "lucide-vue-next";
4
+ import { cn } from "../../lib/utils";
5
+ import useViewAPI from "../../composables/useViewAPI";
4
6
  const api = useViewAPI();
5
7
  api.steps.append([{ id: "survey_page1" }, { id: "survey_page2" }, { id: "survey_page3" }]);
6
8
  const isPopoverOpen = ref(false);
@@ -75,7 +77,7 @@ function finish() {
75
77
  <!-- Page title and description section -->
76
78
  <template #title>
77
79
  <h3 class="text-3xl font-bold mb-4">
78
- <i-fa6-solid-person class="inline mr-2" />Demographic Information
80
+ <User class="inline mr-2" />Demographic Information
79
81
  </h3>
80
82
  <p class="text-lg mb-8">
81
83
  We request some information about you which we can use to understand aggregate differences between
@@ -290,7 +292,7 @@ function finish() {
290
292
  @click="api.goNextStep()"
291
293
  >
292
294
  Continue
293
- <i-fa6-solid-arrow-right />
295
+ <ArrowRight />
294
296
  </Button>
295
297
  </div>
296
298
  </div>
@@ -450,7 +452,7 @@ function finish() {
450
452
  variant="outline"
451
453
  @click="api.goPrevStep()"
452
454
  >
453
- <i-fa6-solid-arrow-left />
455
+ <ArrowLeft />
454
456
  Previous
455
457
  </Button>
456
458
  <Button
@@ -459,7 +461,7 @@ function finish() {
459
461
  @click="api.goNextStep()"
460
462
  >
461
463
  Continue
462
- <i-fa6-solid-arrow-right />
464
+ <ArrowRight />
463
465
  </Button>
464
466
  </div>
465
467
  </div>
@@ -1188,7 +1190,7 @@ function finish() {
1188
1190
  variant="outline"
1189
1191
  @click="api.goPrevStep()"
1190
1192
  >
1191
- <i-fa6-solid-arrow-left />
1193
+ <ArrowLeft />
1192
1194
  Previous
1193
1195
  </Button>
1194
1196
  <Button
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { ArrowLeft, ArrowRight, Monitor } from "lucide-vue-next";
2
3
  import { reactive, computed } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  api.steps.append([{ id: "device_page1" }, { id: "device_page2" }]);
5
7
  if (!api.persist.isDefined("forminfo")) {
@@ -61,7 +63,7 @@ function finish() {
61
63
  <!-- Title and description section -->
62
64
  <template #title>
63
65
  <h3 class="text-3xl font-bold mb-4">
64
- <i-fa6-solid-desktop class="inline mr-2" />&nbsp;Computer/Device Information
66
+ <Monitor class="inline mr-2" />&nbsp;Computer/Device Information
65
67
  </h3>
66
68
  <p class="text-lg mb-8">
67
69
  We request some basic information about the computer you are using right now. We also can use this information
@@ -277,7 +279,7 @@ function finish() {
277
279
  @click="api.goNextStep()"
278
280
  >
279
281
  Continue
280
- <i-fa6-solid-arrow-right />
282
+ <ArrowRight />
281
283
  </Button>
282
284
  </div>
283
285
  </div>
@@ -434,7 +436,7 @@ function finish() {
434
436
  variant="outline"
435
437
  @click="api.goPrevStep()"
436
438
  >
437
- <i-fa6-solid-arrow-left />
439
+ <ArrowLeft />
438
440
  Previous
439
441
  </Button>
440
442
  <Button
@@ -1,4 +1,6 @@
1
1
  <script setup>
2
+ import { ArrowRight } from "lucide-vue-next";
3
+ import useViewAPI from "../../composables/useViewAPI";
2
4
  const api = useViewAPI();
3
5
  function finish() {
4
6
  api.goNextView();
@@ -31,7 +33,7 @@ function finish() {
31
33
  @click="finish()"
32
34
  >
33
35
  next
34
- <i-fa6-solid-arrow-right />
36
+ <ArrowRight />
35
37
  </Button>
36
38
  </div>
37
39
  </div>
@@ -1,4 +1,7 @@
1
1
  <script setup>
2
+ import { computed } from "vue";
3
+ import { useRoute } from "#imports";
4
+ import useAPI from "../../composables/useAPI";
2
5
  const api = useAPI();
3
6
  const route = useRoute();
4
7
  const showStatusBar = computed(() => {
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { ArrowRight } from "lucide-vue-next";
2
3
  import { ref } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  const faveColor = ref("");
5
7
  function finish() {
@@ -48,7 +50,7 @@ function finish() {
48
50
  @click="finish()"
49
51
  >
50
52
  next
51
- <i-fa6-solid-arrow-right />
53
+ <ArrowRight />
52
54
  </Button>
53
55
  </div>
54
56
  </div>
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { ArrowRight } from "lucide-vue-next";
2
3
  import { ref } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  const faveNumber = ref("1");
5
7
  function finish() {
@@ -48,7 +50,7 @@ function finish() {
48
50
  @click="finish()"
49
51
  >
50
52
  next
51
- <i-fa6-solid-arrow-right />
53
+ <ArrowRight />
52
54
  </Button>
53
55
  </div>
54
56
  </div>
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { X } from "lucide-vue-next";
2
3
  import { watch, onUnmounted } from "vue";
4
+ import useAPI from "../../composables/useAPI";
3
5
  const props = defineProps({
4
6
  show: {
5
7
  type: Boolean,
@@ -48,7 +50,7 @@ onUnmounted(() => {
48
50
  aria-label="close"
49
51
  @click="$emit('toggleConsent')"
50
52
  >
51
- <i-fa6-solid-xmark class="text-xl" />
53
+ <X class="text-xl" />
52
54
  </Button>
53
55
 
54
56
  <!-- Modal content container -->
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { ref, watch, onBeforeUnmount } from "vue";
3
3
  import { animate } from "motion";
4
+ import useViewAPI from "../../composables/useViewAPI";
4
5
  const _props = defineProps({
5
6
  informedConsentText: {
6
7
  type: Object,
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { ArrowLeft, ArrowRight, CircleAlert, SquareCheckBig } from "lucide-vue-next";
2
3
  import { computed } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  const props = defineProps({
5
7
  questions: {
@@ -127,7 +129,7 @@ init();
127
129
  >
128
130
  <template #title>
129
131
  <h3 class="text-3xl font-bold mb-4">
130
- <i-fa6-solid-square-check class="inline mr-2" />&nbsp;Did we explain things clearly?
132
+ <SquareCheckBig class="inline mr-2" />&nbsp;Did we explain things clearly?
131
133
  </h3>
132
134
  <p class="text-lg mb-8">
133
135
  Using the information provided in the previous pages, please select the correct answer for each question. Do
@@ -200,7 +202,7 @@ init();
200
202
  variant="outline"
201
203
  @click="api.goPrevStep()"
202
204
  >
203
- <i-fa6-solid-arrow-left />
205
+ <ArrowLeft />
204
206
  Previous page
205
207
  </Button>
206
208
  <div v-else />
@@ -210,7 +212,7 @@ init();
210
212
  @click="api.isLastBlockStep() ? submitQuiz() : api.goNextStep()"
211
213
  >
212
214
  {{ api.isLastBlockStep() ? 'Submit' : 'Next page' }}
213
- <i-fa6-solid-arrow-right v-if="!api.isLastBlockStep()" />
215
+ <ArrowRight v-if="!api.isLastBlockStep()" />
214
216
  </Button>
215
217
  </div>
216
218
  </div>
@@ -229,7 +231,7 @@ init();
229
231
  <div class="text-center items-center justify-center">
230
232
  <h3 class="text-3xl font-bold mb-4">
231
233
  <div class="flex justify-center mb-2">
232
- <i-fa6-solid-square-check class="text-[4rem]" />
234
+ <SquareCheckBig class="text-[4rem]" />
233
235
  </div>
234
236
  Congrats! You passed.
235
237
  </h3>
@@ -256,7 +258,7 @@ init();
256
258
  <div class="text-center items-center justify-center">
257
259
  <h3 class="text-3xl font-bold mb-4">
258
260
  <div class="flex justify-center mb-2">
259
- <i-bx-error class="text-[4rem]" />
261
+ <CircleAlert class="text-[4rem]" />
260
262
  </div>
261
263
  Sorry! You did not get all the answers correct.
262
264
  </h3>
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { ArrowRight, BookOpen } from "lucide-vue-next";
2
3
  import { computed } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  const cond = api.getConditionByName("instructionsVersion");
5
7
  const instText = computed(() => {
@@ -32,7 +34,7 @@ function finish(_goto) {
32
34
  <div class="w-[80%] h-[80%]">
33
35
  <!-- Instruction header with icon -->
34
36
  <h1 class="text-2xl font-bold mb-4">
35
- <i-material-symbols-integration-instructions class="inline-block mr-2 text-3xl" /> Instructions
37
+ <BookOpen class="inline-block mr-2 text-3xl" /> Instructions
36
38
  </h1>
37
39
 
38
40
  <!-- Dynamic instruction text based on condition -->
@@ -50,7 +52,7 @@ function finish(_goto) {
50
52
  @click="finish()"
51
53
  >
52
54
  next
53
- <i-fa6-solid-arrow-right />
55
+ <ArrowRight />
54
56
  </Button>
55
57
  </div>
56
58
  </div>
@@ -0,0 +1,16 @@
1
+ <script setup>
2
+ const isDev = import.meta.dev;
3
+ </script>
4
+
5
+ <template>
6
+ <div
7
+ v-if="isDev"
8
+ class="local-dev-banner"
9
+ >
10
+ LOCAL DEV SERVER
11
+ </div>
12
+ </template>
13
+
14
+ <style scoped>
15
+ .local-dev-banner{background:repeating-linear-gradient(-45deg,#facc15,#facc15 10px,#f0c000 0,#f0c000 20px);color:#1a1a1a;flex-shrink:0;font-size:10px;font-weight:700;letter-spacing:.08em;padding:3px 0;text-align:center;width:100%}.dark .local-dev-banner{background:repeating-linear-gradient(-45deg,#555,#555 10px,#4a4a4a 0,#4a4a4a 20px);color:#ccc}
16
+ </style>
@@ -1,5 +1,6 @@
1
1
  <script setup>
2
2
  import { onMounted, ref } from "vue";
3
+ import useAPI from "../../composables/useAPI";
3
4
  const api = useAPI();
4
5
  const props = defineProps({
5
6
  estimated_time: {
@@ -1,6 +1,7 @@
1
1
  <script setup>
2
2
  import { computed } from "vue";
3
3
  import { ArrowRight } from "lucide-vue-next";
4
+ import useAPI from "../../composables/useAPI";
4
5
  const api = useAPI();
5
6
  const props = defineProps({
6
7
  title: {
@@ -77,14 +78,14 @@ function goToSection(section) {
77
78
  </script>
78
79
 
79
80
  <template>
80
- <div class="min-h-screen bg-background">
81
+ <div class="min-h-full flex flex-col bg-background">
81
82
  <!-- Header Section -->
82
83
  <header class="bg-muted/50 border-b py-6">
83
84
  <div class="w-2/3 mx-auto px-6 py-8">
84
85
  <h1 class="text-5xl font-bold text-foreground mb-4 leading-tight">
85
86
  {{ title }}
86
87
  </h1>
87
- <p class="text-2xl text-muted-foreground leading-relaxed">
88
+ <p class="text-lg text-muted-foreground leading-relaxed">
88
89
  {{ subtitle }}
89
90
  </p>
90
91
  </div>
@@ -95,7 +96,7 @@ function goToSection(section) {
95
96
  <div class="w-2/3 mx-auto px-6 py-8">
96
97
  <div class="grid grid-cols-1 md:grid-cols-12 gap-8">
97
98
  <!-- Authors -->
98
- <div class="md:col-span-2">
99
+ <div class="md:col-span-3">
99
100
  <h3 class="text-[0.65rem] font-extralight uppercase tracking-widest text-muted-foreground mb-4">
100
101
  Authors
101
102
  </h3>
@@ -132,7 +133,7 @@ function goToSection(section) {
132
133
  </div>
133
134
 
134
135
  <!-- Affiliations -->
135
- <div class="md:col-span-3">
136
+ <div class="md:col-span-4">
136
137
  <h3 class="text-[0.65rem] font-extralight uppercase tracking-widest text-muted-foreground mb-4">
137
138
  Affiliations
138
139
  </h3>
@@ -183,13 +184,13 @@ function goToSection(section) {
183
184
  </section>
184
185
 
185
186
  <!-- Main Content -->
186
- <main class="w-2/3 mx-auto px-6 py-12">
187
+ <main class="w-2/3 mx-auto px-6 py-12 flex-1">
187
188
  <!-- Project Description -->
188
189
  <div class="prose prose-gray max-w-none mb-12">
189
190
  <p
190
191
  v-for="(paragraph, index) in descriptionParagraphs"
191
192
  :key="index"
192
- class="text-lg text-muted-foreground leading-relaxed mb-4"
193
+ class="text-md text-muted-foreground leading-relaxed mb-4"
193
194
  >
194
195
  {{ paragraph }}
195
196
  </p>
@@ -204,12 +205,12 @@ function goToSection(section) {
204
205
  :key="index"
205
206
  >
206
207
  <div>
207
- <h3 class="text-xl font-semibold text-foreground mb-3">
208
+ <h3 class="text-base font-semibold text-foreground mb-2">
208
209
  {{ section.title }}
209
210
  </h3>
210
211
  <p
211
212
  v-if="section.description"
212
- class="text-lg text-muted-foreground mb-4"
213
+ class="text-md text-muted-foreground mb-3"
213
214
  >
214
215
  {{ section.description }}
215
216
  </p>
@@ -1,5 +1,8 @@
1
1
  <script setup>
2
+ import { CircleX, Hand, Search } from "lucide-vue-next";
2
3
  import { ref } from "vue";
4
+ import useSmileStore from "../../stores/smilestore";
5
+ import useAPI from "../../composables/useAPI";
3
6
  const smilestore = useSmileStore();
4
7
  const api = useAPI();
5
8
  const email = ref("");
@@ -48,7 +51,7 @@ function submitWithdraw() {
48
51
  >
49
52
  <img
50
53
  :src="api.getPublicUrl(api.config.brandLogoFn)"
51
- width="90"
54
+ width="120"
52
55
  class="dark-aware-img"
53
56
  >
54
57
  </a>
@@ -80,7 +83,7 @@ function submitWithdraw() {
80
83
  size="xs"
81
84
  @click="toggleConsent()"
82
85
  >
83
- <i-fa6-solid-magnifying-glass />
86
+ <Search />
84
87
  <span class="@[400px]:inline hidden">View consent</span>
85
88
  </Button>
86
89
  <Button
@@ -93,7 +96,7 @@ function submitWithdraw() {
93
96
  size="xs"
94
97
  @click="toggleWithdraw()"
95
98
  >
96
- <i-fa6-solid-circle-xmark />
99
+ <CircleX />
97
100
  <span class="@[400px]:inline hidden">Withdraw</span>
98
101
  </Button>
99
102
  <Button
@@ -102,7 +105,7 @@ function submitWithdraw() {
102
105
  size="xs"
103
106
  @click="toggleReport()"
104
107
  >
105
- <i-fa6-solid-hand />
108
+ <Hand />
106
109
  Report issue
107
110
  </Button>
108
111
  </div>
@@ -1,4 +1,6 @@
1
1
  <script setup>
2
+ import { Sparkles } from "lucide-vue-next";
3
+ import useAPI from "../../composables/useAPI";
2
4
  const api = useAPI();
3
5
  const _props = defineProps({
4
6
  estimated_time: {
@@ -50,16 +52,16 @@ const _props = defineProps({
50
52
  <template #right>
51
53
  <!-- Lab logo (hidden on smaller screens) -->
52
54
  <img
53
- src="@/user/assets/brain.svg"
55
+ :src="api.config.advertisementImageFn"
54
56
  width="220"
55
- class="mb-4 hidden @xl:block"
57
+ :class="['mb-4 hidden @xl:block', { 'dark-aware-img': api.config.advertisementImageInvertDark }]"
56
58
  >
57
59
 
58
60
  <!-- Lab information card -->
59
61
  <article class="border border-gray-300 rounded-lg shadow-lg">
60
62
  <!-- Card header -->
61
63
  <div class="bg-gray-100 px-3 py-2 text-xs font-medium border-b border-gray-300 rounded-t-lg">
62
- <p><i-fa6-solid-bahai class="inline" />&nbsp;&nbsp;Who are we?</p>
64
+ <p><Sparkles class="inline" />&nbsp;&nbsp;Who are we?</p>
63
65
  </div>
64
66
 
65
67
  <!-- Card content with lab details -->
@@ -1,5 +1,7 @@
1
1
  <script setup>
2
+ import { Pencil } from "lucide-vue-next";
2
3
  import { reactive, computed } from "vue";
4
+ import useViewAPI from "../../composables/useViewAPI";
3
5
  const api = useViewAPI();
4
6
  if (!api.persist.isDefined("forminfo")) {
5
7
  api.persist.forminfo = reactive({
@@ -46,7 +48,7 @@ function finish() {
46
48
  <!-- Page title and description section -->
47
49
  <template #title>
48
50
  <h3 class="text-3xl font-bold mb-4">
49
- <i-fa6-solid-pencil class="inline mr-2" />&nbsp;Give us feedback
51
+ <Pencil class="inline mr-2" />&nbsp;Give us feedback
50
52
  </h3>
51
53
  <p class="text-lg mb-8">
52
54
  Please give us feedback about your experience with the study. Your feedback will help us improve our study and