authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-06-16 16:22:18-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-16 16:22:18-07:00
logc2ca9de33ab88d3a5f15530d41b9fe866e5c812f
tree9787b17457239598588680362e868474b5442740
parent60b546cf0111f0a041e9fbac025f4c904961ad75
signature Signed by PGP key B5690EEEBB952194

Add file preview comments and task toggles (#3115)


30 files changed, 2585 insertions(+), 333 deletions(-)

apps/mobile/src/features/review/reviewCommentSelection.test.ts+64
......@@ -78,4 +78,68 @@ describe("review comment serialization", () => {
7878 );
7979 expect(segments[2]).toEqual(expect.objectContaining({ kind: "text", text: "\nAfter" }));
8080 });
81
82 it("parses source-language review comments created by the web file viewer", () => {
83 const [segment] = parseReviewCommentMessageSegments(
84 [
85 '<review_comment sectionId="file:docs/plan.md" sectionTitle="File comment" filePath="docs/plan.md" startIndex="0" endIndex="1" rangeLabel="L1 to L2">',
86 "Clarify this.",
87 "```md",
88 "# Plan",
89 "- Step one",
90 "```",
91 "</review_comment>",
92 ].join("\n"),
93 );
94
95 expect(segment).toEqual(
96 expect.objectContaining({
97 kind: "review-comment",
98 comment: expect.objectContaining({
99 filePath: "docs/plan.md",
100 fenceLanguage: "md",
101 diff: "# Plan\n- Step one",
102 }),
103 }),
104 );
105 });
106
107 it("keeps fenced examples in comment prose separate from the context fence", () => {
108 const [segment] = parseReviewCommentMessageSegments(
109 [
110 '<review_comment sectionId="section-1" sectionTitle="Working tree" filePath="src/app.ts" startIndex="0" endIndex="0" rangeLabel="+1">',
111 "Try this:",
112 "```ts",
113 "const value = 1;",
114 "```",
115 "Then retry.",
116 "```diff",
117 "@@ -0,0 +1,1 @@",
118 "+one",
119 "```",
120 "</review_comment>",
121 ].join("\n"),
122 );
123
124 expect(segment).toEqual(
125 expect.objectContaining({
126 kind: "review-comment",
127 comment: expect.objectContaining({
128 text: ["Try this:", "```ts", "const value = 1;", "```", "Then retry."].join("\n"),
129 diff: "@@ -0,0 +1,1 @@\n+one",
130 }),
131 }),
132 );
133 });
134
135 it("round-trips greater-than signs in review attributes", () => {
136 const serialized = formatReviewCommentContext(
137 { ...makeTarget(), sectionTitle: "Changes > 5" },
138 "Check this.",
139 );
140 const [comment] = parseReviewInlineComments(serialized);
141
142 expect(serialized).toContain('sectionTitle="Changes &gt; 5"');
143 expect(comment?.sectionTitle).toBe("Changes > 5");
144 });
81145});
apps/mobile/src/features/review/reviewCommentSelection.ts+34-15
......@@ -21,6 +21,7 @@ export interface ReviewInlineComment {
2121 readonly rangeLabel: string;
2222 readonly text: string;
2323 readonly diff: string;
24 readonly fenceLanguage?: string;
2425}
2526
2627export type ReviewCommentMessageSegment =
......@@ -38,6 +39,7 @@ let currentTarget: ReviewCommentTarget | null = null;
3839const listeners = new Set<() => void>();
3940const REVIEW_COMMENT_BLOCK_PATTERN = /<review_comment\b([^>]*)>\s*([\s\S]*?)<\/review_comment>/g;
4041const REVIEW_COMMENT_ATTRIBUTE_PATTERN = /([a-zA-Z][a-zA-Z0-9_-]*)="([^"]*)"/g;
42const REVIEW_COMMENT_FENCE_PATTERN = /(`{3,})([^\s`]*)[^\n]*\n([\s\S]*?)\n\1/g;
4143
4244function emitChange() {
4345 listeners.forEach((listener) => listener());
......@@ -170,12 +172,17 @@ function formatReviewSelectedDiff(target: ReviewCommentTarget): string {
170172}
171173
172174function escapeReviewCommentAttribute(value: string): string {
173 return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
175 return value
176 .replace(/&/g, "&amp;")
177 .replace(/"/g, "&quot;")
178 .replace(/</g, "&lt;")
179 .replace(/>/g, "&gt;");
174180}
175181
176182function unescapeReviewCommentAttribute(value: string): string {
177183 return value
178184 .replace(/&lt;/g, "<")
185 .replace(/&gt;/g, ">")
179186 .replace(/&quot;/g, '"')
180187 .replace(/&amp;/g, "&");
181188}
......@@ -195,15 +202,19 @@ function readNonNegativeInteger(value: string | undefined): number | null {
195202 return Number(value);
196203}
197204
198function extractReviewCommentText(rawBody: string): string {
199 const fenceIndex = rawBody.indexOf("```diff");
200 const commentBody = fenceIndex >= 0 ? rawBody.slice(0, fenceIndex) : rawBody;
201 return commentBody.trim();
202}
203
204function extractReviewCommentDiff(rawBody: string): string {
205 const match = rawBody.match(/```diff\s*\n([\s\S]*?)\n```/);
206 return match?.[1]?.trim() ?? "";
205function extractReviewCommentBody(rawBody: string): {
206 text: string;
207 language: string;
208 contents: string;
209} {
210 const matches = Array.from(rawBody.matchAll(REVIEW_COMMENT_FENCE_PATTERN));
211 const match = matches.at(-1);
212 const fenceIndex = match?.index;
213 return {
214 text: rawBody.slice(0, fenceIndex ?? rawBody.length).trim(),
215 language: match?.[2]?.trim() || "diff",
216 contents: match?.[3] ?? "",
217 };
207218}
208219
209220function parseReviewInlineComment(
......@@ -219,6 +230,7 @@ function parseReviewInlineComment(
219230 if (!filePath || !sectionId || startIndex === null || endIndex === null) {
220231 return null;
221232 }
233 const body = extractReviewCommentBody(rawBody);
222234
223235 return {
224236 id: `review-comment:${index}:${sectionId}:${filePath}:${startIndex}:${endIndex}`,
......@@ -228,13 +240,20 @@ function parseReviewInlineComment(
228240 startIndex: Math.min(startIndex, endIndex),
229241 endIndex: Math.max(startIndex, endIndex),
230242 rangeLabel: attributes.rangeLabel?.trim() || "line",
231 text: extractReviewCommentText(rawBody),
232 diff: extractReviewCommentDiff(rawBody),
243 text: body.text,
244 diff: body.contents,
245 fenceLanguage: body.language,
233246 };
234247}
235248
236249export function formatReviewCommentContext(target: ReviewCommentTarget, comment: string): string {
237250 const rangeLabel = formatReviewSelectedRangeLabel(target);
251 const diff = formatReviewSelectedDiff(target);
252 const longestBacktickRun = Math.max(
253 0,
254 ...Array.from(diff.matchAll(/`+/g), (match) => match[0].length),
255 );
256 const fence = "`".repeat(Math.max(3, longestBacktickRun + 1));
238257 return [
239258 [
240259 "<review_comment",
......@@ -247,9 +266,9 @@ export function formatReviewCommentContext(target: ReviewCommentTarget, comment:
247266 ">",
248267 ].join(""),
249268 comment.trim(),
250 "```diff",
251 formatReviewSelectedDiff(target),
252 "```",
269 `${fence}diff`,
270 diff,
271 fence,
253272 "</review_comment>",
254273 ].join("\n");
255274}
apps/mobile/src/features/threads/ThreadFeed.tsx+3
......@@ -1193,6 +1193,9 @@ const ReviewCommentCard = memo(function ReviewCommentCard(props: {
11931193});
11941194
11951195function buildReviewCommentPatch(comment: ReviewInlineComment): string {
1196 if ((comment.fenceLanguage ?? "diff") !== "diff") {
1197 return "";
1198 }
11961199 const diff = comment.diff.trim();
11971200 if (!diff) {
11981201 return "";
apps/web/src/components/ChatMarkdown.browser.tsx+20
......@@ -69,6 +69,26 @@ describe("ChatMarkdown", () => {
6969 document.body.innerHTML = "";
7070 });
7171
72 it("makes task-list checkboxes interactive when a change handler is provided", async () => {
73 const onTaskListChange = vi.fn();
74 const screen = await render(
75 <ChatMarkdown
76 text={"- [ ] Ship it"}
77 cwd="/repo/project"
78 onTaskListChange={onTaskListChange}
79 />,
80 );
81
82 try {
83 const checkbox = page.getByRole("checkbox", { name: "Toggle task" });
84 await expect.element(checkbox).not.toBeDisabled();
85 await checkbox.click();
86 expect(onTaskListChange).toHaveBeenCalledWith({ markerOffset: 2, checked: true });
87 } finally {
88 await screen.unmount();
89 }
90 });
91
7292 it("rewrites file uri hrefs into direct paths before rendering", async () => {
7393 const filePath =
7494 "/Users/yashsingh/p/sco/claude-code-extract/src/utils/permissions/PermissionRule.ts";
apps/web/src/components/ChatMarkdown.tsx+53-2
......@@ -91,6 +91,7 @@ interface ChatMarkdownProps {
9191 text: string;
9292 cwd: string | undefined;
9393 threadRef?: ScopedThreadRef | undefined;
94 onTaskListChange?: ((input: { markerOffset: number; checked: boolean }) => void) | undefined;
9495 isStreaming?: boolean;
9596 skills?: ReadonlyArray<Pick<ServerProviderSkill, "name" | "displayName">>;
9697 className?: string;
......@@ -108,6 +109,17 @@ const highlightedCodeCache = new LRUCache<string>(
108109 MAX_HIGHLIGHT_CACHE_MEMORY_BYTES,
109110);
110111const highlighterPromiseCache = new Map<string, Promise<DiffsHighlighter>>();
112
113function findTaskListMarkerOffset(markdown: string, listItemStart: number): number | null {
114 const firstLineEnd = markdown.indexOf("\n", listItemStart);
115 const firstLine = markdown.slice(
116 listItemStart,
117 firstLineEnd === -1 ? markdown.length : firstLineEnd,
118 );
119 const match = firstLine.match(/^(?:\s*(?:[-+*]|\d+[.)])\s+)(\[[ xX]\])/);
120 if (!match?.[1]) return null;
121 return listItemStart + firstLine.indexOf(match[1]);
122}
111123const CHAT_MARKDOWN_SANITIZE_SCHEMA = {
112124 ...defaultSchema,
113125 attributes: {
......@@ -1170,6 +1182,7 @@ function ChatMarkdown({
11701182 text,
11711183 cwd,
11721184 threadRef,
1185 onTaskListChange,
11731186 isStreaming = false,
11741187 skills = EMPTY_MARKDOWN_SKILLS,
11751188 className,
......@@ -1215,8 +1228,44 @@ function ChatMarkdown({
12151228 p({ node: _node, children, ...props }) {
12161229 return <p {...props}>{renderSkillInlineMarkdownChildren(children, skills)}</p>;
12171230 },
1218 li({ node: _node, children, ...props }) {
1219 return <li {...props}>{renderSkillInlineMarkdownChildren(children, skills)}</li>;
1231 li({ node, children, ...props }) {
1232 const listItemStart = node?.position?.start.offset;
1233 const markerOffset =
1234 typeof listItemStart === "number" ? findTaskListMarkerOffset(text, listItemStart) : null;
1235 return (
1236 <li {...props} data-task-marker-offset={markerOffset ?? undefined}>
1237 {renderSkillInlineMarkdownChildren(children, skills)}
1238 </li>
1239 );
1240 },
1241 input({ node: _node, type, checked, disabled: _disabled, ...props }) {
1242 if (type !== "checkbox" || !onTaskListChange) {
1243 return (
1244 <input
1245 {...props}
1246 type={type}
1247 checked={checked}
1248 disabled={_disabled}
1249 readOnly={type === "checkbox"}
1250 />
1251 );
1252 }
1253 return (
1254 <input
1255 {...props}
1256 type="checkbox"
1257 name="markdown-task"
1258 aria-label="Toggle task"
1259 checked={checked}
1260 onChange={(event) => {
1261 const markerOffset = Number(
1262 event.currentTarget.closest("li")?.dataset.taskMarkerOffset,
1263 );
1264 if (!Number.isSafeInteger(markerOffset)) return;
1265 onTaskListChange({ markerOffset, checked: event.currentTarget.checked });
1266 }}
1267 />
1268 );
12201269 },
12211270 a({ node, href, children, ...props }) {
12221271 const normalizedHref = href ? normalizeMarkdownLinkHrefKey(href) : "";
......@@ -1330,9 +1379,11 @@ function ChatMarkdown({
13301379 fileLinkParentSuffixByPath,
13311380 isStreaming,
13321381 markdownFileLinkMetaByHref,
1382 onTaskListChange,
13331383 threadRef,
13341384 resolvedTheme,
13351385 skills,
1386 text,
13361387 ],
13371388 );
13381389
apps/web/src/components/ChatView.tsx+28-5
......@@ -164,6 +164,7 @@ import {
164164 formatElementContextLabel,
165165} from "../lib/elementContext";
166166import { appendPreviewAnnotationPrompt } from "../lib/previewAnnotation";
167import { appendReviewCommentsToPrompt, type ReviewCommentContext } from "../reviewCommentContext";
167168import { ChatComposer, type ChatComposerHandle } from "./chat/ChatComposer";
168169import { ExpandedImageDialog } from "./chat/ExpandedImageDialog";
169170import { PullRequestThreadDialog } from "./PullRequestThreadDialog";
......@@ -1119,6 +1120,7 @@ function ChatViewContent(props: ChatViewProps) {
11191120 const setComposerDraftPreviewAnnotations = useComposerDraftStore(
11201121 (store) => store.setPreviewAnnotations,
11211122 );
1123 const setComposerDraftReviewComments = useComposerDraftStore((store) => store.setReviewComments);
11221124 const setComposerDraftModelSelection = useComposerDraftStore((store) => store.setModelSelection);
11231125 const setComposerDraftRuntimeMode = useComposerDraftStore((store) => store.setRuntimeMode);
11241126 const setComposerDraftInteractionMode = useComposerDraftStore(
......@@ -3636,6 +3638,7 @@ function ChatViewContent(props: ChatViewProps) {
36363638 terminalContexts: composerTerminalContexts,
36373639 elementContexts: composerElementContexts,
36383640 previewAnnotations: composerPreviewAnnotations,
3641 reviewComments: composerReviewComments,
36393642 selectedProvider: ctxSelectedProvider,
36403643 selectedModel: ctxSelectedModel,
36413644 selectedProviderModels: ctxSelectedProviderModels,
......@@ -3652,7 +3655,10 @@ function ChatViewContent(props: ChatViewProps) {
36523655 prompt: promptForSend,
36533656 imageCount: composerImages.length,
36543657 terminalContexts: composerTerminalContexts,
3655 elementContextCount: composerElementContexts.length + composerPreviewAnnotations.length,
3658 elementContextCount:
3659 composerElementContexts.length +
3660 composerPreviewAnnotations.length +
3661 composerReviewComments.length,
36563662 });
36573663 if (showPlanFollowUpPrompt && activeProposedPlan) {
36583664 const followUp = resolvePlanFollowUpSubmission({
......@@ -3672,7 +3678,8 @@ function ChatViewContent(props: ChatViewProps) {
36723678 composerImages.length === 0 &&
36733679 sendableComposerTerminalContexts.length === 0 &&
36743680 composerElementContexts.length === 0 &&
3675 composerPreviewAnnotations.length === 0
3681 composerPreviewAnnotations.length === 0 &&
3682 composerReviewComments.length === 0
36763683 ? parseStandaloneComposerSlashCommand(trimmed)
36773684 : null;
36783685 if (standaloneSlashCommand) {
......@@ -3722,14 +3729,19 @@ function ChatViewContent(props: ChatViewProps) {
37223729 const composerTerminalContextsSnapshot = [...sendableComposerTerminalContexts];
37233730 const composerElementContextsSnapshot = [...composerElementContexts];
37243731 const composerPreviewAnnotationsSnapshot = [...composerPreviewAnnotations];
3732 const composerReviewCommentsSnapshot: ReviewCommentContext[] = [...composerReviewComments];
37253733 const messageTextWithContexts = appendElementContextsToPrompt(
37263734 appendTerminalContextsToPrompt(promptForSend, composerTerminalContextsSnapshot),
37273735 composerElementContextsSnapshot,
37283736 );
3729 const messageTextForSend = composerPreviewAnnotationsSnapshot.reduce(
3737 const messageTextWithPreviewAnnotations = composerPreviewAnnotationsSnapshot.reduce(
37303738 (text, annotation) => appendPreviewAnnotationPrompt(text, annotation),
37313739 messageTextWithContexts,
37323740 );
3741 const messageTextForSend = appendReviewCommentsToPrompt(
3742 messageTextWithPreviewAnnotations,
3743 composerReviewCommentsSnapshot,
3744 );
37333745 const messageIdForSend = newMessageId();
37343746 const messageCreatedAt = new Date().toISOString();
37353747 const outgoingMessageText = formatOutgoingPrompt({
......@@ -3899,6 +3911,8 @@ function ChatViewContent(props: ChatViewProps) {
38993911 composerTerminalContextsRef.current.length === 0 &&
39003912 composerElementContextsRef.current.length === 0 &&
39013913 (useComposerDraftStore.getState().getComposerDraft(composerDraftTarget)?.previewAnnotations
3914 .length ?? 0) === 0 &&
3915 (useComposerDraftStore.getState().getComposerDraft(composerDraftTarget)?.reviewComments
39023916 .length ?? 0) === 0
39033917 ) {
39043918 setOptimisticUserMessages((existing) => {
......@@ -3919,6 +3933,7 @@ function ChatViewContent(props: ChatViewProps) {
39193933 setComposerDraftTerminalContexts(composerDraftTarget, composerTerminalContextsSnapshot);
39203934 setComposerDraftElementContexts(composerDraftTarget, composerElementContextsSnapshot);
39213935 setComposerDraftPreviewAnnotations(composerDraftTarget, composerPreviewAnnotationsSnapshot);
3936 setComposerDraftReviewComments(composerDraftTarget, composerReviewCommentsSnapshot);
39223937 composerRef.current?.resetCursorState({
39233938 cursor: collapseExpandedComposerCursor(promptForSend, promptForSend.length),
39243939 prompt: promptForSend,
......@@ -4874,7 +4889,7 @@ function ChatViewContent(props: ChatViewProps) {
48744889 />
48754890 ) : activeRightPanelSurface?.kind === "diff" ? (
48764891 <Suspense fallback={null}>
4877 <DiffPanel mode="embedded" />
4892 <DiffPanel mode="embedded" composerDraftTarget={composerDraftTarget} />
48784893 </Suspense>
48794894 ) : (activeRightPanelSurface?.kind === "files" ||
48804895 activeRightPanelSurface?.kind === "file") &&
......@@ -4886,6 +4901,10 @@ function ChatViewContent(props: ChatViewProps) {
48864901 environmentId={activeProject.environmentId}
48874902 cwd={activeWorkspaceRoot}
48884903 projectName={activeProject.name}
4904 threadRef={activeThreadRef}
4905 composerDraftTarget={composerDraftTarget}
4906 keybindings={keybindings}
4907 availableEditors={availableEditors}
48894908 relativePath={
48904909 activeRightPanelSurface.kind === "file"
48914910 ? activeRightPanelSurface.relativePath
......@@ -4948,7 +4967,7 @@ function ChatViewContent(props: ChatViewProps) {
49484967 />
49494968 ) : activeRightPanelSurface?.kind === "diff" ? (
49504969 <Suspense fallback={null}>
4951 <DiffPanel mode="embedded" />
4970 <DiffPanel mode="embedded" composerDraftTarget={composerDraftTarget} />
49524971 </Suspense>
49534972 ) : activeRightPanelSurface?.kind === "plan" ? (
49544973 <PlanSidebar
......@@ -4973,6 +4992,10 @@ function ChatViewContent(props: ChatViewProps) {
49734992 environmentId={activeProject.environmentId}
49744993 cwd={activeWorkspaceRoot}
49754994 projectName={activeProject.name}
4995 threadRef={activeThreadRef}
4996 composerDraftTarget={composerDraftTarget}
4997 keybindings={keybindings}
4998 availableEditors={availableEditors}
49764999 relativePath={
49775000 activeRightPanelSurface.kind === "file"
49785001 ? activeRightPanelSurface.relativePath
apps/web/src/components/DiffPanel.tsx+15-4
......@@ -1,7 +1,7 @@
1import { FileDiff, Virtualizer } from "@pierre/diffs/react";
1import { Virtualizer } from "@pierre/diffs/react";
22import { useNavigate, useParams, useSearch } from "@tanstack/react-router";
33import { scopeThreadRef } from "@t3tools/client-runtime";
4import type { TurnId } from "@t3tools/contracts";
4import type { ScopedThreadRef, TurnId } from "@t3tools/contracts";
55import {
66 ChevronDownIcon,
77 ChevronLeftIcon,
......@@ -20,6 +20,7 @@ import {
2020 useState,
2121} from "react";
2222import { openInPreferredEditor } from "../editorPreferences";
23import { type DraftId } from "../composerDraftStore";
2324import { useCheckpointDiff } from "~/lib/checkpointDiffState";
2425import { useVcsStatus } from "~/lib/vcsStatusState";
2526import { cn } from "~/lib/utils";
......@@ -41,6 +42,7 @@ import { buildThreadRouteParams, resolveThreadRouteRef } from "../threadRoutes";
4142import { useSettings } from "../hooks/useSettings";
4243import { formatShortTimestamp } from "../timestampFormat";
4344import { DiffPanelLoadingState, DiffPanelShell, type DiffPanelMode } from "./DiffPanelShell";
45import { AnnotatableFileDiff } from "./diffs/AnnotatableFileDiff";
4446import { ToggleGroup, Toggle } from "./ui/toggle-group";
4547import { Tooltip, TooltipPopup, TooltipTrigger } from "./ui/tooltip";
4648
......@@ -147,11 +149,12 @@ const DIFF_PANEL_UNSAFE_CSS = `
147149
148150interface DiffPanelProps {
149151 mode?: DiffPanelMode;
152 composerDraftTarget: ScopedThreadRef | DraftId;
150153}
151154
152155export { DiffWorkerPoolProvider } from "./DiffWorkerPoolProvider";
153156
154export default function DiffPanel({ mode = "inline" }: DiffPanelProps) {
157export default function DiffPanel({ mode = "inline", composerDraftTarget }: DiffPanelProps) {
155158 const navigate = useNavigate();
156159 const { resolvedTheme } = useTheme();
157160 const settings = useSettings();
......@@ -218,6 +221,10 @@ export default function DiffPanel({ mode = "inline" }: DiffPanelProps) {
218221 const selectedCheckpointTurnCount =
219222 selectedTurn &&
220223 (selectedTurn.checkpointTurnCount ?? inferredCheckpointTurnCountByTurnId[selectedTurn.turnId]);
224 const reviewSectionId = selectedTurn ? `turn:${selectedTurn.turnId}` : "conversation";
225 const reviewSectionTitle = selectedTurn
226 ? `Turn ${selectedCheckpointTurnCount ?? "?"}`
227 : "All turns";
221228 const selectedCheckpointRange = useMemo(
222229 () =>
223230 typeof selectedCheckpointTurnCount === "number"
......@@ -673,8 +680,12 @@ export default function DiffPanel({ mode = "inline" }: DiffPanelProps) {
673680 openDiffFile(filePath);
674681 }}
675682 >
676 <FileDiff
683 <AnnotatableFileDiff
677684 fileDiff={fileDiff}
685 filePath={filePath}
686 sectionId={reviewSectionId}
687 sectionTitle={reviewSectionTitle}
688 composerDraftTarget={composerDraftTarget}
678689 renderHeaderPrefix={() => (
679690 <Tooltip>
680691 <TooltipTrigger
apps/web/src/components/chat/ChatComposer.tsx+27-1
......@@ -56,6 +56,7 @@ import {
5656import { useComposerPathSearch } from "../../lib/composerPathSearchState";
5757import { type ElementContextDraft } from "../../lib/elementContext";
5858import { ComposerPendingElementContexts } from "./ComposerPendingElementContexts";
59import { ComposerPendingReviewComments } from "./ComposerPendingReviewComments";
5960import { ComposerPreviewAnnotationCards } from "./ComposerPreviewAnnotationCards";
6061import {
6162 shouldUseCompactComposerPrimaryActions,
......@@ -117,6 +118,7 @@ import {
117118import { formatProviderSkillDisplayName } from "../../providerSkillPresentation";
118119import { searchProviderSkills } from "../../providerSkillSearch";
119120import { useMediaQuery } from "../../hooks/useMediaQuery";
121import type { ReviewCommentContext } from "../../reviewCommentContext";
120122
121123const IMAGE_SIZE_LIMIT_LABEL = `${Math.round(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES / (1024 * 1024))}MB`;
122124
......@@ -406,6 +408,7 @@ export interface ChatComposerHandle {
406408 terminalContexts: TerminalContextDraft[];
407409 elementContexts: ElementContextDraft[];
408410 previewAnnotations: PreviewAnnotationPayload[];
411 reviewComments: ReviewCommentContext[];
409412 selectedPromptEffort: string | null;
410413 selectedModelOptionsForDispatch: unknown;
411414 selectedModelSelection: ModelSelection;
......@@ -615,6 +618,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
615618 const composerTerminalContexts = composerDraft.terminalContexts;
616619 const composerElementContexts = composerDraft.elementContexts;
617620 const composerPreviewAnnotations = composerDraft.previewAnnotations;
621 const composerReviewComments = composerDraft.reviewComments;
618622 const nonPersistedComposerImageIds = composerDraft.nonPersistedImageIds;
619623
620624 const setComposerDraftPrompt = useComposerDraftStore((store) => store.setPrompt);
......@@ -636,6 +640,9 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
636640 const removeComposerDraftPreviewAnnotation = useComposerDraftStore(
637641 (store) => store.removePreviewAnnotation,
638642 );
643 const removeComposerDraftReviewComment = useComposerDraftStore(
644 (store) => store.removeReviewComment,
645 );
639646 const clearComposerDraftPersistedAttachments = useComposerDraftStore(
640647 (store) => store.clearPersistedAttachments,
641648 );
......@@ -896,12 +903,16 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
896903 prompt,
897904 imageCount: composerImages.length,
898905 terminalContexts: composerTerminalContexts,
899 elementContextCount: composerElementContexts.length + composerPreviewAnnotations.length,
906 elementContextCount:
907 composerElementContexts.length +
908 composerPreviewAnnotations.length +
909 composerReviewComments.length,
900910 }),
901911 [
902912 composerElementContexts.length,
903913 composerImages.length,
904914 composerPreviewAnnotations.length,
915 composerReviewComments.length,
905916 composerTerminalContexts,
906917 prompt,
907918 ],
......@@ -1998,6 +2009,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
19982009 terminalContexts: composerTerminalContextsRef.current,
19992010 elementContexts: composerElementContextsRef.current,
20002011 previewAnnotations: composerPreviewAnnotations,
2012 reviewComments: composerReviewComments,
20012013 selectedPromptEffort,
20022014 selectedModelOptionsForDispatch,
20032015 selectedModelSelection,
......@@ -2017,6 +2029,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
20172029 composerTerminalContextsRef,
20182030 composerElementContextsRef,
20192031 composerPreviewAnnotations,
2032 composerReviewComments,
20202033 isConnecting,
20212034 isComposerApprovalState,
20222035 pendingUserInputs.length,
......@@ -2272,6 +2285,19 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps)
22722285 />
22732286 )}
22742287
2288 {!isComposerCollapsedMobile &&
2289 !isComposerApprovalState &&
2290 pendingUserInputs.length === 0 &&
2291 composerReviewComments.length > 0 && (
2292 <ComposerPendingReviewComments
2293 comments={composerReviewComments}
2294 onRemove={(commentId) =>
2295 removeComposerDraftReviewComment(composerDraftTarget, commentId)
2296 }
2297 className="mb-3"
2298 />
2299 )}
2300
22752301 {!isComposerCollapsedMobile &&
22762302 !isComposerApprovalState &&
22772303 pendingUserInputs.length === 0 &&
apps/web/src/components/chat/ComposerPendingReviewComments.browser.tsx created+41
......@@ -0,0 +1,41 @@
1import "../../index.css";
2
3import { afterEach, describe, expect, it, vi } from "vite-plus/test";
4import { page } from "vite-plus/test/browser";
5import { render } from "vitest-browser-react";
6
7import { ComposerPendingReviewComments } from "./ComposerPendingReviewComments";
8
9describe("ComposerPendingReviewComments", () => {
10 afterEach(() => {
11 document.body.innerHTML = "";
12 });
13
14 it("renders a removable file comment pill", async () => {
15 const onRemove = vi.fn();
16 const screen = await render(
17 <ComposerPendingReviewComments
18 comments={[
19 {
20 id: "comment-1",
21 sectionId: "file:src/app.ts",
22 sectionTitle: "File comment",
23 filePath: "src/app.ts",
24 startIndex: 1,
25 endIndex: 2,
26 rangeLabel: "L2 to L3",
27 text: "Keep this configurable.",
28 diff: "@@ -2,2 +2,2 @@\n two\n three",
29 },
30 ]}
31 onRemove={onRemove}
32 />,
33 );
34
35 await expect.element(page.getByText("src/app.ts L2 to L3")).toBeVisible();
36 await page.getByRole("button", { name: "Remove comment on src/app.ts L2 to L3" }).click();
37 expect(onRemove).toHaveBeenCalledWith("comment-1");
38
39 await screen.unmount();
40 });
41});
apps/web/src/components/chat/ComposerPendingReviewComments.tsx created+60
......@@ -0,0 +1,60 @@
1import { MessageCircle, X } from "lucide-react";
2
3import {
4 COMPOSER_INLINE_CHIP_CLASS_NAME,
5 COMPOSER_INLINE_CHIP_DISMISS_BUTTON_CLASS_NAME,
6 COMPOSER_INLINE_CHIP_ICON_CLASS_NAME,
7 COMPOSER_INLINE_CHIP_LABEL_CLASS_NAME,
8} from "../composerInlineChip";
9import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip";
10import type { ReviewCommentContext } from "~/reviewCommentContext";
11import { cn } from "~/lib/utils";
12
13interface ComposerPendingReviewCommentsProps {
14 comments: ReadonlyArray<ReviewCommentContext>;
15 onRemove: (commentId: string) => void;
16 className?: string;
17}
18
19export function ComposerPendingReviewComments({
20 comments,
21 onRemove,
22 className,
23}: ComposerPendingReviewCommentsProps) {
24 if (comments.length === 0) return null;
25
26 return (
27 <div className={cn("flex flex-wrap gap-1.5", className)}>
28 {comments.map((comment) => {
29 const label = `${comment.filePath} ${comment.rangeLabel}`;
30 return (
31 <Tooltip key={comment.id}>
32 <TooltipTrigger
33 render={
34 <span className={cn(COMPOSER_INLINE_CHIP_CLASS_NAME, "pr-1")}>
35 <MessageCircle className={cn(COMPOSER_INLINE_CHIP_ICON_CLASS_NAME, "size-3.5")} />
36 <span className={COMPOSER_INLINE_CHIP_LABEL_CLASS_NAME}>{label}</span>
37 <button
38 type="button"
39 aria-label={`Remove comment on ${label}`}
40 className={COMPOSER_INLINE_CHIP_DISMISS_BUTTON_CLASS_NAME}
41 onClick={(event) => {
42 event.preventDefault();
43 event.stopPropagation();
44 onRemove(comment.id);
45 }}
46 >
47 <X className="size-3" aria-hidden />
48 </button>
49 </span>
50 }
51 />
52 <TooltipPopup side="top" className="max-w-96 whitespace-pre-wrap leading-tight">
53 {comment.text}
54 </TooltipPopup>
55 </Tooltip>
56 );
57 })}
58 </div>
59 );
60}
apps/web/src/components/chat/MessagesTimeline.test.tsx+36
......@@ -296,6 +296,42 @@ describe("MessagesTimeline", () => {
296296 expect(markup).not.toContain("&lt;/review_comment&gt;");
297297 });
298298
299 it("renders file review comments as source code instead of diffs", async () => {
300 const { MessagesTimeline } = await import("./MessagesTimeline");
301 const markup = renderToStaticMarkup(
302 <MessagesTimeline
303 {...buildProps()}
304 timelineEntries={[
305 {
306 id: "entry-1",
307 kind: "message",
308 createdAt: "2026-03-17T19:12:28.000Z",
309 message: {
310 id: MessageId.make("message-source-comment"),
311 role: "user",
312 text: [
313 '<review_comment sectionId="file:docs/plan.md" sectionTitle="File comment" filePath="docs/plan.md" startIndex="0" endIndex="1" rangeLabel="L1 to L2">',
314 "Clarify this.",
315 "```md",
316 "# Plan",
317 "- Step one",
318 "```",
319 "</review_comment>",
320 ].join("\n"),
321 createdAt: "2026-03-17T19:12:28.000Z",
322 streaming: false,
323 },
324 },
325 ]}
326 />,
327 );
328
329 expect(markup).toContain("plan.md");
330 expect(markup).toContain("Clarify this.");
331 expect(markup).toContain("# Plan");
332 expect(markup).not.toContain('data-testid="file-diff"');
333 });
334
299335 it("renders a failure marker for failed tool lifecycle entries", async () => {
300336 const { MessagesTimeline } = await import("./MessagesTimeline");
301337 const markup = renderToStaticMarkup(
apps/web/src/components/chat/MessagesTimeline.tsx+11
......@@ -102,6 +102,7 @@ import { SkillInlineText } from "./SkillInlineText";
102102import { formatWorkspaceRelativePath } from "../../filePathDisplay";
103103import {
104104 buildReviewCommentRenderablePatch,
105 formatReviewCommentFence,
105106 parseReviewCommentMessageSegments,
106107 type ReviewCommentContext,
107108} from "../../reviewCommentContext";
......@@ -1270,6 +1271,7 @@ const UserMessageBody = memo(function UserMessageBody(props: {
12701271
12711272function UserMessageReviewCommentCard({ comment }: { comment: ReviewCommentContext }) {
12721273 const ctx = use(TimelineRowCtx);
1274 const fenceLanguage = comment.fenceLanguage ?? "diff";
12731275 const renderablePatch = getRenderablePatch(
12741276 buildReviewCommentRenderablePatch(comment),
12751277 `review-comment:${comment.id}`,
......@@ -1290,6 +1292,15 @@ function UserMessageReviewCommentCard({ comment }: { comment: ReviewCommentConte
12901292 <SkillInlineText text={comment.text} skills={ctx.skills} />
12911293 </div>
12921294 )}
1295 {fenceLanguage !== "diff" && comment.diff.trim().length > 0 && (
1296 <ChatMarkdown
1297 text={formatReviewCommentFence(fenceLanguage, comment.diff)}
1298 cwd={ctx.markdownCwd}
1299 threadRef={ctx.threadRef ?? undefined}
1300 skills={ctx.skills}
1301 className="text-foreground"
1302 />
1303 )}
12931304 {renderablePatch?.kind === "files" &&
12941305 renderablePatch.files.map((fileDiff) => (
12951306 <FileDiff
apps/web/src/components/chat/OpenInPicker.tsx+25-5
......@@ -154,10 +154,14 @@ export const OpenInPicker = memo(function OpenInPicker({
154154 keybindings,
155155 availableEditors,
156156 openInCwd,
157 compact = false,
158 enableShortcut = true,
157159}: {
158160 keybindings: ResolvedKeybindingsConfig;
159161 availableEditors: ReadonlyArray<EditorId>;
160162 openInCwd: string | null;
163 compact?: boolean;
164 enableShortcut?: boolean;
161165}) {
162166 const [preferredEditor, setPreferredEditor] = usePreferredEditor(availableEditors);
163167 const options = useMemo(
......@@ -184,6 +188,7 @@ export const OpenInPicker = memo(function OpenInPicker({
184188 );
185189
186190 useEffect(() => {
191 if (!enableShortcut) return;
187192 const handler = (e: globalThis.KeyboardEvent) => {
188193 const api = readLocalApi();
189194 if (!isOpenFavoriteEditorShortcut(e, keybindings)) return;
......@@ -195,24 +200,39 @@ export const OpenInPicker = memo(function OpenInPicker({
195200 };
196201 window.addEventListener("keydown", handler);
197202 return () => window.removeEventListener("keydown", handler);
198 }, [preferredEditor, keybindings, openInCwd]);
203 }, [enableShortcut, preferredEditor, keybindings, openInCwd]);
199204
200205 return (
201 <Group aria-label="Subscription actions">
206 <Group aria-label="Open in editor">
202207 <Button
208 aria-label={compact ? "Open file in preferred editor" : undefined}
203209 size="xs"
204210 variant="outline"
205211 disabled={!preferredEditor || !openInCwd}
206212 onClick={() => openInEditor(preferredEditor)}
207213 >
208214 {primaryOption?.Icon && <primaryOption.Icon aria-hidden="true" className="size-3.5" />}
209 <span className="sr-only @3xl/header-actions:not-sr-only @3xl/header-actions:ml-0.5">
215 <span
216 className={
217 compact
218 ? "sr-only"
219 : "sr-only @3xl/header-actions:not-sr-only @3xl/header-actions:ml-0.5"
220 }
221 >
210222 Open
211223 </span>
212224 </Button>
213 <GroupSeparator className="hidden @3xl/header-actions:block" />
225 <GroupSeparator {...(!compact ? { className: "hidden @3xl/header-actions:block" } : {})} />
214226 <Menu>
215 <MenuTrigger render={<Button aria-label="Copy options" size="icon-xs" variant="outline" />}>
227 <MenuTrigger
228 render={
229 <Button
230 aria-label={compact ? "Choose editor" : "Copy options"}
231 size="icon-xs"
232 variant="outline"
233 />
234 }
235 >
216236 <ChevronDownIcon aria-hidden="true" className="size-4" />
217237 </MenuTrigger>
218238 <MenuPopup align="end">
apps/web/src/components/diffs/AnnotatableFileDiff.browser.tsx created+122
......@@ -0,0 +1,122 @@
1import "../../index.css";
2
3import { parsePatchFiles } from "@pierre/diffs/utils/parsePatchFiles";
4import { scopeThreadRef } from "@t3tools/client-runtime";
5import { EnvironmentId, ThreadId } from "@t3tools/contracts";
6import { afterEach, describe, expect, it, vi } from "vite-plus/test";
7import { page } from "vite-plus/test/browser";
8import { render } from "vitest-browser-react";
9
10import { useComposerDraftStore } from "~/composerDraftStore";
11
12import { AnnotatableFileDiff } from "./AnnotatableFileDiff";
13
14function dispatchPointer(target: EventTarget, type: string, pointerId: number): void {
15 target.dispatchEvent(
16 new PointerEvent(type, {
17 bubbles: true,
18 cancelable: true,
19 composed: true,
20 pointerId,
21 pointerType: "mouse",
22 }),
23 );
24}
25
26const threadRef = scopeThreadRef(EnvironmentId.make("local"), ThreadId.make("thread-1"));
27
28function TestDiff() {
29 const fileDiff = parsePatchFiles(
30 [
31 "diff --git a/src/app.ts b/src/app.ts",
32 "--- a/src/app.ts",
33 "+++ b/src/app.ts",
34 "@@ -1,3 +1,3 @@",
35 " one",
36 "-two",
37 "+TWO",
38 " three",
39 ].join("\n"),
40 "annotatable-file-diff-test",
41 )[0]!.files[0]!;
42
43 return (
44 <AnnotatableFileDiff
45 fileDiff={fileDiff}
46 filePath="src/app.ts"
47 sectionId="turn:2"
48 sectionTitle="Turn 2"
49 composerDraftTarget={threadRef}
50 renderHeaderPrefix={() => null}
51 options={{
52 diffStyle: "unified",
53 lineDiffType: "none",
54 themeType: "light",
55 }}
56 />
57 );
58}
59
60async function getRenderedDiff() {
61 return vi.waitFor(() => {
62 const element = document.querySelector<HTMLElement>("diffs-container");
63 expect(element?.shadowRoot).not.toBeNull();
64 return element!;
65 });
66}
67
68describe("annotatable Pierre file diff", () => {
69 afterEach(() => {
70 document.body.innerHTML = "";
71 useComposerDraftStore.getState().setReviewComments(threadRef, []);
72 });
73
74 it("creates a local annotation from the gutter and attaches it to the composer", async () => {
75 let screen = await render(<TestDiff />);
76
77 try {
78 const diff = await getRenderedDiff();
79 const addedLineNumber = await vi.waitFor(() => {
80 const elements = Array.from(
81 diff.shadowRoot?.querySelectorAll<HTMLElement>('[data-column-number="2"]') ?? [],
82 );
83 const element = elements.at(-1) ?? null;
84 expect(element).not.toBeNull();
85 return element!;
86 });
87
88 dispatchPointer(addedLineNumber, "pointerdown", 1);
89 dispatchPointer(addedLineNumber, "pointerup", 1);
90
91 const textarea = page.getByRole("textbox", { name: "Comment on lines +2" });
92 await expect.element(textarea).toBeVisible();
93 await textarea.fill("Use the compatible value.");
94 await page.getByRole("button", { name: "Comment" }).click();
95
96 await vi.waitFor(() => {
97 expect(
98 useComposerDraftStore.getState().getComposerDraft(threadRef)?.reviewComments,
99 ).toEqual([
100 expect.objectContaining({
101 sectionId: "turn:2",
102 filePath: "src/app.ts",
103 rangeLabel: "+2",
104 text: "Use the compatible value.",
105 diff: "@@ -0,0 +2,1 @@\n+TWO",
106 }),
107 ]);
108 });
109 expect(document.querySelector("[data-file-comment-annotation]")?.textContent).toContain(
110 "Use the compatible value.",
111 );
112
113 await screen.unmount();
114 screen = await render(<TestDiff />);
115 await expect
116 .element(page.getByText("Use the compatible value.", { exact: true }))
117 .toBeVisible();
118 } finally {
119 await screen.unmount();
120 }
121 });
122});
apps/web/src/components/diffs/AnnotatableFileDiff.tsx created+239
......@@ -0,0 +1,239 @@
1import type {
2 AnnotationSide,
3 DiffLineAnnotation,
4 FileDiffMetadata,
5 SelectedLineRange,
6} from "@pierre/diffs";
7import { FileDiff, type FileDiffProps } from "@pierre/diffs/react";
8import type { ScopedThreadRef } from "@t3tools/contracts";
9import { useCallback, useMemo, useState, type ReactNode } from "react";
10
11import { type DraftId, useComposerDraftStore } from "~/composerDraftStore";
12import {
13 buildDiffReviewComment,
14 restoreDiffReviewCommentRange,
15 type ReviewCommentContext,
16} from "~/reviewCommentContext";
17
18import { LocalCommentAnnotation } from "../files/LocalCommentAnnotation";
19import { nextFileCommentId } from "../files/fileCommentAnnotations";
20
21interface DiffCommentAnnotationEntry {
22 id: string;
23 kind: "draft" | "comment";
24 range: SelectedLineRange;
25 rangeLabel: string;
26 text: string;
27}
28
29interface DiffCommentAnnotationGroup {
30 entries: DiffCommentAnnotationEntry[];
31}
32
33type DiffCommentLineAnnotation = DiffLineAnnotation<DiffCommentAnnotationGroup>;
34const EMPTY_REVIEW_COMMENTS: ReadonlyArray<ReviewCommentContext> = [];
35
36function annotationSide(range: SelectedLineRange): AnnotationSide {
37 return (range.endSide ?? range.side) === "deletions" ? "deletions" : "additions";
38}
39
40function appendAnnotationEntry(
41 annotations: ReadonlyArray<DiffCommentLineAnnotation>,
42 range: SelectedLineRange,
43 entry: DiffCommentAnnotationEntry,
44): DiffCommentLineAnnotation[] {
45 const side = annotationSide(range);
46 const annotationIndex = annotations.findIndex(
47 (annotation) => annotation.side === side && annotation.lineNumber === range.end,
48 );
49 if (annotationIndex < 0) {
50 return [
51 ...annotations,
52 {
53 side,
54 lineNumber: range.end,
55 metadata: { entries: [entry] },
56 },
57 ];
58 }
59 return annotations.map((annotation, index) =>
60 index === annotationIndex
61 ? {
62 ...annotation,
63 metadata: { entries: [...annotation.metadata.entries, entry] },
64 }
65 : annotation,
66 );
67}
68
69interface AnnotatableFileDiffProps {
70 fileDiff: FileDiffMetadata;
71 filePath: string;
72 sectionId: string;
73 sectionTitle: string;
74 composerDraftTarget: ScopedThreadRef | DraftId;
75 options: FileDiffProps<DiffCommentAnnotationGroup>["options"];
76 renderHeaderPrefix: (fileDiff: FileDiffMetadata) => ReactNode;
77}
78
79export function AnnotatableFileDiff({
80 fileDiff,
81 filePath,
82 sectionId,
83 sectionTitle,
84 composerDraftTarget,
85 options,
86 renderHeaderPrefix,
87}: AnnotatableFileDiffProps) {
88 const addReviewComment = useComposerDraftStore((store) => store.addReviewComment);
89 const removeReviewComment = useComposerDraftStore((store) => store.removeReviewComment);
90 const reviewComments = useComposerDraftStore(
91 (store) => store.getComposerDraft(composerDraftTarget)?.reviewComments ?? EMPTY_REVIEW_COMMENTS,
92 );
93 const [selectedRange, setSelectedRange] = useState<SelectedLineRange | null>(null);
94 const [draftAnnotation, setDraftAnnotation] = useState<DiffCommentLineAnnotation | null>(null);
95 const persistedAnnotations = useMemo(
96 () =>
97 reviewComments
98 .filter(
99 (comment) =>
100 comment.sectionId === sectionId &&
101 comment.filePath === filePath &&
102 (comment.fenceLanguage ?? "diff") === "diff",
103 )
104 .reduce<DiffCommentLineAnnotation[]>((annotations, comment) => {
105 const range = restoreDiffReviewCommentRange(fileDiff, comment);
106 if (!range) return annotations;
107 return appendAnnotationEntry(annotations, range, {
108 id: comment.id,
109 kind: "comment",
110 range,
111 rangeLabel: comment.rangeLabel,
112 text: comment.text,
113 });
114 }, []),
115 [fileDiff, filePath, reviewComments, sectionId],
116 );
117 const lineAnnotations = useMemo(
118 () => (draftAnnotation ? [...persistedAnnotations, draftAnnotation] : persistedAnnotations),
119 [draftAnnotation, persistedAnnotations],
120 );
121
122 const removeAnnotationEntry = useCallback(
123 (entryId: string) => {
124 setSelectedRange(null);
125 if (
126 draftAnnotation?.metadata.entries.some(
127 (entry) => entry.id === entryId && entry.kind === "draft",
128 )
129 ) {
130 setDraftAnnotation(null);
131 return;
132 }
133 removeReviewComment(composerDraftTarget, entryId);
134 },
135 [composerDraftTarget, draftAnnotation, removeReviewComment],
136 );
137
138 const submitAnnotationEntry = useCallback(
139 (entryId: string, text: string) => {
140 const entry = draftAnnotation?.metadata.entries.find((candidate) => candidate.id === entryId);
141 if (!entry) return;
142
143 const comment = buildDiffReviewComment({
144 id: entry.id,
145 sectionId,
146 sectionTitle,
147 filePath,
148 fileDiff,
149 range: entry.range,
150 text,
151 });
152 if (comment) {
153 addReviewComment(composerDraftTarget, comment);
154 }
155 setSelectedRange(null);
156 setDraftAnnotation(null);
157 },
158 [
159 addReviewComment,
160 composerDraftTarget,
161 fileDiff,
162 filePath,
163 draftAnnotation,
164 sectionId,
165 sectionTitle,
166 ],
167 );
168
169 const beginComment = useCallback(
170 (range: SelectedLineRange) => {
171 const id = nextFileCommentId();
172 const comment = buildDiffReviewComment({
173 id,
174 sectionId,
175 sectionTitle,
176 filePath,
177 fileDiff,
178 range,
179 text: "",
180 });
181 if (!comment) return;
182
183 const draftEntry: DiffCommentAnnotationEntry = {
184 id,
185 kind: "draft",
186 range,
187 rangeLabel: comment.rangeLabel,
188 text: "",
189 };
190 setDraftAnnotation({
191 side: annotationSide(range),
192 lineNumber: range.end,
193 metadata: { entries: [draftEntry] },
194 });
195 },
196 [fileDiff, filePath, sectionId, sectionTitle],
197 );
198
199 const hasOpenCommentForm = draftAnnotation !== null;
200 const handleLineSelectionEnd = useCallback(
201 (range: SelectedLineRange | null) => {
202 setSelectedRange(range);
203 if (range) beginComment(range);
204 },
205 [beginComment],
206 );
207
208 return (
209 <FileDiff<DiffCommentAnnotationGroup>
210 fileDiff={fileDiff}
211 renderHeaderPrefix={renderHeaderPrefix}
212 options={{
213 ...options,
214 enableGutterUtility: !hasOpenCommentForm,
215 enableLineSelection: !hasOpenCommentForm,
216 onGutterUtilityClick: setSelectedRange,
217 onLineSelectionChange: setSelectedRange,
218 onLineSelectionEnd: handleLineSelectionEnd,
219 }}
220 selectedLines={selectedRange}
221 lineAnnotations={lineAnnotations}
222 renderAnnotation={(annotation) => (
223 <div className="py-1">
224 {annotation.metadata.entries.map((entry) => (
225 <LocalCommentAnnotation
226 key={entry.id}
227 kind={entry.kind}
228 rangeLabel={entry.rangeLabel}
229 text={entry.text}
230 onCancel={() => removeAnnotationEntry(entry.id)}
231 onComment={(text) => submitAnnotationEntry(entry.id, text)}
232 onDelete={() => removeAnnotationEntry(entry.id)}
233 />
234 ))}
235 </div>
236 )}
237 />
238 );
239}
apps/web/src/components/files/FilePreviewPanel.browser.tsx created+168
......@@ -0,0 +1,168 @@
1import "../../index.css";
2
3import type { LineAnnotation, SelectedLineRange } from "@pierre/diffs";
4import { Editor } from "@pierre/diffs/editor";
5import { EditorProvider, File } from "@pierre/diffs/react";
6import { afterEach, describe, expect, it, vi } from "vite-plus/test";
7import { page } from "vite-plus/test/browser";
8import { render } from "vitest-browser-react";
9import { useEffect, useMemo, useRef, useState } from "react";
10
11import { installFileEditorDismissal } from "./fileEditorDismissal";
12
13interface AnnotationMetadata {
14 label: string;
15}
16
17function dispatchPointer(target: EventTarget, type: string, pointerId: number): void {
18 target.dispatchEvent(
19 new PointerEvent(type, {
20 bubbles: true,
21 cancelable: true,
22 composed: true,
23 pointerId,
24 pointerType: "mouse",
25 }),
26 );
27}
28
29function EditableAnnotatedFile() {
30 const [selectedLines, setSelectedLines] = useState<SelectedLineRange | null>(null);
31 const [lineAnnotations, setLineAnnotations] = useState<LineAnnotation<AnnotationMetadata>[]>([]);
32 const rootRef = useRef<HTMLDivElement>(null);
33 const editor = useMemo(() => new Editor<AnnotationMetadata>(), []);
34
35 useEffect(() => () => editor.cleanUp(), [editor]);
36 useEffect(() => {
37 const root = rootRef.current;
38 if (!root) return;
39 return installFileEditorDismissal({
40 root,
41 editor,
42 isBlocked: () => false,
43 onDismiss: () => setSelectedLines(null),
44 });
45 }, [editor]);
46
47 return (
48 <>
49 <div ref={rootRef}>
50 <EditorProvider editor={editor}>
51 <File<AnnotationMetadata>
52 file={{ name: "example.ts", contents: "one\ntwo\nthree\n" }}
53 options={{
54 disableFileHeader: true,
55 enableGutterUtility: true,
56 enableLineSelection: true,
57 onGutterUtilityClick: setSelectedLines,
58 onLineSelectionChange: setSelectedLines,
59 onLineSelectionEnd: (range) => {
60 setSelectedLines(range);
61 if (range) {
62 setLineAnnotations([
63 {
64 lineNumber: Math.max(range.start, range.end),
65 metadata: { label: `${range.start}:${range.end}` },
66 },
67 ]);
68 }
69 },
70 }}
71 selectedLines={selectedLines}
72 lineAnnotations={lineAnnotations}
73 renderAnnotation={(annotation) => (
74 <div data-test-file-annotation contentEditable={false}>
75 {annotation.metadata.label}
76 </div>
77 )}
78 disableWorkerPool
79 contentEditable
80 />
81 </EditorProvider>
82 </div>
83 <button type="button">Outside file</button>
84 </>
85 );
86}
87
88async function getEditableFile() {
89 const file = await vi.waitFor(() => {
90 const element = document.querySelector<HTMLElement>("diffs-container");
91 expect(element?.shadowRoot).not.toBeNull();
92 return element!;
93 });
94 const content = await vi.waitFor(() => {
95 const element = file?.shadowRoot?.querySelector<HTMLElement>("[data-content]") ?? null;
96 expect(element).not.toBeNull();
97 return element!;
98 });
99 return { file, content };
100}
101
102describe("editable Pierre file annotations", () => {
103 afterEach(() => {
104 document.body.innerHTML = "";
105 });
106
107 it("keeps gutter selection and annotations enabled while the file is editable", async () => {
108 const screen = await render(<EditableAnnotatedFile />);
109
110 try {
111 const { file, content } = await getEditableFile();
112 const secondLineNumber = await vi.waitFor(() => {
113 const element =
114 file?.shadowRoot?.querySelector<HTMLElement>('[data-column-number="2"]') ?? null;
115 expect(element).not.toBeNull();
116 return element;
117 });
118 await vi.waitFor(() => {
119 expect(
120 file?.shadowRoot?.querySelector("pre")?.hasAttribute("data-interactive-line-numbers"),
121 ).toBe(true);
122 });
123
124 dispatchPointer(secondLineNumber!, "pointerdown", 1);
125 dispatchPointer(secondLineNumber!, "pointerup", 1);
126
127 await vi.waitFor(() => {
128 expect(document.querySelector("[data-test-file-annotation]")?.textContent).toBe("2:2");
129 });
130
131 expect(content.contentEditable).toBe("true");
132 expect(content.getAttribute("role")).toBe("textbox");
133 } finally {
134 await screen.unmount();
135 }
136 });
137
138 it("dismisses editor focus and selection with outside click or Escape", async () => {
139 const screen = await render(<EditableAnnotatedFile />);
140
141 try {
142 const { file, content } = await getEditableFile();
143 content.focus();
144 expect(file?.shadowRoot?.activeElement).toBe(content);
145
146 await page.getByRole("button", { name: "Outside file" }).click();
147 await vi.waitFor(() => {
148 expect(file?.shadowRoot?.activeElement).not.toBe(content);
149 });
150
151 content.focus();
152 expect(file?.shadowRoot?.activeElement).toBe(content);
153 content.dispatchEvent(
154 new KeyboardEvent("keydown", {
155 key: "Escape",
156 bubbles: true,
157 cancelable: true,
158 composed: true,
159 }),
160 );
161 await vi.waitFor(() => {
162 expect(file?.shadowRoot?.activeElement).not.toBe(content);
163 });
164 } finally {
165 await screen.unmount();
166 }
167 });
168});
apps/web/src/components/files/FilePreviewPanel.test.ts created+82
......@@ -0,0 +1,82 @@
1import { describe, expect, it } from "vite-plus/test";
2
3import {
4 formatFileCommentRange,
5 normalizeFileCommentRange,
6 remapFileCommentAnnotations,
7} from "./fileCommentAnnotations";
8import { isMarkdownPreviewFile, setMarkdownTaskChecked } from "./filePreviewMode";
9
10describe("file comment annotations", () => {
11 it("normalizes and formats selected line ranges", () => {
12 expect(normalizeFileCommentRange({ start: 16, end: 7 })).toEqual({
13 startLine: 7,
14 endLine: 16,
15 });
16 expect(formatFileCommentRange(7, 7)).toBe("L7");
17 expect(formatFileCommentRange(7, 16)).toBe("L7 to L16");
18 });
19
20 it("keeps an annotation range attached when Pierre remaps its anchor line", () => {
21 expect(
22 remapFileCommentAnnotations([
23 {
24 lineNumber: 20,
25 metadata: {
26 entries: [
27 {
28 id: "comment-1",
29 kind: "comment",
30 startLine: 7,
31 endLine: 16,
32 text: "Keep this guarded.",
33 },
34 ],
35 },
36 },
37 ]),
38 ).toEqual([
39 {
40 lineNumber: 20,
41 metadata: {
42 entries: [
43 {
44 id: "comment-1",
45 kind: "comment",
46 startLine: 11,
47 endLine: 20,
48 text: "Keep this guarded.",
49 },
50 ],
51 },
52 },
53 ]);
54 });
55});
56
57describe("isMarkdownPreviewFile", () => {
58 it("recognizes markdown and MDX files case-insensitively", () => {
59 expect(isMarkdownPreviewFile("README.md")).toBe(true);
60 expect(isMarkdownPreviewFile("docs/guide.MDX")).toBe(true);
61 });
62
63 it("does not treat other text files as markdown", () => {
64 expect(isMarkdownPreviewFile("docs/guide.txt")).toBe(false);
65 expect(isMarkdownPreviewFile("docs/markdown.ts")).toBe(false);
66 });
67});
68
69describe("setMarkdownTaskChecked", () => {
70 const markdown = "- [ ] First\n- [x] Second\n";
71
72 it("checks and unchecks the task marker at the supplied offset", () => {
73 expect(setMarkdownTaskChecked(markdown, 2, true)).toBe("- [x] First\n- [x] Second\n");
74 expect(setMarkdownTaskChecked(markdown, 14, false)).toBe("- [ ] First\n- [ ] Second\n");
75 expect(setMarkdownTaskChecked("1. [X] Ordered\n", 3, false)).toBe("1. [ ] Ordered\n");
76 });
77
78 it("leaves the document unchanged for a stale or invalid marker offset", () => {
79 expect(setMarkdownTaskChecked(markdown, 0, true)).toBe(markdown);
80 expect(setMarkdownTaskChecked(markdown, 200, true)).toBe(markdown);
81 });
82});
apps/web/src/components/files/FilePreviewPanel.tsx+371-36
......@@ -1,23 +1,51 @@
1import type { EnvironmentId } from "@t3tools/contracts";
1import type {
2 EditorId,
3 EnvironmentId,
4 ResolvedKeybindingsConfig,
5 ScopedThreadRef,
6} from "@t3tools/contracts";
7import type { SelectedLineRange } from "@pierre/diffs";
28import { Editor } from "@pierre/diffs/editor";
39import { EditorProvider, File, Virtualizer } from "@pierre/diffs/react";
4import { ChevronRight, FolderTree, LoaderCircle } from "lucide-react";
5import { useEffect, useMemo, useRef, useState } from "react";
10import { ChevronRight, Code2, Eye, FolderTree, Globe2, LoaderCircle } from "lucide-react";
11import { useCallback, useEffect, useMemo, useRef, useState } from "react";
612
13import { isBrowserPreviewFile, openFileInPreview } from "~/browser/openFileInPreview";
14import ChatMarkdown from "~/components/ChatMarkdown";
15import { OpenInPicker } from "~/components/chat/OpenInPicker";
716import { ensureEnvironmentApi } from "~/environmentApi";
17import { usePrimaryEnvironmentId } from "~/environments/primary/context";
818import { useTheme } from "~/hooks/useTheme";
919import { resolveDiffThemeName } from "~/lib/diffRendering";
1020import { cn } from "~/lib/utils";
21import { isPreviewSupportedInRuntime } from "~/previewStateStore";
22import { resolvePathLinkTarget } from "~/terminal-links";
1123import { ScrollArea } from "~/components/ui/scroll-area";
1224import { Toggle } from "~/components/ui/toggle";
1325import { Tooltip, TooltipPopup, TooltipTrigger } from "~/components/ui/tooltip";
26import { stackedThreadToast, toastManager } from "~/components/ui/toast";
27import { type DraftId, useComposerDraftStore } from "~/composerDraftStore";
28import { buildFileReviewComment } from "~/reviewCommentContext";
1429
1530import FileBrowserPanel from "./FileBrowserPanel";
31import {
32 type FileCommentAnnotationEntry,
33 type FileCommentAnnotationGroup,
34 type FileCommentLineAnnotation,
35 formatFileCommentRange,
36 nextFileCommentId,
37 normalizeFileCommentRange,
38 remapFileCommentAnnotations,
39} from "./fileCommentAnnotations";
40import { installFileEditorDismissal } from "./fileEditorDismissal";
41import { LocalCommentAnnotation } from "./LocalCommentAnnotation";
1642import { projectFileCacheKey } from "./fileContentRevision";
1743import { fileBreadcrumbs } from "./filePath";
44import { isMarkdownPreviewFile, setMarkdownTaskChecked } from "./filePreviewMode";
1845import { FileSaveCoordinator } from "./fileSaveCoordinator";
1946import {
2047 confirmProjectFileQueryData,
48 getOptimisticProjectFileQueryData,
2149 setProjectFileQueryData,
2250 useProjectFileQuery,
2351} from "./projectFilesQueryState";
......@@ -27,6 +55,10 @@ interface FilePreviewPanelProps {
2755 cwd: string;
2856 projectName: string;
2957 relativePath: string | null;
58 threadRef: ScopedThreadRef;
59 composerDraftTarget: ScopedThreadRef | DraftId;
60 keybindings: ResolvedKeybindingsConfig;
61 availableEditors: ReadonlyArray<EditorId>;
3062 onOpenFile: (relativePath: string) => void;
3163 onPendingChange: (relativePath: string, pending: boolean) => void;
3264}
......@@ -38,20 +70,22 @@ interface EditableFileSurfaceProps {
3870 environmentId: EnvironmentId;
3971 cwd: string;
4072 relativePath: string;
73 composerDraftTarget: ScopedThreadRef | DraftId;
4174 contents: string;
4275 resolvedTheme: "light" | "dark";
4376 onPendingChange: (relativePath: string, pending: boolean) => void;
4477}
4578
46function EditableFileSurface({
79function useFileSaveCoordinator({
4780 environmentId,
4881 cwd,
4982 relativePath,
50 contents,
51 resolvedTheme,
5283 onPendingChange,
53}: EditableFileSurfaceProps) {
54 const saveCoordinator = useMemo(
84}: Pick<
85 EditableFileSurfaceProps,
86 "environmentId" | "cwd" | "relativePath" | "onPendingChange"
87>): FileSaveCoordinator {
88 const coordinator = useMemo(
5589 () =>
5690 new FileSaveCoordinator({
5791 debounceMs: FILE_SAVE_DEBOUNCE_MS,
......@@ -69,54 +103,270 @@ function EditableFileSurface({
69103 }),
70104 [cwd, environmentId, onPendingChange, relativePath],
71105 );
106
107 useEffect(() => () => coordinator.dispose(), [coordinator]);
108 return coordinator;
109}
110
111function EditableFileSurface({
112 environmentId,
113 cwd,
114 relativePath,
115 composerDraftTarget,
116 contents,
117 resolvedTheme,
118 onPendingChange,
119}: EditableFileSurfaceProps) {
120 const addReviewComment = useComposerDraftStore((store) => store.addReviewComment);
121 const removeReviewComment = useComposerDraftStore((store) => store.removeReviewComment);
122 const [lineAnnotations, setLineAnnotations] = useState<FileCommentLineAnnotation[]>([]);
123 const [selectedRange, setSelectedRange] = useState<SelectedLineRange | null>(null);
124 const surfaceRef = useRef<HTMLDivElement>(null);
125 const saveCoordinator = useFileSaveCoordinator({
126 environmentId,
127 cwd,
128 relativePath,
129 onPendingChange,
130 });
72131 const editor = useMemo(
73132 () =>
74 new Editor({
75 onChange: (file) => {
133 new Editor<FileCommentAnnotationGroup>({
134 onChange: (file, nextLineAnnotations) => {
76135 setProjectFileQueryData(environmentId, cwd, relativePath, file.contents);
77136 saveCoordinator.change(file.contents);
137 if (nextLineAnnotations) {
138 const remapped = remapFileCommentAnnotations(
139 nextLineAnnotations as FileCommentLineAnnotation[],
140 );
141 setLineAnnotations(remapped);
142 for (const annotation of remapped) {
143 for (const entry of annotation.metadata.entries) {
144 if (entry.kind !== "comment") continue;
145 addReviewComment(
146 composerDraftTarget,
147 buildFileReviewComment({
148 id: entry.id,
149 filePath: relativePath,
150 startLine: entry.startLine,
151 endLine: entry.endLine,
152 text: entry.text,
153 contents: file.contents,
154 }),
155 );
156 }
157 }
158 }
78159 },
79160 }),
80 [cwd, environmentId, relativePath, saveCoordinator],
161 [addReviewComment, composerDraftTarget, cwd, environmentId, relativePath, saveCoordinator],
81162 );
82163
83164 useEffect(
84165 () => () => {
85166 editor.cleanUp();
86 saveCoordinator.dispose();
87167 },
88 [editor, saveCoordinator],
168 [editor],
169 );
170
171 const removeAnnotationEntry = useCallback(
172 (entryId: string) => {
173 setSelectedRange(null);
174 removeReviewComment(composerDraftTarget, entryId);
175 setLineAnnotations((current) => {
176 return current.flatMap((annotation) => {
177 const entries = annotation.metadata.entries.filter((entry) => entry.id !== entryId);
178 return entries.length > 0 ? [{ ...annotation, metadata: { entries } }] : [];
179 });
180 });
181 },
182 [composerDraftTarget, removeReviewComment],
183 );
184
185 const submitAnnotationEntry = useCallback(
186 (entryId: string, text: string) => {
187 setSelectedRange(null);
188 const entry = lineAnnotations
189 .flatMap((annotation) => annotation.metadata.entries)
190 .find((candidate) => candidate.id === entryId);
191 if (entry) {
192 addReviewComment(
193 composerDraftTarget,
194 buildFileReviewComment({
195 id: entry.id,
196 filePath: relativePath,
197 startLine: entry.startLine,
198 endLine: entry.endLine,
199 text,
200 contents,
201 }),
202 );
203 }
204 setLineAnnotations((current) =>
205 current.map((annotation) => ({
206 ...annotation,
207 metadata: {
208 entries: annotation.metadata.entries.map((annotationEntry) =>
209 annotationEntry.id === entryId
210 ? { ...annotationEntry, kind: "comment", text }
211 : annotationEntry,
212 ),
213 },
214 })),
215 );
216 },
217 [addReviewComment, composerDraftTarget, contents, lineAnnotations, relativePath],
218 );
219
220 const beginComment = useCallback((range: SelectedLineRange) => {
221 const { startLine, endLine } = normalizeFileCommentRange(range);
222 const draftEntry: FileCommentAnnotationEntry = {
223 id: nextFileCommentId(),
224 kind: "draft",
225 startLine,
226 endLine,
227 text: "",
228 };
229 setLineAnnotations((current) => {
230 const withoutDraft = current.flatMap((annotation) => {
231 const entries = annotation.metadata.entries.filter((entry) => entry.kind !== "draft");
232 return entries.length > 0 ? [{ ...annotation, metadata: { entries } }] : [];
233 });
234 const existingIndex = withoutDraft.findIndex(
235 (annotation) => annotation.lineNumber === endLine,
236 );
237 if (existingIndex < 0) {
238 return [
239 ...withoutDraft,
240 {
241 lineNumber: endLine,
242 metadata: { entries: [draftEntry] },
243 },
244 ];
245 }
246 return withoutDraft.map((annotation, index) =>
247 index === existingIndex
248 ? {
249 ...annotation,
250 metadata: { entries: [...annotation.metadata.entries, draftEntry] },
251 }
252 : annotation,
253 );
254 });
255 }, []);
256 const hasOpenCommentForm = lineAnnotations.some((annotation) =>
257 annotation.metadata.entries.some((entry) => entry.kind === "draft"),
258 );
259 useEffect(() => {
260 const root = surfaceRef.current;
261 if (!root) return;
262 return installFileEditorDismissal({
263 root,
264 editor,
265 isBlocked: () => hasOpenCommentForm,
266 onDismiss: () => setSelectedRange(null),
267 });
268 }, [editor, hasOpenCommentForm]);
269 const handleLineSelectionEnd = useCallback(
270 (range: SelectedLineRange | null) => {
271 setSelectedRange(range);
272 if (range) {
273 beginComment(range);
274 }
275 },
276 [beginComment],
89277 );
90278
91279 return (
92280 <EditorProvider editor={editor}>
93 <Virtualizer
94 className="file-preview-virtualizer min-h-0 flex-1 overflow-auto"
95 config={{
96 overscrollSize: 600,
97 intersectionObserverMargin: 1200,
98 }}
99 >
100 <File
101 file={{
102 name: relativePath,
103 contents,
104 cacheKey: projectFileCacheKey(cwd, relativePath, contents),
281 <div ref={surfaceRef} className="flex min-h-0 flex-1">
282 <Virtualizer
283 className="file-preview-virtualizer min-h-0 flex-1 overflow-auto"
284 config={{
285 overscrollSize: 600,
286 intersectionObserverMargin: 1200,
105287 }}
106 options={{
107 disableFileHeader: true,
108 overflow: "scroll",
109 theme: resolveDiffThemeName(resolvedTheme),
110 themeType: resolvedTheme,
111 }}
112 className="min-h-full"
113 contentEditable
114 />
115 </Virtualizer>
288 >
289 <File<FileCommentAnnotationGroup>
290 file={{
291 name: relativePath,
292 contents,
293 cacheKey: projectFileCacheKey(cwd, relativePath, contents),
294 }}
295 options={{
296 disableFileHeader: true,
297 enableGutterUtility: !hasOpenCommentForm,
298 enableLineSelection: !hasOpenCommentForm,
299 onGutterUtilityClick: setSelectedRange,
300 onLineSelectionChange: setSelectedRange,
301 onLineSelectionEnd: handleLineSelectionEnd,
302 overflow: "scroll",
303 theme: resolveDiffThemeName(resolvedTheme),
304 themeType: resolvedTheme,
305 }}
306 selectedLines={selectedRange}
307 lineAnnotations={lineAnnotations}
308 renderAnnotation={(annotation) => (
309 <div className="py-1">
310 {annotation.metadata.entries.map((entry) => (
311 <LocalCommentAnnotation
312 key={entry.id}
313 kind={entry.kind}
314 rangeLabel={formatFileCommentRange(entry.startLine, entry.endLine)}
315 text={entry.text}
316 onCancel={() => removeAnnotationEntry(entry.id)}
317 onComment={(text) => submitAnnotationEntry(entry.id, text)}
318 onDelete={() => removeAnnotationEntry(entry.id)}
319 />
320 ))}
321 </div>
322 )}
323 className="min-h-full"
324 contentEditable
325 />
326 </Virtualizer>
327 </div>
116328 </EditorProvider>
117329 );
118330}
119331
332function RenderedMarkdownSurface({
333 environmentId,
334 cwd,
335 relativePath,
336 contents,
337 threadRef,
338 onPendingChange,
339}: Omit<EditableFileSurfaceProps, "resolvedTheme" | "composerDraftTarget"> & {
340 threadRef: ScopedThreadRef;
341}) {
342 const saveCoordinator = useFileSaveCoordinator({
343 environmentId,
344 cwd,
345 relativePath,
346 onPendingChange,
347 });
348
349 return (
350 <ScrollArea className="min-h-0 flex-1">
351 <ChatMarkdown
352 text={contents}
353 cwd={cwd}
354 threadRef={threadRef}
355 className="mx-auto max-w-4xl px-6 py-5"
356 onTaskListChange={({ markerOffset, checked }) => {
357 const currentContents =
358 getOptimisticProjectFileQueryData(environmentId, cwd, relativePath)?.contents ??
359 contents;
360 const nextContents = setMarkdownTaskChecked(currentContents, markerOffset, checked);
361 if (nextContents === currentContents) return;
362 setProjectFileQueryData(environmentId, cwd, relativePath, nextContents);
363 saveCoordinator.change(nextContents);
364 }}
365 />
366 </ScrollArea>
367 );
368}
369
120370function initialExplorerOpen(): boolean {
121371 try {
122372 return window.localStorage.getItem(FILE_EXPLORER_STORAGE_KEY) !== "false";
......@@ -130,13 +380,24 @@ export default function FilePreviewPanel({
130380 cwd,
131381 projectName,
132382 relativePath,
383 threadRef,
384 composerDraftTarget,
385 keybindings,
386 availableEditors,
133387 onOpenFile,
134388 onPendingChange,
135389}: FilePreviewPanelProps) {
136390 const { resolvedTheme } = useTheme();
391 const primaryEnvironmentId = usePrimaryEnvironmentId();
137392 const file = useProjectFileQuery(environmentId, cwd, relativePath);
138393 const [explorerOpen, setExplorerOpen] = useState(initialExplorerOpen);
394 const [renderedMarkdownPath, setRenderedMarkdownPath] = useState<string | null>(null);
139395 const breadcrumbRef = useRef<HTMLDivElement>(null);
396 const isMarkdown = relativePath ? isMarkdownPreviewFile(relativePath) : false;
397 const renderMarkdown = isMarkdown && renderedMarkdownPath === relativePath;
398 const canOpenInBrowser =
399 relativePath !== null && isPreviewSupportedInRuntime() && isBrowserPreviewFile(relativePath);
400 const absolutePath = relativePath ? resolvePathLinkTarget(relativePath, cwd) : null;
140401 const breadcrumbs = useMemo(
141402 () => (relativePath ? fileBreadcrumbs(projectName, relativePath) : []),
142403 [projectName, relativePath],
......@@ -159,6 +420,19 @@ export default function FilePreviewPanel({
159420 });
160421 };
161422
423 const handleOpenInBrowser = () => {
424 if (!absolutePath) return;
425 void openFileInPreview(threadRef, absolutePath).catch((error) => {
426 toastManager.add(
427 stackedThreadToast({
428 type: "error",
429 title: "Unable to open file in browser",
430 description: error instanceof Error ? error.message : "An error occurred.",
431 }),
432 );
433 });
434 };
435
162436 return (
163437 <div className="flex min-h-0 flex-1 flex-col overflow-hidden bg-background">
164438 {relativePath ? (
......@@ -195,6 +469,57 @@ export default function FilePreviewPanel({
195469 ))}
196470 </div>
197471 </ScrollArea>
472 {absolutePath && environmentId === primaryEnvironmentId ? (
473 <OpenInPicker
474 keybindings={keybindings}
475 availableEditors={availableEditors}
476 openInCwd={absolutePath}
477 compact
478 enableShortcut={false}
479 />
480 ) : null}
481 {isMarkdown ? (
482 <Tooltip>
483 <TooltipTrigger
484 render={
485 <Toggle
486 className="shrink-0"
487 pressed={renderMarkdown}
488 onPressedChange={(pressed) =>
489 setRenderedMarkdownPath(pressed ? relativePath : null)
490 }
491 aria-label={renderMarkdown ? "Show markdown source" : "Show rendered markdown"}
492 variant="ghost"
493 size="sm"
494 >
495 {renderMarkdown ? <Code2 className="size-3.5" /> : <Eye className="size-3.5" />}
496 </Toggle>
497 }
498 />
499 <TooltipPopup>
500 {renderMarkdown ? "Show markdown source" : "Show rendered markdown"}
501 </TooltipPopup>
502 </Tooltip>
503 ) : null}
504 {canOpenInBrowser ? (
505 <Tooltip>
506 <TooltipTrigger
507 render={
508 <Toggle
509 className="shrink-0"
510 pressed={false}
511 onPressedChange={handleOpenInBrowser}
512 aria-label="Open file in preview browser"
513 variant="ghost"
514 size="sm"
515 >
516 <Globe2 className="size-3.5" />
517 </Toggle>
518 }
519 />
520 <TooltipPopup>Open file in preview browser</TooltipPopup>
521 </Tooltip>
522 ) : null}
198523 <Tooltip>
199524 <TooltipTrigger
200525 render={
......@@ -237,7 +562,16 @@ export default function FilePreviewPanel({
237562 <LoaderCircle className="size-5 animate-spin" />
238563 </div>
239564 ) : relativePath && file.data ? (
240 file.data.truncated ? (
565 isMarkdown && renderMarkdown ? (
566 <RenderedMarkdownSurface
567 environmentId={environmentId}
568 cwd={cwd}
569 relativePath={relativePath}
570 threadRef={threadRef}
571 contents={file.data.contents}
572 onPendingChange={onPendingChange}
573 />
574 ) : file.data.truncated ? (
241575 <Virtualizer
242576 key={`${relativePath}:${resolvedTheme}:${file.data.byteLength}`}
243577 className="file-preview-virtualizer min-h-0 flex-1 overflow-auto"
......@@ -267,6 +601,7 @@ export default function FilePreviewPanel({
267601 environmentId={environmentId}
268602 cwd={cwd}
269603 relativePath={relativePath}
604 composerDraftTarget={composerDraftTarget}
270605 contents={file.data.contents}
271606 resolvedTheme={resolvedTheme}
272607 onPendingChange={onPendingChange}
apps/web/src/components/files/LocalCommentAnnotation.tsx created+90
......@@ -0,0 +1,90 @@
1import { MessageCircle, Trash2 } from "lucide-react";
2import { useState } from "react";
3
4import { Button } from "~/components/ui/button";
5import { Textarea } from "~/components/ui/textarea";
6
7interface LocalCommentAnnotationProps {
8 kind: "draft" | "comment";
9 rangeLabel: string;
10 text: string;
11 onCancel: () => void;
12 onComment: (text: string) => void;
13 onDelete: () => void;
14}
15
16export function LocalCommentAnnotation({
17 kind,
18 rangeLabel,
19 text: savedText,
20 onCancel,
21 onComment,
22 onDelete,
23}: LocalCommentAnnotationProps) {
24 const [text, setText] = useState("");
25
26 if (kind === "comment") {
27 return (
28 <div
29 data-file-comment-annotation
30 className="mx-3 my-2 rounded-xl border border-border/70 bg-background p-3 shadow-sm"
31 contentEditable={false}
32 onPointerDown={(event) => event.stopPropagation()}
33 >
34 <div className="flex items-center gap-2">
35 <MessageCircle className="size-4 text-muted-foreground" />
36 <span className="text-xs font-medium">Local comment</span>
37 <span className="ml-auto text-[11px] text-muted-foreground">{rangeLabel}</span>
38 <Button variant="ghost" size="icon-xs" aria-label="Delete comment" onClick={onDelete}>
39 <Trash2 className="size-3.5" />
40 </Button>
41 </div>
42 <p className="mt-2 whitespace-pre-wrap text-sm leading-relaxed text-foreground">
43 {savedText}
44 </p>
45 </div>
46 );
47 }
48
49 return (
50 <div
51 data-file-comment-annotation
52 className="mx-3 my-2 rounded-xl border border-border/70 bg-background p-3 shadow-lg"
53 contentEditable={false}
54 onPointerDown={(event) => event.stopPropagation()}
55 >
56 <div className="flex items-center gap-2">
57 <MessageCircle className="size-4 text-muted-foreground" />
58 <span className="text-sm font-medium">Local comment</span>
59 </div>
60 <div className="mt-1 text-xs text-muted-foreground">Comment on lines {rangeLabel}</div>
61 <Textarea
62 autoFocus
63 className="mt-3"
64 size="sm"
65 value={text}
66 placeholder="Request change"
67 aria-label={`Comment on lines ${rangeLabel}`}
68 onChange={(event) => setText(event.target.value)}
69 onKeyDown={(event) => {
70 if (event.key === "Escape") {
71 event.preventDefault();
72 onCancel();
73 }
74 if ((event.metaKey || event.ctrlKey) && event.key === "Enter" && text.trim()) {
75 event.preventDefault();
76 onComment(text.trim());
77 }
78 }}
79 />
80 <div className="mt-3 flex justify-end gap-2">
81 <Button variant="ghost" size="sm" onClick={onCancel}>
82 Cancel
83 </Button>
84 <Button size="sm" disabled={!text.trim()} onClick={() => onComment(text.trim())}>
85 Comment
86 </Button>
87 </div>
88 </div>
89 );
90}
apps/web/src/components/files/fileCommentAnnotations.ts created+54
......@@ -0,0 +1,54 @@
1import type { LineAnnotation, SelectedLineRange } from "@pierre/diffs";
2
3export interface FileCommentAnnotationEntry {
4 id: string;
5 kind: "draft" | "comment";
6 startLine: number;
7 endLine: number;
8 text: string;
9}
10
11export interface FileCommentAnnotationGroup {
12 entries: FileCommentAnnotationEntry[];
13}
14
15export type FileCommentLineAnnotation = LineAnnotation<FileCommentAnnotationGroup>;
16
17let fileCommentSequence = 0;
18
19export function nextFileCommentId(): string {
20 fileCommentSequence += 1;
21 return `file-comment-${Date.now()}-${fileCommentSequence}`;
22}
23
24export function normalizeFileCommentRange(range: SelectedLineRange): {
25 startLine: number;
26 endLine: number;
27} {
28 return {
29 startLine: Math.min(range.start, range.end),
30 endLine: Math.max(range.start, range.end),
31 };
32}
33
34export function formatFileCommentRange(startLine: number, endLine: number): string {
35 return startLine === endLine ? `L${startLine}` : `L${startLine} to L${endLine}`;
36}
37
38export function remapFileCommentAnnotations(
39 annotations: ReadonlyArray<FileCommentLineAnnotation>,
40): FileCommentLineAnnotation[] {
41 return annotations.map((annotation) => ({
42 ...annotation,
43 metadata: {
44 entries: annotation.metadata.entries.map((entry) => {
45 const lineCount = entry.endLine - entry.startLine;
46 return {
47 ...entry,
48 endLine: annotation.lineNumber,
49 startLine: Math.max(1, annotation.lineNumber - lineCount),
50 };
51 }),
52 },
53 }));
54}
apps/web/src/components/files/fileEditorDismissal.ts created+53
......@@ -0,0 +1,53 @@
1interface FileEditorDismissalOptions {
2 root: HTMLElement;
3 editor: {
4 setSelections: (selections: []) => void;
5 };
6 isBlocked: () => boolean;
7 onDismiss: () => void;
8}
9
10function dismissFileEditorInteraction({
11 root,
12 editor,
13 onDismiss,
14}: Pick<FileEditorDismissalOptions, "root" | "editor" | "onDismiss">): void {
15 onDismiss();
16 editor.setSelections([]);
17
18 const file = root.querySelector<HTMLElement>("diffs-container");
19 const activeElement = file?.shadowRoot?.activeElement;
20 if (activeElement instanceof HTMLElement) {
21 activeElement.blur();
22 }
23}
24
25function isFileEditorFocused(root: HTMLElement): boolean {
26 const file = root.querySelector<HTMLElement>("diffs-container");
27 return file?.shadowRoot?.activeElement?.hasAttribute("data-content") === true;
28}
29
30export function installFileEditorDismissal({
31 root,
32 editor,
33 isBlocked,
34 onDismiss,
35}: FileEditorDismissalOptions): () => void {
36 const handlePointerDown = (event: PointerEvent) => {
37 if (isBlocked() || event.composedPath().includes(root)) return;
38 dismissFileEditorInteraction({ root, editor, onDismiss });
39 };
40 const handleKeyDown = (event: KeyboardEvent) => {
41 if (event.key !== "Escape" || isBlocked() || !isFileEditorFocused(root)) return;
42 event.preventDefault();
43 event.stopImmediatePropagation();
44 dismissFileEditorInteraction({ root, editor, onDismiss });
45 };
46
47 document.addEventListener("pointerdown", handlePointerDown, true);
48 document.addEventListener("keydown", handleKeyDown, true);
49 return () => {
50 document.removeEventListener("pointerdown", handlePointerDown, true);
51 document.removeEventListener("keydown", handleKeyDown, true);
52 };
53}
apps/web/src/components/files/filePreviewMode.ts created+18
......@@ -0,0 +1,18 @@
1export const isMarkdownPreviewFile = (path: string): boolean => /\.(?:md|mdx)$/i.test(path);
2
3export function setMarkdownTaskChecked(
4 markdown: string,
5 markerOffset: number,
6 checked: boolean,
7): string {
8 if (
9 markerOffset < 0 ||
10 markdown[markerOffset] !== "[" ||
11 !/[ xX]/.test(markdown[markerOffset + 1] ?? "") ||
12 markdown[markerOffset + 2] !== "]"
13 ) {
14 return markdown;
15 }
16
17 return `${markdown.slice(0, markerOffset + 1)}${checked ? "x" : " "}${markdown.slice(markerOffset + 2)}`;
18}
apps/web/src/components/files/projectFilesQueryState.test.ts+5
......@@ -19,6 +19,7 @@ import {
1919 confirmProjectFileQueryData,
2020 getProjectEntriesQueryAtom,
2121 getProjectFileQueryAtom,
22 getOptimisticProjectFileQueryData,
2223 resolveProjectFileQueryData,
2324 setProjectFileQueryData,
2425} from "./projectFilesQueryState";
......@@ -104,6 +105,10 @@ describe("project files queries", () => {
104105 setProjectFileQueryData(environmentId, "/repo", "convex.json", '{"nodeVersion":"220"}');
105106 setProjectFileQueryData(environmentId, "/repo", "convex.json", '{"nodeVersion":"22"}');
106107
108 expect(getOptimisticProjectFileQueryData(environmentId, "/repo", "convex.json")?.contents).toBe(
109 '{"nodeVersion":"22"}',
110 );
111
107112 expect(
108113 confirmProjectFileQueryData(environmentId, "/repo", "convex.json", '{"nodeVersion":"220"}'),
109114 ).toBe(false);
apps/web/src/components/files/projectFilesQueryState.ts+8
......@@ -121,6 +121,14 @@ export function setProjectFileQueryData(
121121 });
122122}
123123
124export function getOptimisticProjectFileQueryData(
125 environmentId: EnvironmentId,
126 cwd: string,
127 relativePath: string,
128): ProjectReadFileResult | null {
129 return optimisticProjectFiles.get(fileKey(environmentId, cwd, relativePath))?.data ?? null;
130}
131
124132export function confirmProjectFileQueryData(
125133 environmentId: EnvironmentId,
126134 cwd: string,
apps/web/src/composerDraftStore.test.ts+63
......@@ -615,6 +615,69 @@ describe("composerDraftStore element contexts", () => {
615615 });
616616});
617617
618describe("composerDraftStore review comments", () => {
619 const threadId = ThreadId.make("thread-review-comment");
620 const threadRef = scopeThreadRef(TEST_ENVIRONMENT_ID, threadId);
621 const comment = {
622 id: "comment-1",
623 sectionId: "file:src/app.ts",
624 sectionTitle: "File comment",
625 filePath: "src/app.ts",
626 startIndex: 1,
627 endIndex: 2,
628 rangeLabel: "L2 to L3",
629 text: "Keep this configurable.",
630 diff: "@@ -2,2 +2,2 @@\n two\n three",
631 } as const;
632
633 beforeEach(() => {
634 resetComposerDraftStore();
635 });
636
637 it("upserts and removes review comments by id", () => {
638 const store = useComposerDraftStore.getState();
639 store.addReviewComment(threadRef, comment);
640 store.addReviewComment(threadRef, { ...comment, text: "Updated comment." });
641
642 expect(draftFor(threadId, TEST_ENVIRONMENT_ID)?.reviewComments).toEqual([
643 { ...comment, text: "Updated comment." },
644 ]);
645
646 store.removeReviewComment(threadRef, comment.id);
647 expect(draftFor(threadId, TEST_ENVIRONMENT_ID)).toBeUndefined();
648 });
649
650 it("persists review comments and clears them with composer content", () => {
651 const store = useComposerDraftStore.getState();
652 store.addReviewComment(threadRef, comment);
653 const persistApi = useComposerDraftStore.persist as unknown as {
654 getOptions: () => {
655 partialize: (state: ReturnType<typeof useComposerDraftStore.getState>) => unknown;
656 };
657 };
658 const persisted = persistApi.getOptions().partialize(useComposerDraftStore.getState()) as {
659 draftsByThreadKey?: Record<string, { reviewComments?: Array<Record<string, unknown>> }>;
660 };
661
662 expect(
663 persisted.draftsByThreadKey?.[threadKeyFor(threadId, TEST_ENVIRONMENT_ID)]
664 ?.reviewComments?.[0],
665 ).toMatchObject(comment);
666
667 store.clearComposerContent(threadRef);
668 expect(draftFor(threadId, TEST_ENVIRONMENT_ID)).toBeUndefined();
669 });
670
671 it("stores review comments against a new-thread draft id", () => {
672 const draftId = DraftId.make("draft-review-comment");
673 useComposerDraftStore.getState().addReviewComment(draftId, comment);
674
675 expect(useComposerDraftStore.getState().getComposerDraft(draftId)?.reviewComments).toEqual([
676 comment,
677 ]);
678 });
679});
680
618681describe("composerDraftStore project draft thread mapping", () => {
619682 const projectId = ProjectId.make("project-a");
620683 const otherProjectId = ProjectId.make("project-b");
apps/web/src/composerDraftStore.ts+78-1
......@@ -50,11 +50,13 @@ import { useShallow } from "zustand/react/shallow";
5050import { createDebouncedStorage, createMemoryStorage } from "./lib/storage";
5151import { getDefaultServerModel } from "./providerModels";
5252import { UnifiedSettings } from "@t3tools/contracts/settings";
53import { ReviewCommentContextSchema, type ReviewCommentContext } from "./reviewCommentContext";
5354const isRuntimeMode = Schema.is(RuntimeMode);
5455const isProviderDriverKind = Schema.is(ProviderDriverKind);
56const isReviewCommentContext = Schema.is(ReviewCommentContextSchema);
5557
5658export const COMPOSER_DRAFT_STORAGE_KEY = "t3code:composer-drafts:v1";
57const COMPOSER_DRAFT_STORAGE_VERSION = 7;
59const COMPOSER_DRAFT_STORAGE_VERSION = 8;
5860const DraftThreadEnvModeSchema = Schema.Literals(["local", "worktree"]);
5961export type DraftThreadEnvMode = typeof DraftThreadEnvModeSchema.Type;
6062
......@@ -128,6 +130,7 @@ const PersistedComposerThreadDraftState = Schema.Struct({
128130 terminalContexts: Schema.optionalKey(Schema.Array(PersistedTerminalContextDraft)),
129131 elementContexts: Schema.optionalKey(Schema.Array(PersistedElementContextDraft)),
130132 previewAnnotations: Schema.optionalKey(Schema.Array(PreviewAnnotationPayloadSchema)),
133 reviewComments: Schema.optionalKey(Schema.Array(ReviewCommentContextSchema)),
131134 // Keyed by `ProviderInstanceId` (open branded slug) so custom provider
132135 // instances (e.g. `codex_personal`) round-trip alongside the built-in
133136 // `codex` / `claudeAgent` / ... entries. Every prior `ProviderDriverKind`
......@@ -256,6 +259,7 @@ export interface ComposerThreadDraftState {
256259 */
257260 elementContexts: ElementContextDraft[];
258261 previewAnnotations: PreviewAnnotationPayload[];
262 reviewComments: ReviewCommentContext[];
259263 /**
260264 * Per-instance model selection. Keyed by `ProviderInstanceId` (open
261265 * branded slug) so a default `codex` instance and a user-authored
......@@ -464,6 +468,12 @@ interface ComposerDraftStoreState {
464468 annotations: ReadonlyArray<PreviewAnnotationPayload>,
465469 ) => void;
466470 removePreviewAnnotation: (threadRef: ComposerThreadTarget, annotationId: string) => void;
471 addReviewComment: (threadRef: ComposerThreadTarget, comment: ReviewCommentContext) => void;
472 setReviewComments: (
473 threadRef: ComposerThreadTarget,
474 comments: ReadonlyArray<ReviewCommentContext>,
475 ) => void;
476 removeReviewComment: (threadRef: ComposerThreadTarget, commentId: string) => void;
467477 clearPersistedAttachments: (threadRef: ComposerThreadTarget) => void;
468478 syncPersistedAttachments: (
469479 threadRef: ComposerThreadTarget,
......@@ -541,11 +551,13 @@ const EMPTY_PERSISTED_ATTACHMENTS: PersistedComposerImageAttachment[] = [];
541551const EMPTY_TERMINAL_CONTEXTS: TerminalContextDraft[] = [];
542552const EMPTY_ELEMENT_CONTEXTS: ElementContextDraft[] = [];
543553const EMPTY_PREVIEW_ANNOTATIONS: PreviewAnnotationPayload[] = [];
554const EMPTY_REVIEW_COMMENTS: ReviewCommentContext[] = [];
544555Object.freeze(EMPTY_IMAGES);
545556Object.freeze(EMPTY_IDS);
546557Object.freeze(EMPTY_PERSISTED_ATTACHMENTS);
547558Object.freeze(EMPTY_ELEMENT_CONTEXTS);
548559Object.freeze(EMPTY_PREVIEW_ANNOTATIONS);
560Object.freeze(EMPTY_REVIEW_COMMENTS);
549561const EMPTY_MODEL_SELECTION_BY_PROVIDER: Partial<Record<ProviderDriverKind, ModelSelection>> =
550562 Object.freeze({});
551563const EMPTY_COMPOSER_DRAFT_MODEL_STATE = Object.freeze<ComposerDraftModelState>({
......@@ -561,6 +573,7 @@ const EMPTY_THREAD_DRAFT = Object.freeze<ComposerThreadDraftState>({
561573 terminalContexts: EMPTY_TERMINAL_CONTEXTS,
562574 elementContexts: EMPTY_ELEMENT_CONTEXTS,
563575 previewAnnotations: EMPTY_PREVIEW_ANNOTATIONS,
576 reviewComments: EMPTY_REVIEW_COMMENTS,
564577 modelSelectionByProvider: EMPTY_MODEL_SELECTION_BY_PROVIDER,
565578 activeProvider: null,
566579 runtimeMode: null,
......@@ -582,6 +595,7 @@ export function createEmptyThreadDraft(): ComposerThreadDraftState {
582595 terminalContexts: [],
583596 elementContexts: [],
584597 previewAnnotations: [],
598 reviewComments: [],
585599 modelSelectionByProvider: {},
586600 activeProvider: null,
587601 runtimeMode: null,
......@@ -654,6 +668,7 @@ function shouldRemoveDraft(draft: ComposerThreadDraftState): boolean {
654668 draft.terminalContexts.length === 0 &&
655669 draft.elementContexts.length === 0 &&
656670 draft.previewAnnotations.length === 0 &&
671 draft.reviewComments.length === 0 &&
657672 Object.keys(draft.modelSelectionByProvider).length === 0 &&
658673 draft.activeProvider === null &&
659674 draft.runtimeMode === null &&
......@@ -1624,6 +1639,9 @@ function normalizePersistedDraftsByThreadId(
16241639 return normalized ? [normalized] : [];
16251640 })
16261641 : [];
1642 const reviewComments = Array.isArray(draftCandidate.reviewComments)
1643 ? draftCandidate.reviewComments.filter(isReviewCommentContext)
1644 : [];
16271645 const runtimeMode = isRuntimeMode(draftCandidate.runtimeMode)
16281646 ? draftCandidate.runtimeMode
16291647 : null;
......@@ -1688,6 +1706,7 @@ function normalizePersistedDraftsByThreadId(
16881706 attachments.length === 0 &&
16891707 terminalContexts.length === 0 &&
16901708 elementContexts.length === 0 &&
1709 reviewComments.length === 0 &&
16911710 !hasModelData &&
16921711 !runtimeMode &&
16931712 !interactionMode
......@@ -1711,6 +1730,7 @@ function normalizePersistedDraftsByThreadId(
17111730 attachments,
17121731 ...(terminalContexts.length > 0 ? { terminalContexts } : {}),
17131732 ...(elementContexts.length > 0 ? { elementContexts } : {}),
1733 ...(reviewComments.length > 0 ? { reviewComments } : {}),
17141734 ...(hasModelData
17151735 ? {
17161736 modelSelectionByProvider: compactModelSelectionByProvider(modelSelectionByProvider),
......@@ -1795,6 +1815,7 @@ function partializeComposerDraftStoreState(
17951815 draft.terminalContexts.length === 0 &&
17961816 draft.elementContexts.length === 0 &&
17971817 draft.previewAnnotations.length === 0 &&
1818 draft.reviewComments.length === 0 &&
17981819 !hasModelData &&
17991820 draft.runtimeMode === null &&
18001821 draft.interactionMode === null
......@@ -1841,6 +1862,11 @@ function partializeComposerDraftStoreState(
18411862 ),
18421863 }
18431864 : {}),
1865 ...(draft.reviewComments.length > 0
1866 ? {
1867 reviewComments: draft.reviewComments.map((comment) => ({ ...comment })),
1868 }
1869 : {}),
18441870 ...(hasModelData
18451871 ? {
18461872 modelSelectionByProvider: compactModelSelectionByProvider(
......@@ -2083,6 +2109,7 @@ function toHydratedThreadDraft(
20832109 })) ?? [],
20842110 previewAnnotations:
20852111 persistedDraft.previewAnnotations?.map((annotation) => ({ ...annotation })) ?? [],
2112 reviewComments: persistedDraft.reviewComments?.map((comment) => ({ ...comment })) ?? [],
20862113 modelSelectionByProvider,
20872114 activeProvider,
20882115 runtimeMode: persistedDraft.runtimeMode ?? null,
......@@ -3148,6 +3175,55 @@ const composerDraftStore = create<ComposerDraftStoreState>()(
31483175 return { draftsByThreadKey: nextDraftsByThreadKey };
31493176 });
31503177 },
3178 addReviewComment: (threadRef, comment) => {
3179 const threadKey = resolveComposerDraftKey(get(), threadRef);
3180 if (!threadKey || !isReviewCommentContext(comment)) return;
3181 set((state) => {
3182 const existing = state.draftsByThreadKey[threadKey] ?? createEmptyThreadDraft();
3183 const reviewComments = existing.reviewComments.filter(
3184 (entry) => entry.id !== comment.id,
3185 );
3186 return {
3187 draftsByThreadKey: {
3188 ...state.draftsByThreadKey,
3189 [threadKey]: {
3190 ...existing,
3191 reviewComments: [...reviewComments, { ...comment }],
3192 },
3193 },
3194 };
3195 });
3196 },
3197 setReviewComments: (threadRef, comments) => {
3198 const threadKey = resolveComposerDraftKey(get(), threadRef);
3199 if (!threadKey) return;
3200 const reviewComments = comments
3201 .filter(isReviewCommentContext)
3202 .map((comment) => ({ ...comment }));
3203 set((state) => {
3204 const existing = state.draftsByThreadKey[threadKey] ?? createEmptyThreadDraft();
3205 const nextDraft = { ...existing, reviewComments };
3206 const nextDraftsByThreadKey = { ...state.draftsByThreadKey };
3207 if (shouldRemoveDraft(nextDraft)) delete nextDraftsByThreadKey[threadKey];
3208 else nextDraftsByThreadKey[threadKey] = nextDraft;
3209 return { draftsByThreadKey: nextDraftsByThreadKey };
3210 });
3211 },
3212 removeReviewComment: (threadRef, commentId) => {
3213 const threadKey = resolveComposerDraftKey(get(), threadRef);
3214 if (!threadKey || !commentId) return;
3215 set((state) => {
3216 const current = state.draftsByThreadKey[threadKey];
3217 if (!current) return state;
3218 const reviewComments = current.reviewComments.filter((entry) => entry.id !== commentId);
3219 if (reviewComments.length === current.reviewComments.length) return state;
3220 const nextDraft = { ...current, reviewComments };
3221 const nextDraftsByThreadKey = { ...state.draftsByThreadKey };
3222 if (shouldRemoveDraft(nextDraft)) delete nextDraftsByThreadKey[threadKey];
3223 else nextDraftsByThreadKey[threadKey] = nextDraft;
3224 return { draftsByThreadKey: nextDraftsByThreadKey };
3225 });
3226 },
31513227 clearPersistedAttachments: (threadRef) => {
31523228 const threadKey = resolveComposerDraftKey(get(), threadRef) ?? "";
31533229 if (threadKey.length === 0) {
......@@ -3222,6 +3298,7 @@ const composerDraftStore = create<ComposerDraftStoreState>()(
32223298 terminalContexts: [],
32233299 elementContexts: [],
32243300 previewAnnotations: [],
3301 reviewComments: [],
32253302 };
32263303 const nextDraftsByThreadKey = { ...state.draftsByThreadKey };
32273304 if (shouldRemoveDraft(nextDraft)) {
apps/web/src/reviewCommentContext.test.ts+198
......@@ -1,8 +1,15 @@
1import { parsePatchFiles } from "@pierre/diffs/utils/parsePatchFiles";
12import { describe, expect, it } from "vite-plus/test";
23
34import {
5 appendReviewCommentsToPrompt,
6 buildDiffReviewComment,
7 buildFileReviewComment,
48 buildReviewCommentRenderablePatch,
9 formatReviewCommentContext,
10 inferReviewCommentFenceLanguage,
511 parseReviewCommentMessageSegments,
12 restoreDiffReviewCommentRange,
613} from "./reviewCommentContext";
714
815describe("review comment context parsing", () => {
......@@ -74,4 +81,195 @@ describe("review comment context parsing", () => {
7481 ].join("\n"),
7582 );
7683 });
84
85 it("formats editable file comments with the mobile review-comment contract", () => {
86 const comment = buildFileReviewComment({
87 id: "comment-1",
88 filePath: "src/app.ts",
89 startLine: 2,
90 endLine: 3,
91 text: "Keep this configurable.",
92 contents: ["one", "two", "three", "four"].join("\n"),
93 });
94 const prompt = appendReviewCommentsToPrompt("Please update this.", [comment]);
95 const segments = parseReviewCommentMessageSegments(prompt);
96
97 expect(segments).toHaveLength(2);
98 expect(segments[1]).toEqual(
99 expect.objectContaining({
100 kind: "review-comment",
101 comment: expect.objectContaining({
102 filePath: "src/app.ts",
103 startIndex: 1,
104 endIndex: 2,
105 rangeLabel: "L2 to L3",
106 text: "Keep this configurable.",
107 diff: "two\nthree",
108 fenceLanguage: "ts",
109 }),
110 }),
111 );
112 expect(prompt).toContain("```ts\ntwo\nthree\n```");
113 });
114
115 it("formats mixed diff-side selections with the mobile review-comment contract", () => {
116 const [fileDiff] = parsePatchFiles(
117 [
118 "diff --git a/src/app.ts b/src/app.ts",
119 "--- a/src/app.ts",
120 "+++ b/src/app.ts",
121 "@@ -1,4 +1,4 @@",
122 " one",
123 "-two",
124 "+TWO",
125 " three",
126 " four",
127 ].join("\n"),
128 "review-comment-test",
129 )[0]!.files;
130
131 const comment = buildDiffReviewComment({
132 id: "comment-2",
133 sectionId: "turn:2",
134 sectionTitle: "Turn 2",
135 filePath: "src/app.ts",
136 fileDiff: fileDiff!,
137 range: {
138 start: 2,
139 side: "deletions",
140 end: 2,
141 endSide: "additions",
142 },
143 text: "Keep this compatible.",
144 });
145
146 expect(comment).toEqual(
147 expect.objectContaining({
148 sectionId: "turn:2",
149 sectionTitle: "Turn 2",
150 filePath: "src/app.ts",
151 startIndex: 1,
152 endIndex: 2,
153 rangeLabel: "2",
154 text: "Keep this compatible.",
155 diff: "@@ -2,1 +2,1 @@\n-two\n+TWO",
156 fenceLanguage: "diff",
157 }),
158 );
159 });
160
161 it("uses file extensions for source comments and preserves nested markdown fences", () => {
162 expect(inferReviewCommentFenceLanguage("docs/plan.md")).toBe("md");
163 expect(inferReviewCommentFenceLanguage("src/view.tsx")).toBe("tsx");
164
165 const serialized = formatReviewCommentContext({
166 id: "comment-3",
167 sectionId: "file:docs/plan.md",
168 sectionTitle: "File comment",
169 filePath: "docs/plan.md",
170 startIndex: 0,
171 endIndex: 2,
172 rangeLabel: "L1 to L3",
173 text: "Update this example.",
174 diff: ["# Example", "```ts", "const value = 1;", "```"].join("\n"),
175 fenceLanguage: "md",
176 });
177 const [segment] = parseReviewCommentMessageSegments(serialized);
178
179 expect(serialized).toContain("````md");
180 expect(segment).toEqual(
181 expect.objectContaining({
182 kind: "review-comment",
183 comment: expect.objectContaining({
184 fenceLanguage: "md",
185 diff: ["# Example", "```ts", "const value = 1;", "```"].join("\n"),
186 }),
187 }),
188 );
189 });
190
191 it("round-trips greater-than signs in attributes", () => {
192 const serialized = formatReviewCommentContext({
193 id: "comment-4",
194 sectionId: "turn:4",
195 sectionTitle: "Changes > 5",
196 filePath: "src/app.ts",
197 startIndex: 0,
198 endIndex: 0,
199 rangeLabel: "+1",
200 text: "Check this.",
201 diff: "@@ -0,0 +1,1 @@\n+one",
202 fenceLanguage: "diff",
203 });
204 const [segment] = parseReviewCommentMessageSegments(serialized);
205
206 expect(serialized).toContain('sectionTitle="Changes &gt; 5"');
207 expect(segment).toEqual(
208 expect.objectContaining({
209 kind: "review-comment",
210 comment: expect.objectContaining({ sectionTitle: "Changes > 5" }),
211 }),
212 );
213 });
214
215 it("keeps fenced examples in comment text separate from the final context fence", () => {
216 const text = ["Try this:", "```ts", "const value = 1;", "```", "Then retry."].join("\n");
217 const serialized = formatReviewCommentContext({
218 id: "comment-5",
219 sectionId: "turn:5",
220 sectionTitle: "Turn 5",
221 filePath: "src/app.ts",
222 startIndex: 0,
223 endIndex: 0,
224 rangeLabel: "+1",
225 text,
226 diff: "@@ -0,0 +1,1 @@\n+one",
227 fenceLanguage: "diff",
228 });
229 const [segment] = parseReviewCommentMessageSegments(serialized);
230
231 expect(segment).toEqual(
232 expect.objectContaining({
233 kind: "review-comment",
234 comment: expect.objectContaining({
235 text,
236 diff: "@@ -0,0 +1,1 @@\n+one",
237 fenceLanguage: "diff",
238 }),
239 }),
240 );
241 });
242
243 it("restores Pierre line selections from persisted diff comment row indexes", () => {
244 const fileDiff = parsePatchFiles(
245 [
246 "diff --git a/src/app.ts b/src/app.ts",
247 "--- a/src/app.ts",
248 "+++ b/src/app.ts",
249 "@@ -1,3 +1,3 @@",
250 " one",
251 "-two",
252 "+TWO",
253 " three",
254 ].join("\n"),
255 "restore-review-comment-range",
256 )[0]!.files[0]!;
257 const comment = buildDiffReviewComment({
258 id: "comment-6",
259 sectionId: "turn:6",
260 sectionTitle: "Turn 6",
261 filePath: "src/app.ts",
262 fileDiff,
263 range: { start: 2, side: "deletions", end: 2, endSide: "additions" },
264 text: "Keep both sides.",
265 });
266
267 expect(comment).not.toBeNull();
268 expect(restoreDiffReviewCommentRange(fileDiff, comment!)).toEqual({
269 start: 2,
270 side: "deletions",
271 end: 2,
272 endSide: "additions",
273 });
274 });
77275});
apps/web/src/reviewCommentContext.ts+316-11
......@@ -1,3 +1,19 @@
1import type { FileDiffMetadata, SelectedLineRange, SelectionSide } from "@pierre/diffs";
2import * as Schema from "effect/Schema";
3
4export const ReviewCommentContextSchema = Schema.Struct({
5 id: Schema.String,
6 sectionId: Schema.String,
7 sectionTitle: Schema.String,
8 filePath: Schema.String,
9 startIndex: Schema.Number,
10 endIndex: Schema.Number,
11 rangeLabel: Schema.String,
12 text: Schema.String,
13 diff: Schema.String,
14 fenceLanguage: Schema.optional(Schema.String),
15});
16
117export interface ReviewCommentContext {
218 readonly id: string;
319 readonly sectionId: string;
......@@ -8,6 +24,14 @@ export interface ReviewCommentContext {
824 readonly rangeLabel: string;
925 readonly text: string;
1026 readonly diff: string;
27 readonly fenceLanguage?: string | undefined;
28}
29
30interface DiffReviewLine {
31 readonly change: "context" | "add" | "delete";
32 readonly oldLineNumber: number | null;
33 readonly newLineNumber: number | null;
34 readonly content: string;
1135}
1236
1337export type ReviewCommentMessageSegment =
......@@ -23,11 +47,20 @@ export type ReviewCommentMessageSegment =
2347
2448const REVIEW_COMMENT_BLOCK_PATTERN = /<review_comment\b([^>]*)>\s*([\s\S]*?)<\/review_comment>/g;
2549const REVIEW_COMMENT_ATTRIBUTE_PATTERN = /([a-zA-Z][a-zA-Z0-9_-]*)="([^"]*)"/g;
26const REVIEW_COMMENT_DIFF_FENCE_PATTERN = /```diff\s*\n([\s\S]*?)\n```/;
50const REVIEW_COMMENT_FENCE_PATTERN = /(`{3,})([^\s`]*)[^\n]*\n([\s\S]*?)\n\1/g;
51
52function escapeReviewCommentAttribute(value: string): string {
53 return value
54 .replace(/&/g, "&amp;")
55 .replace(/"/g, "&quot;")
56 .replace(/</g, "&lt;")
57 .replace(/>/g, "&gt;");
58}
2759
2860function unescapeReviewCommentAttribute(value: string): string {
2961 return value
3062 .replace(/&lt;/g, "<")
63 .replace(/&gt;/g, ">")
3164 .replace(/&quot;/g, '"')
3265 .replace(/&amp;/g, "&");
3366}
......@@ -47,14 +80,19 @@ function readNonNegativeInteger(value: string | undefined): number | null {
4780 return Number(value);
4881}
4982
50function extractReviewCommentText(rawBody: string): string {
51 const fenceIndex = rawBody.indexOf("```diff");
52 const commentBody = fenceIndex >= 0 ? rawBody.slice(0, fenceIndex) : rawBody;
53 return commentBody.trim();
54}
55
56function extractReviewCommentDiff(rawBody: string): string {
57 return rawBody.match(REVIEW_COMMENT_DIFF_FENCE_PATTERN)?.[1]?.trim() ?? "";
83function extractReviewCommentBody(rawBody: string): {
84 text: string;
85 language: string;
86 contents: string;
87} {
88 const matches = Array.from(rawBody.matchAll(REVIEW_COMMENT_FENCE_PATTERN));
89 const match = matches.at(-1);
90 const fenceIndex = match?.index;
91 return {
92 text: rawBody.slice(0, fenceIndex ?? rawBody.length).trim(),
93 language: match?.[2]?.trim() || "diff",
94 contents: match?.[3] ?? "",
95 };
5896}
5997
6098function parseReviewCommentContext(
......@@ -70,6 +108,7 @@ function parseReviewCommentContext(
70108 if (!filePath || !sectionId || startIndex === null || endIndex === null) {
71109 return null;
72110 }
111 const body = extractReviewCommentBody(rawBody);
73112
74113 return {
75114 id: `review-comment:${index}:${sectionId}:${filePath}:${startIndex}:${endIndex}`,
......@@ -79,8 +118,9 @@ function parseReviewCommentContext(
79118 startIndex: Math.min(startIndex, endIndex),
80119 endIndex: Math.max(startIndex, endIndex),
81120 rangeLabel: attributes.rangeLabel?.trim() || "line",
82 text: extractReviewCommentText(rawBody),
83 diff: extractReviewCommentDiff(rawBody),
121 text: body.text,
122 diff: body.contents,
123 fenceLanguage: body.language,
84124 };
85125}
86126
......@@ -135,7 +175,272 @@ export function hasReviewCommentMessageSegments(value: string): boolean {
135175 );
136176}
137177
178export function formatReviewCommentFence(language: string, contents: string): string {
179 const longestBacktickRun = Math.max(
180 0,
181 ...Array.from(contents.matchAll(/`+/g), (match) => match[0].length),
182 );
183 const fence = "`".repeat(Math.max(3, longestBacktickRun + 1));
184 return [`${fence}${language}`, contents.trimEnd(), fence].join("\n");
185}
186
187export function formatReviewCommentContext(comment: ReviewCommentContext): string {
188 return [
189 [
190 "<review_comment",
191 ` sectionId="${escapeReviewCommentAttribute(comment.sectionId)}"`,
192 ` sectionTitle="${escapeReviewCommentAttribute(comment.sectionTitle)}"`,
193 ` filePath="${escapeReviewCommentAttribute(comment.filePath)}"`,
194 ` startIndex="${comment.startIndex}"`,
195 ` endIndex="${comment.endIndex}"`,
196 ` rangeLabel="${escapeReviewCommentAttribute(comment.rangeLabel)}"`,
197 ">",
198 ].join(""),
199 comment.text.trim(),
200 formatReviewCommentFence(comment.fenceLanguage ?? "diff", comment.diff),
201 "</review_comment>",
202 ].join("\n");
203}
204
205export function appendReviewCommentsToPrompt(
206 prompt: string,
207 comments: ReadonlyArray<ReviewCommentContext>,
208): string {
209 const blocks = comments.map(formatReviewCommentContext);
210 if (blocks.length === 0) return prompt;
211 const trimmedPrompt = prompt.trim();
212 return trimmedPrompt.length > 0
213 ? `${trimmedPrompt}\n\n${blocks.join("\n\n")}`
214 : blocks.join("\n\n");
215}
216
217export function buildFileReviewComment(input: {
218 id: string;
219 filePath: string;
220 startLine: number;
221 endLine: number;
222 text: string;
223 contents: string;
224}): ReviewCommentContext {
225 const startLine = Math.max(1, Math.min(input.startLine, input.endLine));
226 const endLine = Math.max(startLine, Math.max(input.startLine, input.endLine));
227 const selectedLines = input.contents.split("\n").slice(startLine - 1, endLine);
228 return {
229 id: input.id,
230 sectionId: `file:${input.filePath}`,
231 sectionTitle: "File comment",
232 filePath: input.filePath,
233 startIndex: startLine - 1,
234 endIndex: endLine - 1,
235 rangeLabel: startLine === endLine ? `L${startLine}` : `L${startLine} to L${endLine}`,
236 text: input.text.trim(),
237 diff: selectedLines.join("\n"),
238 fenceLanguage: inferReviewCommentFenceLanguage(input.filePath),
239 };
240}
241
242export function inferReviewCommentFenceLanguage(filePath: string): string {
243 const normalizedPath = filePath.replaceAll("\\", "/");
244 const fileName = normalizedPath.slice(normalizedPath.lastIndexOf("/") + 1).toLowerCase();
245 const extensionIndex = fileName.lastIndexOf(".");
246 if (extensionIndex > 0 && extensionIndex < fileName.length - 1) {
247 return fileName.slice(extensionIndex + 1);
248 }
249 if (fileName.startsWith(".") && fileName.length > 1) {
250 return fileName.slice(1);
251 }
252 return "text";
253}
254
255function stripTrailingNewline(value: string): string {
256 return value.endsWith("\n") ? value.slice(0, -1) : value;
257}
258
259function buildDiffReviewLines(fileDiff: FileDiffMetadata): ReadonlyArray<DiffReviewLine> {
260 const rows: DiffReviewLine[] = [];
261
262 for (const hunk of fileDiff.hunks) {
263 let oldLineNumber = hunk.deletionStart;
264 let newLineNumber = hunk.additionStart;
265 let deletionLineIndex = hunk.deletionLineIndex;
266 let additionLineIndex = hunk.additionLineIndex;
267
268 for (const segment of hunk.hunkContent) {
269 if (segment.type === "context") {
270 for (let index = 0; index < segment.lines; index += 1) {
271 rows.push({
272 change: "context",
273 oldLineNumber,
274 newLineNumber,
275 content: stripTrailingNewline(
276 fileDiff.additionLines[additionLineIndex] ??
277 fileDiff.deletionLines[deletionLineIndex] ??
278 "",
279 ),
280 });
281 oldLineNumber += 1;
282 newLineNumber += 1;
283 deletionLineIndex += 1;
284 additionLineIndex += 1;
285 }
286 continue;
287 }
288
289 for (let index = 0; index < segment.deletions; index += 1) {
290 rows.push({
291 change: "delete",
292 oldLineNumber,
293 newLineNumber: null,
294 content: stripTrailingNewline(fileDiff.deletionLines[deletionLineIndex] ?? ""),
295 });
296 oldLineNumber += 1;
297 deletionLineIndex += 1;
298 }
299
300 for (let index = 0; index < segment.additions; index += 1) {
301 rows.push({
302 change: "add",
303 oldLineNumber: null,
304 newLineNumber,
305 content: stripTrailingNewline(fileDiff.additionLines[additionLineIndex] ?? ""),
306 });
307 newLineNumber += 1;
308 additionLineIndex += 1;
309 }
310 }
311 }
312
313 return rows;
314}
315
316function getDiffReviewSelectionPoint(
317 line: DiffReviewLine,
318): { lineNumber: number; side: SelectionSide } | null {
319 if (line.change === "delete" && line.oldLineNumber !== null) {
320 return { lineNumber: line.oldLineNumber, side: "deletions" };
321 }
322 if (line.newLineNumber !== null) {
323 return { lineNumber: line.newLineNumber, side: "additions" };
324 }
325 if (line.oldLineNumber !== null) {
326 return { lineNumber: line.oldLineNumber, side: "deletions" };
327 }
328 return null;
329}
330
331export function restoreDiffReviewCommentRange(
332 fileDiff: FileDiffMetadata,
333 comment: ReviewCommentContext,
334): SelectedLineRange | null {
335 const lines = buildDiffReviewLines(fileDiff);
336 const startLine = lines[comment.startIndex];
337 const endLine = lines[comment.endIndex];
338 if (!startLine || !endLine) return null;
339 const start = getDiffReviewSelectionPoint(startLine);
340 const end = getDiffReviewSelectionPoint(endLine);
341 if (!start || !end) return null;
342 return {
343 start: start.lineNumber,
344 side: start.side,
345 end: end.lineNumber,
346 endSide: end.side,
347 };
348}
349
350function findDiffReviewLineIndex(
351 lines: ReadonlyArray<DiffReviewLine>,
352 lineNumber: number,
353 side: SelectionSide | undefined,
354): number {
355 const preferredKey = side === "deletions" ? "oldLineNumber" : "newLineNumber";
356 const preferredIndex = lines.findIndex((line) => line[preferredKey] === lineNumber);
357 if (preferredIndex >= 0) return preferredIndex;
358 const fallbackKey = preferredKey === "oldLineNumber" ? "newLineNumber" : "oldLineNumber";
359 return lines.findIndex((line) => line[fallbackKey] === lineNumber);
360}
361
362function getDiffRange(
363 lines: ReadonlyArray<DiffReviewLine>,
364 key: "oldLineNumber" | "newLineNumber",
365): { start: number; count: number } {
366 const numberedLines = lines.filter((line) => line[key] !== null);
367 return {
368 start: numberedLines[0]?.[key] ?? 0,
369 count: numberedLines.length,
370 };
371}
372
373function getDiffChangeMarker(change: DiffReviewLine["change"]): string {
374 if (change === "add") return "+";
375 if (change === "delete") return "-";
376 return " ";
377}
378
379function formatDiffReviewRangeLabel(lines: ReadonlyArray<DiffReviewLine>): string {
380 const firstLine = lines[0];
381 const lastLine = lines.at(-1);
382 if (!firstLine || !lastLine) return "line";
383 const firstNumber = firstLine.newLineNumber ?? firstLine.oldLineNumber;
384 const lastNumber = lastLine.newLineNumber ?? lastLine.oldLineNumber;
385 if (firstNumber === null || lastNumber === null) {
386 return lines.length === 1 ? "line" : `${lines.length} lines`;
387 }
388
389 const firstMarker = getDiffChangeMarker(firstLine.change).trim();
390 const marker =
391 firstMarker.length > 0 && lines.every((line) => line.change === firstLine.change)
392 ? firstMarker
393 : "";
394 return firstNumber === lastNumber
395 ? `${marker}${firstNumber}`
396 : `${marker}${firstNumber} to ${marker}${lastNumber}`;
397}
398
399export function buildDiffReviewComment(input: {
400 id: string;
401 sectionId: string;
402 sectionTitle: string;
403 filePath: string;
404 fileDiff: FileDiffMetadata;
405 range: SelectedLineRange;
406 text: string;
407}): ReviewCommentContext | null {
408 const lines = buildDiffReviewLines(input.fileDiff);
409 const startIndex = findDiffReviewLineIndex(lines, input.range.start, input.range.side);
410 const endIndex = findDiffReviewLineIndex(
411 lines,
412 input.range.end,
413 input.range.endSide ?? input.range.side,
414 );
415 if (startIndex < 0 || endIndex < 0) return null;
416
417 const normalizedStartIndex = Math.min(startIndex, endIndex);
418 const normalizedEndIndex = Math.max(startIndex, endIndex);
419 const selectedLines = lines.slice(normalizedStartIndex, normalizedEndIndex + 1);
420 const oldRange = getDiffRange(selectedLines, "oldLineNumber");
421 const newRange = getDiffRange(selectedLines, "newLineNumber");
422
423 return {
424 id: input.id,
425 sectionId: input.sectionId,
426 sectionTitle: input.sectionTitle,
427 filePath: input.filePath,
428 startIndex: normalizedStartIndex,
429 endIndex: normalizedEndIndex,
430 rangeLabel: formatDiffReviewRangeLabel(selectedLines),
431 text: input.text.trim(),
432 diff: [
433 `@@ -${oldRange.start},${oldRange.count} +${newRange.start},${newRange.count} @@`,
434 ...selectedLines.map((line) => `${getDiffChangeMarker(line.change)}${line.content}`),
435 ].join("\n"),
436 fenceLanguage: "diff",
437 };
438}
439
138440export function buildReviewCommentRenderablePatch(comment: ReviewCommentContext): string {
441 if ((comment.fenceLanguage ?? "diff") !== "diff") {
442 return "";
443 }
139444 const diff = comment.diff.trim();
140445 if (diff.length === 0) {
141446 return "";
patches/@pierre%2Fdiffs@1.3.0-beta.4.patch+50-2
......@@ -1,8 +1,56 @@
1diff --git a/dist/editor/editor.js b/dist/editor/editor.js
2index 4346c77a4e43a98c8524ea5186559fdee7433174..bb2a7ecd1d7f497916a5f220215d5191b095575b 100644
3--- a/dist/editor/editor.js
4+++ b/dist/editor/editor.js
5@@ -77,16 +77,13 @@ var Editor = class {
6 this.#options = options;
7 }
8 edit(component) {
9- const { useTokenTransformer, enableGutterUtility, enableLineSelection, expandUnchanged, diffStyle, lineHoverHighlight,...rest } = component.options;
10- if (useTokenTransformer !== true || enableGutterUtility === true || enableLineSelection === true || expandUnchanged !== true && Object.hasOwn(component, "fileDiff") || diffStyle === "unified" || lineHoverHighlight !== "disabled") {
11+ const { useTokenTransformer, expandUnchanged, diffStyle,...rest } = component.options;
12+ if (useTokenTransformer !== true || expandUnchanged !== true && Object.hasOwn(component, "fileDiff") || diffStyle === "unified") {
13 component.setOptions({
14 ...rest,
15 useTokenTransformer: true,
16- enableGutterUtility: false,
17- enableLineSelection: false,
18 expandUnchanged: true,
19- diffStyle: "split",
20- lineHoverHighlight: "disabled"
21+ diffStyle: "split"
22 });
23 component.rerender();
24 }
25@@ -481,6 +478,7 @@ var Editor = class {
26 return lineNumber - 1;
27 };
28 this.#editorEventDisposes.push(addEventListener(gutterEl, "pointerdown", (e) => {
29+ if (this.#fileInstance?.options.enableLineSelection === true) return;
30 const textDocument = this.#textDocument;
31 const lineIndex = resolveEditableLine(resolveGutterTarget(e.composedPath()[0]));
32 if (lineIndex === void 0 || textDocument === void 0) return;
33diff --git a/dist/react/utils/useFileInstance.js b/dist/react/utils/useFileInstance.js
34index cb8e2026fb5d7a19f489c0a2402efbcb7dff3322..510fad6364d4a2214c7dd65fe2b114f1cce0c815 100644
35--- a/dist/react/utils/useFileInstance.js
36+++ b/dist/react/utils/useFileInstance.js
37@@ -92,10 +92,7 @@ function mergeFileOptions({ options, controlledSelection, contentEditable, hasCu
38 };
39 if (needsEditorOptions) merged = {
40 ...merged,
41- useTokenTransformer: true,
42- enableGutterUtility: false,
43- enableLineSelection: false,
44- lineHoverHighlight: "disabled"
45+ useTokenTransformer: true
46 };
47 return merged;
48 }
149diff --git a/package.json b/package.json
2index b18c94f3f7b40bdb15084ab7cabcb19dd29c61f7..ab96ac589d368e806ef45480283d6e0fa199117f 100644
50index cff9c6b2a955e7568f44279a5b706da164c4f142..3d1f25f8bd1be682549677718d9ed8433872c854 100644
351--- a/package.json
452+++ b/package.json
5@@ -51,6 +51,18 @@
53@@ -55,6 +55,18 @@
654 "./worker/worker-portable.js": {
755 "types": "./dist/worker/worker-portable.d.ts",
856 "import": "./dist/worker/worker-portable.js"
pnpm-lock.yaml+253-251
......@@ -70,7 +70,7 @@ patchedDependencies:
7070 hash: 2b16019ce7ab61aec6478dd02f79ef468cc1d5c51e9d00764f7d2ab8167210c8
7171 path: patches/@ff-labs__fff-node@0.9.4.patch
7272 '@pierre/diffs@1.3.0-beta.4':
73 hash: f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b
73 hash: 0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631
7474 path: patches/@pierre%2Fdiffs@1.3.0-beta.4.patch
7575 effect@4.0.0-beta.78:
7676 hash: c502bc684210b707dfceb87d8fe6ad6843395af6e19cfc02cd65854898bde2c5
......@@ -177,10 +177,10 @@ importers:
177177 dependencies:
178178 '@callstack/liquid-glass':
179179 specifier: ^0.7.1
180 version: 0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
180 version: 0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
181181 '@clerk/expo':
182182 specifier: ^3.4.1
183 version: 3.4.1(expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.16)(expo-crypto@56.0.4(expo@56.0.8))(expo-secure-store@56.0.4(expo@56.0.8))(expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
183 version: 3.4.1(expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.16)(expo-crypto@56.0.4(expo@56.0.8))(expo-secure-store@56.0.4(expo@56.0.8))(expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
184184 '@effect/atom-react':
185185 specifier: 4.0.0-beta.78
186186 version: 4.0.0-beta.78(effect@4.0.0-beta.78(patch_hash=c502bc684210b707dfceb87d8fe6ad6843395af6e19cfc02cd65854898bde2c5))(react@19.2.3)(scheduler@0.27.0)
......@@ -189,10 +189,10 @@ importers:
189189 version: 0.4.2
190190 '@expo/ui':
191191 specifier: ~56.0.8
192 version: 56.0.15(ab3f255d102c60ba0fd2bbe4e47ba584)
192 version: 56.0.15(961c4aa6f32829b318e3c87ef20ad401)
193193 '@legendapp/list':
194194 specifier: 3.0.0-beta.44
195 version: 3.0.0-beta.44(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
195 version: 3.0.0-beta.44(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
196196 '@noble/curves':
197197 specifier: 'catalog:'
198198 version: 1.9.1
......@@ -201,10 +201,10 @@ importers:
201201 version: 1.8.0
202202 '@pierre/diffs':
203203 specifier: 'catalog:'
204 version: 1.3.0-beta.4(patch_hash=f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b)(@shikijs/themes@3.23.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
204 version: 1.3.0-beta.4(patch_hash=0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631)(@shikijs/themes@3.23.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
205205 '@react-native-menu/menu':
206206 specifier: ^2.0.0
207 version: 2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
207 version: 2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
208208 '@shikijs/core':
209209 specifier: 3.23.0
210210 version: 3.23.0
......@@ -225,7 +225,7 @@ importers:
225225 version: link:../../packages/contracts
226226 '@t3tools/mobile-markdown-text':
227227 specifier: file:./modules/t3-markdown-text
228 version: file:apps/mobile/modules/t3-markdown-text(e909ee9a8f7fbe234da80c739fca4984)
228 version: file:apps/mobile/modules/t3-markdown-text(f0ff241d48c23db461fff5d47e450578)
229229 '@t3tools/mobile-review-diff-native':
230230 specifier: file:./modules/t3-review-diff
231231 version: file:apps/mobile/modules/t3-review-diff
......@@ -246,40 +246,40 @@ importers:
246246 version: 4.0.0-beta.78(patch_hash=c502bc684210b707dfceb87d8fe6ad6843395af6e19cfc02cd65854898bde2c5)
247247 expo:
248248 specifier: ^56.0.0
249 version: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
249 version: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
250250 expo-asset:
251251 specifier: ~56.0.15
252 version: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
252 version: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
253253 expo-auth-session:
254254 specifier: ~56.0.12
255 version: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
255 version: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
256256 expo-build-properties:
257257 specifier: ~56.0.15
258258 version: 56.0.16(expo@56.0.8)
259259 expo-camera:
260260 specifier: ~56.0.7
261 version: 56.0.7(@types/emscripten@1.41.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
261 version: 56.0.7(@types/emscripten@1.41.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
262262 expo-clipboard:
263263 specifier: ~56.0.3
264 version: 56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
264 version: 56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
265265 expo-constants:
266266 specifier: ~56.0.16
267 version: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
267 version: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
268268 expo-crypto:
269269 specifier: ~56.0.4
270270 version: 56.0.4(expo@56.0.8)
271271 expo-dev-client:
272272 specifier: ~56.0.16
273 version: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
273 version: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
274274 expo-file-system:
275275 specifier: ~56.0.7
276 version: 56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
276 version: 56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
277277 expo-font:
278278 specifier: ~56.0.5
279 version: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
279 version: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
280280 expo-glass-effect:
281281 specifier: ~56.0.4
282 version: 56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
282 version: 56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
283283 expo-haptics:
284284 specifier: ~56.0.3
285285 version: 56.0.3(expo@56.0.8)
......@@ -288,16 +288,16 @@ importers:
288288 version: 56.0.15(expo@56.0.8)
289289 expo-linking:
290290 specifier: ~56.0.12
291 version: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
291 version: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
292292 expo-notifications:
293293 specifier: ~56.0.14
294 version: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
294 version: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
295295 expo-paste-input:
296296 specifier: ^0.1.15
297 version: 0.1.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
297 version: 0.1.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
298298 expo-router:
299299 specifier: ~56.2.7
300 version: 56.2.8(c021de11d02907bd585610408f5252e8)
300 version: 56.2.8(5bfdf39b8f760e4dc2d5c3acffc97310)
301301 expo-secure-store:
302302 specifier: ~56.0.4
303303 version: 56.0.4(expo@56.0.8)
......@@ -306,16 +306,16 @@ importers:
306306 version: 56.0.10(expo@56.0.8)(typescript@6.0.3)
307307 expo-symbols:
308308 specifier: ~56.0.5
309 version: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
309 version: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
310310 expo-updates:
311311 specifier: ~56.0.17
312 version: 56.0.17(expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
312 version: 56.0.17(expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
313313 expo-web-browser:
314314 specifier: ~56.0.5
315 version: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
315 version: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
316316 expo-widgets:
317317 specifier: ~56.0.15
318 version: 56.0.16(ab3f255d102c60ba0fd2bbe4e47ba584)
318 version: 56.0.16(961c4aa6f32829b318e3c87ef20ad401)
319319 punycode:
320320 specifier: ^2.3.1
321321 version: 2.3.1
......@@ -327,40 +327,40 @@ importers:
327327 version: 19.2.3(react@19.2.3)
328328 react-native:
329329 specifier: 0.85.3
330 version: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
330 version: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
331331 react-native-gesture-handler:
332332 specifier: ~2.31.1
333 version: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
333 version: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
334334 react-native-image-viewing:
335335 specifier: ^0.2.2
336 version: 0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
336 version: 0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
337337 react-native-keyboard-controller:
338338 specifier: 1.21.6
339 version: 1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
339 version: 1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
340340 react-native-nitro-markdown:
341341 specifier: ^0.5.0
342 version: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
342 version: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
343343 react-native-nitro-modules:
344344 specifier: ^0.35.4
345 version: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
345 version: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
346346 react-native-reanimated:
347347 specifier: 4.3.1
348 version: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
348 version: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
349349 react-native-safe-area-context:
350350 specifier: ~5.7.0
351 version: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
351 version: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
352352 react-native-screens:
353353 specifier: 4.25.2
354 version: 4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
354 version: 4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
355355 react-native-shiki-engine:
356356 specifier: ^0.3.9
357 version: 0.3.10(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
357 version: 0.3.10(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
358358 react-native-svg:
359359 specifier: 15.15.4
360 version: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
360 version: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
361361 react-native-worklets:
362362 specifier: 0.8.3
363 version: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
363 version: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
364364 shiki:
365365 specifier: 3.23.0
366366 version: 3.23.0
......@@ -369,7 +369,7 @@ importers:
369369 version: 3.6.0
370370 uniwind:
371371 specifier: ^1.6.2
372 version: 1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0)
372 version: 1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0)
373373 devDependencies:
374374 '@effect/vitest':
375375 specifier: 4.0.0-beta.78
......@@ -415,7 +415,7 @@ importers:
415415 version: 1.15.13
416416 '@pierre/diffs':
417417 specifier: 'catalog:'
418 version: 1.3.0-beta.4(patch_hash=f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
418 version: 1.3.0-beta.4(patch_hash=0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
419419 effect:
420420 specifier: 4.0.0-beta.78
421421 version: 4.0.0-beta.78(patch_hash=c502bc684210b707dfceb87d8fe6ad6843395af6e19cfc02cd65854898bde2c5)
......@@ -497,7 +497,7 @@ importers:
497497 version: 0.41.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(yjs@13.6.31)
498498 '@pierre/diffs':
499499 specifier: 'catalog:'
500 version: 1.3.0-beta.4(patch_hash=f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
500 version: 1.3.0-beta.4(patch_hash=0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
501501 '@pierre/trees':
502502 specifier: 1.0.0-beta.4
503503 version: 1.0.0-beta.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
......@@ -10819,10 +10819,10 @@ snapshots:
1081910819 optionalDependencies:
1082010820 '@types/react': 19.2.16
1082110821
10822 '@callstack/liquid-glass@0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
10822 '@callstack/liquid-glass@0.7.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1082310823 dependencies:
1082410824 react: 19.2.3
10825 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
10825 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1082610826
1082710827 '@capsizecss/unpack@4.0.0':
1082810828 dependencies:
......@@ -10894,23 +10894,23 @@ snapshots:
1089410894 - react
1089510895 - react-dom
1089610896
10897 '@clerk/expo@3.4.1(expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.16)(expo-crypto@56.0.4(expo@56.0.8))(expo-secure-store@56.0.4(expo@56.0.8))(expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
10897 '@clerk/expo@3.4.1(expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(expo-constants@56.0.16)(expo-crypto@56.0.4(expo@56.0.8))(expo-secure-store@56.0.4(expo@56.0.8))(expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1089810898 dependencies:
1089910899 '@clerk/clerk-js': 6.16.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
1090010900 '@clerk/react': 6.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
1090110901 '@clerk/shared': 4.17.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
1090210902 base-64: 1.0.0
10903 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
10903 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1090410904 react: 19.2.3
10905 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
10906 react-native-url-polyfill: 2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
10905 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
10906 react-native-url-polyfill: 2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1090710907 tslib: 2.8.1
1090810908 optionalDependencies:
10909 expo-auth-session: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
10910 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
10909 expo-auth-session: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
10910 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1091110911 expo-crypto: 56.0.4(expo@56.0.8)
1091210912 expo-secure-store: 56.0.4(expo@56.0.8)
10913 expo-web-browser: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
10913 expo-web-browser: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1091410914 react-dom: 19.2.3(react@19.2.3)
1091510915
1091610916 '@clerk/react@6.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
......@@ -11477,7 +11477,7 @@ snapshots:
1147711477
1147811478 '@expo-google-fonts/material-symbols@0.4.38': {}
1147911479
11480 '@expo/cli@56.1.13(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-constants@56.0.16)(expo-font@56.0.5)(expo-router@56.2.8)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)':
11480 '@expo/cli@56.1.13(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-constants@56.0.16)(expo-font@56.0.5)(expo-router@56.2.8)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)':
1148111481 dependencies:
1148211482 '@expo/code-signing-certificates': 0.0.6
1148311483 '@expo/config': 56.0.9(typescript@6.0.3)
......@@ -11487,7 +11487,7 @@ snapshots:
1148711487 '@expo/image-utils': 0.10.1(typescript@6.0.3)
1148811488 '@expo/inline-modules': 0.0.10(typescript@6.0.3)
1148911489 '@expo/json-file': 10.2.0
11490 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11490 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1149111491 '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1149211492 '@expo/metro-config': 56.0.13(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.8)(typescript@6.0.3)(utf-8-validate@6.0.6)
1149311493 '@expo/metro-file-map': 56.0.3
......@@ -11512,7 +11512,7 @@ snapshots:
1151211512 connect: 3.7.0
1151311513 debug: 4.4.3
1151411514 dnssd-advertise: 1.1.4
11515 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11515 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1151611516 expo-server: 56.0.4
1151711517 fetch-nodeshim: 0.4.10
1151811518 getenv: 2.0.0
......@@ -11538,8 +11538,8 @@ snapshots:
1153811538 ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1153911539 zod: 3.25.76
1154011540 optionalDependencies:
11541 expo-router: 56.2.8(c021de11d02907bd585610408f5252e8)
11542 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11541 expo-router: 56.2.8(5bfdf39b8f760e4dc2d5c3acffc97310)
11542 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1154311543 transitivePeerDependencies:
1154411544 - '@expo/dom-webview'
1154511545 - '@expo/metro-runtime'
......@@ -11601,18 +11601,18 @@ snapshots:
1160111601 transitivePeerDependencies:
1160211602 - supports-color
1160311603
11604 '@expo/devtools@56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
11604 '@expo/devtools@56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1160511605 dependencies:
1160611606 chalk: 4.1.2
1160711607 optionalDependencies:
1160811608 react: 19.2.3
11609 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11609 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1161011610
11611 '@expo/dom-webview@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
11611 '@expo/dom-webview@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1161211612 dependencies:
11613 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11613 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1161411614 react: 19.2.3
11615 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11615 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1161611616
1161711617 '@expo/env@2.3.0':
1161811618 dependencies:
......@@ -11673,13 +11673,13 @@ snapshots:
1167311673 - supports-color
1167411674 - typescript
1167511675
11676 '@expo/log-box@56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
11676 '@expo/log-box@56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1167711677 dependencies:
11678 '@expo/dom-webview': 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11678 '@expo/dom-webview': 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1167911679 anser: 1.4.10
11680 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11680 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1168111681 react: 19.2.3
11682 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11682 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1168311683 stacktrace-parser: 0.1.11
1168411684
1168511685 '@expo/metro-config@56.0.13(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.8)(typescript@6.0.3)(utf-8-validate@6.0.6)':
......@@ -11709,7 +11709,7 @@ snapshots:
1170911709 postcss: 8.5.15
1171011710 resolve-from: 5.0.0
1171111711 optionalDependencies:
11712 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11712 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1171311713 transitivePeerDependencies:
1171411714 - bufferutil
1171511715 - supports-color
......@@ -11727,14 +11727,14 @@ snapshots:
1172711727 transitivePeerDependencies:
1172811728 - supports-color
1172911729
11730 '@expo/metro-runtime@56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
11730 '@expo/metro-runtime@56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1173111731 dependencies:
11732 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11732 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1173311733 anser: 1.4.10
11734 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11734 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1173511735 pretty-format: 29.7.0
1173611736 react: 19.2.3
11737 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11737 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1173811738 stacktrace-parser: 0.1.11
1173911739 whatwg-fetch: 3.6.20
1174011740 optionalDependencies:
......@@ -11809,14 +11809,14 @@ snapshots:
1180911809 '@expo/router-server@56.0.12(@expo/metro-runtime@56.0.13)(expo-constants@56.0.16)(expo-font@56.0.5)(expo-router@56.2.8)(expo-server@56.0.4)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
1181011810 dependencies:
1181111811 debug: 4.4.3
11812 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11813 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
11814 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11812 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11813 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
11814 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1181511815 expo-server: 56.0.4
1181611816 react: 19.2.3
1181711817 optionalDependencies:
11818 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11819 expo-router: 56.2.8(c021de11d02907bd585610408f5252e8)
11818 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11819 expo-router: 56.2.8(5bfdf39b8f760e4dc2d5c3acffc97310)
1182011820 react-dom: 19.2.3(react@19.2.3)
1182111821 transitivePeerDependencies:
1182211822 - supports-color
......@@ -11831,18 +11831,18 @@ snapshots:
1183111831
1183211832 '@expo/sudo-prompt@9.3.2': {}
1183311833
11834 '@expo/ui@56.0.15(ab3f255d102c60ba0fd2bbe4e47ba584)':
11834 '@expo/ui@56.0.15(961c4aa6f32829b318e3c87ef20ad401)':
1183511835 dependencies:
11836 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
11836 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1183711837 react: 19.2.3
11838 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
11838 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1183911839 sf-symbols-typescript: 2.2.0
1184011840 vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
1184111841 optionalDependencies:
1184211842 '@babel/core': 7.29.7
1184311843 react-dom: 19.2.3(react@19.2.3)
11844 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11845 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11844 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
11845 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1184611846 transitivePeerDependencies:
1184711847 - '@types/react'
1184811848 - '@types/react-dom'
......@@ -12103,13 +12103,13 @@ snapshots:
1210312103 dependencies:
1210412104 jsbi: 4.3.2
1210512105
12106 '@legendapp/list@3.0.0-beta.44(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
12106 '@legendapp/list@3.0.0-beta.44(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1210712107 dependencies:
1210812108 react: 19.2.3
1210912109 use-sync-external-store: 1.6.0(react@19.2.3)
1211012110 optionalDependencies:
1211112111 react-dom: 19.2.3(react@19.2.3)
12112 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
12112 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1211312113
1211412114 '@legendapp/list@3.0.0-beta.44(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
1211512115 dependencies:
......@@ -12656,7 +12656,7 @@ snapshots:
1265612656
1265712657 '@oxlint/plugins@1.68.0': {}
1265812658
12659 '@pierre/diffs@1.3.0-beta.4(patch_hash=f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b)(@shikijs/themes@3.23.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
12659 '@pierre/diffs@1.3.0-beta.4(patch_hash=0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631)(@shikijs/themes@3.23.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
1266012660 dependencies:
1266112661 '@pierre/theme': 1.0.3
1266212662 '@pierre/theming': 0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@3.23.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(shiki@3.23.0)
......@@ -12670,7 +12670,7 @@ snapshots:
1267012670 transitivePeerDependencies:
1267112671 - '@shikijs/themes'
1267212672
12673 '@pierre/diffs@1.3.0-beta.4(patch_hash=f5d41705ce94bbafc731d92e9cb1671db710df046dd135cb894e3e3e9164a75b)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
12673 '@pierre/diffs@1.3.0-beta.4(patch_hash=0befe84f4202720eeab6fa684d8761a5c0cc7046b58cf2c0b804ad2baa7ce631)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
1267412674 dependencies:
1267512675 '@pierre/theme': 1.0.3
1267612676 '@pierre/theming': 0.0.1(@pierre/theme@1.0.3)(@shikijs/themes@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(shiki@3.23.0)
......@@ -12932,15 +12932,15 @@ snapshots:
1293212932 prompts: 2.4.2
1293312933 tinyexec: 1.2.4
1293412934
12935 '@react-native-masked-view/masked-view@0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
12935 '@react-native-masked-view/masked-view@0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1293612936 dependencies:
1293712937 react: 19.2.3
12938 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
12938 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1293912939
12940 '@react-native-menu/menu@2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
12940 '@react-native-menu/menu@2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1294112941 dependencies:
1294212942 react: 19.2.3
12943 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
12943 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1294412944
1294512945 '@react-native/assets-registry@0.85.3': {}
1294612946
......@@ -13000,7 +13000,7 @@ snapshots:
1300013000 tinyglobby: 0.2.17
1300113001 yargs: 17.7.2
1300213002
13003 '@react-native/community-cli-plugin@0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
13003 '@react-native/community-cli-plugin@0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
1300413004 dependencies:
1300513005 '@react-native/dev-middleware': 0.85.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1300613006 debug: 4.4.3
......@@ -13010,7 +13010,7 @@ snapshots:
1301013010 metro-core: 0.84.4
1301113011 semver: 7.8.1
1301213012 optionalDependencies:
13013 '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)
13013 '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1301413014 transitivePeerDependencies:
1301513015 - bufferutil
1301613016 - supports-color
......@@ -13058,7 +13058,7 @@ snapshots:
1305813058 transitivePeerDependencies:
1305913059 - supports-color
1306013060
13061 '@react-native/metro-config@0.85.3(@babel/core@7.29.7)':
13061 '@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6)':
1306213062 dependencies:
1306313063 '@react-native/js-polyfills': 0.85.3
1306413064 '@react-native/metro-babel-transformer': 0.85.3(@babel/core@7.29.7)
......@@ -13066,16 +13066,18 @@ snapshots:
1306613066 metro-runtime: 0.84.4
1306713067 transitivePeerDependencies:
1306813068 - '@babel/core'
13069 - bufferutil
1306913070 - supports-color
13071 - utf-8-validate
1307013072
1307113073 '@react-native/normalize-colors@0.85.3': {}
1307213074
13073 '@react-native/virtualized-lists@0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
13075 '@react-native/virtualized-lists@0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1307413076 dependencies:
1307513077 invariant: 2.2.4
1307613078 nullthrows: 1.1.1
1307713079 react: 19.2.3
13078 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
13080 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1307913081 optionalDependencies:
1308013082 '@types/react': 19.2.16
1308113083
......@@ -13481,15 +13483,15 @@ snapshots:
1348113483 dependencies:
1348213484 defer-to-connect: 2.0.1
1348313485
13484 '@t3tools/mobile-markdown-text@file:apps/mobile/modules/t3-markdown-text(e909ee9a8f7fbe234da80c739fca4984)':
13486 '@t3tools/mobile-markdown-text@file:apps/mobile/modules/t3-markdown-text(f0ff241d48c23db461fff5d47e450578)':
1348513487 dependencies:
13486 expo-asset: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
13487 expo-clipboard: 56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
13488 expo-asset: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
13489 expo-clipboard: 56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1348813490 expo-haptics: 56.0.3(expo@56.0.8)
13489 expo-symbols: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
13491 expo-symbols: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1349013492 react: 19.2.3
13491 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
13492 react-native-nitro-markdown: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
13493 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
13494 react-native-nitro-markdown: 0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1349313495
1349413496 '@t3tools/mobile-review-diff-native@file:apps/mobile/modules/t3-review-diff': {}
1349513497
......@@ -14606,8 +14608,8 @@ snapshots:
1460614608 react-refresh: 0.14.2
1460714609 optionalDependencies:
1460814610 '@babel/runtime': 7.29.7
14609 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
14610 expo-widgets: 56.0.16(ab3f255d102c60ba0fd2bbe4e47ba584)
14611 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
14612 expo-widgets: 56.0.16(961c4aa6f32829b318e3c87ef20ad401)
1461114613 transitivePeerDependencies:
1461214614 - '@babel/core'
1461314615 - supports-color
......@@ -15480,29 +15482,29 @@ snapshots:
1548015482
1548115483 expo-application@56.0.3(expo@56.0.8):
1548215484 dependencies:
15483 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15485 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1548415486
15485 expo-asset@56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3):
15487 expo-asset@56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3):
1548615488 dependencies:
1548715489 '@expo/image-utils': 0.10.1(typescript@6.0.3)
15488 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15489 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15490 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15491 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1549015492 react: 19.2.3
15491 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15493 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1549215494 transitivePeerDependencies:
1549315495 - supports-color
1549415496 - typescript
1549515497
15496 expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15498 expo-auth-session@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1549715499 dependencies:
1549815500 expo-application: 56.0.3(expo@56.0.8)
15499 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15501 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1550015502 expo-crypto: 56.0.4(expo@56.0.8)
15501 expo-linking: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15502 expo-web-browser: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15503 expo-linking: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15504 expo-web-browser: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1550315505 invariant: 2.2.4
1550415506 react: 19.2.3
15505 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15507 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1550615508 transitivePeerDependencies:
1550715509 - expo
1550815510 - supports-color
......@@ -15510,119 +15512,119 @@ snapshots:
1551015512 expo-build-properties@56.0.16(expo@56.0.8):
1551115513 dependencies:
1551215514 '@expo/schema-utils': 56.0.1
15513 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15515 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1551415516 resolve-from: 5.0.0
1551515517 semver: 7.8.1
1551615518
15517 expo-camera@56.0.7(@types/emscripten@1.41.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15519 expo-camera@56.0.7(@types/emscripten@1.41.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1551815520 dependencies:
1551915521 barcode-detector: 3.2.0(@types/emscripten@1.41.5)
15520 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15522 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1552115523 react: 19.2.3
15522 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15524 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1552315525 transitivePeerDependencies:
1552415526 - '@types/emscripten'
1552515527
15526 expo-clipboard@56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15528 expo-clipboard@56.0.3(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1552715529 dependencies:
15528 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15530 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1552915531 react: 19.2.3
15530 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15532 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1553115533
15532 expo-constants@56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15534 expo-constants@56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1553315535 dependencies:
1553415536 '@expo/env': 2.3.0
15535 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15536 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15537 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15538 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1553715539 transitivePeerDependencies:
1553815540 - supports-color
1553915541
1554015542 expo-crypto@56.0.4(expo@56.0.8):
1554115543 dependencies:
15542 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15544 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1554315545
15544 expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15546 expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1554515547 dependencies:
15546 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15547 expo-dev-launcher: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15548 expo-dev-menu: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15548 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15549 expo-dev-launcher: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15550 expo-dev-menu: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1554915551 expo-dev-menu-interface: 56.0.1(expo@56.0.8)
1555015552 expo-manifests: 56.0.4(expo@56.0.8)
1555115553 expo-updates-interface: 56.0.2(expo@56.0.8)
1555215554 transitivePeerDependencies:
1555315555 - react-native
1555415556
15555 expo-dev-launcher@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15557 expo-dev-launcher@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1555615558 dependencies:
1555715559 '@expo/schema-utils': 56.0.1
15558 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15559 expo-dev-menu: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15560 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15561 expo-dev-menu: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1556015562 expo-manifests: 56.0.4(expo@56.0.8)
15561 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15563 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1556215564
1556315565 expo-dev-menu-interface@56.0.1(expo@56.0.8):
1556415566 dependencies:
15565 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15567 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1556615568
15567 expo-dev-menu@56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15569 expo-dev-menu@56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1556815570 dependencies:
15569 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15571 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1557015572 expo-dev-menu-interface: 56.0.1(expo@56.0.8)
15571 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15573 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1557215574
1557315575 expo-eas-client@56.0.1: {}
1557415576
15575 expo-file-system@56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15577 expo-file-system@56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1557615578 dependencies:
15577 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15578 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15579 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15580 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1557915581
15580 expo-font@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15582 expo-font@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1558115583 dependencies:
15582 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15584 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1558315585 fontfaceobserver: 2.3.0
1558415586 react: 19.2.3
15585 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15587 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1558615588
15587 expo-glass-effect@56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15589 expo-glass-effect@56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1558815590 dependencies:
15589 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15591 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1559015592 react: 19.2.3
15591 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15593 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1559215594
1559315595 expo-haptics@56.0.3(expo@56.0.8):
1559415596 dependencies:
15595 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15597 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1559615598
1559715599 expo-image-loader@56.0.3(expo@56.0.8):
1559815600 dependencies:
15599 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15601 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1560015602
1560115603 expo-image-picker@56.0.15(expo@56.0.8):
1560215604 dependencies:
15603 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15605 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1560415606 expo-image-loader: 56.0.3(expo@56.0.8)
1560515607
1560615608 expo-json-utils@56.0.0: {}
1560715609
1560815610 expo-keep-awake@56.0.3(expo@56.0.8)(react@19.2.3):
1560915611 dependencies:
15610 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15612 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1561115613 react: 19.2.3
1561215614
15613 expo-linking@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15615 expo-linking@56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1561415616 dependencies:
15615 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15617 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1561615618 invariant: 2.2.4
1561715619 react: 19.2.3
15618 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15620 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1561915621 transitivePeerDependencies:
1562015622 - expo
1562115623 - supports-color
1562215624
1562315625 expo-manifests@56.0.4(expo@56.0.8):
1562415626 dependencies:
15625 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15627 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1562615628 expo-json-utils: 56.0.0
1562715629
1562815630 expo-modules-autolinking@56.0.14(typescript@6.0.3):
......@@ -15635,61 +15637,61 @@ snapshots:
1563515637 - supports-color
1563615638 - typescript
1563715639
15638 expo-modules-core@56.0.14(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15640 expo-modules-core@56.0.14(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1563915641 dependencies:
1564015642 '@expo/expo-modules-macros-plugin': 0.0.9
15641 expo-modules-jsi: 56.0.7(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15643 expo-modules-jsi: 56.0.7(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1564215644 invariant: 2.2.4
1564315645 react: 19.2.3
15644 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15646 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1564515647 optionalDependencies:
15646 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15648 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1564715649
15648 expo-modules-jsi@56.0.7(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15650 expo-modules-jsi@56.0.7(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1564915651 dependencies:
15650 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15652 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1565115653
15652 expo-notifications@56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3):
15654 expo-notifications@56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3):
1565315655 dependencies:
1565415656 '@expo/image-utils': 0.10.1(typescript@6.0.3)
1565515657 abort-controller: 3.0.0
1565615658 badgin: 1.2.3
15657 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15659 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1565815660 expo-application: 56.0.3(expo@56.0.8)
15659 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15661 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1566015662 react: 19.2.3
15661 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15663 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1566215664 transitivePeerDependencies:
1566315665 - supports-color
1566415666 - typescript
1566515667
15666 expo-paste-input@0.1.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15668 expo-paste-input@0.1.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1566715669 dependencies:
15668 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15670 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1566915671 react: 19.2.3
15670 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15672 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1567115673
15672 expo-router@56.2.8(c021de11d02907bd585610408f5252e8):
15674 expo-router@56.2.8(5bfdf39b8f760e4dc2d5c3acffc97310):
1567315675 dependencies:
15674 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15675 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15676 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15677 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1567615678 '@expo/schema-utils': 56.0.1
15677 '@expo/ui': 56.0.15(ab3f255d102c60ba0fd2bbe4e47ba584)
15679 '@expo/ui': 56.0.15(961c4aa6f32829b318e3c87ef20ad401)
1567815680 '@radix-ui/react-slot': 1.2.4(@types/react@19.2.16)(react@19.2.3)
1567915681 '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
15680 '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15682 '@react-native-masked-view/masked-view': 0.3.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1568115683 '@testing-library/jest-dom': 6.9.1
1568215684 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
1568315685 client-only: 0.0.1
1568415686 color: 4.2.3
1568515687 debug: 4.4.3
1568615688 escape-string-regexp: 4.0.0
15687 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15688 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15689 expo-glass-effect: 56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15690 expo-linking: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15689 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15690 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15691 expo-glass-effect: 56.0.4(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15692 expo-linking: 56.0.13(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1569115693 expo-server: 56.0.4
15692 expo-symbols: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15694 expo-symbols: 56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1569315695 fast-deep-equal: 3.1.3
1569415696 invariant: 2.2.4
1569515697 nanoid: 3.3.12
......@@ -15697,18 +15699,18 @@ snapshots:
1569715699 react: 19.2.3
1569815700 react-fast-compare: 3.2.2
1569915701 react-is: 19.2.7
15700 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15701 react-native-drawer-layout: 4.2.4(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15702 react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15703 react-native-screens: 4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15702 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15703 react-native-drawer-layout: 4.2.4(0e9729601f58a7a7ae26c76fe6017455)
15704 react-native-safe-area-context: 5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15705 react-native-screens: 4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1570415706 server-only: 0.0.1
1570515707 sf-symbols-typescript: 2.2.0
1570615708 shallowequal: 1.1.0
1570715709 vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
1570815710 optionalDependencies:
1570915711 react-dom: 19.2.3(react@19.2.3)
15710 react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15711 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15712 react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15713 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1571215714 transitivePeerDependencies:
1571315715 - '@babel/core'
1571415716 - '@testing-library/dom'
......@@ -15720,7 +15722,7 @@ snapshots:
1572015722
1572115723 expo-secure-store@56.0.4(expo@56.0.8):
1572215724 dependencies:
15723 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15725 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1572415726
1572515727 expo-server@56.0.4: {}
1572615728
......@@ -15728,7 +15730,7 @@ snapshots:
1572815730 dependencies:
1572915731 '@expo/config-plugins': 56.0.8(typescript@6.0.3)
1573015732 '@expo/image-utils': 0.10.1(typescript@6.0.3)
15731 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15733 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1573215734 xml2js: 0.6.0
1573315735 transitivePeerDependencies:
1573415736 - supports-color
......@@ -15736,20 +15738,20 @@ snapshots:
1573615738
1573715739 expo-structured-headers@56.0.0: {}
1573815740
15739 expo-symbols@56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15741 expo-symbols@56.0.5(expo-font@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1574015742 dependencies:
1574115743 '@expo-google-fonts/material-symbols': 0.4.38
15742 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15743 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15744 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15745 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1574415746 react: 19.2.3
15745 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15747 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1574615748 sf-symbols-typescript: 2.2.0
1574715749
1574815750 expo-updates-interface@56.0.2(expo@56.0.8):
1574915751 dependencies:
15750 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15752 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1575115753
15752 expo-updates@56.0.17(expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
15754 expo-updates@56.0.17(expo-dev-client@56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)))(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1575315755 dependencies:
1575415756 '@expo/code-signing-certificates': 0.0.6
1575515757 '@expo/plist': 0.7.0
......@@ -15757,7 +15759,7 @@ snapshots:
1575715759 arg: 4.1.3
1575815760 chalk: 4.1.2
1575915761 debug: 4.4.3
15760 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15762 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1576115763 expo-eas-client: 56.0.1
1576215764 expo-manifests: 56.0.4(expo@56.0.8)
1576315765 expo-structured-headers: 56.0.0
......@@ -15767,25 +15769,25 @@ snapshots:
1576715769 ignore: 5.3.2
1576815770 nullthrows: 1.1.1
1576915771 react: 19.2.3
15770 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15772 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1577115773 resolve-from: 5.0.0
1577215774 optionalDependencies:
15773 expo-dev-client: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15775 expo-dev-client: 56.0.18(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
1577415776 transitivePeerDependencies:
1577515777 - supports-color
1577615778
15777 expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
15779 expo-web-browser@56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1577815780 dependencies:
15779 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15780 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15781 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15782 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1578115783
15782 expo-widgets@56.0.16(ab3f255d102c60ba0fd2bbe4e47ba584):
15784 expo-widgets@56.0.16(961c4aa6f32829b318e3c87ef20ad401):
1578315785 dependencies:
1578415786 '@expo/plist': 0.7.0
15785 '@expo/ui': 56.0.15(ab3f255d102c60ba0fd2bbe4e47ba584)
15786 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15787 '@expo/ui': 56.0.15(961c4aa6f32829b318e3c87ef20ad401)
15788 expo: 56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1578715789 react: 19.2.3
15788 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15790 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1578915791 transitivePeerDependencies:
1579015792 - '@babel/core'
1579115793 - '@types/react'
......@@ -15794,35 +15796,35 @@ snapshots:
1579415796 - react-native-reanimated
1579515797 - react-native-worklets
1579615798
15797 expo@56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6):
15799 expo@56.0.8(@babel/core@7.29.7)(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-router@56.2.8)(expo-widgets@56.0.16)(react-dom@19.2.3(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6):
1579815800 dependencies:
1579915801 '@babel/runtime': 7.29.7
15800 '@expo/cli': 56.1.13(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-constants@56.0.16)(expo-font@56.0.5)(expo-router@56.2.8)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
15802 '@expo/cli': 56.1.13(@expo/dom-webview@56.0.5)(@expo/metro-runtime@56.0.13)(bufferutil@4.1.0)(expo-constants@56.0.16)(expo-font@56.0.5)(expo-router@56.2.8)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.6)
1580115803 '@expo/config': 56.0.9(typescript@6.0.3)
1580215804 '@expo/config-plugins': 56.0.8(typescript@6.0.3)
15803 '@expo/devtools': 56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15805 '@expo/devtools': 56.0.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1580415806 '@expo/fingerprint': 0.19.3
1580515807 '@expo/local-build-cache-provider': 56.0.8(typescript@6.0.3)
15806 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15808 '@expo/log-box': 56.0.12(@expo/dom-webview@56.0.5)(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1580715809 '@expo/metro': 56.0.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1580815810 '@expo/metro-config': 56.0.13(patch_hash=8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46)(bufferutil@4.1.0)(expo@56.0.8)(typescript@6.0.3)(utf-8-validate@6.0.6)
1580915811 '@ungap/structured-clone': 1.3.1
1581015812 babel-preset-expo: 56.0.14(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo-widgets@56.0.16)(expo@56.0.8)(react-refresh@0.14.2)
15811 expo-asset: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
15812 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15813 expo-file-system: 56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15814 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15813 expo-asset: 56.0.15(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(typescript@6.0.3)
15814 expo-constants: 56.0.16(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15815 expo-file-system: 56.0.7(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))
15816 expo-font: 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1581515817 expo-keep-awake: 56.0.3(expo@56.0.8)(react@19.2.3)
1581615818 expo-modules-autolinking: 56.0.14(typescript@6.0.3)
15817 expo-modules-core: 56.0.14(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15819 expo-modules-core: 56.0.14(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1581815820 pretty-format: 29.7.0
1581915821 react: 19.2.3
15820 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
15822 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1582115823 react-refresh: 0.14.2
1582215824 whatwg-url-minimum: 0.1.2
1582315825 optionalDependencies:
15824 '@expo/dom-webview': 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15825 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15826 '@expo/dom-webview': 56.0.5(expo@56.0.8)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
15827 '@expo/metro-runtime': 56.0.13(@expo/log-box@56.0.12)(expo@56.0.8)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1582615828 react-dom: 19.2.3(react@19.2.3)
1582715829 transitivePeerDependencies:
1582815830 - '@babel/core'
......@@ -18221,95 +18223,95 @@ snapshots:
1822118223 transitivePeerDependencies:
1822218224 - supports-color
1822318225
18224 react-native-drawer-layout@4.2.4(react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18226 react-native-drawer-layout@4.2.4(0e9729601f58a7a7ae26c76fe6017455):
1822518227 dependencies:
1822618228 color: 4.2.3
1822718229 react: 19.2.3
18228 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18229 react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18230 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18230 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18231 react-native-gesture-handler: 2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18232 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1823118233 use-latest-callback: 0.2.6(react@19.2.3)
1823218234
18233 react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18235 react-native-gesture-handler@2.31.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1823418236 dependencies:
1823518237 '@egjs/hammerjs': 2.0.17
1823618238 '@types/react-test-renderer': 19.1.0
1823718239 hoist-non-react-statics: 3.3.2
1823818240 invariant: 2.2.4
1823918241 react: 19.2.3
18240 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18242 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1824118243
18242 react-native-image-viewing@0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18244 react-native-image-viewing@0.2.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1824318245 dependencies:
1824418246 react: 19.2.3
18245 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18247 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1824618248
18247 react-native-is-edge-to-edge@1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18249 react-native-is-edge-to-edge@1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1824818250 dependencies:
1824918251 react: 19.2.3
18250 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18252 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1825118253
18252 react-native-keyboard-controller@1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18254 react-native-keyboard-controller@1.21.6(react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1825318255 dependencies:
1825418256 react: 19.2.3
18255 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18256 react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18257 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18257 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18258 react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18259 react-native-reanimated: 4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1825818260
18259 react-native-nitro-markdown@0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18261 react-native-nitro-markdown@0.5.8(react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1826018262 dependencies:
1826118263 react: 19.2.3
18262 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18263 react-native-nitro-modules: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18264 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18265 react-native-nitro-modules: 0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1826418266 optionalDependencies:
18265 react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18267 react-native-svg: 15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1826618268
18267 react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18269 react-native-nitro-modules@0.35.9(patch_hash=825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1826818270 dependencies:
1826918271 react: 19.2.3
18270 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18272 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1827118273
18272 react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18274 react-native-reanimated@4.3.1(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1827318275 dependencies:
1827418276 react: 19.2.3
18275 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18276 react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18277 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18277 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18278 react-native-is-edge-to-edge: 1.3.1(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18279 react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1827818280 semver: 7.8.1
1827918281
18280 react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18282 react-native-safe-area-context@5.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1828118283 dependencies:
1828218284 react: 19.2.3
18283 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18285 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1828418286
18285 react-native-screens@4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18287 react-native-screens@4.25.2(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1828618288 dependencies:
1828718289 react: 19.2.3
1828818290 react-freeze: 1.0.4(react@19.2.3)
18289 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18291 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1829018292 warn-once: 0.1.1
1829118293
18292 react-native-shiki-engine@0.3.10(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18294 react-native-shiki-engine@0.3.10(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1829318295 dependencies:
1829418296 '@shikijs/types': 3.23.0
1829518297 '@shikijs/vscode-textmate': 10.0.2
1829618298 react: 19.2.3
18297 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18299 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1829818300
18299 react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18301 react-native-svg@15.15.4(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1830018302 dependencies:
1830118303 css-select: 5.2.2
1830218304 css-tree: 1.1.3
1830318305 react: 19.2.3
18304 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18306 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1830518307 warn-once: 0.1.1
1830618308
18307 react-native-url-polyfill@2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
18309 react-native-url-polyfill@2.0.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)):
1830818310 dependencies:
18309 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18311 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1831018312 whatwg-url-without-unicode: 8.0.0-3
1831118313
18312 react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
18314 react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3):
1831318315 dependencies:
1831418316 '@babel/core': 7.29.7
1831518317 '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7)
......@@ -18321,23 +18323,23 @@ snapshots:
1832118323 '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7)
1832218324 '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7)
1832318325 '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7)
18324 '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)
18326 '@react-native/metro-config': 0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1832518327 convert-source-map: 2.0.0
1832618328 react: 19.2.3
18327 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
18329 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1832818330 semver: 7.8.1
1832918331 transitivePeerDependencies:
1833018332 - supports-color
1833118333
18332 react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6):
18334 react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6):
1833318335 dependencies:
1833418336 '@react-native/assets-registry': 0.85.3
1833518337 '@react-native/codegen': 0.85.3(@babel/core@7.29.7)
18336 '@react-native/community-cli-plugin': 0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(bufferutil@4.1.0)(utf-8-validate@6.0.6)
18338 '@react-native/community-cli-plugin': 0.85.3(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)
1833718339 '@react-native/gradle-plugin': 0.85.3
1833818340 '@react-native/js-polyfills': 0.85.3
1833918341 '@react-native/normalize-colors': 0.85.3
18340 '@react-native/virtualized-lists': 0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
18342 '@react-native/virtualized-lists': 0.85.3(@types/react@19.2.16)(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
1834118343 abort-controller: 3.0.0
1834218344 anser: 1.4.10
1834318345 ansi-regex: 5.0.1
......@@ -19370,14 +19372,14 @@ snapshots:
1937019372
1937119373 universalify@2.0.1: {}
1937219374
19373 uniwind@1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0):
19375 uniwind@1.7.0(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)(tailwindcss@4.3.0):
1937419376 dependencies:
1937519377 '@tailwindcss/node': 4.2.1
1937619378 '@tailwindcss/oxide': 4.2.1
1937719379 culori: 4.0.2
1937819380 lightningcss: 1.30.1
1937919381 react: 19.2.3
19380 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
19382 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1938119383 tailwindcss: 4.3.0
1938219384
1938319385 unpipe@1.0.0: {}