Conversation
remove hardcoded node size after node size refactor, fix slider labels overlapping
V4.0.0 (Schema 8 + Architect Web)
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
✅ Deploy Preview for fresco-sandbox ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
Major v4.0.0 release update introducing a new form system, schema v8 support, preview mode, multi-user capability, and a revamped drag-and-drop/dashboard UI, alongside significant refactors and infrastructure/config updates.
Changes:
- Added preview mode infrastructure (API routes, DB fields, auth toggle, preview interview flow).
- Introduced new form field system (TanStack Form contexts/hooks + many new field components).
- Reworked drag-and-drop (new
lib/dndstore/hooks/utils, plus refactors in interviewer components).
Reviewed changes
Copilot reviewed 293 out of 804 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
| lib/interviewer/components/Panels.js | Formatting simplification for panel wrapper |
| lib/interviewer/components/Panel.tsx | New TSX panel component with collapse/minimize/highlight logic |
| lib/interviewer/components/Panel.js | Removed legacy Panel implementation |
| lib/interviewer/components/NodeBin.tsx | New NodeBin using new ~/lib/dnd drop target hook |
| lib/interviewer/components/NodeBin.js | Removed legacy NodeBin drag/drop HOC implementation |
| lib/interviewer/components/Node.tsx | New memoized Node wrapper + MotionNode |
| lib/interviewer/components/Node.js | Removed legacy Node implementation |
| lib/interviewer/components/Navigation.tsx | Navigation refactor (props-driven disable state + passphrase prompt) |
| lib/interviewer/components/MultiNodeBucket.js | Removed legacy bucket component |
| lib/interviewer/components/Edge.js | Updated edge color selector wiring |
| lib/interviewer/components/DialogManager.js | Redux action import refactor |
| lib/interviewer/components/CollapsablePrompts.js | Added support for rendering children in prompts container |
| lib/interviewer/components/CategoricalItem.js | Removed legacy categorical item implementation |
| lib/interviewer/components/Canvas/NodeLayout.js | Updated updateNode API usage |
| lib/interviewer/components/Canvas/NarrativeEdgeLayout.js | Minor formatting cleanup |
| lib/interviewer/components/Canvas/LayoutNode.js | Layout node rendering tweaks (size + import ordering) |
| lib/interviewer/components/Canvas/EdgeLayout.js | Selector refactor for codebook lookup |
| lib/interviewer/components/Canvas/ConvexHulls.js | Selector import consolidation |
| lib/interviewer/components/Canvas/Canvas.js | Formatting cleanup |
| lib/interviewer/components/BackgroundImage.js | Formatting cleanup |
| lib/interviewer/behaviours/scrollable.js | Removed legacy scrollable HOC |
| lib/interviewer/behaviours/DragAndDrop/useDropMonitor.js | Removed legacy drop monitor hook |
| lib/interviewer/behaviours/DragAndDrop/store.js | Store middleware updated for unserializable drag/drop values |
| lib/interviewer/behaviours/DragAndDrop/reducer.js | Action type constants changed from Symbols to strings |
| lib/interviewer/behaviours/DragAndDrop/index.js | Export surface adjusted |
| lib/interviewer/behaviours/DragAndDrop/MonitorDropTarget.js | Removed legacy monitor HOC |
| lib/interviewer/behaviours/DragAndDrop/MonitorDragSource.js | Removed legacy monitor HOC |
| lib/interviewer/behaviours/DragAndDrop/Monitor.js | Removed legacy monitor base |
| lib/interviewer/behaviours/DragAndDrop/DropTarget.js | Import cleanup |
| lib/interviewer/behaviours/DragAndDrop/DropObstacle.js | Formatting + minor simplifications |
| lib/interviewer/behaviours/DragAndDrop/DragSource.js | Defaults added for handler props |
| lib/interviewer/behaviours/DragAndDrop/DragPreview.js | Removed eslint disable header (left blank line) |
| lib/interviewer/behaviours/AssetMetaProvider.js | Selector import/path refactor |
| lib/form/utils/scrollToFirstError.ts | Added helper to scroll to first form error |
| lib/form/utils/formContexts.ts | Added TanStack Form contexts |
| lib/form/types.ts | Added core form typing layer |
| lib/form/hooks/useTanStackForm.ts | Added TanStack Form hook wrapper |
| lib/form/components/fields/utils/options.js | Added option normalization helpers |
| lib/form/components/fields/VisualAnalogScale.js | Added VAS wrapper field |
| lib/form/components/fields/ToggleButton.tsx | Added ToggleButton field |
| lib/form/components/fields/Toggle.tsx | Added Toggle field |
| lib/form/components/fields/TextArea.tsx | Added TextArea field |
| lib/form/components/fields/Slider/index.js | Added Slider barrel export |
| lib/form/components/fields/Slider/Track.js | Added slider Track component |
| lib/form/components/fields/Slider/Tick.js | Added slider Tick component |
| lib/form/components/fields/Slider/Field.js | Added Slider field wrapper |
| lib/form/components/fields/Search.tsx | Added Search field wrapper |
| lib/form/components/fields/RelativeDatePicker.js | Added relative date picker wrapper |
| lib/form/components/fields/Radio.tsx | Added Radio field |
| lib/form/components/fields/MarkdownLabel.js | Added markdown label wrapper |
| lib/form/components/fields/Markdown.js | Added markdown renderer with sanitize/raw support |
| lib/form/components/fields/LikertScale.js | Added Likert scale wrapper |
| lib/form/components/fields/FieldSkeleton.tsx | Added skeleton for loading states |
| lib/form/components/fields/DatePicker/index.js | Added DatePicker barrel export |
| lib/form/components/fields/DatePicker/helpers.js | Added DatePicker helper utilities |
| lib/form/components/fields/DatePicker/Panels.js | Added DatePicker animated panels container |
| lib/form/components/fields/DatePicker/Panel.js | Added DatePicker animated panel |
| lib/form/components/fields/DatePicker/Field.js | Added DatePicker field wrapper |
| lib/form/components/fields/DatePicker/DatePicker/helpers.js | Added DatePicker internal helpers |
| lib/form/components/fields/DatePicker/DatePicker/Years.js | Added years range supplier |
| lib/form/components/fields/DatePicker/DatePicker/Months.js | Added months range supplier |
| lib/form/components/fields/DatePicker/DatePicker/Days.js | Added days range supplier |
| lib/form/components/fields/DatePicker/DatePicker/DatePickerContext.js | Added DatePicker context |
| lib/form/components/fields/DatePicker/DatePicker/Date.js | Added DatePicker date selector helper |
| lib/form/components/fields/Checkbox.js | Added checkbox field component (redux-form style props) |
| lib/form/components/fields/Boolean.js | Added boolean field component |
| lib/dnd/utils.ts | Added DnD hit detection + raf throttle utilities |
| lib/dnd/types.ts | Added core DnD types |
| lib/dnd/index.ts | Added DnD public exports |
| lib/dnd/tests/setup.ts | Added test environment setup for DnD |
| lib/dnd/DndStoreProvider.tsx | Added Zustand-based DnD store provider + drag preview portal |
| lib/dialogs/useDialog.stories.tsx | Added story for useDialog |
| lib/dialogs/Dialog.stories.tsx | Added dialog stories |
| lib/dialogs/ControlledDialog.tsx | Added controlled dialog variant |
| lib/dialogs/ControlledDialog.stories.tsx | Added controlled dialog stories |
| lib/db/schema.prisma | Added preview + pending protocol fields, ApiToken model, asset value |
| lib/db/migrations/20251204222357_add_protocol_is_pending/migration.sql | Migration: add Protocol.isPending |
| lib/db/migrations/20251118073416_add_preview_mode_and_api_tokens/migration.sql | Migration: preview mode + ApiToken + index |
| lib/db/migrations/20250426201139_add_protocol_experiments/migration.sql | Migration: add Protocol.experiments |
| lib/db/migrations/20250122184616_add_asset_value/migration.sql | Migration: add Asset.value + join table pk changes |
| lib/cache.ts | Cache tags refactor + multi-tag revalidation + deployment keying |
| knip.json | Knip config updates + Playwright wiring |
| jsconfig.json | Added JS compilerOptions config file |
| hooks/usePortal.ts | Made usePortal client-safe for SSR + delayed mount |
| hooks/useCanvas.ts | Formatting cleanup |
| hooks/use-data-table.tsx | Updated data table types import path |
| fresco.config.ts | Added schema v8 + preview min architect version |
| env.js | Added PREVIEW_MODE env var |
| docker-compose.prod.yml | Updated prod compose env + ports + volumes |
| docker-compose.dev.yml | YAML formatting cleanup |
| components/ui/tooltip.tsx | Tailwind class ordering tweaks |
| components/ui/toaster.tsx | Tailwind class ordering tweaks |
| components/ui/toast.tsx | Fixed Heading import path |
| components/ui/table.tsx | Table container styling/layout changes |
| components/ui/switch.tsx | Tailwind class ordering tweaks |
| components/ui/separator.tsx | Quote/style normalization |
| components/ui/select.tsx | Tailwind class ordering tweaks |
| components/ui/progress.tsx | Tailwind class ordering tweaks |
| components/ui/popover.tsx | Quote/style normalization |
| components/ui/dialog.tsx | Fixed typography import paths |
| components/ui/checkbox.tsx | Tailwind class ordering tweaks |
| components/ui/card.tsx | Fixed Heading import path + class changes |
| components/ui/badge.tsx | Fixed export formatting |
| components/ui/Label.tsx | Fixed Heading import path |
| components/ui/Input.tsx | Tailwind class ordering tweaks |
| components/ui/CloseButton.tsx | Made onClick optional + class ordering |
| components/ui/Button.tsx | Updated tableHeader variant styles |
| components/ui/AlertDialog.tsx | Fixed typography import paths |
| components/ui/Alert.tsx | Fixed typography import paths |
| components/typography/Heading.tsx | Minor expression parenthesization cleanup |
| components/layout/SettingsSection.tsx | Updated Heading import path |
| components/layout/ResponsiveContainer.tsx | Added new content base size |
| components/interview/ActionButton.tsx | Added interview action button component |
| components/interview/ActionButton.stories.tsx | Added ActionButton story |
| components/data-table/data-table.tsx | Updated types import path + layout tweaks |
| components/data-table/data-table-toolbar.tsx | Updated types import path + layout tweaks |
| components/data-table/data-table-skeleton.tsx | Layout tweaks |
| components/data-table/data-table-pagination.tsx | Updated pageSizes import path |
| components/data-table/data-table-floating-bar.tsx | Minor typing + class ordering |
| components/data-table/data-table-faceted-filter.tsx | Updated Option import path + class ordering |
| components/data-table/advanced/data-table-advanced-toolbar.tsx | Updated types import path + wrapper removal |
| components/data-table/advanced/data-table-advanced-filter.tsx | Updated types import path |
| components/VersionSection.tsx | Typography import path updates + class ordering |
| components/Providers/index.tsx | Added global Providers wrapper (Motion/Radix/Dialog/Toaster) |
| components/Providers/RadixDirectionProvider.tsx | Added Radix direction provider |
| components/ProtocolImport/JobReducer.ts | Added “Migrating protocol” import status |
| components/ProtocolImport/JobCard.tsx | Typography import updates + class ordering |
| components/PreviewModeAuthSwitch.tsx | Added switch for preview auth requirement |
| components/ErrorReportNotifier.tsx | Class ordering tweaks |
| components/ErrorDetails.tsx | Import ordering + class ordering tweaks |
| components/DynamicLucideIcon.tsx | Added CMS-safe lucide icon resolver |
| components/DataTable/types.ts | Added new activity types (API token + preview mode) |
| components/DataTable/DataTable.tsx | Removed redundant wrapper border |
| components/DataTable/ColumnHeader.tsx | UI tweaks for sortable headers |
| components/CloseButton.tsx | Added new CloseButton wrapper component |
| components/BackgroundBlobs/Canvas.tsx | Tailwind conversion for sizing |
| components/BackgroundBlobs/BackgroundBlobs.tsx | Inlined RNG helpers (removed import) |
| app/not-found.tsx | Typography import path updates + class ordering |
| app/layout.tsx | Added Providers + ResponsiveContainer path change |
| app/global-error.tsx | Typography import path updates + ResponsiveContainer path change |
| app/error.tsx | Typography import path updates + ResponsiveContainer path change |
| app/dashboard/settings/loading.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/settings/_components/UpdateUploadThingToken.tsx | Switched to generic UpdateSettingsValue API |
| app/dashboard/settings/_components/UpdateInstallationId.tsx | Switched to generic UpdateSettingsValue API |
| app/dashboard/protocols/page.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/protocols/loading.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/protocols/_components/DeleteProtocolsDialog.tsx | Updated Protocol type import + improved warning copy |
| app/dashboard/participants/page.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/participants/loading.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/participants/_components/ParticipantModal.tsx | Typography import path updates |
| app/dashboard/participants/_components/ImportCSVModal.tsx | Typography import path updates + error message change |
| app/dashboard/participants/_components/ExportParticipants/ImportExportSection.tsx | Typography + ResponsiveContainer import updates |
| app/dashboard/participants/_components/ExportParticipants/GenerateParticipantURLsButton.tsx | Updated types to table client exports |
| app/dashboard/participants/_components/ExportParticipants/ExportParticipants.tsx | Added SuperJSON parsing for participants payload |
| app/dashboard/participants/_components/ExportParticipants/ExportCSVParticipantURLs.tsx | Updated types to table client exports |
| app/dashboard/participants/_components/DropzoneField.tsx | Typography import path updates |
| app/dashboard/participants/_components/DeleteParticipantsDialog.tsx | Alert variant set + improved warning copy |
| app/dashboard/page.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/loading.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/interviews/page.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/interviews/loading.tsx | Typography + ResponsiveContainer import path updates |
| app/dashboard/interviews/_components/GenerateInterviewURLs.tsx | Added SuperJSON parsing for protocols payload |
| app/dashboard/interviews/_components/ExportOptionsView.tsx | Typography import path updates |
| app/dashboard/interviews/_components/ExportInterviewsDialog.tsx | Added SuperJSON parsing for prepared export payloads |
| app/dashboard/interviews/_components/ExportCSVInterviewURLs.tsx | Updated protocol/interview types |
| app/dashboard/_components/UploadThingModal.tsx | Typography import path updates |
| app/dashboard/_components/UpdateSettingsValue.tsx | Simplified API: now uses setAppSetting by key |
| app/dashboard/_components/SummaryStatistics/SummaryStatistics.tsx | ResponsiveContainer import path updates |
| app/dashboard/_components/SummaryStatistics/StatCard.tsx | Typography import path updates |
| app/dashboard/_components/RecruitmentTestSectionServer.tsx | Typography import path updates |
| app/dashboard/_components/RecruitmentTestSection.tsx | Added SuperJSON parsing for promises |
| app/dashboard/_components/ProtocolsTable/ProtocolsTableClient.tsx | Added SuperJSON parsing + exported ProtocolWithInterviews type |
| app/dashboard/_components/ProtocolsTable/ProtocolsTable.tsx | Removed unstable_noStore usage |
| app/dashboard/_components/ProtocolsTable/Columns.tsx | Updated imports + ProtocolWithInterviews type source |
| app/dashboard/_components/ProtocolsTable/ActionsDropdown.tsx | Updated ProtocolWithInterviews type source |
| app/dashboard/_components/ProtocolUploader.tsx | Class ordering tweaks |
| app/dashboard/_components/ParticipantsTable/ParticipantsTableClient.tsx | Added SuperJSON parsing + exported ParticipantWithInterviews type |
| app/dashboard/_components/ParticipantsTable/GenerateParticipantURLButton.tsx | Updated protocol types + typography import path |
| app/dashboard/_components/ParticipantsTable/Columns.tsx | Updated protocol/participant type sources + typography import path |
| app/dashboard/_components/ParticipantsTable/ActionsDropdown.tsx | Updated participant type source |
| app/dashboard/_components/NavigationBar.tsx | Typography import path update + Image priority |
| app/dashboard/_components/InterviewsTable/InterviewsTable.tsx | Added SuperJSON parsing for interviews payload |
| app/dashboard/_components/ActivityFeed/utils.ts | Updated ActivityType type import path |
| app/dashboard/_components/ActivityFeed/SearchParams.ts | Updated filter/sort type import path |
| app/dashboard/_components/ActivityFeed/ColumnDefinition.tsx | Updated data-table types import path + minor cell render tweak |
| app/api/uploadthing/route.ts | Use derived base URL for callback, tolerate missing token |
| app/api/test/clear-cache/route.ts | Added test-only cache invalidation endpoint |
| app/api/preview/types.ts | Added preview message exchange types |
| app/api/preview/helpers.ts | Added preview mode auth helper + CORS response helpers |
| app/(interview)/preview/layout.tsx | Added preview layout with small-screen overlay |
| app/(interview)/preview/[protocolId]/route.ts | Added preview protocol gate + redirect handler |
| app/(interview)/preview/[protocolId]/interview/page.tsx | Added preview interview page (in-memory interview construction) |
| app/(interview)/layout.tsx | Added shared interview root layout with metadata + styles import |
| app/(interview)/interview/layout.tsx | Simplified interview layout (moved overlay out) |
| app/(interview)/interview/finished/page.tsx | Typography import path updates + class ordering |
| app/(interview)/interview/_components/SmallScreenOverlay.tsx | Typography import path updates |
| app/(interview)/interview/_components/ServerSync.tsx | Removed legacy client-side sync component |
| app/(interview)/interview/_components/InterviewShell.tsx | Switched to SuperJSON payload + store factory + DnD provider |
| app/(interview)/interview/[interviewId]/sync/route.ts | Added POST route to persist interview state |
| app/(interview)/interview/[interviewId]/page.tsx | Switched to SuperJSON payload + updated finished interview guard |
| app/(interview)/interview/[interviewId]/layout.tsx | Added per-session layout with small-screen overlay |
| app/(blobs)/layout.tsx | Class ordering tweaks |
| app/(blobs)/expired/page.tsx | Removed runtime redirect check + styling tweak |
| app/(blobs)/(setup)/setup/page.tsx | Class ordering tweaks |
| app/(blobs)/(setup)/layout.tsx | Forced dynamic rendering for DB-backed expiry check |
| app/(blobs)/(setup)/_components/SignInForm.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/Sidebar.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/OnboardSteps/UploadProtocol.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/OnboardSteps/ManageParticipants.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/OnboardSteps/Documentation.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/OnboardSteps/CreateAccount.tsx | Typography import path updates |
| app/(blobs)/(setup)/_components/OnboardSteps/ConnectUploadThing.tsx | Typography import path updates |
| actions/uploadThing.ts | Updated UploadThing helper import path |
| actions/reset.ts | Batch tag revalidation + UploadThing helper import path update |
| actions/protocols.ts | Protocol insert refactor (schema/typing changes) |
| actions/appSettings.ts | App setting schema refactor + centralized getStringValue |
| actions/activityFeed.ts | Updated activity types import path |
| Dockerfile | Added build arg + NODE_OPTIONS change + prisma CLI install step |
| CLAUDE.md | Documentation whitespace + “Debugging” tips section |
| .vscode/settings.json | Editor defaults + Tailwind regex tweaks |
| .vscode/launch.json | JSON formatting cleanup |
| .vscode/extensions.json | JSON formatting cleanup |
| .storybook/preview.tsx | Switched to nextjs-vite preview + Providers decorator |
| .storybook/preview.ts | Removed old preview config |
| .storybook/main.ts | Switched Storybook framework to @storybook/nextjs-vite |
| .prettierrc | Added tabWidth/useTabs options |
| .github/workflows/docker-build-pr.yml | Input to disable image optimization + renamed image |
| .github/workflows/chromatic.yml | Added Chromatic CI workflow |
| .github/dependabot.yml | Quote/style normalization |
| .github/workflows/update-snapshots.yml | Removed snapshot update workflow |
| .github/workflows/playwright.yml | Removed Playwright CI workflow |
| .eslintrc.cjs | Removed legacy ESLint config |
| .serena/memories/* | Removed Serena memory docs/ignores |
Comments suppressed due to low confidence (1)
actions/protocols.ts:1
- The function signature indicates
protocolInsertSchemais the source of truth, but the runtime validation (protocolInsertSchema.parse(input)) was removed. This allows malformed/untrusted input to reach Prisma writes (and can cause runtime exceptions or invalid DB state). Re-introduceprotocolInsertSchema.parse(input)(orsafeParsewith a clear error) and destructure from the parsed result.
'use server';
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
app/dashboard/participants/_components/ExportParticipants/ExportParticipants.tsx
Outdated
Show resolved
Hide resolved
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jthrilly <1387940+jthrilly@users.noreply.github.com>
…rtParticipants.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jthrilly <1387940+jthrilly@users.noreply.github.com>
Fix duplicate environment blocks in docker-compose.prod.yml
…-again Remove duplicate Toaster component from root layout
Resolve e2e.yml conflicts: keep Pages deployment from next, adopt image naming and TEST_IMAGE_NAME env var from main.
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
1 similar comment
|
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
…OrdinalBin Move NodeDrawer from Sociogram-specific to shared components, add configurable itemType and controlled expanded state. CategoricalBin collapses the drawer when a bin is expanded. Both interfaces now manage readyForNextStage directly instead of relying on MultiNodeBucket.
…tocol sort rules NodeDrawer no longer sorts internally - consumers pass pre-sorted nodes. Replace createSorter with useSortedNodeList in CategoricalBinItem and OrdinalBinItem so raw protocol sort rules are properly processed (adding attribute paths and variable type information). Fix sort order types from ProcessedSortRule[] to SortOrder throughout.
…idy stories - Extract shared useCelebrate hook from QuickAddField, NodeForm, and CategoricalBinItem with configurable particle color, size, and edge spawning - Add layout prop to NodeDrawer/DrawerNode for smooth node transitions - Reorganize interview story titles under Interview/Components - Remove placeholder SlidesForm story
DropEvent.keys was redundant: useDraggableItemProps already puts key/keys into drag metadata. The collection layer now passes metadata through without extracting or re-packaging fields. Also makes metadata required and threads announcedName through DragAndDropOptions.
…awer animation - Add 'form' dialog type to DialogProvider that handles FormStoreProvider wrapping and returns form values directly from openDialog - Refactor CategoricalBin to use form dialog for "other variable" flow, removing OtherVariableForm component - Fix bin expand click not working (stopPropagation on circle click) - Fix NodeDrawer toggle not working when expanded prop is controlled - Add celebrate particle colors matching bin colors - Improve NodeDrawer collapse animation by syncing marginBottom with height transition to eliminate padding gap without visual drift
ScrollArea: add remeasureKey prop to force re-measurement of scroll dimensions after layout animations complete. Change horizontal viewport from flex-1 to flex-auto so content width propagates to w-fit ancestors. NodeDrawer: track layout animation state and trigger ScrollArea remeasurement via remeasureKey when animations settle. Includes safety timeout if onLayoutAnimationComplete doesn't fire. DrawerNode: forward onLayoutAnimationComplete from MotionNode to parent. CategoricalBin: use form dialog type for other variable, decouple NodeDrawer expanded state from bin expansion, fix other bin node filtering (use != null instead of !== undefined).
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
The post-drag suppressClick listener on document (capture phase) was never consumed when pointer capture + significant movement prevented the browser from synthesizing a click event. The orphaned listener then ate the user's next intentional click anywhere on the page. Add setTimeout(cleanup, 0) to remove the listener after the current event cycle if no synthetic click fires.
Delete the parallel mock layer (InterviewStoryShell, createMockStore, createStoryNavigation, toolbar addon) that silently drifted from the real interview infrastructure. Replace with StoryInterviewShell that uses the real store() factory from lib/interviewer/store, eliminating mock reducers as a source of bugs. - Add SyntheticInterview.getInterviewPayload() for story data - Create StoryInterviewShell with real store and simplified navigation - Migrate all 11 interface stories to the new shell - Lazy-load finishInterview server action in FinishSession - Delete 7 unused mock/addon files (-1270 lines)
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
Significant release!
Waiting on: