@nyuccl/smile 0.2.0-beta.4 → 0.2.0-beta.41
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/dist/module.json +1 -1
- package/dist/module.mjs +109 -21
- package/dist/runtime/components/builtins/AdvertisementView.d.vue.ts +13 -1
- package/dist/runtime/components/builtins/AdvertisementView.vue +7 -3
- package/dist/runtime/components/builtins/AdvertisementView.vue.d.ts +13 -1
- package/dist/runtime/components/builtins/DebriefView.vue +3 -1
- package/dist/runtime/components/builtins/DemographicSurveyView.vue +8 -6
- package/dist/runtime/components/builtins/DeviceSurveyView.vue +5 -3
- package/dist/runtime/components/builtins/ExpView.vue +4 -2
- package/dist/runtime/components/builtins/ExperimentStatusBar.vue +3 -0
- package/dist/runtime/components/builtins/FavoriteColor.vue +3 -1
- package/dist/runtime/components/builtins/FavoriteNumber.vue +3 -1
- package/dist/runtime/components/builtins/InformedConsentModal.vue +5 -3
- package/dist/runtime/components/builtins/InformedConsentView.vue +3 -2
- package/dist/runtime/components/builtins/InstructionsQuiz.vue +7 -5
- package/dist/runtime/components/builtins/InstructionsView.vue +5 -3
- package/dist/runtime/components/builtins/LocalDevBanner.vue +16 -0
- package/dist/runtime/components/builtins/MTurkRecruitView.vue +4 -3
- package/dist/runtime/components/builtins/PresentationModeView.vue +9 -8
- package/dist/runtime/components/builtins/StatusBar.vue +7 -4
- package/dist/runtime/components/builtins/StudyPreviewText.vue +12 -10
- package/dist/runtime/components/builtins/TaskFeedbackSurveyView.vue +3 -1
- package/dist/runtime/components/builtins/ThanksView.vue +22 -21
- package/dist/runtime/components/builtins/WindowSizerView.vue +5 -3
- package/dist/runtime/components/builtins/WithdrawModal.vue +9 -7
- package/dist/runtime/components/builtins/WithdrawView.vue +4 -2
- package/dist/runtime/components/dev/RecruitmentChooserView.vue +532 -224
- package/dist/runtime/components/dev/ResponsiveDeviceContainer.vue +17 -8
- package/dist/runtime/components/dev/SmileDevPresentationView.vue +83 -0
- package/dist/runtime/components/dev/console/ConfigList.vue +14 -11
- package/dist/runtime/components/dev/console/ConsoleConfigPanel.vue +28 -7
- package/dist/runtime/components/dev/console/ConsoleDatabaseBrowsePanel.vue +6 -4
- package/dist/runtime/components/dev/console/ConsoleLogPanel.vue +68 -23
- package/dist/runtime/components/dev/console/DatabaseList.vue +9 -7
- package/dist/runtime/components/dev/console/SmileDevConsole.vue +7 -5
- package/dist/runtime/components/dev/devicePresets.d.ts +4 -4
- package/dist/runtime/components/dev/devicePresets.js +4 -4
- package/dist/runtime/components/dev/menu/DevConfigPanel.vue +3 -1
- package/dist/runtime/components/dev/menu/ResponsiveDeviceSelect.vue +1 -0
- package/dist/runtime/components/dev/menu/SmileDevAppMenu.vue +27 -24
- package/dist/runtime/components/dev/navbar/ColorModeButton.vue +5 -3
- package/dist/runtime/components/dev/navbar/DatabaseButtonGroup.vue +8 -6
- package/dist/runtime/components/dev/navbar/FullScreenButton.vue +4 -2
- package/dist/runtime/components/dev/navbar/KeyCommandNotification.vue +1 -1
- package/dist/runtime/components/dev/navbar/PanelButtonGroup.d.vue.ts +3 -0
- package/dist/runtime/components/dev/navbar/PanelButtonGroup.vue +79 -0
- package/dist/runtime/components/dev/navbar/PanelButtonGroup.vue.d.ts +3 -0
- package/dist/runtime/components/dev/navbar/ReloadButton.vue +3 -1
- package/dist/runtime/components/dev/navbar/ResetButton.vue +3 -1
- package/dist/runtime/components/dev/navbar/RouteJumper.vue +9 -5
- package/dist/runtime/components/dev/navbar/SmileDevNavBar.vue +19 -27
- package/dist/runtime/components/dev/navbar/StepInfoButtonGroup.vue +5 -3
- package/dist/runtime/components/dev/navbar/ViewInfoButtonGroup.vue +13 -10
- package/dist/runtime/components/dev/presentation/DarkModeButton.vue +5 -3
- package/dist/runtime/components/dev/presentation/LogoutButton.vue +2 -1
- package/dist/runtime/components/dev/presentation/PresentationModeResetButton.vue +11 -2
- package/dist/runtime/components/dev/presentation/PresentationNavBar.d.vue.ts +13 -1
- package/dist/runtime/components/dev/presentation/PresentationNavBar.vue +13 -6
- package/dist/runtime/components/dev/presentation/PresentationNavBar.vue.d.ts +13 -1
- package/dist/runtime/components/dev/presentation/QRCodeButton.vue +4 -2
- package/dist/runtime/components/dev/sidebar/AppProgressPanel.vue +23 -21
- package/dist/runtime/components/dev/sidebar/ConfigurationVariablesPanel.vue +7 -5
- package/dist/runtime/components/dev/sidebar/DatabaseStatusInfoPanel.vue +27 -7
- package/dist/runtime/components/dev/sidebar/RandomizationSidebarPanel.vue +9 -5
- package/dist/runtime/components/dev/sidebar/SmileDevSideBar.vue +12 -5
- package/dist/runtime/components/dev/sidebar/StepDataViewer.d.vue.ts +2 -2
- package/dist/runtime/components/dev/sidebar/StepDataViewer.vue +1 -1
- package/dist/runtime/components/dev/sidebar/StepDataViewer.vue.d.ts +2 -2
- package/dist/runtime/components/dev/sidebar/StepExplorerPanel.vue +13 -8
- package/dist/runtime/components/dev/sidebar/StepNode.vue +7 -5
- package/dist/runtime/components/dev/sidebar/StudyInfoPanel.vue +3 -2
- package/dist/runtime/components/forms/MonthYearDayPicker.vue +1 -0
- package/dist/runtime/components/layouts/ConstrainedPage.d.vue.ts +1 -1
- package/dist/runtime/components/layouts/ConstrainedPage.vue.d.ts +1 -1
- package/dist/runtime/components/layouts/ConstrainedTaskWindow.d.vue.ts +2 -2
- package/dist/runtime/components/layouts/ConstrainedTaskWindow.vue +1 -1
- package/dist/runtime/components/layouts/ConstrainedTaskWindow.vue.d.ts +2 -2
- package/dist/runtime/components/layouts/TitleTwoCol.d.vue.ts +1 -1
- package/dist/runtime/components/layouts/TitleTwoCol.vue.d.ts +1 -1
- package/dist/runtime/components/layouts/TwoCol.d.vue.ts +1 -1
- package/dist/runtime/components/layouts/TwoCol.vue.d.ts +1 -1
- package/dist/runtime/components/ui/avatar/Avatar.vue +1 -0
- package/dist/runtime/components/ui/avatar/AvatarFallback.vue +1 -0
- package/dist/runtime/components/ui/badge/Badge.vue +1 -0
- package/dist/runtime/components/ui/badge/index.d.ts +1 -1
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbEllipsis.vue +1 -0
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbItem.vue +1 -0
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbLink.vue +1 -0
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbList.vue +1 -0
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbPage.vue +1 -0
- package/dist/runtime/components/ui/breadcrumb/BreadcrumbSeparator.vue +1 -0
- package/dist/runtime/components/ui/button/Button.vue +1 -0
- package/dist/runtime/components/ui/button/index.d.ts +2 -2
- package/dist/runtime/components/ui/button-group/ButtonGroup.vue +1 -0
- package/dist/runtime/components/ui/button-group/ButtonGroupItem.vue +1 -0
- package/dist/runtime/components/ui/calendar/Calendar.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarCell.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarCellTrigger.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarGrid.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarGridRow.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarHeadCell.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarHeader.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarHeading.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarNextButton.vue +1 -0
- package/dist/runtime/components/ui/calendar/CalendarPrevButton.vue +1 -0
- package/dist/runtime/components/ui/card/Card.vue +1 -0
- package/dist/runtime/components/ui/card/CardAction.vue +1 -0
- package/dist/runtime/components/ui/card/CardContent.vue +1 -0
- package/dist/runtime/components/ui/card/CardDescription.vue +1 -0
- package/dist/runtime/components/ui/card/CardFooter.vue +1 -0
- package/dist/runtime/components/ui/card/CardHeader.vue +1 -0
- package/dist/runtime/components/ui/card/CardTitle.vue +1 -0
- package/dist/runtime/components/ui/checkbox/Checkbox.d.vue.ts +6 -6
- package/dist/runtime/components/ui/checkbox/Checkbox.vue +1 -0
- package/dist/runtime/components/ui/checkbox/Checkbox.vue.d.ts +6 -6
- package/dist/runtime/components/ui/checkbox/index.d.ts +2 -2
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.d.vue.ts +4 -4
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +4 -4
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.d.vue.ts +3 -3
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +3 -3
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuItem.d.vue.ts +1 -1
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuItem.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuItem.vue.d.ts +1 -1
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuLabel.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuShortcut.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.d.vue.ts +3 -3
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue +1 -0
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +3 -3
- package/dist/runtime/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -0
- package/dist/runtime/components/ui/input/Input.d.vue.ts +4 -4
- package/dist/runtime/components/ui/input/Input.vue +1 -0
- package/dist/runtime/components/ui/input/Input.vue.d.ts +4 -4
- package/dist/runtime/components/ui/label/Label.vue +1 -0
- package/dist/runtime/components/ui/multiselect/MultiSelect.d.vue.ts +1 -1
- package/dist/runtime/components/ui/multiselect/MultiSelect.vue +1 -0
- package/dist/runtime/components/ui/multiselect/MultiSelect.vue.d.ts +1 -1
- package/dist/runtime/components/ui/pagination/Pagination.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationContent.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationEllipsis.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationFirst.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationItem.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationLast.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationNext.vue +1 -0
- package/dist/runtime/components/ui/pagination/PaginationPrevious.vue +1 -0
- package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +2 -2
- package/dist/runtime/components/ui/popover/PopoverContent.vue +1 -0
- package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +2 -2
- package/dist/runtime/components/ui/progress/Progress.vue +1 -0
- package/dist/runtime/components/ui/resizable/ResizableHandle.vue +1 -0
- package/dist/runtime/components/ui/resizable/ResizablePanel.d.vue.ts +1 -1
- package/dist/runtime/components/ui/resizable/ResizablePanel.vue.d.ts +1 -1
- package/dist/runtime/components/ui/resizable/ResizablePanelGroup.vue +1 -0
- package/dist/runtime/components/ui/select/Select.d.vue.ts +1 -1
- package/dist/runtime/components/ui/select/Select.vue.d.ts +1 -1
- package/dist/runtime/components/ui/select/SelectContent.d.vue.ts +2 -2
- package/dist/runtime/components/ui/select/SelectContent.vue +1 -0
- package/dist/runtime/components/ui/select/SelectContent.vue.d.ts +2 -2
- package/dist/runtime/components/ui/select/SelectItem.vue +1 -0
- package/dist/runtime/components/ui/select/SelectLabel.vue +1 -0
- package/dist/runtime/components/ui/select/SelectScrollDownButton.vue +1 -0
- package/dist/runtime/components/ui/select/SelectScrollUpButton.vue +1 -0
- package/dist/runtime/components/ui/select/SelectSeparator.vue +1 -0
- package/dist/runtime/components/ui/select/SelectTrigger.vue +1 -0
- package/dist/runtime/components/ui/separator/Separator.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetContent.d.vue.ts +1 -1
- package/dist/runtime/components/ui/sheet/SheetContent.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetContent.vue.d.ts +1 -1
- package/dist/runtime/components/ui/sheet/SheetDescription.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetFooter.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetHeader.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetOverlay.vue +1 -0
- package/dist/runtime/components/ui/sheet/SheetTitle.vue +1 -0
- package/dist/runtime/components/ui/sidebar/Sidebar.d.vue.ts +1 -1
- package/dist/runtime/components/ui/sidebar/Sidebar.vue +1 -0
- package/dist/runtime/components/ui/sidebar/Sidebar.vue.d.ts +1 -1
- package/dist/runtime/components/ui/sidebar/SidebarContent.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarFooter.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarGroup.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarGroupAction.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarGroupContent.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarGroupLabel.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarHeader.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarInput.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarInset.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenu.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuAction.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuBadge.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuButton.d.vue.ts +1 -1
- package/dist/runtime/components/ui/sidebar/SidebarMenuButton.vue.d.ts +1 -1
- package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.d.vue.ts +1 -1
- package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuButtonChild.vue.d.ts +1 -1
- package/dist/runtime/components/ui/sidebar/SidebarMenuItem.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuSkeleton.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuSub.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuSubButton.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarMenuSubItem.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarProvider.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarRail.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarSeparator.vue +1 -0
- package/dist/runtime/components/ui/sidebar/SidebarTrigger.vue +1 -0
- package/dist/runtime/components/ui/sidebar/index.d.ts +1 -1
- package/dist/runtime/components/ui/skeleton/Skeleton.vue +1 -0
- package/dist/runtime/components/ui/sonner/Sonner.d.vue.ts +4 -4
- package/dist/runtime/components/ui/sonner/Sonner.vue.d.ts +4 -4
- package/dist/runtime/components/ui/stepper/Stepper.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperDescription.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperIndicator.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperItem.d.vue.ts +1 -1
- package/dist/runtime/components/ui/stepper/StepperItem.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperItem.vue.d.ts +1 -1
- package/dist/runtime/components/ui/stepper/StepperSeparator.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperTitle.vue +1 -0
- package/dist/runtime/components/ui/stepper/StepperTrigger.vue +1 -0
- package/dist/runtime/components/ui/switch/Switch.d.vue.ts +2 -2
- package/dist/runtime/components/ui/switch/Switch.vue +1 -0
- package/dist/runtime/components/ui/switch/Switch.vue.d.ts +2 -2
- package/dist/runtime/components/ui/switch/index.d.ts +2 -2
- package/dist/runtime/components/ui/table/Table.vue +1 -0
- package/dist/runtime/components/ui/table/TableBody.vue +1 -0
- package/dist/runtime/components/ui/table/TableCaption.vue +1 -0
- package/dist/runtime/components/ui/table/TableCell.vue +1 -0
- package/dist/runtime/components/ui/table/TableEmpty.vue +1 -0
- package/dist/runtime/components/ui/table/TableFooter.vue +1 -0
- package/dist/runtime/components/ui/table/TableHead.vue +1 -0
- package/dist/runtime/components/ui/table/TableHeader.vue +1 -0
- package/dist/runtime/components/ui/table/TableRow.vue +1 -0
- package/dist/runtime/components/ui/tabs/Tabs.vue +1 -0
- package/dist/runtime/components/ui/tabs/TabsContent.d.vue.ts +2 -2
- package/dist/runtime/components/ui/tabs/TabsContent.vue +1 -0
- package/dist/runtime/components/ui/tabs/TabsContent.vue.d.ts +2 -2
- package/dist/runtime/components/ui/tabs/TabsList.d.vue.ts +1 -1
- package/dist/runtime/components/ui/tabs/TabsList.vue +1 -0
- package/dist/runtime/components/ui/tabs/TabsList.vue.d.ts +1 -1
- package/dist/runtime/components/ui/tabs/TabsTrigger.d.vue.ts +2 -2
- package/dist/runtime/components/ui/tabs/TabsTrigger.vue +1 -0
- package/dist/runtime/components/ui/tabs/TabsTrigger.vue.d.ts +2 -2
- package/dist/runtime/components/ui/tags-input/TagsInput.d.vue.ts +3 -3
- package/dist/runtime/components/ui/tags-input/TagsInput.vue +1 -0
- package/dist/runtime/components/ui/tags-input/TagsInput.vue.d.ts +3 -3
- package/dist/runtime/components/ui/tags-input/TagsInputInput.vue +1 -0
- package/dist/runtime/components/ui/tags-input/TagsInputItem.d.vue.ts +2 -2
- package/dist/runtime/components/ui/tags-input/TagsInputItem.vue +1 -0
- package/dist/runtime/components/ui/tags-input/TagsInputItem.vue.d.ts +2 -2
- package/dist/runtime/components/ui/tags-input/TagsInputItemDelete.vue +1 -0
- package/dist/runtime/components/ui/tags-input/TagsInputItemText.vue +1 -0
- package/dist/runtime/components/ui/textarea/Textarea.d.vue.ts +4 -4
- package/dist/runtime/components/ui/textarea/Textarea.vue +1 -0
- package/dist/runtime/components/ui/textarea/Textarea.vue.d.ts +4 -4
- package/dist/runtime/components/ui/toggle/Toggle.d.vue.ts +2 -2
- package/dist/runtime/components/ui/toggle/Toggle.vue +1 -0
- package/dist/runtime/components/ui/toggle/Toggle.vue.d.ts +2 -2
- package/dist/runtime/components/ui/toggle/index.d.ts +1 -1
- package/dist/runtime/components/ui/toggle-group/ToggleGroup.d.vue.ts +2 -2
- package/dist/runtime/components/ui/toggle-group/ToggleGroup.vue +1 -0
- package/dist/runtime/components/ui/toggle-group/ToggleGroup.vue.d.ts +2 -2
- package/dist/runtime/components/ui/toggle-group/ToggleGroupItem.vue +1 -0
- package/dist/runtime/components/ui/tooltip/TooltipContent.d.vue.ts +2 -2
- package/dist/runtime/components/ui/tooltip/TooltipContent.vue +1 -0
- package/dist/runtime/components/ui/tooltip/TooltipContent.vue.d.ts +2 -2
- package/dist/runtime/composables/useAPI.d.ts +2 -2
- package/dist/runtime/composables/useAPI.js +6 -11
- package/dist/runtime/composables/useViewAPI.d.ts +1 -0
- package/dist/runtime/composables/useViewAPI.js +20 -4
- package/dist/runtime/composables/useWindowSizer.d.ts +14 -0
- package/dist/runtime/composables/useWindowSizer.js +48 -0
- package/dist/runtime/core/config.d.ts +78 -48
- package/dist/runtime/core/config.js +21 -27
- package/dist/runtime/core/stepper/Stepper.d.ts +13 -10
- package/dist/runtime/core/stepper/Stepper.js +70 -55
- package/dist/runtime/core/stepper/StepperSerializer.js +32 -14
- package/dist/runtime/core/timeline/Timeline.js +1 -2
- package/dist/runtime/css/main.css +1 -1
- package/dist/runtime/css/smile.css +1 -1
- package/dist/runtime/layouts/development.vue +38 -78
- package/dist/runtime/layouts/experiment.d.vue.ts +7 -10
- package/dist/runtime/layouts/experiment.vue +13 -0
- package/dist/runtime/layouts/experiment.vue.d.ts +7 -10
- package/dist/runtime/layouts/presentation.vue +24 -3
- package/dist/runtime/middleware/timeline.global.js +2 -4
- package/dist/runtime/pages/[...slug].vue +2 -0
- package/dist/runtime/pages/dev/[...slug].vue +2 -0
- package/dist/runtime/pages/dev-login.vue +5 -3
- package/dist/runtime/pages/presentation/[...slug].vue +2 -0
- package/dist/runtime/plugins/dev-sync.client.js +0 -2
- package/dist/runtime/plugins/seed.client.js +1 -3
- package/dist/runtime/plugins/store-sync.client.js +8 -10
- package/dist/runtime/public/images/helpus.png +0 -0
- package/dist/runtime/public/images/smile.svg +78 -0
- package/dist/runtime/public/images/universitylogo.png +0 -0
- package/dist/runtime/server/api/auth/login.post.js +11 -2
- package/dist/runtime/server/api/db-info.get.d.ts +5 -0
- package/dist/runtime/server/api/db-info.get.js +10 -0
- package/dist/runtime/server/api/qr.get.js +1 -2
- package/dist/runtime/server/middleware/dev-auth.js +10 -5
- package/dist/runtime/stores/log.js +4 -7
- package/dist/runtime/stores/smilestore.d.ts +161 -1014
- package/dist/runtime/stores/smilestore.js +39 -7
- package/dist/runtime/utils/utils.js +7 -0
- package/package.json +5 -3
- package/dist/runtime/components/dev/navbar/ViewButton.vue +0 -159
- package/dist/runtime/pages/info.vue +0 -462
- /package/dist/runtime/components/{dev/navbar/ViewButton.d.vue.ts → builtins/LocalDevBanner.d.vue.ts} +0 -0
- /package/dist/runtime/components/{dev/navbar/ViewButton.vue.d.ts → builtins/LocalDevBanner.vue.d.ts} +0 -0
- /package/dist/runtime/{pages/info.d.vue.ts → components/dev/SmileDevPresentationView.d.vue.ts} +0 -0
- /package/dist/runtime/{pages/info.vue.d.ts → components/dev/SmileDevPresentationView.vue.d.ts} +0 -0
|
@@ -1,53 +1,39 @@
|
|
|
1
1
|
declare namespace _default {
|
|
2
|
-
let mode: any;
|
|
3
|
-
let smileVersion: any;
|
|
4
|
-
let projectName: any;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let codeNameURL: any;
|
|
8
|
-
let localStorageKey: string;
|
|
9
|
-
let devLocalStorageKey: string;
|
|
10
|
-
namespace github {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
let lastCommitMsg: any;
|
|
15
|
-
|
|
16
|
-
let commitURL: string;
|
|
2
|
+
export let mode: any;
|
|
3
|
+
export let smileVersion: any;
|
|
4
|
+
export let projectName: any;
|
|
5
|
+
export { projectRef };
|
|
6
|
+
export { codeName };
|
|
7
|
+
export let codeNameURL: any;
|
|
8
|
+
export let localStorageKey: string;
|
|
9
|
+
export let devLocalStorageKey: string;
|
|
10
|
+
export namespace github {
|
|
11
|
+
export { repoName };
|
|
12
|
+
export { owner };
|
|
13
|
+
export { branch };
|
|
14
|
+
export let lastCommitMsg: any;
|
|
15
|
+
export { hash as lastCommitHash };
|
|
16
|
+
export let commitURL: string;
|
|
17
17
|
}
|
|
18
|
-
let allowRepeats: boolean;
|
|
19
|
-
let autoSave: any;
|
|
20
|
-
let maxWrites: any;
|
|
21
|
-
let minWriteInterval: any;
|
|
22
|
-
let maxSteps: any;
|
|
23
|
-
let randomSeed: any;
|
|
24
|
-
let deployURL: any;
|
|
25
|
-
let labURL: any;
|
|
26
|
-
let brandLogoFn: any;
|
|
27
|
-
let
|
|
28
|
-
let
|
|
29
|
-
let
|
|
30
|
-
let
|
|
31
|
-
let
|
|
32
|
-
let
|
|
33
|
-
let
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let creditToken: any;
|
|
38
|
-
}
|
|
39
|
-
namespace sonaPaid {
|
|
40
|
-
let url_1: any;
|
|
41
|
-
export { url_1 as url };
|
|
42
|
-
let experimentId_1: any;
|
|
43
|
-
export { experimentId_1 as experimentId };
|
|
44
|
-
let creditToken_1: any;
|
|
45
|
-
export { creditToken_1 as creditToken };
|
|
46
|
-
}
|
|
47
|
-
namespace spark {
|
|
48
|
-
let completionUrl: string;
|
|
49
|
-
}
|
|
50
|
-
namespace firebaseConfig {
|
|
18
|
+
export let allowRepeats: boolean;
|
|
19
|
+
export let autoSave: any;
|
|
20
|
+
export let maxWrites: any;
|
|
21
|
+
export let minWriteInterval: any;
|
|
22
|
+
export let maxSteps: any;
|
|
23
|
+
export let randomSeed: any;
|
|
24
|
+
export let deployURL: any;
|
|
25
|
+
export let labURL: any;
|
|
26
|
+
export let brandLogoFn: any;
|
|
27
|
+
export let advertisementImageFn: string;
|
|
28
|
+
export let advertisementImageInvertDark: boolean;
|
|
29
|
+
export let colorMode: any;
|
|
30
|
+
export let responsiveUI: boolean;
|
|
31
|
+
export let googleAnalyticsID: any;
|
|
32
|
+
export let windowsizerRequest: object;
|
|
33
|
+
export let windowsizerAggressive: boolean;
|
|
34
|
+
export let anonymousMode: boolean;
|
|
35
|
+
export let unpaidStudy: boolean;
|
|
36
|
+
export namespace firebaseConfig {
|
|
51
37
|
let apiKey: any;
|
|
52
38
|
let authDomain: any;
|
|
53
39
|
let projectId: any;
|
|
@@ -164,3 +150,47 @@ export type Config = {
|
|
|
164
150
|
appId: string;
|
|
165
151
|
};
|
|
166
152
|
};
|
|
153
|
+
declare const projectRef: any;
|
|
154
|
+
/**
|
|
155
|
+
* Global configuration object for the Smile application
|
|
156
|
+
* @typedef {object} Config
|
|
157
|
+
* @property {string} mode - Application mode ('development', 'production', 'testing')
|
|
158
|
+
* @property {string} projectName - Name of the project
|
|
159
|
+
* @property {string} projectRef - Project reference derived from deploy base path
|
|
160
|
+
* @property {string} codeName - Project code name
|
|
161
|
+
* @property {string} codeNameURL - Deploy URL for code name
|
|
162
|
+
* @property {string} localStorageKey - Key for storing data in localStorage
|
|
163
|
+
* @property {string} devLocalStorageKey - Key for storing dev data in localStorage
|
|
164
|
+
* @property {object} github - GitHub repository information
|
|
165
|
+
* @property {string} github.repoName - Repository name
|
|
166
|
+
* @property {string} github.owner - Repository owner
|
|
167
|
+
* @property {string} github.branch - Current branch name
|
|
168
|
+
* @property {string} github.lastCommitMsg - Last commit message
|
|
169
|
+
* @property {string} github.lastCommitHash - Last commit hash
|
|
170
|
+
* @property {string} github.commitURL - URL to last commit
|
|
171
|
+
* @property {boolean} allowRepeats - Whether to allow repeat participants
|
|
172
|
+
* @property {boolean} autoSave - Whether to auto-save data
|
|
173
|
+
* @property {number} maxWrites - Maximum number of writes allowed
|
|
174
|
+
* @property {number} minWriteInterval - Minimum interval between writes
|
|
175
|
+
* @property {number} maxSteps - Maximum rows in stepper tables
|
|
176
|
+
* @property {string} randomSeed - Seed for random number generation
|
|
177
|
+
* @property {string} deployURL - URL where app is deployed
|
|
178
|
+
* @property {string} labURL - URL of the lab website
|
|
179
|
+
* @property {string} brandLogoFn - Function name for brand logo
|
|
180
|
+
* @property {string} googleAnalyticsID - Google Analytics tracking ID
|
|
181
|
+
* @property {object} windowsizerRequest - Requested window dimensions
|
|
182
|
+
* @property {boolean} windowsizerAggressive - Whether to force window sizing
|
|
183
|
+
* @property {boolean} anonymousMode - Whether to enable anonymous mode
|
|
184
|
+
* @property {object} firebaseConfig - Firebase configuration object
|
|
185
|
+
* @property {string} firebaseConfig.apiKey - Firebase API key
|
|
186
|
+
* @property {string} firebaseConfig.authDomain - Firebase auth domain
|
|
187
|
+
* @property {string} firebaseConfig.projectId - Firebase project ID
|
|
188
|
+
* @property {string} firebaseConfig.storageBucket - Firebase storage bucket
|
|
189
|
+
* @property {string} firebaseConfig.messagingSenderId - Firebase messaging sender ID
|
|
190
|
+
* @property {string} firebaseConfig.appId - Firebase app ID
|
|
191
|
+
*/
|
|
192
|
+
declare const codeName: any;
|
|
193
|
+
declare const repoName: any;
|
|
194
|
+
declare const owner: any;
|
|
195
|
+
declare const branch: any;
|
|
196
|
+
declare const hash: any;
|
|
@@ -58,24 +58,29 @@ function parseWidthHeight(value) {
|
|
|
58
58
|
* @property {string} firebaseConfig.messagingSenderId - Firebase messaging sender ID
|
|
59
59
|
* @property {string} firebaseConfig.appId - Firebase app ID
|
|
60
60
|
*/
|
|
61
|
+
const codeName = import.meta.env.VITE_CODE_NAME || 'unnamed-experiment'
|
|
62
|
+
const projectRef = (import.meta.env.VITE_DEPLOY_BASE_PATH || '/local/experiment/main/').slice(1, -1).replace(/\//g, '-')
|
|
63
|
+
const owner = import.meta.env.VITE_GIT_OWNER || 'local'
|
|
64
|
+
const repoName = import.meta.env.VITE_GIT_REPO_NAME || 'experiment'
|
|
65
|
+
const branch = import.meta.env.VITE_GIT_BRANCH_NAME || 'main'
|
|
66
|
+
const hash = import.meta.env.VITE_GIT_HASH || '0000000'
|
|
67
|
+
|
|
61
68
|
export default {
|
|
62
69
|
mode: import.meta.env.MODE,
|
|
63
|
-
smileVersion: import.meta.env.VITE_SMILE_VERSION,
|
|
64
|
-
projectName: import.meta.env.VITE_PROJECT_NAME
|
|
65
|
-
projectRef
|
|
66
|
-
codeName
|
|
70
|
+
smileVersion: import.meta.env.VITE_SMILE_VERSION || '(unknown)',
|
|
71
|
+
projectName: import.meta.env.VITE_PROJECT_NAME || 'experiment',
|
|
72
|
+
projectRef,
|
|
73
|
+
codeName,
|
|
67
74
|
codeNameURL: import.meta.env.VITE_CODE_NAME_DEPLOY_URL,
|
|
68
|
-
localStorageKey: `smilestore-${
|
|
69
|
-
devLocalStorageKey: `smilestore-${
|
|
75
|
+
localStorageKey: `smilestore-${codeName}`,
|
|
76
|
+
devLocalStorageKey: `smilestore-${codeName}_dev`,
|
|
70
77
|
github: {
|
|
71
|
-
repoName
|
|
72
|
-
owner
|
|
73
|
-
branch
|
|
74
|
-
lastCommitMsg: import.meta.env.VITE_GIT_LAST_MSG,
|
|
75
|
-
lastCommitHash:
|
|
76
|
-
commitURL: `https://github.com/${
|
|
77
|
-
import.meta.env.VITE_GIT_HASH
|
|
78
|
-
}`,
|
|
78
|
+
repoName,
|
|
79
|
+
owner,
|
|
80
|
+
branch,
|
|
81
|
+
lastCommitMsg: import.meta.env.VITE_GIT_LAST_MSG || '(no commits yet)',
|
|
82
|
+
lastCommitHash: hash,
|
|
83
|
+
commitURL: `https://github.com/${owner}/${repoName}/commit/${hash}`,
|
|
79
84
|
},
|
|
80
85
|
// browser_exclude: import.meta.env.VITE_BROWSER_EXCLUDE,
|
|
81
86
|
allowRepeats: import.meta.env.VITE_ALLOW_REPEATS === 'true',
|
|
@@ -87,6 +92,8 @@ export default {
|
|
|
87
92
|
deployURL: import.meta.env.VITE_DEPLOY_URL, // auto compute this
|
|
88
93
|
labURL: import.meta.env.VITE_LAB_URL,
|
|
89
94
|
brandLogoFn: import.meta.env.VITE_BRAND_LOGO_FN,
|
|
95
|
+
advertisementImageFn: '/_smile/images/helpus.png',
|
|
96
|
+
advertisementImageInvertDark: false,
|
|
90
97
|
colorMode: import.meta.env.VITE_COLOR_MODE, // 'light' or 'dark' or 'system'
|
|
91
98
|
responsiveUI: import.meta.env.VITE_RESPONSIVE_UI === 'true',
|
|
92
99
|
googleAnalyticsID: import.meta.env.VITE_GOOGLE_ANALYTICS,
|
|
@@ -94,19 +101,6 @@ export default {
|
|
|
94
101
|
windowsizerAggressive: import.meta.env.VITE_WINDOWSIZER_AGGRESSIVE === 'true',
|
|
95
102
|
anonymousMode: import.meta.env.VITE_ANONYMOUS_MODE === 'true',
|
|
96
103
|
unpaidStudy: import.meta.env.VITE_UNPAID_STUDY === 'true',
|
|
97
|
-
sona: {
|
|
98
|
-
url: import.meta.env.VITE_SONA_URL,
|
|
99
|
-
experimentId: import.meta.env.VITE_SONA_EXPERIMENT_ID,
|
|
100
|
-
creditToken: import.meta.env.VITE_SONA_CREDIT_TOKEN,
|
|
101
|
-
},
|
|
102
|
-
sonaPaid: {
|
|
103
|
-
url: import.meta.env.VITE_SONA_PAID_URL,
|
|
104
|
-
experimentId: import.meta.env.VITE_SONA_PAID_EXPERIMENT_ID,
|
|
105
|
-
creditToken: import.meta.env.VITE_SONA_PAID_CREDIT_TOKEN,
|
|
106
|
-
},
|
|
107
|
-
spark: {
|
|
108
|
-
completionUrl: 'https://spark.hartleylab.org/completed',
|
|
109
|
-
},
|
|
110
104
|
firebaseConfig: {
|
|
111
105
|
apiKey: import.meta.env.VITE_FIREBASE_APIKEY,
|
|
112
106
|
authDomain: import.meta.env.VITE_FIREBASE_AUTHDOMAIN,
|
|
@@ -32,6 +32,7 @@ export class Stepper extends StepState {
|
|
|
32
32
|
_shuffled: boolean;
|
|
33
33
|
_onModify: Function | null;
|
|
34
34
|
_needsWrite: boolean;
|
|
35
|
+
_componentRegistry: Map<any, any>;
|
|
35
36
|
/**
|
|
36
37
|
* Sets a callback to be called when the stepper is modified
|
|
37
38
|
* @param {Function} callback - The callback function to call on modification
|
|
@@ -42,6 +43,14 @@ export class Stepper extends StepState {
|
|
|
42
43
|
* @private
|
|
43
44
|
*/
|
|
44
45
|
private _markForWrite;
|
|
46
|
+
/**
|
|
47
|
+
* Scans an item's data for Vue component references and registers them
|
|
48
|
+
* in the component registry. This ensures components can be resolved
|
|
49
|
+
* after deserialization even when the item itself is skipped as a duplicate.
|
|
50
|
+
* @private
|
|
51
|
+
* @param {object} item - The item data to scan
|
|
52
|
+
*/
|
|
53
|
+
private _registerComponentsFromData;
|
|
45
54
|
/**
|
|
46
55
|
* Creates a new state instance. Overridden to return Stepper instances.
|
|
47
56
|
* @protected
|
|
@@ -51,18 +60,12 @@ export class Stepper extends StepState {
|
|
|
51
60
|
*/
|
|
52
61
|
protected _createNew(id: any, parent: StepState): Stepper;
|
|
53
62
|
/**
|
|
54
|
-
*
|
|
63
|
+
* Creates a reusable duplicate checker that builds the existing path/data
|
|
64
|
+
* sets once and updates them incrementally as items are accepted.
|
|
55
65
|
* @private
|
|
56
|
-
* @
|
|
57
|
-
* @param {string} [items[].id] - Optional path property on each item
|
|
58
|
-
* @returns {boolean} True if any items would create duplicate paths, false otherwise
|
|
59
|
-
* @description
|
|
60
|
-
* This method checks for duplicates in two ways:
|
|
61
|
-
* 1. Checks for duplicate paths among the input items themselves
|
|
62
|
-
* 2. Checks if any new items would create paths that already exist in the tree
|
|
63
|
-
* 3. Checks if any new items have the same data content as existing items
|
|
66
|
+
* @returns {{ isDuplicate: (item: object) => boolean }} Object with an isDuplicate method
|
|
64
67
|
*/
|
|
65
|
-
private
|
|
68
|
+
private _buildDuplicateChecker;
|
|
66
69
|
/**
|
|
67
70
|
* Creates a new state and assigns data to it
|
|
68
71
|
* @private
|
|
@@ -3,9 +3,7 @@ import config from '../config.js'
|
|
|
3
3
|
import { StepperSerializer } from './StepperSerializer.js'
|
|
4
4
|
import StepperProxy from './StepperProxy.js'
|
|
5
5
|
import useLog from '../../stores/log.js'
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
const seedrandom = _seedrandom.default || _seedrandom
|
|
6
|
+
import seedrandom from 'seedrandom'
|
|
9
7
|
|
|
10
8
|
// to be implemented functions
|
|
11
9
|
|
|
@@ -52,6 +50,7 @@ export class Stepper extends StepState {
|
|
|
52
50
|
this._shuffled = false // Add shuffled property
|
|
53
51
|
this._onModify = null // Add callback property
|
|
54
52
|
this._needsWrite = false // Track if we need to write
|
|
53
|
+
this._componentRegistry = new Map() // Registry for Vue components encountered in step data
|
|
55
54
|
|
|
56
55
|
// If serialized state is provided, load it
|
|
57
56
|
if (serializedState !== null) {
|
|
@@ -81,6 +80,22 @@ export class Stepper extends StepState {
|
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Scans an item's data for Vue component references and registers them
|
|
85
|
+
* in the component registry. This ensures components can be resolved
|
|
86
|
+
* after deserialization even when the item itself is skipped as a duplicate.
|
|
87
|
+
* @private
|
|
88
|
+
* @param {object} item - The item data to scan
|
|
89
|
+
*/
|
|
90
|
+
_registerComponentsFromData(item) {
|
|
91
|
+
if (!this._componentRegistry || !item || typeof item !== 'object') return
|
|
92
|
+
for (const value of Object.values(item)) {
|
|
93
|
+
if (value && typeof value === 'object' && value.name && (value.template || value.render)) {
|
|
94
|
+
this._componentRegistry.set(value.name, value)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
84
99
|
/**
|
|
85
100
|
* Creates a new state instance. Overridden to return Stepper instances.
|
|
86
101
|
* @protected
|
|
@@ -93,61 +108,44 @@ export class Stepper extends StepState {
|
|
|
93
108
|
}
|
|
94
109
|
|
|
95
110
|
/**
|
|
96
|
-
*
|
|
111
|
+
* Creates a reusable duplicate checker that builds the existing path/data
|
|
112
|
+
* sets once and updates them incrementally as items are accepted.
|
|
97
113
|
* @private
|
|
98
|
-
* @
|
|
99
|
-
* @param {string} [items[].id] - Optional path property on each item
|
|
100
|
-
* @returns {boolean} True if any items would create duplicate paths, false otherwise
|
|
101
|
-
* @description
|
|
102
|
-
* This method checks for duplicates in two ways:
|
|
103
|
-
* 1. Checks for duplicate paths among the input items themselves
|
|
104
|
-
* 2. Checks if any new items would create paths that already exist in the tree
|
|
105
|
-
* 3. Checks if any new items have the same data content as existing items
|
|
114
|
+
* @returns {{ isDuplicate: (item: object) => boolean }} Object with an isDuplicate method
|
|
106
115
|
*/
|
|
107
|
-
|
|
108
|
-
//
|
|
109
|
-
const
|
|
116
|
+
_buildDuplicateChecker() {
|
|
117
|
+
// Build existing id set from current children (O(n) once)
|
|
118
|
+
const existingIds = new Set(this._states.map(state => state.id))
|
|
119
|
+
// Build existing data set from current children (O(n) once)
|
|
120
|
+
const existingData = new Set(this._states.map(state => JSON.stringify(state.data)))
|
|
110
121
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
return {
|
|
123
|
+
/**
|
|
124
|
+
* Checks if a single item is a duplicate, and if not, records it so
|
|
125
|
+
* subsequent calls will detect it as existing.
|
|
126
|
+
* @param {object} item - The item to check
|
|
127
|
+
* @returns {boolean} True if the item is a duplicate
|
|
128
|
+
*/
|
|
129
|
+
isDuplicate: (item) => {
|
|
130
|
+
// Check explicit id duplicates
|
|
131
|
+
if (item.id !== undefined && existingIds.has(item.id)) {
|
|
118
132
|
return true
|
|
119
133
|
}
|
|
120
|
-
seenPaths.add(item.id)
|
|
121
|
-
}
|
|
122
134
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
seenData.add(dataStr)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Get all existing paths in the tree
|
|
132
|
-
const existingPaths = this.existingPaths
|
|
133
|
-
const existingData = new Set(this._states.map(state => JSON.stringify(state.data)))
|
|
134
|
-
|
|
135
|
-
// Check if any new items would create duplicate paths with existing ones
|
|
136
|
-
return itemsToCheck.some((item) => {
|
|
137
|
-
// Create a temporary state to get its path
|
|
138
|
-
let state
|
|
139
|
-
if (item.id !== undefined) {
|
|
140
|
-
state = new Stepper({ id: item.id, parent: this })
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
state = new Stepper({ parent: this })
|
|
144
|
-
}
|
|
145
|
-
state.data = item
|
|
146
|
-
const newPath = state.pathString
|
|
135
|
+
// Check data content duplicates
|
|
136
|
+
const dataStr = JSON.stringify(item)
|
|
137
|
+
if (existingData.has(dataStr)) {
|
|
138
|
+
return true
|
|
139
|
+
}
|
|
147
140
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
141
|
+
// Not a duplicate — record it for future checks
|
|
142
|
+
if (item.id !== undefined) {
|
|
143
|
+
existingIds.add(item.id)
|
|
144
|
+
}
|
|
145
|
+
existingData.add(dataStr)
|
|
146
|
+
return false
|
|
147
|
+
},
|
|
148
|
+
}
|
|
151
149
|
}
|
|
152
150
|
|
|
153
151
|
/**
|
|
@@ -192,10 +190,18 @@ export class Stepper extends StepState {
|
|
|
192
190
|
throw new Error(`Cannot append ${itemsToAdd.length} rows as it exceeds the safety limit of ${config.maxSteps}`)
|
|
193
191
|
}
|
|
194
192
|
|
|
193
|
+
// Build duplicate checker once for the entire batch
|
|
194
|
+
const { isDuplicate } = this._buildDuplicateChecker()
|
|
195
|
+
|
|
195
196
|
// Try to add each item individually
|
|
196
197
|
itemsToAdd.forEach((item) => {
|
|
198
|
+
// Register any Vue component references from the item data so they
|
|
199
|
+
// can be resolved after deserialization (even if the item is skipped
|
|
200
|
+
// as a duplicate — the component objects are still needed for rendering)
|
|
201
|
+
this._registerComponentsFromData(item)
|
|
202
|
+
|
|
197
203
|
// Check if this specific item would create a duplicate path
|
|
198
|
-
if (
|
|
204
|
+
if (isDuplicate(item)) {
|
|
199
205
|
this._log.warn(`Warning: Skipping item that would create duplicate path`)
|
|
200
206
|
}
|
|
201
207
|
else {
|
|
@@ -260,6 +266,9 @@ export class Stepper extends StepState {
|
|
|
260
266
|
|
|
261
267
|
const outerRows = generateCombinations(processedColumns)
|
|
262
268
|
|
|
269
|
+
// Build duplicate checker once for the entire batch
|
|
270
|
+
const { isDuplicate } = this._buildDuplicateChecker()
|
|
271
|
+
|
|
263
272
|
// Try to add each combination individually
|
|
264
273
|
outerRows.forEach((row) => {
|
|
265
274
|
// If an idGenerator function is provided, use it to generate the ID
|
|
@@ -268,7 +277,7 @@ export class Stepper extends StepState {
|
|
|
268
277
|
}
|
|
269
278
|
|
|
270
279
|
// Check if this specific combination would create a duplicate path
|
|
271
|
-
if (
|
|
280
|
+
if (isDuplicate(row)) {
|
|
272
281
|
this._log.warn(`Warning: Skipping combination that would create duplicate path`)
|
|
273
282
|
}
|
|
274
283
|
else {
|
|
@@ -385,6 +394,9 @@ export class Stepper extends StepState {
|
|
|
385
394
|
return row
|
|
386
395
|
})
|
|
387
396
|
|
|
397
|
+
// Build duplicate checker once for the entire batch
|
|
398
|
+
const { isDuplicate } = this._buildDuplicateChecker()
|
|
399
|
+
|
|
388
400
|
// Try to add each combination individually
|
|
389
401
|
zippedRows.forEach((row) => {
|
|
390
402
|
// If an idGenerator function is provided, use it to generate the ID
|
|
@@ -393,7 +405,7 @@ export class Stepper extends StepState {
|
|
|
393
405
|
}
|
|
394
406
|
|
|
395
407
|
// Check if this specific combination would create a duplicate path
|
|
396
|
-
if (
|
|
408
|
+
if (isDuplicate(row)) {
|
|
397
409
|
this._log.warn(`Warning: Skipping combination that would create duplicate path`)
|
|
398
410
|
}
|
|
399
411
|
else {
|
|
@@ -467,6 +479,9 @@ export class Stepper extends StepState {
|
|
|
467
479
|
* @returns {Stepper} The current instance for chaining
|
|
468
480
|
*/
|
|
469
481
|
forEach(callback) {
|
|
482
|
+
// Build duplicate checker once for the entire forEach pass
|
|
483
|
+
const { isDuplicate } = this._buildDuplicateChecker()
|
|
484
|
+
|
|
470
485
|
this._states.forEach((item, index) => {
|
|
471
486
|
// Call the callback and check if it returns a new value
|
|
472
487
|
const result = callback(item, index)
|
|
@@ -493,7 +508,7 @@ export class Stepper extends StepState {
|
|
|
493
508
|
})
|
|
494
509
|
|
|
495
510
|
// Check for duplicate paths before updating
|
|
496
|
-
if (
|
|
511
|
+
if (isDuplicate(newData)) {
|
|
497
512
|
throw new Error('Cannot update item: would create duplicate paths')
|
|
498
513
|
}
|
|
499
514
|
|
|
@@ -38,11 +38,21 @@ export class StepperSerializer {
|
|
|
38
38
|
// Extract the faker function name and parameters
|
|
39
39
|
const match = funcStr.match(/api\.faker\.(\w+)\((.*)\)/)
|
|
40
40
|
if (match) {
|
|
41
|
-
const [, fakerName,
|
|
41
|
+
const [, fakerName, paramsStr] = match
|
|
42
|
+
let params
|
|
43
|
+
try {
|
|
44
|
+
// Parse params preserving types (numbers, arrays, strings)
|
|
45
|
+
const jsonStr = '[' + paramsStr.replace(/'/g, '"') + ']'
|
|
46
|
+
params = JSON.parse(jsonStr)
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Fallback to string splitting for unparseable params
|
|
50
|
+
params = paramsStr.split(',').map(p => p.trim())
|
|
51
|
+
}
|
|
42
52
|
cleaned[key] = {
|
|
43
53
|
__fakerFunction: true,
|
|
44
54
|
name: fakerName,
|
|
45
|
-
params
|
|
55
|
+
params,
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
58
|
}
|
|
@@ -50,8 +60,21 @@ export class StepperSerializer {
|
|
|
50
60
|
continue
|
|
51
61
|
}
|
|
52
62
|
|
|
53
|
-
//
|
|
63
|
+
// Preserve existing __vueComponent markers (from previous serialization round-trips)
|
|
64
|
+
if (value && typeof value === 'object' && value.__vueComponent && value.componentName) {
|
|
65
|
+
cleaned[key] = {
|
|
66
|
+
__vueComponent: true,
|
|
67
|
+
componentName: value.componentName,
|
|
68
|
+
}
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Check if it's a Vue component (has name + template or render function)
|
|
54
73
|
if (value && typeof value === 'object' && value.name && (value.template || value.render)) {
|
|
74
|
+
// Register the component so it can be resolved during deserialization
|
|
75
|
+
if (Stepper._componentRegistry) {
|
|
76
|
+
Stepper._componentRegistry.set(value.name, value)
|
|
77
|
+
}
|
|
55
78
|
cleaned[key] = {
|
|
56
79
|
__vueComponent: true,
|
|
57
80
|
componentName: value.name,
|
|
@@ -61,6 +84,9 @@ export class StepperSerializer {
|
|
|
61
84
|
|
|
62
85
|
// Handle data objects that might contain component references
|
|
63
86
|
if (key === 'type' && value?.name && (value.template || value.render)) {
|
|
87
|
+
if (Stepper._componentRegistry) {
|
|
88
|
+
Stepper._componentRegistry.set(value.name, value)
|
|
89
|
+
}
|
|
64
90
|
cleaned[key] = {
|
|
65
91
|
__vueComponent: true,
|
|
66
92
|
componentName: value.name,
|
|
@@ -194,24 +220,16 @@ export class StepperSerializer {
|
|
|
194
220
|
console.warn(`Faker function ${value.name} not found during reconstruction`)
|
|
195
221
|
return null
|
|
196
222
|
}
|
|
197
|
-
|
|
198
|
-
const convertedParams = value.params.map((param) => {
|
|
199
|
-
// Convert empty string to undefined
|
|
200
|
-
if (param === '') return undefined
|
|
201
|
-
// Try to convert to number if it looks like a number
|
|
202
|
-
const num = Number(param)
|
|
203
|
-
return Number.isNaN(num) ? param : num
|
|
204
|
-
})
|
|
205
|
-
return fakerFunc(...convertedParams)
|
|
223
|
+
return fakerFunc(...value.params).val
|
|
206
224
|
}
|
|
207
225
|
continue
|
|
208
226
|
}
|
|
209
227
|
|
|
210
|
-
// Handle Vue components
|
|
228
|
+
// Handle Vue components — preserve the serialized format
|
|
211
229
|
if (value.__vueComponent) {
|
|
212
230
|
reconstructed[key] = {
|
|
213
|
-
name: value.componentName,
|
|
214
231
|
__vueComponent: true,
|
|
232
|
+
componentName: value.componentName,
|
|
215
233
|
}
|
|
216
234
|
continue
|
|
217
235
|
}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
* @module timeline
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import _ from 'lodash'
|
|
7
7
|
|
|
8
|
-
const _ = _lodash.default || _lodash
|
|
9
8
|
// NOTE: RecruitmentChooser and PresentationMode views are handled via
|
|
10
9
|
// route-based modes (/dev/, /presentation/) in Nuxt, not registered here.
|
|
11
10
|
// See runtime/pages/dev/ and runtime/pages/presentation/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");@import "tailwindcss";@import "tw-animate-css";@import "./smile.css";@source "../components/**/*.vue";@source "../components/**/*.js";@source "../layouts/**/*.vue";@source "../lib/**/*.js";@source "../pages/**/*.vue";@custom-variant dark (&:is(.dark *));@theme inline{--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-chart-1:var(--chart-1);--color-chart-2:var(--chart-2);--color-chart-3:var(--chart-3);--color-chart-4:var(--chart-4);--color-chart-5:var(--chart-5);--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-primary:var(--sidebar-primary);--color-sidebar-primary-foreground:var(--sidebar-primary-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring);--color-primary-button:var(--primary-button);--color-primary-button-foreground:var(--primary-button-foreground);--color-primary-button-light:var(--primary-button-light);--color-primary-button-light-foreground:var(--primary-button-light-foreground);--color-link-button:var(--link-button);--color-link-button-foreground:var(--link-button-foreground);--color-link-button-light:var(--link-button-light);--color-link-button-light-foreground:var(--link-button-light-foreground);--color-info-button:var(--info-button);--color-info-button-foreground:var(--info-button-foreground);--color-info-button-light:var(--info-button-light);--color-info-button-light-foreground:var(--info-button-light-foreground);--color-success-button:var(--success-button);--color-success-button-foreground:var(--success-button-foreground);--color-success-button-light:var(--success-button-light);--color-success-button-light-foreground:var(--success-button-light-foreground);--color-warning-button:var(--warning-button);--color-warning-button-foreground:var(--warning-button-foreground);--color-warning-button-light:var(--warning-button-light);--color-warning-button-light-foreground:var(--warning-button-light-foreground);--color-danger-button:var(--danger-button);--color-danger-button-foreground:var(--danger-button-foreground);--color-danger-button-light:var(--danger-button-light);--color-danger-button-light-foreground:var(--danger-button-light-foreground);--color-window-sizer-bg:var(--window-sizer-bg);--color-window-sizer-text:var(--window-sizer-text);--color-window-sizer-border:var(--window-sizer-border);--color-window-sizer-input:var(--window-sizer-input);--color-window-sizer-ring:var(--window-sizer-ring);--color-withdraw-bg:var(--withdraw-bg);--color-withdraw-text:var(--withdraw-text);--color-withdraw-border:var(--withdraw-border);--color-withdraw-ring:var(--withdraw-ring);--color-warning-bg:var(--warning-bg);--color-warning-text:var(--warning-text);--color-warning-border:var(--warning-border);--color-warning-ring:var(--warning-ring);--dev-bar-bg:var(--dev-bg);--dev-bar-text:var(--dev-text);--dev-bar-lines:var(--dev-lines);--page-bg-color:var(--background);--page-text-color:var(--foreground)}:root{--font-family-base:"Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-mono:ui-monospace,"Menlo","Monaco","Consolas","Liberation Mono","Courier New",monospace;font-optical-sizing:auto}.light,:root{--background:oklch(1 0 0);--foreground:oklch(0.141 0.005 285.823);--card:oklch(1 0 0);--card-foreground:oklch(0.141 0.005 285.823);--popover:oklch(1 0 0);--popover-foreground:oklch(0.141 0.005 285.823);--primary:oklch(0.21 0.006 285.885);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(0.967 0.001 286.375);--secondary-foreground:oklch(0.21 0.006 285.885);--muted:oklch(0.967 0.001 286.375);--muted-foreground:oklch(0.552 0.016 285.938);--accent:oklch(0.967 0.001 286.375);--accent-foreground:oklch(0.21 0.006 285.885);--destructive:oklch(0.577 0.245 27.325);--destructive-foreground:oklch(0.577 0.245 27.325);--border:oklch(0.92 0.004 286.32);--input:oklch(0.92 0.004 286.32);--ring:oklch(0.705 0.015 286.067);--chart-1:oklch(0.646 0.222 41.116);--chart-2:oklch(0.6 0.118 184.704);--chart-3:oklch(0.398 0.07 227.392);--chart-4:oklch(0.828 0.189 84.429);--chart-5:oklch(0.769 0.188 70.08);--radius:0.625rem;--sidebar:oklch(0.985 0 0);--sidebar-2:oklch(0.947 0 0);--sidebar-foreground:oklch(0.141 0.005 285.823);--sidebar-primary:oklch(0.21 0.006 285.885);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.967 0.001 286.375);--sidebar-accent-foreground:oklch(0.21 0.006 285.885);--sidebar-border:oklch(0.92 0.004 286.32);--sidebar-ring:oklch(0.705 0.015 286.067);--primary-button:oklch(0.396 0.141 264.376);--primary-button-foreground:oklch(0.985 0 0);--primary-button-light:oklch(0.85 0.05 264.376);--primary-button-light-foreground:oklch(0.396 0.141 264.376);--link-button:oklch(0.396 0.141 264.376);--link-button-foreground:oklch(0.396 0.141 264.376);--link-button-light:oklch(0.85 0.05 264.376);--link-button-light-foreground:oklch(0.396 0.141 264.376);--info-button:oklch(0.5 0.2 220);--info-button-foreground:oklch(0.985 0 0);--info-button-light:oklch(0.85 0.08 220);--info-button-light-foreground:oklch(0.5 0.2 220);--success-button:oklch(0.7 0.18 142);--success-button-foreground:oklch(0.985 0 0);--success-button-light:oklch(0.85 0.07 142);--success-button-light-foreground:oklch(0.5 0.18 142);--warning-button:oklch(0.7 0.2 70);--warning-button-foreground:oklch(0.141 0.005 285.823);--warning-button-light:oklch(0.9 0.08 70);--warning-button-light-foreground:oklch(0.7 0.2 70);--danger-button:oklch(0.577 0.245 27.325);--danger-button-foreground:oklch(0.985 0 0);--danger-button-light:oklch(0.85 0.1 27.325);--danger-button-light-foreground:oklch(0.577 0.245 27.325);--window-sizer-bg:#c2e9f4;--window-sizer-text:#025a72;--window-sizer-border:#0f96bb;--window-sizer-ring:#0f96bb;--withdraw-bg:#f8d7da;--withdraw-text:#721c24;--withdraw-border:#f5c6cb;--withdraw-ring:#f1aeb5;--warning-bg:#fff3cd;--warning-text:#856404;--warning-border:#ffeeba;--warning-ring:#ffe8a1;--dev-bg:var(--sidebar);--dev-bg-contrast:var(--sidebar-2);--dev-text:#141414;--dev-lines:0.01em solid #b5b5b5;--dev-contrast-text:#4d4d4d;--pinned-route:#ffd050;--hover-table-row:var(--muted);--log-yellow:oklch(0.985 0 0);--log-red:oklch(0.985 0 0);--log-green:oklch(0.985 0 0);--scrollbar-track:#f1f1f1;--scrollbar-thumb:#c1c1c1;--scrollbar-thumb-hover:#a8a8a8}.dark{--background:oklch(0.141 0.005 285.823);--foreground:oklch(0.985 0 0);--card:oklch(0.261 0.005 285.823);--card-foreground:oklch(0.985 0 0);--popover:oklch(0.141 0.005 285.823);--popover-foreground:oklch(0.985 0 0);--primary:oklch(0.985 0 0);--primary-foreground:oklch(0.21 0.006 285.885);--secondary:oklch(0.274 0.006 286.033);--secondary-foreground:oklch(0.985 0 0);--muted:oklch(0.274 0.006 286.033);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(0.274 0.006 286.033);--accent-foreground:oklch(0.985 0 0);--destructive:oklch(0.396 0.141 25.723);--destructive-foreground:oklch(0.637 0.237 25.331);--border:oklch(0.274 0.006 286.033);--input:oklch(0.374 0.006 286.033);--ring:oklch(0.442 0.017 285.786);--chart-1:oklch(0.488 0.243 264.376);--chart-2:oklch(0.696 0.17 162.48);--chart-3:oklch(0.769 0.188 70.08);--chart-4:oklch(0.627 0.265 303.9);--chart-5:oklch(0.645 0.246 16.439);--sidebar:oklch(0.21 0.006 285.885);--sidebar-2:oklch(0.31 0.006 285.885);--sidebar-foreground:oklch(0.985 0 0);--sidebar-primary:oklch(0.574 0.006 286.033);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.274 0.006 286.033);--sidebar-accent-foreground:oklch(0.985 0 0);--sidebar-border:oklch(0.574 0.006 286.033);--sidebar-ring:oklch(0.442 0.017 285.786);--primary-button:oklch(0.488 0.243 264.376);--primary-button-foreground:oklch(0.985 0 0);--primary-button-light:oklch(0.3 0.1 264.376);--primary-button-light-foreground:oklch(0.8 0.15 264.376);--link-button:oklch(0.488 0.243 264.376);--link-button-foreground:oklch(0.488 0.243 264.376);--link-button-light:oklch(0.3 0.1 264.376);--link-button-light-foreground:oklch(0.8 0.15 264.376);--info-button:oklch(0.6 0.25 220);--info-button-foreground:oklch(0.985 0 0);--info-button-light:oklch(0.3 0.12 220);--info-button-light-foreground:oklch(0.75 0.2 220);--success-button:oklch(0.7 0.22 142);--success-button-foreground:oklch(0.985 0 0);--success-button-light:oklch(0.3 0.1 142);--success-button-light-foreground:oklch(0.75 0.18 142);--warning-button:oklch(0.8 0.25 70);--warning-button-foreground:oklch(0.141 0.005 285.823);--warning-button-light:oklch(0.35 0.12 70);--warning-button-light-foreground:oklch(0.85 0.2 70);--danger-button:oklch(0.6 0.25 27.325);--danger-button-foreground:oklch(0.985 0 0);--danger-button-light:oklch(0.3 0.12 27.325);--danger-button-light-foreground:oklch(0.8 0.2 27.325);--window-sizer-bg:#5c818c;--window-sizer-text:#174957;--window-sizer-border:#3c575f;--window-sizer-ring:#0f96bb;--withdraw-bg:#f8d7da;--withdraw-text:#721c24;--withdraw-border:#f5c6cb;--withdraw-ring:#f1aeb5;--warning-bg:#fff3cd;--warning-text:#856404;--warning-border:#ffeeba;--warning-ring:#ffe8a1;--dev-bg:var(--sidebar);--dev-bg-contrast:var(--sidebar-2);--dev-text:#cecece;--dev-lines:0.01em solid #b5b5b5;--dev-contrast-text:#4d4d4d;--pinned-route:#ffd050;--hover-table-row:var(--muted);--log-yellow:#adaa5b;--log-red:#976464;--log-green:#6c9659;--scrollbar-track:#2a2a2a;--scrollbar-thumb:#555;--scrollbar-thumb-hover:#777}.dark-aware-img{filter:invert(0)}.dark .dark-aware-img{filter:invert(1)}.dark .light .dark-aware-img{filter:invert(0)!important}.light .dark .dark-aware-img{filter:invert(1)!important}@layer base{*{@apply border-border outline-ring/50}body{@apply bg-background text-foreground;font-family:var(--font-family-base);font-synthesis:auto;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:var(--scrollbar-track);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}::-webkit-scrollbar-corner{background:var(--scrollbar-track)}*{scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);scrollbar-width:thin}
|
|
1
|
+
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");@import "tailwindcss";@import "tw-animate-css";@import "./smile.css";@source "../components/**/*.vue";@source "../components/**/*.js";@source "../layouts/**/*.vue";@source "../lib/**/*.js";@source "../pages/**/*.vue";@custom-variant dark (&:is(.dark *));@theme inline{--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-chart-1:var(--chart-1);--color-chart-2:var(--chart-2);--color-chart-3:var(--chart-3);--color-chart-4:var(--chart-4);--color-chart-5:var(--chart-5);--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-primary:var(--sidebar-primary);--color-sidebar-primary-foreground:var(--sidebar-primary-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring);--color-primary-button:var(--primary-button);--color-primary-button-foreground:var(--primary-button-foreground);--color-primary-button-light:var(--primary-button-light);--color-primary-button-light-foreground:var(--primary-button-light-foreground);--color-link-button:var(--link-button);--color-link-button-foreground:var(--link-button-foreground);--color-link-button-light:var(--link-button-light);--color-link-button-light-foreground:var(--link-button-light-foreground);--color-info-button:var(--info-button);--color-info-button-foreground:var(--info-button-foreground);--color-info-button-light:var(--info-button-light);--color-info-button-light-foreground:var(--info-button-light-foreground);--color-success-button:var(--success-button);--color-success-button-foreground:var(--success-button-foreground);--color-success-button-light:var(--success-button-light);--color-success-button-light-foreground:var(--success-button-light-foreground);--color-warning-button:var(--warning-button);--color-warning-button-foreground:var(--warning-button-foreground);--color-warning-button-light:var(--warning-button-light);--color-warning-button-light-foreground:var(--warning-button-light-foreground);--color-danger-button:var(--danger-button);--color-danger-button-foreground:var(--danger-button-foreground);--color-danger-button-light:var(--danger-button-light);--color-danger-button-light-foreground:var(--danger-button-light-foreground);--color-window-sizer-bg:var(--window-sizer-bg);--color-window-sizer-text:var(--window-sizer-text);--color-window-sizer-border:var(--window-sizer-border);--color-window-sizer-input:var(--window-sizer-input);--color-window-sizer-ring:var(--window-sizer-ring);--color-withdraw-bg:var(--withdraw-bg);--color-withdraw-text:var(--withdraw-text);--color-withdraw-border:var(--withdraw-border);--color-withdraw-ring:var(--withdraw-ring);--color-warning-bg:var(--warning-bg);--color-warning-text:var(--warning-text);--color-warning-border:var(--warning-border);--color-warning-ring:var(--warning-ring);--dev-bar-bg:var(--dev-bg);--dev-bar-text:var(--dev-text);--dev-bar-lines:var(--dev-lines);--color-dev-lines:var(--dev-lines);--color-dev-text:var(--dev-text);--color-dev-bg:var(--dev-bg);--color-dev-bg-contrast:var(--dev-bg-contrast);--color-status-green-bg:var(--status-green-bg);--color-status-green-text:var(--status-green-text);--color-status-green-fill:var(--status-green-fill);--color-status-yellow-bg:var(--status-yellow-bg);--color-status-yellow-text:var(--status-yellow-text);--color-status-yellow-fill:var(--status-yellow-fill);--color-status-red-text:var(--status-red-text);--page-bg-color:var(--background);--page-text-color:var(--foreground)}:root{--font-family-base:"Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-mono:ui-monospace,"Menlo","Monaco","Consolas","Liberation Mono","Courier New",monospace;font-optical-sizing:auto}.light,:root{--background:oklch(1 0 0);--foreground:oklch(0.141 0.005 285.823);--card:oklch(1 0 0);--card-foreground:oklch(0.141 0.005 285.823);--popover:oklch(1 0 0);--popover-foreground:oklch(0.141 0.005 285.823);--primary:oklch(0.21 0.006 285.885);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(0.967 0.001 286.375);--secondary-foreground:oklch(0.21 0.006 285.885);--muted:oklch(0.967 0.001 286.375);--muted-foreground:oklch(0.552 0.016 285.938);--accent:oklch(0.967 0.001 286.375);--accent-foreground:oklch(0.21 0.006 285.885);--destructive:oklch(0.577 0.245 27.325);--destructive-foreground:oklch(0.577 0.245 27.325);--border:oklch(0.92 0.004 286.32);--input:oklch(0.92 0.004 286.32);--ring:oklch(0.705 0.015 286.067);--chart-1:oklch(0.646 0.222 41.116);--chart-2:oklch(0.6 0.118 184.704);--chart-3:oklch(0.398 0.07 227.392);--chart-4:oklch(0.828 0.189 84.429);--chart-5:oklch(0.769 0.188 70.08);--radius:0.625rem;--sidebar:oklch(0.985 0 0);--sidebar-2:oklch(0.947 0 0);--sidebar-foreground:oklch(0.141 0.005 285.823);--sidebar-primary:oklch(0.21 0.006 285.885);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.967 0.001 286.375);--sidebar-accent-foreground:oklch(0.21 0.006 285.885);--sidebar-border:oklch(0.92 0.004 286.32);--sidebar-ring:oklch(0.705 0.015 286.067);--primary-button:oklch(0.396 0.141 264.376);--primary-button-foreground:oklch(0.985 0 0);--primary-button-light:oklch(0.85 0.05 264.376);--primary-button-light-foreground:oklch(0.396 0.141 264.376);--link-button:oklch(0.58 0.12 195);--link-button-foreground:oklch(0.58 0.12 195);--link-button-light:oklch(0.85 0.05 264.376);--link-button-light-foreground:oklch(0.396 0.141 264.376);--info-button:oklch(0.5 0.2 220);--info-button-foreground:oklch(0.985 0 0);--info-button-light:oklch(0.85 0.08 220);--info-button-light-foreground:oklch(0.5 0.2 220);--success-button:oklch(0.7 0.18 142);--success-button-foreground:oklch(0.985 0 0);--success-button-light:oklch(0.85 0.07 142);--success-button-light-foreground:oklch(0.5 0.18 142);--warning-button:oklch(0.7 0.2 70);--warning-button-foreground:oklch(0.141 0.005 285.823);--warning-button-light:oklch(0.9 0.08 70);--warning-button-light-foreground:oklch(0.7 0.2 70);--danger-button:oklch(0.577 0.245 27.325);--danger-button-foreground:oklch(0.985 0 0);--danger-button-light:oklch(0.85 0.1 27.325);--danger-button-light-foreground:oklch(0.577 0.245 27.325);--window-sizer-bg:#c2e9f4;--window-sizer-text:#025a72;--window-sizer-border:#0f96bb;--window-sizer-ring:#0f96bb;--withdraw-bg:#f8d7da;--withdraw-text:#721c24;--withdraw-border:#f5c6cb;--withdraw-ring:#f1aeb5;--warning-bg:#fff3cd;--warning-text:#856404;--warning-border:#ffeeba;--warning-ring:#ffe8a1;--dev-bg:var(--sidebar);--dev-bg-contrast:var(--sidebar-2);--dev-text:#141414;--dev-lines:var(--border);--dev-contrast-text:#4d4d4d;--pinned-route:#ffd050;--hover-table-row:var(--muted);--spinner-track:oklch(0.95 0 0);--spinner-active:var(--primary-button);--dev-banner-stripe-1:oklch(0.87 0.17 85);--dev-banner-stripe-2:oklch(0.84 0.16 85);--dev-banner-text:oklch(0.15 0 0);--dev-brand-bg:oklch(0.85 0.06 210);--dev-brand-text:var(--foreground);--status-green-bg:oklch(0.93 0.06 175);--status-green-text:oklch(0.55 0.12 175);--status-green-fill:oklch(0.65 0.12 175);--status-yellow-bg:oklch(0.93 0.08 85);--status-yellow-text:oklch(0.65 0.18 70);--status-yellow-fill:oklch(0.72 0.2 70);--status-red-text:var(--destructive);--resize-handle:oklch(0.6 0 0);--resize-handle-hover:oklch(0.65 0.1 230);--data-key-color:oklch(0.6 0.15 200);--data-value-color:oklch(0.65 0.15 80);--step-path-color:oklch(0.45 0.1 175);--step-selected-bg:oklch(0.94 0.06 170);--step-selected-bg-hover:oklch(0.9 0.05 170);--step-index-color:oklch(0.65 0.15 70);--step-label-color:oklch(0.55 0.12 175);--step-leaf-color:oklch(0.75 0.18 142);--step-home-color:oklch(0.6 0.15 200);--error-notif-bg:oklch(0.97 0.02 25);--error-notif-bg-end:oklch(0.94 0.04 25);--error-notif-border:oklch(0.88 0.08 25);--error-notif-text:oklch(0.577 0.245 27.325);--log-yellow:oklch(0.97 0.04 85);--log-red:oklch(0.96 0.03 25);--log-green:oklch(0.96 0.03 175);--recruit-blue:oklch(0.78 0.1 220);--recruit-red:oklch(0.68 0.18 15);--recruit-yellow:oklch(0.8 0.16 80);--recruit-yellow-light:oklch(0.88 0.1 85);--recruit-pink:oklch(0.82 0.08 350);--recruit-green:oklch(0.8 0.14 160);--recruit-orange:oklch(0.8 0.12 60);--recruit-teal:oklch(0.8 0.1 185);--recruit-coral:oklch(0.75 0.12 25);--recruit-purple:oklch(0.82 0.12 310);--recruit-text:oklch(0.25 0 0);--scrollbar-track:#f1f1f1;--scrollbar-thumb:#c1c1c1;--scrollbar-thumb-hover:#a8a8a8}.dark{--background:oklch(0.141 0.005 285.823);--foreground:oklch(0.985 0 0);--card:oklch(0.261 0.005 285.823);--card-foreground:oklch(0.985 0 0);--popover:oklch(0.141 0.005 285.823);--popover-foreground:oklch(0.985 0 0);--primary:oklch(0.985 0 0);--primary-foreground:oklch(0.21 0.006 285.885);--secondary:oklch(0.274 0.006 286.033);--secondary-foreground:oklch(0.985 0 0);--muted:oklch(0.274 0.006 286.033);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(0.274 0.006 286.033);--accent-foreground:oklch(0.985 0 0);--destructive:oklch(0.396 0.141 25.723);--destructive-foreground:oklch(0.637 0.237 25.331);--border:oklch(0.274 0.006 286.033);--input:oklch(0.374 0.006 286.033);--ring:oklch(0.442 0.017 285.786);--chart-1:oklch(0.488 0.243 264.376);--chart-2:oklch(0.696 0.17 162.48);--chart-3:oklch(0.769 0.188 70.08);--chart-4:oklch(0.627 0.265 303.9);--chart-5:oklch(0.645 0.246 16.439);--sidebar:oklch(0.21 0.006 285.885);--sidebar-2:oklch(0.31 0.006 285.885);--sidebar-foreground:oklch(0.985 0 0);--sidebar-primary:oklch(0.574 0.006 286.033);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.274 0.006 286.033);--sidebar-accent-foreground:oklch(0.985 0 0);--sidebar-border:oklch(0.574 0.006 286.033);--sidebar-ring:oklch(0.442 0.017 285.786);--primary-button:oklch(0.65 0.15 200);--primary-button-foreground:oklch(0.985 0 0);--primary-button-light:oklch(0.3 0.1 200);--primary-button-light-foreground:oklch(0.8 0.15 200);--link-button:oklch(0.7 0.15 195);--link-button-foreground:oklch(0.7 0.15 195);--link-button-light:oklch(0.3 0.1 264.376);--link-button-light-foreground:oklch(0.8 0.15 264.376);--info-button:oklch(0.6 0.25 220);--info-button-foreground:oklch(0.985 0 0);--info-button-light:oklch(0.3 0.12 220);--info-button-light-foreground:oklch(0.75 0.2 220);--success-button:oklch(0.7 0.22 142);--success-button-foreground:oklch(0.985 0 0);--success-button-light:oklch(0.3 0.1 142);--success-button-light-foreground:oklch(0.75 0.18 142);--warning-button:oklch(0.8 0.25 70);--warning-button-foreground:oklch(0.141 0.005 285.823);--warning-button-light:oklch(0.35 0.12 70);--warning-button-light-foreground:oklch(0.85 0.2 70);--danger-button:oklch(0.6 0.25 27.325);--danger-button-foreground:oklch(0.985 0 0);--danger-button-light:oklch(0.3 0.12 27.325);--danger-button-light-foreground:oklch(0.8 0.2 27.325);--window-sizer-bg:#5c818c;--window-sizer-text:#174957;--window-sizer-border:#3c575f;--window-sizer-ring:#0f96bb;--withdraw-bg:#f8d7da;--withdraw-text:#721c24;--withdraw-border:#f5c6cb;--withdraw-ring:#f1aeb5;--warning-bg:#fff3cd;--warning-text:#856404;--warning-border:#ffeeba;--warning-ring:#ffe8a1;--dev-bg:var(--sidebar);--dev-bg-contrast:var(--sidebar-2);--dev-text:#cecece;--dev-lines:oklch(0.32 0.005 286);--dev-contrast-text:#4d4d4d;--pinned-route:#ffd050;--hover-table-row:var(--muted);--spinner-track:oklch(0.3 0 0);--spinner-active:var(--primary-button);--dev-banner-stripe-1:oklch(0.38 0 0);--dev-banner-stripe-2:oklch(0.33 0 0);--dev-banner-text:oklch(0.82 0 0);--dev-brand-bg:oklch(0.7 0.1 142);--dev-brand-text:oklch(0.15 0 0);--status-green-bg:oklch(0.3 0.08 175);--status-green-text:oklch(0.7 0.12 175);--status-green-fill:oklch(0.65 0.12 175);--status-yellow-bg:oklch(0.35 0.1 70);--status-yellow-text:oklch(0.8 0.2 70);--status-yellow-fill:oklch(0.75 0.2 70);--status-red-text:var(--destructive-foreground);--resize-handle:oklch(0.5 0 0);--resize-handle-hover:oklch(0.6 0.1 230);--data-key-color:oklch(0.7 0.15 200);--data-value-color:oklch(0.75 0.15 80);--step-path-color:oklch(0.65 0.1 175);--step-selected-bg:oklch(0.35 0.1 170);--step-selected-bg-hover:oklch(0.3 0.08 170);--step-index-color:oklch(0.75 0.15 70);--step-label-color:oklch(0.65 0.12 175);--step-leaf-color:oklch(0.7 0.18 142);--step-home-color:oklch(0.7 0.15 200);--error-notif-bg:oklch(0.25 0.06 25);--error-notif-bg-end:oklch(0.22 0.08 25);--error-notif-border:oklch(0.35 0.1 25);--error-notif-text:oklch(0.637 0.237 25.331);--log-yellow:oklch(0.25 0.04 85);--log-red:oklch(0.25 0.04 25);--log-green:oklch(0.22 0.03 175);--recruit-blue:oklch(0.55 0.12 220);--recruit-red:oklch(0.5 0.15 15);--recruit-yellow:oklch(0.6 0.14 80);--recruit-yellow-light:oklch(0.45 0.08 85);--recruit-pink:oklch(0.55 0.1 350);--recruit-green:oklch(0.55 0.12 160);--recruit-orange:oklch(0.55 0.1 60);--recruit-teal:oklch(0.55 0.1 185);--recruit-coral:oklch(0.5 0.1 25);--recruit-purple:oklch(0.55 0.1 310);--recruit-text:oklch(0.95 0 0);--scrollbar-track:#2a2a2a;--scrollbar-thumb:#555;--scrollbar-thumb-hover:#777}.dark-aware-img{filter:invert(0)}.dark .dark-aware-img{filter:invert(1)}.dark .light .dark-aware-img{filter:invert(0)!important}.light .dark .dark-aware-img{filter:invert(1)!important}@layer base{*{@apply border-border outline-ring/50}body{@apply bg-background text-foreground;font-family:var(--font-family-base);font-synthesis:auto;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:var(--scrollbar-track);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}::-webkit-scrollbar-corner{background:var(--scrollbar-track)}*{scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);scrollbar-width:thin}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--purple:#8a4d76;--pink:#e88f9e;--brown:#84e69c;--light-grey:#6c6c6c;--darker-grey:#323232;--beige-light:#d0d1cd;--beige-lighter:#eff0eb;--code:#040404;--code-background:#fbfbfb;--status-green:#23d160;--status-yellow:#dab830;--status-red:#ea0808;--pinned-route:#ffdd57;--dev-bar-light-grey:#f7f7f7;--dev-bar-mild-grey:#eee;--dev-bar-strong-grey:#dbdbdb;--dev-bar-text:#000;--dev-bar-lines:0.01em solid #b5b5b5;--page-bg-color:"#fff";--page-text-color:"#000";--status-bar-bg-color:"#fff";--status-bar-text-color:"#000"}.table-cell-small{font-size:.8em}.table-cell-base{padding:.5rem .85rem}.table-row-base{
|
|
1
|
+
:root{--purple:#8a4d76;--pink:#e88f9e;--brown:#84e69c;--light-grey:#6c6c6c;--darker-grey:#323232;--beige-light:#d0d1cd;--beige-lighter:#eff0eb;--code:#040404;--code-background:#fbfbfb;--status-green:#23d160;--status-yellow:#dab830;--status-red:#ea0808;--pinned-route:#ffdd57;--dev-bar-light-grey:#f7f7f7;--dev-bar-mild-grey:#eee;--dev-bar-strong-grey:#dbdbdb;--dev-bar-text:#000;--dev-bar-lines:0.01em solid #b5b5b5;--page-bg-color:"#fff";--page-text-color:"#000";--status-bar-bg-color:"#fff";--status-bar-text-color:"#000"}.table-cell-small{font-size:.8em}.table-cell-base{padding:.5rem .85rem}.table-row-base{transition:background-color .2s}.table-row-base-bottom{border-bottom:1px solid var(--dev-lines)}.table-row-odd{background-color:var(--dev-bg)}.table-row-odd:hover{background-color:var(--hover-table-row)}.table-row-even{background-color:var(--dev-bg-contrast)}.table-row-even:hover{background-color:var(--hover-table-row)}.table-cell-left{text-align:left}.table-cell-center{text-align:center}.table-cell-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace}.table-border-top{border-top:1px solid var(--border)}.table-border-bottom{border-bottom:1px solid var(--border)}
|