From 334ea48bc7011cc80bf328db15f71a00613b0381 Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Mon, 11 May 2026 09:04:42 +0200 Subject: [PATCH] fix: enhance rich text handling in PDF generation - Bump @tanstack/react-form version to 1.32.0 in package.json. - Refactor rich-input component to simplify highlight configuration. - Improve rich text HTML normalization to handle elements and apply styles correctly in PDF output. - Update global CSS for WYSIWYG to adjust paragraph and list margins. --- apps/web/package.json | 2 +- apps/web/src/components/input/rich-input.tsx | 8 +- commitlint.config.cjs | 3 + .../templates/shared/rich-text-html.test.ts | 36 +++- .../src/templates/shared/rich-text-html.ts | 18 ++ .../shared/rich-text-spacing.test.ts | 174 ++++++++++++++++++ .../src/templates/shared/rich-text-spacing.ts | 173 +++++++++++++++++ .../pdf/src/templates/shared/rich-text.tsx | 44 ++++- packages/ui/src/styles/globals.css | 2 +- pnpm-lock.yaml | 64 +++---- 10 files changed, 477 insertions(+), 47 deletions(-) create mode 100644 packages/pdf/src/templates/shared/rich-text-spacing.test.ts create mode 100644 packages/pdf/src/templates/shared/rich-text-spacing.ts diff --git a/apps/web/package.json b/apps/web/package.json index b2f0fd7e4..0bf19fd43 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -48,7 +48,7 @@ "@reactive-resume/ui": "workspace:*", "@reactive-resume/utils": "workspace:*", "@tailwindcss/vite": "^4.3.0", - "@tanstack/react-form": "^1.31.0", + "@tanstack/react-form": "^1.32.0", "@tanstack/react-hotkeys": "^0.10.0", "@tanstack/react-query": "^5.100.9", "@tanstack/react-router": "^1.169.2", diff --git a/apps/web/src/components/input/rich-input.tsx b/apps/web/src/components/input/rich-input.tsx index aba6aed54..3bcbe36e2 100644 --- a/apps/web/src/components/input/rich-input.tsx +++ b/apps/web/src/components/input/rich-input.tsx @@ -86,11 +86,7 @@ const extensions = [ }), TextStyle, Color, - Highlight.configure({ - HTMLAttributes: { - class: "rounded-md px-0.5 py-px", - }, - }), + Highlight.configure(), TextAlign.configure({ types: ["heading", "paragraph", "listItem"] }), TableKit.configure(), ]; @@ -108,6 +104,8 @@ export function RichInput({ value, onChange, style, className, editorClassName, const textDirection = isRTL(i18n.locale) ? "rtl" : undefined; const [isFullscreen, setIsFullscreen] = useState(false); + console.log(value); + const editor = useEditor({ ...options, extensions, diff --git a/commitlint.config.cjs b/commitlint.config.cjs index 26a88cbb5..94b7344ce 100644 --- a/commitlint.config.cjs +++ b/commitlint.config.cjs @@ -1,3 +1,6 @@ module.exports = { extends: ["@commitlint/config-conventional"], + rules: { + "body-max-line-length": [0, "always", Number.Infinity], + }, }; diff --git a/packages/pdf/src/templates/shared/rich-text-html.test.ts b/packages/pdf/src/templates/shared/rich-text-html.test.ts index 9c4c4512c..278ce5355 100644 --- a/packages/pdf/src/templates/shared/rich-text-html.test.ts +++ b/packages/pdf/src/templates/shared/rich-text-html.test.ts @@ -1,5 +1,12 @@ +import type { ReactElement } from "react"; import { describe, expect, it } from "vitest"; -import { normalizeRichTextHtml } from "./rich-text-html"; +import { Text as PdfText } from "@react-pdf/renderer"; +import { renderHtml } from "react-pdf-html"; +import { normalizeRichTextHtml, richTextMarkClassName } from "./rich-text-html"; + +type PdfElement = ReactElement<{ children?: unknown; element?: { tag: string } }>; + +const getPdfElementProps = (element: unknown) => (element as PdfElement).props; describe("normalizeRichTextHtml", () => { it("wraps loose inline content in a

", () => { @@ -31,6 +38,33 @@ describe("normalizeRichTextHtml", () => { expect(normalizeRichTextHtml("x")).toBe("

x

"); }); + it("maps to a styled inline span", () => { + expect(normalizeRichTextHtml('highlighted text')).toBe( + '

highlighted text

', + ); + }); + + it("keeps highlighted text in the same react-pdf-html inline text bucket", () => { + const root = renderHtml(normalizeRichTextHtml("before highlighted after"), { + resetStyles: true, + stylesheet: { + [`.${richTextMarkClassName}`]: { backgroundColor: "#ffff00" }, + }, + }); + + const paragraph = getPdfElementProps(root).children; + const textBucket = getPdfElementProps(paragraph).children as PdfElement; + const textChildren = getPdfElementProps(textBucket).children as unknown[]; + const highlightedSpan = textChildren[1]; + + expect(textBucket.type).toBe(PdfText); + expect(textChildren).toHaveLength(3); + expect(textChildren[0]).toBe("before "); + expect(getPdfElementProps(highlightedSpan).element?.tag).toBe("span"); + expect(getPdfElementProps(highlightedSpan).children).toBe("highlighted"); + expect(textChildren[2]).toBe(" after"); + }); + it("trims input whitespace", () => { expect(normalizeRichTextHtml(" text ")).toBe("

text

"); }); diff --git a/packages/pdf/src/templates/shared/rich-text-html.ts b/packages/pdf/src/templates/shared/rich-text-html.ts index e2b267814..42483f217 100644 --- a/packages/pdf/src/templates/shared/rich-text-html.ts +++ b/packages/pdf/src/templates/shared/rich-text-html.ts @@ -1,6 +1,8 @@ import type { Node } from "node-html-parser"; import { NodeType, parse } from "node-html-parser"; +export const richTextMarkClassName = "rr-pdf-mark"; + const inlineTags = new Set([ "a", "abbr", @@ -27,6 +29,20 @@ const getTagName = (node: Node) => node.rawTagName.toLowerCase(); const hasBlockDescendant = (node: Node): boolean => node.childNodes.some((child) => child.nodeType === NodeType.ELEMENT_NODE && !isInlineNode(child)); +const mergeClassNames = (...classNames: (string | undefined)[]): string => + classNames + .flatMap((className) => className?.split(/\s+/) ?? []) + .filter(Boolean) + .filter((className, index, classNames) => classNames.indexOf(className) === index) + .join(" "); + +const normalizeMarkElements = (root: ReturnType) => { + for (const mark of root.querySelectorAll("mark")) { + mark.tagName = "span"; + mark.setAttribute("class", mergeClassNames(mark.getAttribute("class"), richTextMarkClassName)); + } +}; + const isInlineNode = (node: Node): boolean => { if (node.nodeType === NodeType.TEXT_NODE || node.nodeType === NodeType.COMMENT_NODE) return true; if (node.nodeType !== NodeType.ELEMENT_NODE) return false; @@ -39,6 +55,8 @@ export const normalizeRichTextHtml = (html: string): string => { const normalized: string[] = []; let inlineNodes: string[] = []; + normalizeMarkElements(root); + const flushInlineNodes = () => { const inlineHtml = inlineNodes.join("").trim(); diff --git a/packages/pdf/src/templates/shared/rich-text-spacing.test.ts b/packages/pdf/src/templates/shared/rich-text-spacing.test.ts new file mode 100644 index 000000000..92557ed00 --- /dev/null +++ b/packages/pdf/src/templates/shared/rich-text-spacing.test.ts @@ -0,0 +1,174 @@ +import { describe, expect, it } from "vitest"; +import { parse } from "node-html-parser"; +import { + createRichTextProseSpacing, + getRichTextEdgeTrimStyle, + isRichTextElementInsideListItem, + isRichTextElementInsideOrderedList, + resolveRichTextBodyLineHeight, + stripRichTextVerticalMargins, +} from "./rich-text-spacing"; + +const requireElement = (element: T | null | undefined): T => { + expect(element).toBeDefined(); + if (!element) throw new Error("Expected element to exist."); + + return element; +}; + +describe("createRichTextProseSpacing", () => { + it("uses 0.2x the configured body line height for each paragraph and list-item side margin", () => { + const spacing = createRichTextProseSpacing(15); + + expect(spacing.paragraph.marginTop).toBeCloseTo(3); + expect(spacing.paragraph.marginBottom).toBeCloseTo(3); + expect(spacing.listItem.marginTop).toBeCloseTo(3); + expect(spacing.listItem.marginBottom).toBeCloseTo(3); + expect((spacing.paragraph.marginBottom as number) + (spacing.paragraph.marginTop as number)).toBeCloseTo(6); + }); + + it("does not invent spacing when no configured body line height is available", () => { + expect(createRichTextProseSpacing(undefined)).toEqual({ + paragraph: {}, + listItem: {}, + }); + }); +}); + +describe("resolveRichTextBodyLineHeight", () => { + it("derives the configured body line height from body font size and line-height multiplier", () => { + expect(resolveRichTextBodyLineHeight({ fontSize: 10, lineHeight: 1.5 })).toBe(15); + }); + + it("uses the last resolved numeric font size and line height from template styles", () => { + expect( + resolveRichTextBodyLineHeight({ fontSize: 9, lineHeight: 1.2 }, [ + { color: "#111" }, + { fontSize: 11, lineHeight: 1.5 }, + ]), + ).toBe(16.5); + }); + + it("parses px font-size and line-height strings when styles contain them", () => { + expect(resolveRichTextBodyLineHeight({ fontSize: "12px", lineHeight: "18px" })).toBe(18); + }); + + it("returns undefined when configured body line height cannot be resolved", () => { + expect(resolveRichTextBodyLineHeight({ fontSize: 10 })).toBeUndefined(); + expect(resolveRichTextBodyLineHeight({ lineHeight: 1.5 })).toBeUndefined(); + }); +}); + +describe("getRichTextEdgeTrimStyle", () => { + it("trims both edges for a single paragraph", () => { + const [paragraph] = parse("

Only paragraph.

").querySelectorAll("p"); + + expect(getRichTextEdgeTrimStyle(requireElement(paragraph))).toEqual({ marginTop: 0, marginBottom: 0 }); + }); + + it("trims only the outer edges for multiple paragraphs", () => { + const [firstParagraph, secondParagraph] = parse("

First.

Second.

").querySelectorAll("p"); + + expect(getRichTextEdgeTrimStyle(requireElement(firstParagraph))).toEqual({ marginTop: 0 }); + expect(getRichTextEdgeTrimStyle(requireElement(secondParagraph))).toEqual({ marginBottom: 0 }); + }); + + it("trims only the outer edges for list items", () => { + const [firstItem, secondItem] = parse("
  • First.
  • Second.
").querySelectorAll("li"); + + expect(getRichTextEdgeTrimStyle(requireElement(firstItem))).toEqual({ marginTop: 0 }); + expect(getRichTextEdgeTrimStyle(requireElement(secondItem))).toEqual({ marginBottom: 0 }); + }); + + it("trims across mixed paragraph and list content", () => { + const root = parse("

Intro.

  • Nested item paragraph.

"); + const introParagraph = root.querySelector("p"); + const listItem = root.querySelector("li"); + const nestedParagraph = root.querySelector("li p"); + + expect(getRichTextEdgeTrimStyle(requireElement(introParagraph))).toEqual({ marginTop: 0 }); + expect(getRichTextEdgeTrimStyle(requireElement(listItem))).toEqual({ marginBottom: 0 }); + expect(getRichTextEdgeTrimStyle(requireElement(nestedParagraph))).toEqual({}); + }); + + it("normalizes uppercase and mixed-case tags before trimming edges", () => { + const [firstParagraph, secondItem] = parse("

Intro.

  • Item.
").querySelectorAll("p, li"); + + expect(getRichTextEdgeTrimStyle(requireElement(firstParagraph))).toEqual({ marginTop: 0 }); + expect(getRichTextEdgeTrimStyle(requireElement(secondItem))).toEqual({ marginBottom: 0 }); + }); +}); + +describe("stripRichTextVerticalMargins", () => { + it("removes vertical margin properties from list content styles and preserves text styles", () => { + expect( + stripRichTextVerticalMargins({ + color: "#222", + fontSize: 10, + margin: 0, + marginTop: 1, + marginBottom: 2, + marginVertical: 3, + }), + ).toEqual({ + color: "#222", + fontSize: 10, + }); + }); +}); + +describe("isRichTextElementInsideListItem", () => { + it("detects paragraphs nested directly inside list items", () => { + const paragraph = parse("
  • Nested item paragraph.

").querySelector("p"); + + expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true); + }); + + it("detects paragraphs nested deeper inside list item content", () => { + const paragraph = parse("
  • Nested item paragraph.

").querySelector("p"); + + expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true); + }); + + it("normalizes uppercase and mixed-case tags for list item ancestor detection", () => { + const paragraph = parse("
  • Nested item paragraph.

").querySelector("p"); + + expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true); + }); + + it("does not treat top-level paragraphs as list item content", () => { + const paragraph = parse("

Top-level paragraph.

").querySelector("p"); + + expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(false); + }); +}); + +describe("isRichTextElementInsideOrderedList", () => { + it("normalizes uppercase and mixed-case ordered-list ancestors", () => { + const firstItem = parse("
  1. First item.
").querySelector("li"); + const nestedParagraph = parse("
  1. Nested item paragraph.

").querySelector( + "p", + ); + + expect(isRichTextElementInsideOrderedList(requireElement(firstItem))).toBe(true); + expect(isRichTextElementInsideOrderedList(requireElement(nestedParagraph))).toBe(true); + }); + + it("does not treat unordered-list ancestors as ordered lists", () => { + const item = parse("
  • First item.
").querySelector("li"); + + expect(isRichTextElementInsideOrderedList(requireElement(item))).toBe(false); + }); + + it("uses the nearest list ancestor when ordered and unordered lists are nested", () => { + const unorderedNestedInOrdered = parse("
    • Nested unordered item.
").querySelector( + "ul li", + ); + const orderedNestedInUnordered = parse("
    1. Nested ordered item.
").querySelector( + "ol li", + ); + + expect(isRichTextElementInsideOrderedList(requireElement(unorderedNestedInOrdered))).toBe(false); + expect(isRichTextElementInsideOrderedList(requireElement(orderedNestedInUnordered))).toBe(true); + }); +}); diff --git a/packages/pdf/src/templates/shared/rich-text-spacing.ts b/packages/pdf/src/templates/shared/rich-text-spacing.ts new file mode 100644 index 000000000..5284feb39 --- /dev/null +++ b/packages/pdf/src/templates/shared/rich-text-spacing.ts @@ -0,0 +1,173 @@ +import type { Style } from "@react-pdf/types"; +import type { StyleInput } from "./styles"; +import { NodeType } from "node-html-parser"; +import { composeStyles } from "./styles"; + +type RichTextSpacingElement = { + nodeType: number; + tag?: string; + localName?: string; + rawTagName?: string; + tagName?: string; + parentNode?: RichTextSpacingElement | null; + childNodes?: unknown[]; +}; + +type RichTextProseSpacing = { + paragraph: Style; + listItem: Style; +}; + +const parseFiniteNumber = (value: unknown): number | undefined => + typeof value === "number" && Number.isFinite(value) ? value : undefined; + +const parsePxValue = (value: unknown): number | undefined => { + if (typeof value !== "string" || !value.endsWith("px")) return undefined; + + const parsedValue = Number.parseFloat(value); + return Number.isFinite(parsedValue) ? parsedValue : undefined; +}; + +const parseFontSize = (fontSize: Style["fontSize"]): number | undefined => + parseFiniteNumber(fontSize) ?? parsePxValue(fontSize); + +const parseLineHeight = ( + lineHeight: Style["lineHeight"], +): { type: "multiplier" | "absolute"; value: number } | undefined => { + const multiplier = parseFiniteNumber(lineHeight); + if (multiplier !== undefined) return { type: "multiplier", value: multiplier }; + + const absoluteLineHeight = parsePxValue(lineHeight); + if (absoluteLineHeight !== undefined) return { type: "absolute", value: absoluteLineHeight }; + + return undefined; +}; + +const isElementNode = (node: unknown): node is RichTextSpacingElement => + typeof node === "object" && node !== null && "nodeType" in node && node.nodeType === NodeType.ELEMENT_NODE; + +const readTagName = ( + element: RichTextSpacingElement, + key: "tag" | "localName" | "rawTagName" | "tagName", +): string | undefined => { + try { + const tagName = element[key]; + + return typeof tagName === "string" ? tagName : undefined; + } catch { + return undefined; + } +}; + +const normalizeTagName = (element: RichTextSpacingElement): string | undefined => + ( + readTagName(element, "tag") ?? + readTagName(element, "localName") ?? + readTagName(element, "rawTagName") ?? + readTagName(element, "tagName") + )?.toLowerCase(); + +const isRichTextTag = (element: RichTextSpacingElement, ...tagNames: string[]): boolean => { + const normalizedTagName = normalizeTagName(element); + + return normalizedTagName !== undefined && tagNames.includes(normalizedTagName); +}; + +const getRootElement = (element: RichTextSpacingElement): RichTextSpacingElement => { + let root = element; + + while (root.parentNode) { + root = root.parentNode; + } + + return root; +}; + +const getTopLevelFlowElements = (root: RichTextSpacingElement): RichTextSpacingElement[] => + (root.childNodes ?? []).filter(isElementNode).flatMap((child) => { + if (isRichTextTag(child, "p")) return [child]; + if (!isRichTextTag(child, "ul", "ol")) return []; + + return (child.childNodes ?? []).filter(isElementNode).filter((listChild) => isRichTextTag(listChild, "li")); + }); + +export const createRichTextProseSpacing = (bodyLineHeight: number | undefined): RichTextProseSpacing => { + if (bodyLineHeight === undefined) return { paragraph: {}, listItem: {} }; + + const sideMargin = bodyLineHeight * 0.2; + + return { + paragraph: { + marginTop: sideMargin, + marginBottom: sideMargin, + }, + listItem: { + marginTop: sideMargin, + marginBottom: sideMargin, + }, + }; +}; + +export const resolveRichTextBodyLineHeight = (...styles: StyleInput[]): number | undefined => { + let bodyFontSize: number | undefined; + let bodyLineHeight: ReturnType; + + for (const style of composeStyles(...styles)) { + const fontSize = parseFontSize(style.fontSize); + if (fontSize !== undefined) bodyFontSize = fontSize; + + const lineHeight = parseLineHeight(style.lineHeight); + if (lineHeight !== undefined) bodyLineHeight = lineHeight; + } + + if (bodyFontSize === undefined || bodyLineHeight === undefined) return undefined; + + return bodyLineHeight.type === "multiplier" ? bodyFontSize * bodyLineHeight.value : bodyLineHeight.value; +}; + +export const getRichTextEdgeTrimStyle = (element: RichTextSpacingElement): Style => { + const flowElements = getTopLevelFlowElements(getRootElement(element)); + const flowIndex = flowElements.indexOf(element); + + if (flowIndex === -1) return {}; + + return { + ...(flowIndex === 0 ? { marginTop: 0 } : {}), + ...(flowIndex === flowElements.length - 1 ? { marginBottom: 0 } : {}), + }; +}; + +export const isRichTextElementInsideListItem = (element: RichTextSpacingElement): boolean => { + let current = element.parentNode; + + while (current) { + if (isRichTextTag(current, "li")) return true; + current = current.parentNode; + } + + return false; +}; + +export const isRichTextElementInsideOrderedList = (element: RichTextSpacingElement): boolean => { + let current = element.parentNode; + + while (current) { + if (isRichTextTag(current, "ol")) return true; + if (isRichTextTag(current, "ul")) return false; + current = current.parentNode; + } + + return false; +}; + +export const stripRichTextVerticalMargins = (style: Style): Style => { + const { + margin: _margin, + marginTop: _marginTop, + marginBottom: _marginBottom, + marginVertical: _marginVertical, + ...rest + } = style; + + return rest; +}; diff --git a/packages/pdf/src/templates/shared/rich-text.tsx b/packages/pdf/src/templates/shared/rich-text.tsx index 324ca432f..ada17e332 100644 --- a/packages/pdf/src/templates/shared/rich-text.tsx +++ b/packages/pdf/src/templates/shared/rich-text.tsx @@ -3,13 +3,32 @@ import { Text as PdfText, View } from "@react-pdf/renderer"; import { Html } from "react-pdf-html"; import { useTemplateStyle } from "./context"; import { safeTextStyle } from "./primitives"; -import { normalizeRichTextHtml } from "./rich-text-html"; +import { normalizeRichTextHtml, richTextMarkClassName } from "./rich-text-html"; +import { + createRichTextProseSpacing, + getRichTextEdgeTrimStyle, + isRichTextElementInsideListItem, + isRichTextElementInsideOrderedList, + resolveRichTextBodyLineHeight, + stripRichTextVerticalMargins, +} from "./rich-text-spacing"; import { composeStyles, mergeLinkStyles, mergeStyles } from "./styles"; const richListItemContentStackStyle = { flexDirection: "column", } satisfies Style; +const richMarkStyle = { + backgroundColor: "#ffff00", +} satisfies Style; + +const toStyleArray = (style: Style | Style[] | undefined): Style[] => { + if (!style) return []; + if (Array.isArray(style)) return style.filter(Boolean); + + return [style]; +}; + export const RichText = ({ children }: { children: string }) => { const boldStyle = useTemplateStyle("bold"); const linkStyle = useTemplateStyle("link"); @@ -17,6 +36,8 @@ export const RichText = ({ children }: { children: string }) => { const richListItemRowStyle = useTemplateStyle("richListItemRow"); const richListItemMarkerStyle = useTemplateStyle("richListItemMarker"); const richListItemContentStyle = useTemplateStyle("richListItemContent"); + const bodyLineHeight = resolveRichTextBodyLineHeight(richParagraphStyle, richListItemContentStyle); + const proseSpacing = createRichTextProseSpacing(bodyLineHeight); const html = normalizeRichTextHtml(children); @@ -27,19 +48,26 @@ export const RichText = ({ children }: { children: string }) => { resetStyles renderers={{ b: ({ children }) => {children}, + p: ({ element, style, children }) => { + const paragraphStyles = isRichTextElementInsideListItem(element) + ? toStyleArray(style).map(stripRichTextVerticalMargins) + : style; + + return {children}; + }, li: ({ element, style, children }) => { - const list = element.closest("ol, ul"); - const isOrderedList = list?.rawTagName === "ol" || element.parentNode.tag === "ol"; + const isOrderedList = isRichTextElementInsideOrderedList(element); const marker = isOrderedList ? `${element.indexOfType + 1}.` : "•"; - const itemStyle = Array.isArray(style) ? (style as Style[]) : [style as Style | undefined]; + const itemStyles = toStyleArray(style); + const contentItemStyles = itemStyles.map(stripRichTextVerticalMargins); return ( - + {marker} { stylesheet={{ b: mergeStyles(boldStyle, safeTextStyle), strong: mergeStyles(boldStyle, safeTextStyle), - p: mergeStyles(richParagraphStyle, safeTextStyle), + li: mergeStyles(proseSpacing.listItem), + [`.${richTextMarkClassName}`]: mergeStyles(richMarkStyle, safeTextStyle), + p: mergeStyles(richParagraphStyle, safeTextStyle, proseSpacing.paragraph), a: mergeLinkStyles(linkStyle, safeTextStyle), }} > diff --git a/packages/ui/src/styles/globals.css b/packages/ui/src/styles/globals.css index efca9818d..830eae27a 100644 --- a/packages/ui/src/styles/globals.css +++ b/packages/ui/src/styles/globals.css @@ -154,7 +154,7 @@ } .wysiwyg { - @apply prose prose-sm prose-zinc dark:prose-invert max-w-none prose-p:my-0! prose-li:my-0! prose-ul:my-0! prose-ol:my-0!; + @apply prose prose-sm prose-zinc dark:prose-invert max-w-none prose-p:my-3! prose-li:my-3! prose-ul:my-3! prose-ol:my-3!; } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5cd079b6..6aea21f96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,16 +73,16 @@ importers: version: 1.4.1(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@better-auth/api-key': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5)) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5)) '@better-auth/infra': specifier: ^0.2.6 - version: 0.2.6(c5e49ade875b56891bf7ad7edc89abae) + version: 0.2.6(4ea1f299f932814591939b4faa6a1316) '@better-auth/oauth-provider': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) '@better-auth/passkey': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0) '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -162,8 +162,8 @@ importers: specifier: ^4.3.0 version: 4.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) '@tanstack/react-form': - specifier: ^1.31.0 - version: 1.31.0(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.32.0 + version: 1.32.0(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@tanstack/react-hotkeys': specifier: ^0.10.0 version: 0.10.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -214,7 +214,7 @@ importers: version: 2.10.1(@babel/runtime@7.29.2)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) better-auth: specifier: 1.6.10 - version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) cmdk: specifier: ^1.1.1 version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -420,7 +420,7 @@ importers: version: 6.0.0 better-auth: specifier: 1.6.10 - version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) drizzle-orm: specifier: 1.0.0-beta.22 version: 1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3) @@ -463,19 +463,19 @@ importers: dependencies: '@better-auth/api-key': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5)) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5)) '@better-auth/drizzle-adapter': specifier: ^1.6.10 version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3)) '@better-auth/infra': specifier: ^0.2.6 - version: 0.2.6(c5e49ade875b56891bf7ad7edc89abae) + version: 0.2.6(4ea1f299f932814591939b4faa6a1316) '@better-auth/oauth-provider': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) '@better-auth/passkey': specifier: ^1.6.10 - version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0) + version: 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0) '@reactive-resume/db': specifier: workspace:* version: link:../db @@ -496,7 +496,7 @@ importers: version: 6.0.0 better-auth: specifier: 1.6.10 - version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + version: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) drizzle-orm: specifier: 1.0.0-beta.22 version: 1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3) @@ -4417,8 +4417,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@tanstack/form-core@1.31.0': - resolution: {integrity: sha512-t5G/LnrM/U10mQgzYis/WvHc6yTDj7jyF5cYf6GjVJpEbn0et0wDUQtafiOXY8hiXJ9D1HUqBi0u76ZX05uiHw==} + '@tanstack/form-core@1.32.0': + resolution: {integrity: sha512-Tn5VRDSjyqjmaet2tJMuEWDRFyrCaon03vxXPlSSaiSs6C/N7lCIwGCXJbZXEUq1kTj8jYN9qyXHbsz4LQHcow==} '@tanstack/history@1.161.6': resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} @@ -4435,8 +4435,8 @@ packages: '@tanstack/query-core@5.100.9': resolution: {integrity: sha512-SJSFw1S8+kQ0+knv/XGfrbocWoAlT7vDKsSImtLx3ZPQmEcR46hkDjLSvynSy25N8Ms4tIEini1FuBd5k7IscQ==} - '@tanstack/react-form@1.31.0': - resolution: {integrity: sha512-31hoeKlk45jCAnry85bOiL89FwySL9HtAhfWLHmCJ5WcvBlHJpoqnMvl6Cy8DM+7ey2eWHKiPiEL29BkG5o12w==} + '@tanstack/react-form@1.32.0': + resolution: {integrity: sha512-6WP5SQTA6/H9crCpvpq3ZppYWqtrdE5NjOy6ebABi6uAQPqhfTzrdjS9t40mCZCFtGI5585OhJV6zBP/KN2zcw==} peerDependencies: '@tanstack/react-start': '*' react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -10263,11 +10263,11 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/api-key@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))': + '@better-auth/api-key@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) zod: 4.4.3 '@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0)': @@ -10291,12 +10291,12 @@ snapshots: optionalDependencies: drizzle-orm: 1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3) - '@better-auth/infra@0.2.6(c5e49ade875b56891bf7ad7edc89abae)': + '@better-auth/infra@0.2.6(4ea1f299f932814591939b4faa6a1316)': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/sso': 1.6.9(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) + '@better-auth/sso': 1.6.9(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3)) '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) better-call: 1.3.5(zod@4.4.3) jose: 6.2.3 libphonenumber-js: 1.13.0 @@ -10319,24 +10319,24 @@ snapshots: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/oauth-provider@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))': + '@better-auth/oauth-provider@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) better-call: 1.3.5(zod@4.4.3) jose: 6.2.3 zod: 4.4.3 - '@better-auth/passkey@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0)': + '@better-auth/passkey@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))(nanostores@1.3.0)': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 '@simplewebauthn/browser': 13.3.0 '@simplewebauthn/server': 13.3.0 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) better-call: 1.3.5(zod@4.4.3) nanostores: 1.3.0 zod: 4.4.3 @@ -10346,12 +10346,12 @@ snapshots: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 - '@better-auth/sso@1.6.9(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))': + '@better-auth/sso@1.6.9(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5))(better-call@1.3.5(zod@4.4.3))': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + better-auth: 1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) better-call: 1.3.5(zod@4.4.3) fast-xml-parser: 5.7.3 jose: 6.2.3 @@ -12696,7 +12696,7 @@ snapshots: '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/form-core@1.31.0': + '@tanstack/form-core@1.32.0': dependencies: '@tanstack/devtools-event-client': 0.4.3 '@tanstack/pacer-lite': 0.1.1 @@ -12712,9 +12712,9 @@ snapshots: '@tanstack/query-core@5.100.9': {} - '@tanstack/react-form@1.31.0(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@tanstack/react-form@1.32.0(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@tanstack/form-core': 1.31.0 + '@tanstack/form-core': 1.32.0 '@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: 19.2.6 optionalDependencies: @@ -13623,7 +13623,7 @@ snapshots: node-addon-api: 8.7.0 node-gyp-build: 4.8.4 - better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5): + better-auth@1.6.10(@opentelemetry/api@1.9.0)(@tanstack/react-start@1.167.65(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)))(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))(next@16.2.3(@opentelemetry/api@1.9.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5): dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@1.0.0-beta.22(@opentelemetry/api@1.9.0)(@types/pg@8.20.0)(pg@8.20.0)(zod@4.4.3))