mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-06-22 04:11:55 +10:00
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 <mark> elements and apply styles correctly in PDF output. - Update global CSS for WYSIWYG to adjust paragraph and list margins.
This commit is contained in:
@@ -48,7 +48,7 @@
|
|||||||
"@reactive-resume/ui": "workspace:*",
|
"@reactive-resume/ui": "workspace:*",
|
||||||
"@reactive-resume/utils": "workspace:*",
|
"@reactive-resume/utils": "workspace:*",
|
||||||
"@tailwindcss/vite": "^4.3.0",
|
"@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-hotkeys": "^0.10.0",
|
||||||
"@tanstack/react-query": "^5.100.9",
|
"@tanstack/react-query": "^5.100.9",
|
||||||
"@tanstack/react-router": "^1.169.2",
|
"@tanstack/react-router": "^1.169.2",
|
||||||
|
|||||||
@@ -86,11 +86,7 @@ const extensions = [
|
|||||||
}),
|
}),
|
||||||
TextStyle,
|
TextStyle,
|
||||||
Color,
|
Color,
|
||||||
Highlight.configure({
|
Highlight.configure(),
|
||||||
HTMLAttributes: {
|
|
||||||
class: "rounded-md px-0.5 py-px",
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
TextAlign.configure({ types: ["heading", "paragraph", "listItem"] }),
|
TextAlign.configure({ types: ["heading", "paragraph", "listItem"] }),
|
||||||
TableKit.configure(),
|
TableKit.configure(),
|
||||||
];
|
];
|
||||||
@@ -108,6 +104,8 @@ export function RichInput({ value, onChange, style, className, editorClassName,
|
|||||||
const textDirection = isRTL(i18n.locale) ? "rtl" : undefined;
|
const textDirection = isRTL(i18n.locale) ? "rtl" : undefined;
|
||||||
const [isFullscreen, setIsFullscreen] = useState(false);
|
const [isFullscreen, setIsFullscreen] = useState(false);
|
||||||
|
|
||||||
|
console.log(value);
|
||||||
|
|
||||||
const editor = useEditor({
|
const editor = useEditor({
|
||||||
...options,
|
...options,
|
||||||
extensions,
|
extensions,
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
extends: ["@commitlint/config-conventional"],
|
extends: ["@commitlint/config-conventional"],
|
||||||
|
rules: {
|
||||||
|
"body-max-line-length": [0, "always", Number.Infinity],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
|
import type { ReactElement } from "react";
|
||||||
import { describe, expect, it } from "vitest";
|
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", () => {
|
describe("normalizeRichTextHtml", () => {
|
||||||
it("wraps loose inline content in a <p>", () => {
|
it("wraps loose inline content in a <p>", () => {
|
||||||
@@ -31,6 +38,33 @@ describe("normalizeRichTextHtml", () => {
|
|||||||
expect(normalizeRichTextHtml("<span>x</span>")).toBe("<p><span>x</span></p>");
|
expect(normalizeRichTextHtml("<span>x</span>")).toBe("<p><span>x</span></p>");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("maps <mark> to a styled inline span", () => {
|
||||||
|
expect(normalizeRichTextHtml('<mark class="rounded-md">highlighted</mark> text')).toBe(
|
||||||
|
'<p><span class="rounded-md rr-pdf-mark">highlighted</span> text</p>',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("keeps highlighted text in the same react-pdf-html inline text bucket", () => {
|
||||||
|
const root = renderHtml(normalizeRichTextHtml("before <mark>highlighted</mark> 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", () => {
|
it("trims input whitespace", () => {
|
||||||
expect(normalizeRichTextHtml(" text ")).toBe("<p>text</p>");
|
expect(normalizeRichTextHtml(" text ")).toBe("<p>text</p>");
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import type { Node } from "node-html-parser";
|
import type { Node } from "node-html-parser";
|
||||||
import { NodeType, parse } from "node-html-parser";
|
import { NodeType, parse } from "node-html-parser";
|
||||||
|
|
||||||
|
export const richTextMarkClassName = "rr-pdf-mark";
|
||||||
|
|
||||||
const inlineTags = new Set([
|
const inlineTags = new Set([
|
||||||
"a",
|
"a",
|
||||||
"abbr",
|
"abbr",
|
||||||
@@ -27,6 +29,20 @@ const getTagName = (node: Node) => node.rawTagName.toLowerCase();
|
|||||||
const hasBlockDescendant = (node: Node): boolean =>
|
const hasBlockDescendant = (node: Node): boolean =>
|
||||||
node.childNodes.some((child) => child.nodeType === NodeType.ELEMENT_NODE && !isInlineNode(child));
|
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<typeof parse>) => {
|
||||||
|
for (const mark of root.querySelectorAll("mark")) {
|
||||||
|
mark.tagName = "span";
|
||||||
|
mark.setAttribute("class", mergeClassNames(mark.getAttribute("class"), richTextMarkClassName));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const isInlineNode = (node: Node): boolean => {
|
const isInlineNode = (node: Node): boolean => {
|
||||||
if (node.nodeType === NodeType.TEXT_NODE || node.nodeType === NodeType.COMMENT_NODE) return true;
|
if (node.nodeType === NodeType.TEXT_NODE || node.nodeType === NodeType.COMMENT_NODE) return true;
|
||||||
if (node.nodeType !== NodeType.ELEMENT_NODE) return false;
|
if (node.nodeType !== NodeType.ELEMENT_NODE) return false;
|
||||||
@@ -39,6 +55,8 @@ export const normalizeRichTextHtml = (html: string): string => {
|
|||||||
const normalized: string[] = [];
|
const normalized: string[] = [];
|
||||||
let inlineNodes: string[] = [];
|
let inlineNodes: string[] = [];
|
||||||
|
|
||||||
|
normalizeMarkElements(root);
|
||||||
|
|
||||||
const flushInlineNodes = () => {
|
const flushInlineNodes = () => {
|
||||||
const inlineHtml = inlineNodes.join("").trim();
|
const inlineHtml = inlineNodes.join("").trim();
|
||||||
|
|
||||||
|
|||||||
@@ -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 = <T>(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("<p>Only paragraph.</p>").querySelectorAll("p");
|
||||||
|
|
||||||
|
expect(getRichTextEdgeTrimStyle(requireElement(paragraph))).toEqual({ marginTop: 0, marginBottom: 0 });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("trims only the outer edges for multiple paragraphs", () => {
|
||||||
|
const [firstParagraph, secondParagraph] = parse("<p>First.</p><p>Second.</p>").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("<ul><li>First.</li><li>Second.</li></ul>").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("<p>Intro.</p><ul><li><p>Nested item paragraph.</p></li></ul>");
|
||||||
|
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("<P>Intro.</P><UL><LI>Item.</LI></UL>").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("<ul><li><p>Nested item paragraph.</p></li></ul>").querySelector("p");
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("detects paragraphs nested deeper inside list item content", () => {
|
||||||
|
const paragraph = parse("<ul><li><section><p>Nested item paragraph.</p></section></li></ul>").querySelector("p");
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("normalizes uppercase and mixed-case tags for list item ancestor detection", () => {
|
||||||
|
const paragraph = parse("<UL><LI><Section><P>Nested item paragraph.</P></Section></LI></UL>").querySelector("p");
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not treat top-level paragraphs as list item content", () => {
|
||||||
|
const paragraph = parse("<p>Top-level paragraph.</p>").querySelector("p");
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideListItem(requireElement(paragraph))).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("isRichTextElementInsideOrderedList", () => {
|
||||||
|
it("normalizes uppercase and mixed-case ordered-list ancestors", () => {
|
||||||
|
const firstItem = parse("<OL><LI>First item.</LI></OL>").querySelector("li");
|
||||||
|
const nestedParagraph = parse("<Ol><Li><Section><P>Nested item paragraph.</P></Section></Li></Ol>").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("<UL><LI>First item.</LI></UL>").querySelector("li");
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideOrderedList(requireElement(item))).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("uses the nearest list ancestor when ordered and unordered lists are nested", () => {
|
||||||
|
const unorderedNestedInOrdered = parse("<ol><li><ul><li>Nested unordered item.</li></ul></li></ol>").querySelector(
|
||||||
|
"ul li",
|
||||||
|
);
|
||||||
|
const orderedNestedInUnordered = parse("<ul><li><ol><li>Nested ordered item.</li></ol></li></ul>").querySelector(
|
||||||
|
"ol li",
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(isRichTextElementInsideOrderedList(requireElement(unorderedNestedInOrdered))).toBe(false);
|
||||||
|
expect(isRichTextElementInsideOrderedList(requireElement(orderedNestedInUnordered))).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -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<typeof parseLineHeight>;
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
@@ -3,13 +3,32 @@ import { Text as PdfText, View } from "@react-pdf/renderer";
|
|||||||
import { Html } from "react-pdf-html";
|
import { Html } from "react-pdf-html";
|
||||||
import { useTemplateStyle } from "./context";
|
import { useTemplateStyle } from "./context";
|
||||||
import { safeTextStyle } from "./primitives";
|
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";
|
import { composeStyles, mergeLinkStyles, mergeStyles } from "./styles";
|
||||||
|
|
||||||
const richListItemContentStackStyle = {
|
const richListItemContentStackStyle = {
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
} satisfies Style;
|
} 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 }) => {
|
export const RichText = ({ children }: { children: string }) => {
|
||||||
const boldStyle = useTemplateStyle("bold");
|
const boldStyle = useTemplateStyle("bold");
|
||||||
const linkStyle = useTemplateStyle("link");
|
const linkStyle = useTemplateStyle("link");
|
||||||
@@ -17,6 +36,8 @@ export const RichText = ({ children }: { children: string }) => {
|
|||||||
const richListItemRowStyle = useTemplateStyle("richListItemRow");
|
const richListItemRowStyle = useTemplateStyle("richListItemRow");
|
||||||
const richListItemMarkerStyle = useTemplateStyle("richListItemMarker");
|
const richListItemMarkerStyle = useTemplateStyle("richListItemMarker");
|
||||||
const richListItemContentStyle = useTemplateStyle("richListItemContent");
|
const richListItemContentStyle = useTemplateStyle("richListItemContent");
|
||||||
|
const bodyLineHeight = resolveRichTextBodyLineHeight(richParagraphStyle, richListItemContentStyle);
|
||||||
|
const proseSpacing = createRichTextProseSpacing(bodyLineHeight);
|
||||||
|
|
||||||
const html = normalizeRichTextHtml(children);
|
const html = normalizeRichTextHtml(children);
|
||||||
|
|
||||||
@@ -27,19 +48,26 @@ export const RichText = ({ children }: { children: string }) => {
|
|||||||
resetStyles
|
resetStyles
|
||||||
renderers={{
|
renderers={{
|
||||||
b: ({ children }) => <PdfText style={composeStyles(boldStyle, safeTextStyle)}>{children}</PdfText>,
|
b: ({ children }) => <PdfText style={composeStyles(boldStyle, safeTextStyle)}>{children}</PdfText>,
|
||||||
|
p: ({ element, style, children }) => {
|
||||||
|
const paragraphStyles = isRichTextElementInsideListItem(element)
|
||||||
|
? toStyleArray(style).map(stripRichTextVerticalMargins)
|
||||||
|
: style;
|
||||||
|
|
||||||
|
return <View style={composeStyles(paragraphStyles, getRichTextEdgeTrimStyle(element))}>{children}</View>;
|
||||||
|
},
|
||||||
li: ({ element, style, children }) => {
|
li: ({ element, style, children }) => {
|
||||||
const list = element.closest("ol, ul");
|
const isOrderedList = isRichTextElementInsideOrderedList(element);
|
||||||
const isOrderedList = list?.rawTagName === "ol" || element.parentNode.tag === "ol";
|
|
||||||
const marker = isOrderedList ? `${element.indexOfType + 1}.` : "•";
|
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 (
|
return (
|
||||||
<View style={composeStyles(richListItemRowStyle)}>
|
<View style={composeStyles(richListItemRowStyle, itemStyles, getRichTextEdgeTrimStyle(element))}>
|
||||||
<PdfText style={composeStyles(richListItemMarkerStyle)}>{marker}</PdfText>
|
<PdfText style={composeStyles(richListItemMarkerStyle)}>{marker}</PdfText>
|
||||||
<View
|
<View
|
||||||
style={composeStyles(
|
style={composeStyles(
|
||||||
richListItemContentStyle,
|
richListItemContentStyle,
|
||||||
...itemStyle,
|
contentItemStyles,
|
||||||
richListItemContentStackStyle,
|
richListItemContentStackStyle,
|
||||||
safeTextStyle,
|
safeTextStyle,
|
||||||
)}
|
)}
|
||||||
@@ -53,7 +81,9 @@ export const RichText = ({ children }: { children: string }) => {
|
|||||||
stylesheet={{
|
stylesheet={{
|
||||||
b: mergeStyles(boldStyle, safeTextStyle),
|
b: mergeStyles(boldStyle, safeTextStyle),
|
||||||
strong: 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),
|
a: mergeLinkStyles(linkStyle, safeTextStyle),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.wysiwyg {
|
.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!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Generated
+32
-32
@@ -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)
|
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':
|
'@better-auth/api-key':
|
||||||
specifier: ^1.6.10
|
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':
|
'@better-auth/infra':
|
||||||
specifier: ^0.2.6
|
specifier: ^0.2.6
|
||||||
version: 0.2.6(c5e49ade875b56891bf7ad7edc89abae)
|
version: 0.2.6(4ea1f299f932814591939b4faa6a1316)
|
||||||
'@better-auth/oauth-provider':
|
'@better-auth/oauth-provider':
|
||||||
specifier: ^1.6.10
|
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':
|
'@better-auth/passkey':
|
||||||
specifier: ^1.6.10
|
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':
|
'@dnd-kit/core':
|
||||||
specifier: ^6.3.1
|
specifier: ^6.3.1
|
||||||
version: 6.3.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
|
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
|
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))
|
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':
|
'@tanstack/react-form':
|
||||||
specifier: ^1.31.0
|
specifier: ^1.32.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)
|
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':
|
'@tanstack/react-hotkeys':
|
||||||
specifier: ^0.10.0
|
specifier: ^0.10.0
|
||||||
version: 0.10.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
|
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)
|
version: 2.10.1(@babel/runtime@7.29.2)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: 1.6.10
|
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:
|
cmdk:
|
||||||
specifier: ^1.1.1
|
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)
|
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
|
version: 6.0.0
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: 1.6.10
|
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:
|
drizzle-orm:
|
||||||
specifier: 1.0.0-beta.22
|
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)
|
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:
|
dependencies:
|
||||||
'@better-auth/api-key':
|
'@better-auth/api-key':
|
||||||
specifier: ^1.6.10
|
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':
|
'@better-auth/drizzle-adapter':
|
||||||
specifier: ^1.6.10
|
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))
|
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':
|
'@better-auth/infra':
|
||||||
specifier: ^0.2.6
|
specifier: ^0.2.6
|
||||||
version: 0.2.6(c5e49ade875b56891bf7ad7edc89abae)
|
version: 0.2.6(4ea1f299f932814591939b4faa6a1316)
|
||||||
'@better-auth/oauth-provider':
|
'@better-auth/oauth-provider':
|
||||||
specifier: ^1.6.10
|
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':
|
'@better-auth/passkey':
|
||||||
specifier: ^1.6.10
|
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':
|
'@reactive-resume/db':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../db
|
version: link:../db
|
||||||
@@ -496,7 +496,7 @@ importers:
|
|||||||
version: 6.0.0
|
version: 6.0.0
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: 1.6.10
|
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:
|
drizzle-orm:
|
||||||
specifier: 1.0.0-beta.22
|
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)
|
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'}
|
engines: {node: '>=18'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
'@tanstack/form-core@1.31.0':
|
'@tanstack/form-core@1.32.0':
|
||||||
resolution: {integrity: sha512-t5G/LnrM/U10mQgzYis/WvHc6yTDj7jyF5cYf6GjVJpEbn0et0wDUQtafiOXY8hiXJ9D1HUqBi0u76ZX05uiHw==}
|
resolution: {integrity: sha512-Tn5VRDSjyqjmaet2tJMuEWDRFyrCaon03vxXPlSSaiSs6C/N7lCIwGCXJbZXEUq1kTj8jYN9qyXHbsz4LQHcow==}
|
||||||
|
|
||||||
'@tanstack/history@1.161.6':
|
'@tanstack/history@1.161.6':
|
||||||
resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==}
|
resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==}
|
||||||
@@ -4435,8 +4435,8 @@ packages:
|
|||||||
'@tanstack/query-core@5.100.9':
|
'@tanstack/query-core@5.100.9':
|
||||||
resolution: {integrity: sha512-SJSFw1S8+kQ0+knv/XGfrbocWoAlT7vDKsSImtLx3ZPQmEcR46hkDjLSvynSy25N8Ms4tIEini1FuBd5k7IscQ==}
|
resolution: {integrity: sha512-SJSFw1S8+kQ0+knv/XGfrbocWoAlT7vDKsSImtLx3ZPQmEcR46hkDjLSvynSy25N8Ms4tIEini1FuBd5k7IscQ==}
|
||||||
|
|
||||||
'@tanstack/react-form@1.31.0':
|
'@tanstack/react-form@1.32.0':
|
||||||
resolution: {integrity: sha512-31hoeKlk45jCAnry85bOiL89FwySL9HtAhfWLHmCJ5WcvBlHJpoqnMvl6Cy8DM+7ey2eWHKiPiEL29BkG5o12w==}
|
resolution: {integrity: sha512-6WP5SQTA6/H9crCpvpq3ZppYWqtrdE5NjOy6ebABi6uAQPqhfTzrdjS9t40mCZCFtGI5585OhJV6zBP/KN2zcw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@tanstack/react-start': '*'
|
'@tanstack/react-start': '*'
|
||||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
@@ -10263,11 +10263,11 @@ snapshots:
|
|||||||
|
|
||||||
'@bcoe/v8-coverage@1.0.2': {}
|
'@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:
|
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/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/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
|
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)':
|
'@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:
|
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)
|
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:
|
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/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-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)
|
better-call: 1.3.5(zod@4.4.3)
|
||||||
jose: 6.2.3
|
jose: 6.2.3
|
||||||
libphonenumber-js: 1.13.0
|
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/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/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:
|
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/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/utils': 0.4.0
|
||||||
'@better-fetch/fetch': 1.1.21
|
'@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)
|
better-call: 1.3.5(zod@4.4.3)
|
||||||
jose: 6.2.3
|
jose: 6.2.3
|
||||||
zod: 4.4.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:
|
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/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/utils': 0.4.0
|
||||||
'@better-fetch/fetch': 1.1.21
|
'@better-fetch/fetch': 1.1.21
|
||||||
'@simplewebauthn/browser': 13.3.0
|
'@simplewebauthn/browser': 13.3.0
|
||||||
'@simplewebauthn/server': 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)
|
better-call: 1.3.5(zod@4.4.3)
|
||||||
nanostores: 1.3.0
|
nanostores: 1.3.0
|
||||||
zod: 4.4.3
|
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/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/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:
|
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/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/utils': 0.4.0
|
||||||
'@better-fetch/fetch': 1.1.21
|
'@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)
|
better-call: 1.3.5(zod@4.4.3)
|
||||||
fast-xml-parser: 5.7.3
|
fast-xml-parser: 5.7.3
|
||||||
jose: 6.2.3
|
jose: 6.2.3
|
||||||
@@ -12696,7 +12696,7 @@ snapshots:
|
|||||||
|
|
||||||
'@tanstack/devtools-event-client@0.4.3': {}
|
'@tanstack/devtools-event-client@0.4.3': {}
|
||||||
|
|
||||||
'@tanstack/form-core@1.31.0':
|
'@tanstack/form-core@1.32.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/devtools-event-client': 0.4.3
|
'@tanstack/devtools-event-client': 0.4.3
|
||||||
'@tanstack/pacer-lite': 0.1.1
|
'@tanstack/pacer-lite': 0.1.1
|
||||||
@@ -12712,9 +12712,9 @@ snapshots:
|
|||||||
|
|
||||||
'@tanstack/query-core@5.100.9': {}
|
'@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:
|
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)
|
'@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
|
||||||
react: 19.2.6
|
react: 19.2.6
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -13623,7 +13623,7 @@ snapshots:
|
|||||||
node-addon-api: 8.7.0
|
node-addon-api: 8.7.0
|
||||||
node-gyp-build: 4.8.4
|
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:
|
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/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))
|
'@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))
|
||||||
|
|||||||
Reference in New Issue
Block a user