From 5fe2dd007ff080eb3114c735df506553ebe1855f Mon Sep 17 00:00:00 2001 From: Petr Glaser Date: Thu, 7 May 2026 22:31:02 +0200 Subject: [PATCH 1/4] add rich product description editor --- .../src/components/safe-html-content.tsx | 32 +- apps/medusa-be/medusa-config.ts | 4 + apps/medusa-be/package.json | 3 + .../widgets/product-description-editor.css | 180 ++ .../widgets/product-description-editor.tsx | 337 +++ package.json | 3 + patches/medusa-plugin-content@0.2.0.patch | 185 ++ pnpm-lock.yaml | 2237 ++++++++++++++++- 8 files changed, 2949 insertions(+), 32 deletions(-) create mode 100644 apps/medusa-be/src/admin/widgets/product-description-editor.css create mode 100644 apps/medusa-be/src/admin/widgets/product-description-editor.tsx create mode 100644 patches/medusa-plugin-content@0.2.0.patch diff --git a/apps/frontend-demo/src/components/safe-html-content.tsx b/apps/frontend-demo/src/components/safe-html-content.tsx index 84295e8ff..77983c110 100644 --- a/apps/frontend-demo/src/components/safe-html-content.tsx +++ b/apps/frontend-demo/src/components/safe-html-content.tsx @@ -3,13 +3,18 @@ import DOMPurify from "dompurify" import { useMemo } from "react" -interface SafeHtmlContentProps { +type SanitizerConfig = NonNullable[1]> + +type SafeHtmlContentProps = { content: string | null | undefined className?: string /** Custom DOMPurify config for allowed tags and attributes */ - config?: any // DOMPurify.Config type + config?: SanitizerConfig } +const HTML_TAG_PATTERN = /<[^>]*>/ +const HTML_ENTITY_PATTERN = /&#?\w+;/ + /** * Safely renders HTML content with automatic detection and sanitization. * Detects if content contains HTML tags or entities and sanitizes accordingly. @@ -21,11 +26,13 @@ export function SafeHtmlContent({ config, }: SafeHtmlContentProps) { const processedContent = useMemo(() => { - if (!content) return { isHtml: false, content: "" } + if (!content) { + return { isHtml: false, content: "" } + } // Check if content contains HTML tags or HTML entities - const hasHtmlTags = /<[^>]*>/g.test(content) - const hasHtmlEntities = /&#?\w+;/.test(content) + const hasHtmlTags = HTML_TAG_PATTERN.test(content) + const hasHtmlEntities = HTML_ENTITY_PATTERN.test(content) const isHtml = hasHtmlTags || hasHtmlEntities if (isHtml) { @@ -42,14 +49,26 @@ export function SafeHtmlContent({ "ul", "ol", "li", + "h1", + "h2", "h3", "h4", "h5", "h6", + "a", + "blockquote", + "code", + "pre", + "table", + "thead", + "tbody", + "tr", + "th", + "td", "span", "div", ], - ALLOWED_ATTR: ["class", "style"], + ALLOWED_ATTR: ["class", "style", "href", "target", "rel"], ALLOW_DATA_ATTR: false, FORBID_TAGS: ["script", "iframe", "form", "input"], FORBID_ATTR: ["onerror", "onclick", "onload"], @@ -73,6 +92,7 @@ export function SafeHtmlContent({ return (
) diff --git a/apps/medusa-be/medusa-config.ts b/apps/medusa-be/medusa-config.ts index 2ef4186b9..fdf7197ad 100644 --- a/apps/medusa-be/medusa-config.ts +++ b/apps/medusa-be/medusa-config.ts @@ -73,6 +73,10 @@ module.exports = defineConfig({ redisUrl: REDIS_URL, }, plugins: [ + { + resolve: "medusa-plugin-content", + options: {}, + }, { resolve: "@medusajs/draft-order", options: {}, diff --git a/apps/medusa-be/package.json b/apps/medusa-be/package.json index 3ee439f07..4592333d1 100644 --- a/apps/medusa-be/package.json +++ b/apps/medusa-be/package.json @@ -47,6 +47,7 @@ }, "dependencies": { "@badgateway/oauth2-client": "^3.3.1", + "@mdxeditor/editor": "3.54.0", "@medusajs/admin-sdk": "^2.14.1", "@medusajs/admin-shared": "^2.14.1", "@medusajs/caching-redis": "^2.14.1", @@ -75,6 +76,8 @@ "drizzle-orm": "^0.45.0", "escape-html": "^1.0.3", "jose": "^6.1.3", + "marked": "15.0.12", + "medusa-plugin-content": "^0.2.0", "mime": "4.1.0", "mysql2": "^3.15.3", "qs": "^6.14.1", diff --git a/apps/medusa-be/src/admin/widgets/product-description-editor.css b/apps/medusa-be/src/admin/widgets/product-description-editor.css new file mode 100644 index 000000000..72cdc5a5c --- /dev/null +++ b/apps/medusa-be/src/admin/widgets/product-description-editor.css @@ -0,0 +1,180 @@ +.product-description-mdx-editor { + --baseBase: #ffffff; + --baseBg: #f7f7f8; + --baseBgActive: #e4e4e7; + --baseBgHover: #ededf0; + --baseBgSubtle: #fafafa; + --baseBorder: #d4d4d8; + --baseBorderHover: #a1a1aa; + --basePageBg: #ffffff; + --baseTextContrast: #18181b; + --baseTextSecondary: #52525b; + --accentBase: #eff6ff; + --accentBg: #dbeafe; + --accentBgActive: #bfdbfe; + --accentBgHover: #dbeafe; + --accentBgSubtle: #eff6ff; + --accentBorder: #93c5fd; + --accentBorderHover: #60a5fa; + --accentSolid: #2563eb; + --accentSolidHover: #1d4ed8; + --accentText: #1d4ed8; + --accentTextContrast: #ffffff; + isolation: isolate; + background: var(--basePageBg); + color: var(--baseTextContrast); +} + +.dark .product-description-mdx-editor, +.dark-theme .product-description-mdx-editor, +[data-theme="dark"] .product-description-mdx-editor { + --baseBase: #18181b; + --baseBg: #27272a; + --baseBgActive: #3f3f46; + --baseBgHover: #313135; + --baseBgSubtle: #1f1f23; + --baseBorder: #3f3f46; + --baseBorderHover: #71717a; + --basePageBg: #111113; + --baseTextContrast: #f4f4f5; + --baseTextSecondary: #a1a1aa; + --accentBase: #111827; + --accentBg: #1e3a8a; + --accentBgActive: #1d4ed8; + --accentBgHover: #1e40af; + --accentBgSubtle: #172554; + --accentBorder: #2563eb; + --accentBorderHover: #3b82f6; + --accentSolid: #60a5fa; + --accentSolidHover: #93c5fd; + --accentText: #93c5fd; + --accentTextContrast: #0b1120; +} + +@media (prefers-color-scheme: dark) { + .product-description-mdx-editor { + --baseBase: #18181b; + --baseBg: #27272a; + --baseBgActive: #3f3f46; + --baseBgHover: #313135; + --baseBgSubtle: #1f1f23; + --baseBorder: #3f3f46; + --baseBorderHover: #71717a; + --basePageBg: #111113; + --baseTextContrast: #f4f4f5; + --baseTextSecondary: #a1a1aa; + --accentBase: #111827; + --accentBg: #1e3a8a; + --accentBgActive: #1d4ed8; + --accentBgHover: #1e40af; + --accentBgSubtle: #172554; + --accentBorder: #2563eb; + --accentBorderHover: #3b82f6; + --accentSolid: #60a5fa; + --accentSolidHover: #93c5fd; + --accentText: #93c5fd; + --accentTextContrast: #0b1120; + } +} + +.product-description-mdx-editor [role="toolbar"] { + border-bottom: 1px solid var(--baseBorder); + border-radius: 0; +} + +body.product-description-editor-modal-open + .mdxeditor-popup-container.product-description-mdx-editor, +body.product-description-editor-modal-open + .product-description-mdx-editor + [role="toolbar"] { + visibility: hidden; + pointer-events: none; +} + +.product-description-mdx-editor [role="toolbar"] button, +.product-description-mdx-editor [role="toolbar"] [role="combobox"] { + color: var(--baseTextContrast); +} + +.product-description-mdx-editor [role="toolbar"] button:disabled, +.product-description-mdx-editor [role="toolbar"] button[data-disabled] { + color: var(--baseBorderHover); +} + +.product-description-mdx-content { + min-height: 320px; + padding: 16px; + color: var(--baseTextContrast); + outline: none; +} + +.product-description-mdx-content h1, +.product-description-mdx-content h2, +.product-description-mdx-content h3, +.product-description-mdx-content h4 { + margin: 0 0 12px; + font-weight: 600; +} + +.product-description-mdx-content h1 { + font-size: 24px; + line-height: 32px; +} + +.product-description-mdx-content h2 { + font-size: 20px; + line-height: 28px; +} + +.product-description-mdx-content h3 { + font-size: 18px; + line-height: 26px; +} + +.product-description-mdx-content p, +.product-description-mdx-content ul, +.product-description-mdx-content ol, +.product-description-mdx-content blockquote, +.product-description-mdx-content table, +.product-description-mdx-content pre { + margin: 0 0 12px; +} + +.product-description-mdx-content ul, +.product-description-mdx-content ol { + padding-left: 24px; +} + +.product-description-mdx-content ul { + list-style: disc; +} + +.product-description-mdx-content ol { + list-style: decimal; +} + +.product-description-mdx-content blockquote { + border-left: 2px solid var(--baseBorder); + color: var(--baseTextSecondary); + padding-left: 12px; +} + +.product-description-mdx-content a { + color: var(--accentText); + text-decoration: underline; +} + +.product-description-mdx-editor .cm-editor, +.product-description-mdx-editor .cm-gutters { + background: var(--basePageBg); + color: var(--baseTextContrast); +} + +.product-description-mdx-editor .cm-activeLine, +.product-description-mdx-editor .cm-activeLineGutter { + background: var(--baseBgSubtle); +} + +.product-description-mdx-editor .cm-cursor { + border-left-color: var(--baseTextContrast); +} diff --git a/apps/medusa-be/src/admin/widgets/product-description-editor.tsx b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx new file mode 100644 index 000000000..8633dc3da --- /dev/null +++ b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx @@ -0,0 +1,337 @@ +import { + BlockTypeSelect, + BoldItalicUnderlineToggles, + CreateLink, + codeBlockPlugin, + codeMirrorPlugin, + DiffSourceToggleWrapper, + diffSourcePlugin, + headingsPlugin, + InsertCodeBlock, + InsertTable, + InsertThematicBreak, + ListsToggle, + linkDialogPlugin, + linkPlugin, + listsPlugin, + MDXEditor, + type MDXEditorMethods, + markdownShortcutPlugin, + quotePlugin, + Separator, + StrikeThroughSupSubToggles, + tablePlugin, + thematicBreakPlugin, + toolbarPlugin, + UndoRedo, +} from "@mdxeditor/editor" +import { defineWidgetConfig } from "@medusajs/admin-sdk" +import type { AdminProduct, DetailWidgetProps } from "@medusajs/framework/types" +import { Button, Container, Heading, toast } from "@medusajs/ui" +import "@mdxeditor/editor/style.css" +import { useMutation, useQueryClient } from "@tanstack/react-query" +import { marked } from "marked" +import { useCallback, useEffect, useMemo, useRef, useState } from "react" +import { sdk } from "../lib/sdk" +import "./product-description-editor.css" + +type ProductDescriptionEditorProps = Partial> + +type UpdateProductResponse = { + product: AdminProduct +} + +const HEADING_TAG_PATTERN = /^h[1-6]$/ +const PRODUCT_EDIT_ROUTE_PATTERN = /\/products\/[^/]+\/edit\/?$/ +const NATIVE_DESCRIPTION_FIELD_SELECTOR = 'form textarea[name="description"]' +const NATIVE_DESCRIPTION_FIELD_WRAPPER_SELECTOR = ".flex.flex-col.space-y-2" +const NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE = + "data-product-description-editor-hidden" +const NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE = + "data-product-description-editor-display" +const PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS = + "product-description-editor-modal-open" + +const restoreNativeProductDescriptionField = () => { + document.body.classList.remove(PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS) + + const fields = document.querySelectorAll( + `[${NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE}="true"]` + ) + + for (const field of fields) { + field.hidden = false + field.style.display = + field.getAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE) ?? "" + field.removeAttribute(NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE) + field.removeAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE) + } +} + +const hideNativeProductDescriptionField = () => { + if (!PRODUCT_EDIT_ROUTE_PATTERN.test(window.location.pathname)) { + restoreNativeProductDescriptionField() + return + } + + document.body.classList.add(PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS) + + const textarea = document.querySelector( + NATIVE_DESCRIPTION_FIELD_SELECTOR + ) + const field = textarea?.closest( + NATIVE_DESCRIPTION_FIELD_WRAPPER_SELECTOR + ) + + if (!(textarea && field)) { + return + } + + textarea.readOnly = true + textarea.tabIndex = -1 + textarea.setAttribute("aria-readonly", "true") + if (!field.hasAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE)) { + field.setAttribute( + NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE, + field.style.display + ) + } + field.style.display = "none" + field.hidden = true + field.setAttribute(NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE, "true") +} + +const htmlToMarkdown = (html: string) => { + if (!html.trim()) { + return "" + } + + const document = new DOMParser().parseFromString(html, "text/html") + + // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Small local fallback for importing existing HTML product descriptions into MDXEditor. + const renderNode = (node: ChildNode): string => { + if (node.nodeType === Node.TEXT_NODE) { + return node.textContent ?? "" + } + + if (!(node instanceof HTMLElement)) { + return "" + } + + const children = Array.from(node.childNodes).map(renderNode).join("") + const tag = node.tagName.toLowerCase() + + if (HEADING_TAG_PATTERN.test(tag)) { + return `${"#".repeat(Number(tag.slice(1)))} ${children.trim()}\n\n` + } + + if (tag === "p" || tag === "div") { + return `${children.trim()}\n\n` + } + + if (tag === "br") { + return "\n" + } + + if (tag === "strong" || tag === "b") { + return `**${children}**` + } + + if (tag === "em" || tag === "i") { + return `*${children}*` + } + + if (tag === "a") { + const href = node.getAttribute("href") + return href ? `[${children}](${href})` : children + } + + if (tag === "blockquote") { + return `${children + .trim() + .split("\n") + .map((line) => `> ${line}`) + .join("\n")}\n\n` + } + + if (tag === "ul") { + return `${Array.from(node.children) + .map((item) => `- ${renderNode(item).trim()}`) + .join("\n")}\n\n` + } + + if (tag === "ol") { + return `${Array.from(node.children) + .map((item, index) => `${index + 1}. ${renderNode(item).trim()}`) + .join("\n")}\n\n` + } + + if (tag === "li") { + return children + } + + return children + } + + return Array.from(document.body.childNodes) + .map(renderNode) + .join("") + .replace(/\n{3,}/g, "\n\n") + .trim() +} + +const markdownToHtml = (markdown: string) => + String(marked.parse(markdown, { async: false, gfm: true })).trim() + +const productEditorCodeLanguages = { + bash: "Bash", + css: "CSS", + html: "HTML", + js: "JavaScript", + json: "JSON", + md: "Markdown", + sh: "Shell", + ts: "TypeScript", +} as const + +const ProductDescriptionEditor = ({ + data: product, +}: ProductDescriptionEditorProps) => { + const editorRef = useRef(null) + const queryClient = useQueryClient() + const [markdown, setMarkdown] = useState(() => + htmlToMarkdown(product?.description ?? "") + ) + + useEffect(() => { + const nextMarkdown = htmlToMarkdown(product?.description ?? "") + setMarkdown(nextMarkdown) + editorRef.current?.setMarkdown(nextMarkdown) + }, [product?.description]) + + useEffect(() => { + const observer = new MutationObserver(hideNativeProductDescriptionField) + + observer.observe(document.body, { + childList: true, + subtree: true, + }) + + hideNativeProductDescriptionField() + + return () => { + observer.disconnect() + restoreNativeProductDescriptionField() + } + }, []) + + const mutation = useMutation({ + mutationFn: (description: string) => + sdk.client.fetch( + `/admin/products/${product?.id}`, + { + body: { + description: description || null, + }, + method: "POST", + } + ), + onError: (error) => { + toast.error( + error instanceof Error + ? error.message + : "Failed to save product description" + ) + }, + onSuccess: (response) => { + const nextMarkdown = htmlToMarkdown(response.product.description ?? "") + setMarkdown(nextMarkdown) + editorRef.current?.setMarkdown(nextMarkdown) + queryClient.invalidateQueries({ queryKey: ["product", product?.id] }) + queryClient.invalidateQueries({ queryKey: ["products"] }) + toast.success("Product description saved") + }, + }) + + const handleSave = useCallback(() => { + const currentMarkdown = editorRef.current?.getMarkdown() ?? markdown + mutation.mutate(markdownToHtml(currentMarkdown)) + }, [markdown, mutation]) + + const plugins = useMemo( + () => [ + toolbarPlugin({ + toolbarContents: () => ( + + + + + + + + + + + + + + + + ), + }), + headingsPlugin(), + listsPlugin(), + quotePlugin(), + thematicBreakPlugin(), + linkPlugin(), + linkDialogPlugin(), + tablePlugin(), + codeBlockPlugin({ defaultCodeBlockLanguage: "html" }), + codeMirrorPlugin({ codeBlockLanguages: productEditorCodeLanguages }), + diffSourcePlugin({ + diffMarkdown: htmlToMarkdown(product?.description ?? ""), + readOnlyDiff: true, + viewMode: "rich-text", + }), + markdownShortcutPlugin(), + ], + [product?.description] + ) + + if (!product?.id) { + return null + } + + return ( + +
+ Product description + +
+
+ setMarkdown(nextMarkdown)} + onError={({ error }) => toast.error(error)} + plugins={plugins} + ref={editorRef} + /> +
+
+ ) +} + +export const config = defineWidgetConfig({ + zone: "product.details.before", +}) + +export default ProductDescriptionEditor diff --git a/package.json b/package.json index ef711c557..64145ac71 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,9 @@ "@medusajs/js-sdk": "^2.14.1" } } + }, + "patchedDependencies": { + "medusa-plugin-content@0.2.0": "patches/medusa-plugin-content@0.2.0.patch" } } } diff --git a/patches/medusa-plugin-content@0.2.0.patch b/patches/medusa-plugin-content@0.2.0.patch new file mode 100644 index 000000000..f2d504b95 --- /dev/null +++ b/patches/medusa-plugin-content@0.2.0.patch @@ -0,0 +1,185 @@ +diff --git a/.medusa/server/src/admin/index.js b/.medusa/server/src/admin/index.js +index 1a2b34586562ae12c210049c212fc555c3588776..db5846be45246706f9e59bc5ac2c9be09350e96c 100644 +--- a/.medusa/server/src/admin/index.js ++++ b/.medusa/server/src/admin/index.js +@@ -19,6 +19,8 @@ const sdk = new Medusa__default.default({ + type: "session" + } + }); ++const contentPluginQueryClient = new reactQuery.QueryClient(); ++const withContentPluginQueryClient = (Component) => (props) => /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: contentPluginQueryClient, children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...props }) }); + const useContentCollections = (params = {}) => { + return reactQuery.useQuery({ + queryFn: () => sdk.client.fetch("/admin/content", { query: params }), +@@ -6662,7 +6664,7 @@ const CreateContentItemModal = ({ open, onOpenChange, contentCollection }) => { + const url = (_b = (_a2 = result.files) == null ? void 0 : _a2[0]) == null ? void 0 : _b.url; + if (!url) throw new Error("Upload returned no URL"); + createItem( +- { title: data.title, slug: data.slug, content_collection_id: contentCollection.id, body: url }, ++ { title: data.title, slug: data.slug, body: url }, + { + onSuccess: () => { + ui.toast.success("Image uploaded"); +@@ -6684,7 +6686,6 @@ const CreateContentItemModal = ({ open, onOpenChange, contentCollection }) => { + { + title: data.title, + slug: data.slug, +- content_collection_id: contentCollection.id, + metadata: hasMetadataFields ? metadata : void 0 + }, + { +@@ -7346,8 +7347,8 @@ const EditContentItemDrawer = ({ item, open, onOpenChange }) => { + ] }) }) }); + }; + async function loader({ params }) { +- const { itemId } = params; +- return sdk.client.fetch(`/admin/content-items/${itemId}`, { ++ const { collectionId, itemId } = params; ++ return sdk.client.fetch(`/admin/content/${collectionId}/items/${itemId}`, { + query: { fields: "id,title" } + }); + } +@@ -7553,39 +7554,39 @@ const ContentItemEditorPage = () => { + }; + const widgetModule = { widgets: [ + { +- Component: ProductImageLibraryWidget, ++ Component: withContentPluginQueryClient(ProductImageLibraryWidget), + zone: ["product.details.side.before"] + }, + { +- Component: ProductVariantImageLibraryWidget, ++ Component: withContentPluginQueryClient(ProductVariantImageLibraryWidget), + zone: ["product_variant.details.side.before"] + } + ] }; + const routeModule = { + routes: [ + { +- Component: ImageGalleryPage, ++ Component: withContentPluginQueryClient(ImageGalleryPage), + path: "/images", + handle: handle$4 + }, + { +- Component: ContentCollectionsPage, ++ Component: withContentPluginQueryClient(ContentCollectionsPage), + path: "/content", + handle: handle$3 + }, + { +- Component: ContentCollectionDetailPage, ++ Component: withContentPluginQueryClient(ContentCollectionDetailPage), + path: "/content/:collectionId", + handle: handle$2, + loader: loader$1 + }, + { +- Component: ContentItemsPage, ++ Component: withContentPluginQueryClient(ContentItemsPage), + path: "/content/:collectionId/items", + handle: handle$1 + }, + { +- Component: ContentItemEditorPage, ++ Component: withContentPluginQueryClient(ContentItemEditorPage), + path: "/content/:collectionId/items/:itemId", + handle, + loader +diff --git a/.medusa/server/src/admin/index.mjs b/.medusa/server/src/admin/index.mjs +index aa07282dad3083c5408be6b0725825d783f66fb5..26b31fbf792309ff348d812c698c69e7ac1c6b57 100644 +--- a/.medusa/server/src/admin/index.mjs ++++ b/.medusa/server/src/admin/index.mjs +@@ -3,7 +3,7 @@ import React, { useState, useEffect, useMemo, useRef, useCallback } from "react" + import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk"; + import { FocusModal, Heading, Text, Select, Input, toast, Container, Button, Badge, Switch, Label, createDataTableColumnHelper, createDataTableCommandHelper, usePrompt, useDataTable, DataTable, DropdownMenu, IconButton, clx, Drawer, Textarea, DatePicker, Tooltip } from "@medusajs/ui"; + import { ImageSparkle, ChevronLeft, ChevronRight, Trash, Plus, PencilSquare, EllipsisHorizontal, ArrowUpRightOnBox, ArchiveBox, PaperPlane } from "@medusajs/icons"; +-import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query"; ++import { QueryClient, QueryClientProvider, useQuery, useQueryClient, useMutation } from "@tanstack/react-query"; + import Medusa from "@medusajs/js-sdk"; + import { useNavigate, Link, useParams, useBlocker } from "react-router-dom"; + import { MDXEditor, toolbarPlugin, DiffSourceToggleWrapper, UndoRedo, Separator, BlockTypeSelect, BoldItalicUnderlineToggles, StrikeThroughSupSubToggles, ListsToggle, HighlightToggle, InsertAdmonition, CreateLink, InsertTable, InsertCodeBlock, codeBlockPlugin, codeMirrorPlugin, diffSourcePlugin, directivesPlugin, AdmonitionDirectiveDescriptor, headingsPlugin, listsPlugin, quotePlugin, thematicBreakPlugin, linkPlugin, linkDialogPlugin, tablePlugin, markdownShortcutPlugin, imagePlugin } from "@mdxeditor/editor"; +@@ -15,6 +15,8 @@ const sdk = new Medusa({ + type: "session" + } + }); ++const contentPluginQueryClient = new QueryClient(); ++const withContentPluginQueryClient = (Component) => (props) => /* @__PURE__ */ jsx(QueryClientProvider, { client: contentPluginQueryClient, children: /* @__PURE__ */ jsx(Component, { ...props }) }); + const useContentCollections = (params = {}) => { + return useQuery({ + queryFn: () => sdk.client.fetch("/admin/content", { query: params }), +@@ -6658,7 +6660,7 @@ const CreateContentItemModal = ({ open, onOpenChange, contentCollection }) => { + const url = (_b = (_a2 = result.files) == null ? void 0 : _a2[0]) == null ? void 0 : _b.url; + if (!url) throw new Error("Upload returned no URL"); + createItem( +- { title: data.title, slug: data.slug, content_collection_id: contentCollection.id, body: url }, ++ { title: data.title, slug: data.slug, body: url }, + { + onSuccess: () => { + toast.success("Image uploaded"); +@@ -6680,7 +6682,6 @@ const CreateContentItemModal = ({ open, onOpenChange, contentCollection }) => { + { + title: data.title, + slug: data.slug, +- content_collection_id: contentCollection.id, + metadata: hasMetadataFields ? metadata : void 0 + }, + { +@@ -7342,8 +7343,8 @@ const EditContentItemDrawer = ({ item, open, onOpenChange }) => { + ] }) }) }); + }; + async function loader({ params }) { +- const { itemId } = params; +- return sdk.client.fetch(`/admin/content-items/${itemId}`, { ++ const { collectionId, itemId } = params; ++ return sdk.client.fetch(`/admin/content/${collectionId}/items/${itemId}`, { + query: { fields: "id,title" } + }); + } +@@ -7549,39 +7550,39 @@ const ContentItemEditorPage = () => { + }; + const widgetModule = { widgets: [ + { +- Component: ProductImageLibraryWidget, ++ Component: withContentPluginQueryClient(ProductImageLibraryWidget), + zone: ["product.details.side.before"] + }, + { +- Component: ProductVariantImageLibraryWidget, ++ Component: withContentPluginQueryClient(ProductVariantImageLibraryWidget), + zone: ["product_variant.details.side.before"] + } + ] }; + const routeModule = { + routes: [ + { +- Component: ImageGalleryPage, ++ Component: withContentPluginQueryClient(ImageGalleryPage), + path: "/images", + handle: handle$4 + }, + { +- Component: ContentCollectionsPage, ++ Component: withContentPluginQueryClient(ContentCollectionsPage), + path: "/content", + handle: handle$3 + }, + { +- Component: ContentCollectionDetailPage, ++ Component: withContentPluginQueryClient(ContentCollectionDetailPage), + path: "/content/:collectionId", + handle: handle$2, + loader: loader$1 + }, + { +- Component: ContentItemsPage, ++ Component: withContentPluginQueryClient(ContentItemsPage), + path: "/content/:collectionId/items", + handle: handle$1 + }, + { +- Component: ContentItemEditorPage, ++ Component: withContentPluginQueryClient(ContentItemEditorPage), + path: "/content/:collectionId/items/:itemId", + handle, + loader diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7443bad0..50cbec2d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,11 @@ overrides: packageExtensionsChecksum: sha256-ybcnxVbiRFpz1dYbThDg02QVZAXChtWD86NDj+Nqi9c= +patchedDependencies: + medusa-plugin-content@0.2.0: + hash: 4bf02a018ce742916b587bdd5a54f560e72e23ad00bd60f84fc2dbf9b9f158ff + path: patches/medusa-plugin-content@0.2.0.patch + importers: .: @@ -169,6 +174,9 @@ importers: '@badgateway/oauth2-client': specifier: ^3.3.1 version: 3.3.1 + '@mdxeditor/editor': + specifier: 3.54.0 + version: 3.54.0(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30) '@medusajs/admin-sdk': specifier: ^2.14.1 version: 2.14.1 @@ -253,6 +261,12 @@ importers: jose: specifier: ^6.1.3 version: 6.2.3 + marked: + specifier: 15.0.12 + version: 15.0.12 + medusa-plugin-content: + specifier: ^0.2.0 + version: 0.2.0(patch_hash=4bf02a018ce742916b587bdd5a54f560e72e23ad00bd60f84fc2dbf9b9f158ff)(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@medusajs/framework@2.14.1(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@types/node@24.10.1)(ioredis@5.9.0)(mysql2@3.15.3)(vite@5.4.21(@types/node@24.10.1)(less@4.1.3)(lightningcss@1.30.2)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1))(zod@4.2.0))(@medusajs/js-sdk@2.14.1)(@medusajs/medusa@2.14.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30) mime: specifier: 4.1.0 version: 4.1.0 @@ -1962,6 +1976,111 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + '@codemirror/autocomplete@6.20.2': + resolution: {integrity: sha512-G5FPkgIiLjOgZMjqVjvuKQ1rGPtHogLldJr33eFJdVLtmwY+giGrlv/ewljLz6b9BSQLkjxuwBc6g6omDM+YxQ==} + + '@codemirror/commands@6.10.3': + resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==} + + '@codemirror/lang-angular@0.1.4': + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} + + '@codemirror/lang-cpp@6.0.3': + resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} + + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-go@6.0.1': + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + + '@codemirror/lang-html@6.4.11': + resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} + + '@codemirror/lang-java@6.0.2': + resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==} + + '@codemirror/lang-javascript@6.2.5': + resolution: {integrity: sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==} + + '@codemirror/lang-jinja@6.0.1': + resolution: {integrity: sha512-P5kyHLObzjtbGj16h+hyvZTxJhSjBEeSx4wMjbnAf3b0uwTy2+F0zGjMZL4PQOm/mh2eGZ5xUDVZXgwP783Nsw==} + + '@codemirror/lang-json@6.0.2': + resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} + + '@codemirror/lang-less@6.0.2': + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + + '@codemirror/lang-liquid@6.3.2': + resolution: {integrity: sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw==} + + '@codemirror/lang-markdown@6.5.0': + resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} + + '@codemirror/lang-php@6.0.2': + resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} + + '@codemirror/lang-python@6.2.1': + resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} + + '@codemirror/lang-rust@6.0.2': + resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==} + + '@codemirror/lang-sass@6.0.2': + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + + '@codemirror/lang-sql@6.10.0': + resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==} + + '@codemirror/lang-vue@0.1.3': + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} + + '@codemirror/lang-wast@6.0.2': + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} + + '@codemirror/lang-xml@6.1.0': + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} + + '@codemirror/lang-yaml@6.1.3': + resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==} + + '@codemirror/language-data@6.5.2': + resolution: {integrity: sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==} + + '@codemirror/language@6.12.3': + resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==} + + '@codemirror/legacy-modes@6.5.2': + resolution: {integrity: sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==} + + '@codemirror/lint@6.9.6': + resolution: {integrity: sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A==} + + '@codemirror/merge@6.12.1': + resolution: {integrity: sha512-GA8hBq2T+IFM0sb5fk8CunTrqOulA3zurJmHtzcU15EMnL8aYpVINfJ5bkfd53M4ikwoew4Y1ydtSaAlk6+B1w==} + + '@codemirror/search@6.7.0': + resolution: {integrity: sha512-ZvGm99wc/s2cITtMT15LFdn8aH/aS+V+DqyGq/N5ZlV5vWtH+nILvC2nw0zX7ByNoHHDZ2IxxdW38O0tc5nVHg==} + + '@codemirror/state@6.6.0': + resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} + + '@codemirror/view@6.42.0': + resolution: {integrity: sha512-+PJEyndSCrsS2oLH3DfWoLBcF3xfeyGXtLnpXqHY01kL3TogyCLD12hNvSu73ww2KFftrx3Rd0nGOigbSkU3Hw==} + + '@codesandbox/nodebox@0.1.8': + resolution: {integrity: sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==} + + '@codesandbox/sandpack-client@2.19.8': + resolution: {integrity: sha512-CMV4nr1zgKzVpx4I3FYvGRM5YT0VaQhALMW9vy4wZRhEyWAtJITQIqZzrTGWqB1JvV7V72dVEUCUPLfYz5hgJQ==} + + '@codesandbox/sandpack-react@2.20.0': + resolution: {integrity: sha512-takd1YpW/PMQ6KPQfvseWLHWklJovGY8QYj8MtWnskGKbjOGJ6uZfyZbcJ6aCFLQMpNyjTqz9AKNbvhCOZ1TUQ==} + peerDependencies: + react: 19.2.3 + react-dom: 19.2.3 + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2965,12 +3084,6 @@ packages: '@floating-ui/dom@1.7.6': resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: 19.2.3 - react-dom: 19.2.3 - '@floating-ui/react-dom@2.1.8': resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} peerDependencies: @@ -2983,9 +3096,6 @@ packages: react: 19.2.3 react-dom: 19.2.3 - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} @@ -3690,83 +3800,222 @@ packages: peerDependencies: tslib: '2' + '@lexical/clipboard@0.35.0': + resolution: {integrity: sha512-ko7xSIIiayvDiqjNDX6fgH9RlcM6r9vrrvJYTcfGVBor5httx16lhIi0QJZ4+RNPvGtTjyFv4bwRmsixRRwImg==} + '@lexical/clipboard@0.41.0': resolution: {integrity: sha512-Ex5lPkb4NBBX1DCPzOAIeHBJFH1bJcmATjREaqpnTfxCbuOeQkt44wchezUA0oDl+iAxNZ3+pLLWiUju9icoSA==} + '@lexical/code@0.35.0': + resolution: {integrity: sha512-ox4DZwETQ9IA7+DS6PN8RJNwSAF7RMjL7YTVODIqFZ5tUFIf+5xoCHbz7Fll0Bvixlp12hVH90xnLwTLRGpkKw==} + '@lexical/code@0.41.0': resolution: {integrity: sha512-0hoNi1KC9/N3SBOGcOcFqnT0OpwmcRRAhfxTKMGqfCtCvAMzULVwZ8RWc9/NV9bKYESgBTW5D9xkDANP2mspHg==} + '@lexical/devtools-core@0.35.0': + resolution: {integrity: sha512-C2wwtsMCR6ZTfO0TqpSM17RLJWyfHmifAfCTjFtOJu15p3M6NO/nHYK5Mt7YMQteuS89mOjB4ng8iwoLEZ6QpQ==} + peerDependencies: + react: 19.2.3 + react-dom: 19.2.3 + '@lexical/devtools-core@0.41.0': resolution: {integrity: sha512-FzJtluBhBc8bKS11TUZe72KoZN/hnzIyiiM0SPJAsPwGpoXuM01jqpXQGybWf/1bWB+bmmhOae7O4Nywi/Csuw==} peerDependencies: react: 19.2.3 react-dom: 19.2.3 + '@lexical/dragon@0.35.0': + resolution: {integrity: sha512-SL6mT5pcqrt6hEbJ16vWxip5+r3uvMd0bQV5UUxuk+cxIeuP86iTgRh0HFR7SM2dRTYovL6/tM/O+8QLAUGTIg==} + '@lexical/dragon@0.41.0': resolution: {integrity: sha512-gBEqkk8Q6ZPruvDaRcOdF1EK9suCVBODzOCcR+EnoJTaTjfDkCM7pkPAm4w90Wa1wCZEtFHvCfas+jU9MDSumg==} '@lexical/extension@0.41.0': resolution: {integrity: sha512-sF4SPiP72yXvIGchmmIZ7Yg2XZTxNLOpFEIIzdqG7X/1fa1Ham9P/T7VbrblWpF6Ei5LJtK9JgNVB0hb4l3o1g==} + '@lexical/hashtag@0.35.0': + resolution: {integrity: sha512-LYJWzXuO2ZjKsvQwrLkNZiS2TsjwYkKjlDgtugzejquTBQ/o/nfSn/MmVx6EkYLOYizaJemmZbz3IBh+u732FA==} + '@lexical/hashtag@0.41.0': resolution: {integrity: sha512-tFWM74RW4KU0E/sj2aowfWl26vmLUTp331CgVESnhQKcZBfT40KJYd57HEqBDTfQKn4MUhylQCCA0hbpw6EeFQ==} '@lexical/headless@0.41.0': resolution: {integrity: sha512-MH8oDuUKdM/Jq0c9vlEEkCL9pEQg4SwyrABBGIbFf+87VBJ5EWDdG9g1vJq7fKSDxfhFux7F5+i+zgUnxOQR/g==} + '@lexical/history@0.35.0': + resolution: {integrity: sha512-onjDRLLxGbCfHexSxxrQaDaieIHyV28zCDrbxR5dxTfW8F8PxjuNyuaG0z6o468AXYECmclxkP+P4aT6poHEpQ==} + '@lexical/history@0.41.0': resolution: {integrity: sha512-kGoVWsiOn62+RMjRolRa+NXZl8jFwxav6GNDiHH8yzivtoaH8n1SwUfLJELXCzeqzs81HySqD4q30VLJVTGoDg==} + '@lexical/html@0.35.0': + resolution: {integrity: sha512-rXGFE5S5rKsg3tVnr1s4iEgOfCApNXGpIFI3T2jGEShaCZ5HLaBY9NVBXnE9Nb49e9bkDkpZ8FZd1qokCbQXbw==} + '@lexical/html@0.41.0': resolution: {integrity: sha512-3RyZy+H/IDKz2D66rNN/NqYx87xVFrngfEbyu1OWtbY963RUFnopiVHCQvsge/8kT04QSZ7U/DzjVFqeNS6clg==} + '@lexical/link@0.35.0': + resolution: {integrity: sha512-+0Wx6cBwO8TfdMzpkYFacsmgFh8X1rkiYbq3xoLvk3qV8upYxaMzK1s8Q1cpKmWyI0aZrU6z7fiK4vUqB7+69w==} + '@lexical/link@0.41.0': resolution: {integrity: sha512-Rjtx5cGWAkKcnacncbVsZ1TqRnUB2Wm4eEVKpaAEG41+kHgqghzM2P+UGT15yROroxJu8KvAC9ISiYFiU4XE1w==} + '@lexical/list@0.35.0': + resolution: {integrity: sha512-owsmc8iwgExBX8sFe8fKTiwJVhYULt9hD1RZ/HwfaiEtRZZkINijqReOBnW2mJfRxBzhFSWc4NG3ISB+fHYzqw==} + '@lexical/list@0.41.0': resolution: {integrity: sha512-RXvB+xcbzVoQLGRDOBRCacztG7V+bI95tdoTwl8pz5xvgPtAaRnkZWMDP+yMNzMJZsqEChdtpxbf0NgtMkun6g==} + '@lexical/mark@0.35.0': + resolution: {integrity: sha512-W0hwMTAVeexvpk9/+J6n1G/sNkpI/Meq1yeDazahFLLAwXLHtvhIAq2P/klgFknDy1hr8X7rcsQuN/bqKcKHYg==} + '@lexical/mark@0.41.0': resolution: {integrity: sha512-UO5WVs9uJAYIKHSlYh4Z1gHrBBchTOi21UCYBIZ7eAs4suK84hPzD+3/LAX5CB7ZltL6ke5Sly3FOwNXv/wfpA==} + '@lexical/markdown@0.35.0': + resolution: {integrity: sha512-BlNyXZAt4gWidMw0SRWrhBETY1BpPglFBZI7yzfqukFqgXRh7HUQA28OYeI/nsx9pgNob8TiUduUwShqqvOdEA==} + '@lexical/markdown@0.41.0': resolution: {integrity: sha512-bzI73JMXpjGFhqUWNV6KqfjWcgAWzwFT+J3RHtbCF5rysC8HLldBYojOgAAtPfXqfxyv2mDzsY7SoJ75s9uHZA==} + '@lexical/offset@0.35.0': + resolution: {integrity: sha512-DRE4Df6qYf2XiV6foh6KpGNmGAv2ANqt3oVXpyS6W8hTx3+cUuAA1APhCZmLNuU107um4zmHym7taCu6uXW5Yg==} + '@lexical/offset@0.41.0': resolution: {integrity: sha512-2RHBXZqC8gm3X9C0AyRb0M8w7zJu5dKiasrif+jSKzsxPjAUeF1m95OtIOsWs1XLNUgASOSUqGovDZxKJslZfA==} + '@lexical/overflow@0.35.0': + resolution: {integrity: sha512-B25YvnJQTGlZcrNv7b0PJBLWq3tl8sql497OHfYYLem7EOMPKKDGJScJAKM/91D4H/mMAsx5gnA/XgKobriuTg==} + '@lexical/overflow@0.41.0': resolution: {integrity: sha512-Iy6ZiJip8X14EBYt1zKPOrXyQ4eG9JLBEoPoSVBTiSbVd+lYicdUvaOThT0k0/qeVTN9nqTaEltBjm56IrVKCQ==} + '@lexical/plain-text@0.35.0': + resolution: {integrity: sha512-lwBCUNMJf7Gujp2syVWMpKRahfbTv5Wq+H3HK1Q1gKH1P2IytPRxssCHvexw9iGwprSyghkKBlbF3fGpEdIJvQ==} + '@lexical/plain-text@0.41.0': resolution: {integrity: sha512-HIsGgmFUYRUNNyvckun33UQfU7LRzDlxymHUq67+Bxd5bXqdZOrStEKJXuDX+LuLh/GXZbaWNbDLqwLBObfbQg==} + '@lexical/react@0.35.0': + resolution: {integrity: sha512-uYAZSqumH8tRymMef+A0f2hQvMwplKK9DXamcefnk3vSNDHHqRWQXpiUo6kD+rKWuQmMbVa5RW4xRQebXEW+1A==} + peerDependencies: + react: 19.2.3 + react-dom: 19.2.3 + '@lexical/react@0.41.0': resolution: {integrity: sha512-7+GUdZUm6sofWm+zdsWAs6cFBwKNsvsHezZTrf6k8jrZxL461ZQmbz/16b4DvjCGL9r5P1fR7md9/LCmk8TiCg==} peerDependencies: react: 19.2.3 react-dom: 19.2.3 + '@lexical/rich-text@0.35.0': + resolution: {integrity: sha512-qEHu8g7vOEzz9GUz1VIUxZBndZRJPh9iJUFI+qTDHj+tQqnd5LCs+G9yz6jgNfiuWWpezTp0i1Vz/udNEuDPKQ==} + '@lexical/rich-text@0.41.0': resolution: {integrity: sha512-yUcr7ZaaVTZNi8bow4CK1M8jy2qyyls1Vr+5dVjwBclVShOL/F/nFyzBOSb6RtXXRbd3Ahuk9fEleppX/RNIdw==} + '@lexical/selection@0.35.0': + resolution: {integrity: sha512-mMtDE7Q0nycXdFTTH/+ta6EBrBwxBB4Tg8QwsGntzQ1Cq//d838dpXpFjJOqHEeVHUqXpiuj+cBG8+bvz/rPRw==} + '@lexical/selection@0.41.0': resolution: {integrity: sha512-1s7/kNyRzcv5uaTwsUL28NpiisqTf5xZ1zNukLsCN1xY+TWbv9RE9OxIv+748wMm4pxNczQe/UbIBODkbeknLw==} + '@lexical/table@0.35.0': + resolution: {integrity: sha512-9jlTlkVideBKwsEnEkqkdg7A3mije1SvmfiqoYnkl1kKJCLA5iH90ywx327PU0p+bdnURAytWUeZPXaEuEl2OA==} + '@lexical/table@0.41.0': resolution: {integrity: sha512-d3SPThBAr+oZ8O74TXU0iXM3rLbrAVC7/HcOnSAq7/AhWQW8yMutT51JQGN+0fMLP9kqoWSAojNtkdvzXfU/+A==} + '@lexical/text@0.35.0': + resolution: {integrity: sha512-uaMh46BkysV8hK8wQwp5g/ByZW+2hPDt8ahAErxtf8NuzQem1FHG/f5RTchmFqqUDVHO3qLNTv4AehEGmXv8MA==} + '@lexical/text@0.41.0': resolution: {integrity: sha512-gGA+Anc7ck110EXo4KVKtq6Ui3M7Vz3OpGJ4QE6zJHWW8nV5h273koUGSutAMeoZgRVb6t01Izh3ORoFt/j1CA==} + '@lexical/utils@0.35.0': + resolution: {integrity: sha512-2H393EYDnFznYCDFOW3MHiRzwEO5M/UBhtUjvTT+9kc+qhX4U3zc8ixQalo5UmZ5B2nh7L/inXdTFzvSRXtsRA==} + '@lexical/utils@0.41.0': resolution: {integrity: sha512-Wlsokr5NQCq83D+7kxZ9qs5yQ3dU3Qaf2M+uXxLRoPoDaXqW8xTWZq1+ZFoEzsHzx06QoPa4Vu/40BZR91uQPg==} + '@lexical/yjs@0.35.0': + resolution: {integrity: sha512-3DSP7QpmTGYU9bN/yljP0PIao4tNIQtsR4ycauWNSawxs/GQCZtSmAPcLRnCm6qpqsDDjUtKjO/1Ej8FRp0m0w==} + peerDependencies: + yjs: '>=13.5.22' + '@lexical/yjs@0.41.0': resolution: {integrity: sha512-PaKTxSbVC4fpqUjQ7vUL9RkNF1PjL8TFl5jRe03PqoPYpE33buf3VXX6+cOUEfv9+uknSqLCPHoBS/4jN3a97w==} peerDependencies: yjs: '>=13.5.22' + '@lezer/common@1.5.2': + resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} + + '@lezer/cpp@1.1.5': + resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==} + + '@lezer/css@1.3.3': + resolution: {integrity: sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==} + + '@lezer/go@1.0.1': + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} + + '@lezer/highlight@1.2.3': + resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} + + '@lezer/html@1.3.13': + resolution: {integrity: sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==} + + '@lezer/java@1.1.3': + resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==} + + '@lezer/javascript@1.5.4': + resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} + + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + + '@lezer/lr@1.4.10': + resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} + + '@lezer/markdown@1.6.3': + resolution: {integrity: sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==} + + '@lezer/php@1.0.5': + resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==} + + '@lezer/python@1.1.18': + resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} + + '@lezer/rust@1.0.2': + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + + '@lezer/sass@1.1.0': + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} + + '@lezer/xml@1.0.6': + resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + + '@lezer/yaml@1.0.4': + resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==} + + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + + '@mdxeditor/editor@3.54.0': + resolution: {integrity: sha512-X/b7elUTzPJHZzDjqf5xqF+tLRHDNPCjibOTPc0MrvyImovqxM6+fjSHCam8NXD6GGHQ+lbxMDo7OOIjEa6RqQ==} + engines: {node: '>=16'} + peerDependencies: + react: 19.2.3 + react-dom: 19.2.3 + + '@mdxeditor/gurx@1.2.4': + resolution: {integrity: sha512-9ZykIFYhKaXaaSPCs1cuI+FvYDegJjbKwmA4ASE/zY+hJY6EYqvoye4esiO85CjhOw9aoD/izD/CU78/egVqmg==} + engines: {node: '>=16'} + peerDependencies: + react: 19.2.3 + react-dom: 19.2.3 + '@medusajs/admin-bundler@2.14.1': resolution: {integrity: sha512-hhp1VJdbPoT9qxFnlpMufeyu5p5gVMOiPE+HyG6Sb2G6rdINyrNRlYkV6t5uT7p5mXhOTLbkHAXsZ3L0BwOqDA==} @@ -5594,15 +5843,24 @@ packages: resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} + '@radix-ui/colors@3.0.0': + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.0.0': resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/react-accessible-icon@1.1.1': resolution: {integrity: sha512-DH8vuU7oqHt9RhO3V9Z1b8ek+bOl4+9VLsh0cgL6t7f2WhbuOChm3ft0EmCCsfd4ORi7Cs3II4aNcTXi+bh+wg==} peerDependencies: @@ -5655,6 +5913,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-aspect-ratio@1.1.1': resolution: {integrity: sha512-kNU4FIpcFMBLkOUcgeIteH06/8JLBcYY6Le1iKenDGCYNYFX3TQqCZjzkOsz37h7r94/99GTb7YhEr98ZBJibw==} peerDependencies: @@ -5720,6 +5991,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.0.0': resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: @@ -5734,6 +6018,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context-menu@2.2.5': resolution: {integrity: sha512-MY5PFCwo/ICaaQtpQBQ0g19AyjzI0mhz+a2GUWA2pJf4XFkvglAdcgDV2Iqm+lLbXn8hb+6rbLgcmRtc6ImPvg==} peerDependencies: @@ -5761,12 +6054,34 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dialog@1.0.0': resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} peerDependencies: react: 19.2.3 react-dom: 19.2.3 + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dialog@1.1.4': resolution: {integrity: sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==} peerDependencies: @@ -5802,12 +6117,34 @@ packages: '@types/react': optional: true + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dismissable-layer@1.0.0': resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} peerDependencies: react: 19.2.3 react-dom: 19.2.3 + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dismissable-layer@1.1.3': resolution: {integrity: sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==} peerDependencies: @@ -5861,6 +6198,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.0.0': resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} peerDependencies: @@ -5880,6 +6226,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-form@0.1.1': resolution: {integrity: sha512-Ah2TBvzl2trb4DL9DQtyUJgAUfq/djMN7j5CHzdpbdR3W7OL8N4JcJgE80cXMf3ssCE+8yg0zFQoJ0srxqfsFA==} peerDependencies: @@ -5906,6 +6265,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: 19.2.3 + '@radix-ui/react-id@1.0.0': resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: @@ -5920,6 +6284,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-label@2.1.1': resolution: {integrity: sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==} peerDependencies: @@ -5972,6 +6345,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popover@1.1.5': resolution: {integrity: sha512-YXkTAftOIW2Bt3qKH8vYr6n9gCkVrvyvfiTObVjoHVTHnNj26rmvO87IKa3VgtgCjb8FAQ6qOjNViwl+9iIzlg==} peerDependencies: @@ -5998,6 +6384,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.0.0': resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} peerDependencies: @@ -6017,6 +6416,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.0.0': resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: @@ -6036,6 +6448,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@1.0.0': resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} peerDependencies: @@ -6055,6 +6480,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-progress@1.1.1': resolution: {integrity: sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA==} peerDependencies: @@ -6094,6 +6532,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-scroll-area@1.2.2': resolution: {integrity: sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==} peerDependencies: @@ -6120,6 +6571,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-separator@1.1.1': resolution: {integrity: sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==} peerDependencies: @@ -6133,6 +6597,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-separator@1.1.7': + resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-slider@1.2.2': resolution: {integrity: sha512-sNlU06ii1/ZcbHf8I9En54ZPW0Vil/yPVg4vQMcFNjrIx51jsHbFl1HYHQvCIWJSr1q0ZmA+iIs/ZTv8h7HHSA==} peerDependencies: @@ -6160,6 +6637,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-switch@1.1.2': resolution: {integrity: sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==} peerDependencies: @@ -6212,6 +6698,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-toggle-group@1.1.11': + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-toggle@1.1.1': resolution: {integrity: sha512-i77tcgObYr743IonC1hrsnnPmszDRn8p+EGUsUt+5a/JFn28fxaM88Py6V2mc8J5kELMWishI0rLnuGLFD/nnQ==} peerDependencies: @@ -6225,6 +6724,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-toolbar@1.1.1': resolution: {integrity: sha512-r7T80WOCHc2n3KRzFCbHWGVzkfVTCzDofGU4gqa5ZuIzgnVaLogGsdyifFJXWQDp0lAr5hrf+X9uqQdE0pa6Ww==} peerDependencies: @@ -6238,6 +6750,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-toolbar@1.1.11': + resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-tooltip@1.1.7': resolution: {integrity: sha512-ss0s80BC0+g0+Zc53MvilcnTYSOi4mSuFWBPYPuTOFGjx+pUU+ZrmamMNwS56t8MTFlniA5ocjd4jYm/CdhbOg==} peerDependencies: @@ -6251,6 +6776,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.0.0': resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: @@ -6265,6 +6803,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.0.0': resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} peerDependencies: @@ -6279,6 +6826,24 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.0.0': resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} peerDependencies: @@ -6293,6 +6858,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.0.0': resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: @@ -6307,6 +6881,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.1.0': resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} peerDependencies: @@ -6316,6 +6899,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.0': resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: @@ -6325,6 +6917,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.1.0': resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: @@ -6334,6 +6935,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': 19.2.3 + react: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-visually-hidden@1.1.1': resolution: {integrity: sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==} peerDependencies: @@ -6347,9 +6957,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3 + react: 19.2.3 + react-dom: 19.2.3 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-aria/breadcrumbs@3.5.30': resolution: {integrity: sha512-DZymglA70SwvDJA7GB147sUexvdDy6vWcriGrlEHhMMzBLhGB30I5J96R4pPzURLxXISrWFH56KC5rRgIqsqqg==} peerDependencies: @@ -6762,6 +7388,16 @@ packages: peerDependencies: react: 19.2.3 + '@react-hook/intersection-observer@3.1.2': + resolution: {integrity: sha512-mWU3BMkmmzyYMSuhO9wu3eJVP21N8TcgYm9bZnTrMwuM818bEk+0NRM3hP+c/TqA9Ln5C7qE53p1H0QMtzYdvQ==} + peerDependencies: + react: 19.2.3 + + '@react-hook/passive-layout-effect@1.2.1': + resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} + peerDependencies: + react: 19.2.3 + '@react-stately/calendar@3.9.1': resolution: {integrity: sha512-q0Q8fivpQa1rcLg5daUVxwVj1smCp1VnpX9A5Q5PkI9lH9x+xdS0Y6eOqb8Ih3TKBDkx9/oEZonOX7RYNIzSig==} peerDependencies: @@ -7691,6 +8327,9 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@stitches/core@1.2.8': + resolution: {integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==} + '@storybook/addon-a11y@10.2.8': resolution: {integrity: sha512-EW5MzPKNzyPorvodd416U2Np+zEdMPe+BSyomjm0oCXoC/6rDurf05H1pa99rZsrTDRrpog+HCz8iVa4XSwN5Q==} peerDependencies: @@ -8976,6 +9615,9 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + anser@2.3.5: + resolution: {integrity: sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==} + ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -9366,6 +10008,9 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bullmq@5.13.0: resolution: {integrity: sha512-rE7v3jMZZGsEhfMhLZwADwuHdqJPTTGHBM8C+SpxF9GzyZ+7pvC80EP5bOZJPPRzbmyhvIPJCVd0bchUZiQF+w==} @@ -9542,10 +10187,16 @@ packages: cjs-module-lexer@2.1.1: resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + clean-set@1.1.2: + resolution: {integrity: sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -9640,6 +10291,14 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + cm6-theme-basic-light@0.2.0: + resolution: {integrity: sha512-1prg2gv44sYfpHscP26uLT/ePrh0mlmVwMSoSd3zYKQ92Ab3jPRLzyCnpyOCQLJbK+YdNs4HvMRqMNYdy4pMhA==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/highlight': ^1.0.0 + cmdk@0.2.1: resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==} peerDependencies: @@ -9653,6 +10312,9 @@ packages: code-block-writer@13.0.3: resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + codemirror@6.0.2: + resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} + collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -9772,9 +10434,16 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} + compute-scroll-into-view@2.0.4: + resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + concat-stream@2.0.0: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} @@ -9911,6 +10580,9 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -10022,6 +10694,10 @@ packages: resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} engines: {node: '>=0.8'} + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -10233,6 +10909,10 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diff@5.2.2: + resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} + engines: {node: '>=0.3.1'} + diffable-html@4.1.0: resolution: {integrity: sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==} @@ -10325,6 +11005,11 @@ packages: resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} + downshift@7.6.2: + resolution: {integrity: sha512-iOv+E1Hyt3JDdL9yYcOgW7nZ7GQ2Uz6YbggwXvKUSleetYhU2nXD482Rz6CzvM4lvI1At34BYruKAL4swRGxaA==} + peerDependencies: + react: 19.2.3 + drizzle-kit@0.31.7: resolution: {integrity: sha512-hOzRGSdyKIU4FcTSFYGKdXEjFsncVwHZ43gY3WU5Bz9j5Iadp6Rh6hxLSQ1IWXpKLBKt/d5y1cpSPcV+FcoQ1A==} hasBin: true @@ -10667,9 +11352,20 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -10704,6 +11400,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-carriage@1.3.1: + resolution: {integrity: sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -10837,6 +11536,10 @@ packages: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10886,6 +11589,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -10947,6 +11653,9 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + extract-stack@2.0.0: resolution: {integrity: sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==} engines: {node: '>=8'} @@ -11008,6 +11717,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -11174,6 +11886,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + formatly@0.3.0: resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} engines: {node: '>=18.3.0'} @@ -11762,6 +12478,10 @@ packages: resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} engines: {node: '>= 0.10'} + intersection-observer@0.10.0: + resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==} + deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. + intl-messageformat@10.7.18: resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} @@ -12444,6 +13164,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + knex@3.2.8: resolution: {integrity: sha512-ElXXxu9Nq+5hWYdBUddYIWIT5yKKs5KNCsmKGbJSHPyaMpAABp3xs4L55GgdQoAs6QQ7dv72ai3M4pxYQ8utEg==} engines: {node: '>=16'} @@ -12512,6 +13236,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lexical@0.35.0: + resolution: {integrity: sha512-3VuV8xXhh5xJA6tzvfDvE0YBCMkIZUmxtRilJQDDdCgJCc+eut6qAv2qbN+pbqvarqcQqPN1UF+8YvsjmyOZpw==} + lexical@0.41.0: resolution: {integrity: sha512-pNIm5+n+hVnJHB9gYPDYsIO5Y59dNaDU9rJmPPsfqQhP2ojKFnUoPbcRnrI9FJLXB14sSumcY8LUw7Sq70TZqA==} @@ -12811,6 +13538,9 @@ packages: markdown-table@2.0.0: resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked-terminal@7.3.0: resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} engines: {node: '>=16.0.0'} @@ -12847,12 +13577,39 @@ packages: md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-highlight-mark@1.2.2: + resolution: {integrity: sha512-OYumVoytj+B9YgwzBhBcYUCLYHIPvJtAvwnMyKhUXbfUFuER5S+FDZyu9fadUxm2TCT5fRYK3jQXh2ioWAxrMw==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + mdast-util-mdx-jsx@3.1.3: resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} @@ -12881,6 +13638,14 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + medusa-plugin-content@0.2.0: + resolution: {integrity: sha512-RP6kvQ2ug+IakoThtVCdJqj2/P8bobzh93+c1RVzvkdGNNBs0h875GPxDQ19OCUSfDj9Mc5wrvmbwp3RDVOFnQ==} + engines: {node: '>=20'} + peerDependencies: + '@medusajs/framework': 2.14.2 + '@medusajs/js-sdk': 2.14.2 + '@medusajs/medusa': 2.14.2 + meilisearch@0.53.0: resolution: {integrity: sha512-nG4VXbEOSzUmtbfsgOo+t6yX1ECEgXaT4hC0ap9MBpQGK5xwT+NWYDENYsKWR75cVaWaAqva+ok4zHlgtdXlLw==} @@ -12914,9 +13679,39 @@ packages: micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-highlight-mark@1.2.0: + resolution: {integrity: sha512-huGtbd/9kQsMk8u7nrVMaS5qH/47yDG6ZADggo5Owz5JoY8wdfQjfuy118/QiYNCvdFuFDbzT0A7K7Hp2cBsXA==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + micromark-extension-mdx-jsx@3.0.1: resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} @@ -13162,6 +13957,11 @@ packages: typescript: optional: true + multer@1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + deprecated: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version. + multer@2.0.2: resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} engines: {node: '>= 10.16.0'} @@ -13229,6 +14029,9 @@ packages: react: 19.2.3 react-dom: 19.2.3 + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + next@16.0.7: resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==} engines: {node: '>=20.9.0'} @@ -13615,6 +14418,9 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + outvariant@1.4.0: + resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} @@ -14322,6 +15128,9 @@ packages: react: 19.2.3 react-dom: 19.2.3 + react-devtools-inline@4.4.0: + resolution: {integrity: sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==} + react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: @@ -14348,6 +15157,12 @@ packages: react: 19.2.3 react-dom: 19.2.3 + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: 19.2.3 + react-error-boundary@4.1.2: resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} peerDependencies: @@ -14372,6 +15187,12 @@ packages: peerDependencies: react: 19.2.3 + react-hook-form@7.75.0: + resolution: {integrity: sha512-Ovv94H+0p3sJ7B9B5QxPuCP1u8V/cHuVGyH55cSwodYDtoJwK+fqk3vjfIgSX59I2U/bU4z0nRJ9HMLpNiWEmw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: 19.2.3 + react-i18next@13.5.0: resolution: {integrity: sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==} peerDependencies: @@ -15094,6 +15915,9 @@ packages: state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + static-browser-server@1.0.3: + resolution: {integrity: sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -15164,6 +15988,9 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + strict-event-emitter@0.4.6: + resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -15300,6 +16127,9 @@ packages: stubborn-utils@1.0.2: resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -15806,6 +16636,9 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -15945,6 +16778,9 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unidiff@1.0.4: + resolution: {integrity: sha512-ynU0vsAXw0ir8roa+xPCUHmnJ5goc5BTM2Kuc3IJd8UwgaeRs7VSD5+eeaQL+xp1JtB92hu/Zy/Lgy7RZcr1pQ==} + unique-string@2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} @@ -16084,6 +16920,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -16251,6 +17092,9 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -18476,6 +19320,303 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@codemirror/autocomplete@6.20.2': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + + '@codemirror/commands@6.10.3': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + + '@codemirror/lang-angular@0.1.4': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-cpp@6.0.3': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/cpp': 1.1.5 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/css': 1.3.3 + + '@codemirror/lang-go@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/go': 1.0.1 + + '@codemirror/lang-html@6.4.11': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/css': 1.3.3 + '@lezer/html': 1.3.13 + + '@codemirror/lang-java@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/java': 1.1.3 + + '@codemirror/lang-javascript@6.2.5': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/lint': 6.9.6 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/javascript': 1.5.4 + + '@codemirror/lang-jinja@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-json@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/json': 1.0.3 + + '@codemirror/lang-less@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-liquid@6.3.2': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-markdown@6.5.0': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/markdown': 1.6.3 + + '@codemirror/lang-php@6.0.2': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/php': 1.0.5 + + '@codemirror/lang-python@6.2.1': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/python': 1.1.18 + + '@codemirror/lang-rust@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/rust': 1.0.2 + + '@codemirror/lang-sass@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/sass': 1.1.0 + + '@codemirror/lang-sql@6.10.0': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-vue@0.1.3': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-wast@6.0.2': + dependencies: + '@codemirror/language': 6.12.3 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@codemirror/lang-xml@6.1.0': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/xml': 1.0.6 + + '@codemirror/lang-yaml@6.1.3': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + '@lezer/yaml': 1.0.4 + + '@codemirror/language-data@6.5.2': + dependencies: + '@codemirror/lang-angular': 0.1.4 + '@codemirror/lang-cpp': 6.0.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-go': 6.0.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-java': 6.0.2 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/lang-jinja': 6.0.1 + '@codemirror/lang-json': 6.0.2 + '@codemirror/lang-less': 6.0.2 + '@codemirror/lang-liquid': 6.3.2 + '@codemirror/lang-markdown': 6.5.0 + '@codemirror/lang-php': 6.0.2 + '@codemirror/lang-python': 6.2.1 + '@codemirror/lang-rust': 6.0.2 + '@codemirror/lang-sass': 6.0.2 + '@codemirror/lang-sql': 6.10.0 + '@codemirror/lang-vue': 0.1.3 + '@codemirror/lang-wast': 6.0.2 + '@codemirror/lang-xml': 6.1.0 + '@codemirror/lang-yaml': 6.1.3 + '@codemirror/language': 6.12.3 + '@codemirror/legacy-modes': 6.5.2 + + '@codemirror/language@6.12.3': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + style-mod: 4.1.3 + + '@codemirror/legacy-modes@6.5.2': + dependencies: + '@codemirror/language': 6.12.3 + + '@codemirror/lint@6.9.6': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + crelt: 1.0.6 + + '@codemirror/merge@6.12.1': + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/highlight': 1.2.3 + style-mod: 4.1.3 + + '@codemirror/search@6.7.0': + dependencies: + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + crelt: 1.0.6 + + '@codemirror/state@6.6.0': + dependencies: + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.42.0': + dependencies: + '@codemirror/state': 6.6.0 + crelt: 1.0.6 + style-mod: 4.1.3 + w3c-keyname: 2.2.8 + + '@codesandbox/nodebox@0.1.8': + dependencies: + outvariant: 1.4.3 + strict-event-emitter: 0.4.6 + + '@codesandbox/sandpack-client@2.19.8': + dependencies: + '@codesandbox/nodebox': 0.1.8 + buffer: 6.0.3 + dequal: 2.0.3 + mime-db: 1.54.0 + outvariant: 1.4.0 + static-browser-server: 1.0.3 + + '@codesandbox/sandpack-react@2.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/commands': 6.10.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.5 + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@codesandbox/sandpack-client': 2.19.8 + '@lezer/highlight': 1.2.3 + '@react-hook/intersection-observer': 3.1.2(react@19.2.3) + '@stitches/core': 1.2.8 + anser: 2.3.5 + clean-set: 1.1.2 + dequal: 2.0.3 + escape-carriage: 1.3.1 + lz-string: 1.5.0 + react: 19.2.3 + react-devtools-inline: 4.4.0 + react-dom: 19.2.3(react@19.2.3) + react-is: 17.0.2 + '@colors/colors@1.5.0': optional: true @@ -19139,7 +20280,7 @@ snapshots: '@floating-ui/core@1.7.3': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 '@floating-ui/core@1.7.5': dependencies: @@ -19148,19 +20289,13 @@ snapshots: '@floating-ui/dom@1.7.4': dependencies: '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 '@floating-ui/dom@1.7.6': dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - '@floating-ui/react-dom@2.1.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/dom': 1.7.6 @@ -19175,8 +20310,6 @@ snapshots: react-dom: 19.2.3(react@19.2.3) tabbable: 6.4.0 - '@floating-ui/utils@0.2.10': {} - '@floating-ui/utils@0.2.11': {} '@formatjs/ecma402-abstract@2.3.6': @@ -20089,6 +21222,14 @@ snapshots: '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) tslib: 2.8.1 + '@lexical/clipboard@0.35.0': + dependencies: + '@lexical/html': 0.35.0 + '@lexical/list': 0.35.0 + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/clipboard@0.41.0': dependencies: '@lexical/html': 0.41.0 @@ -20097,12 +21238,29 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/code@0.35.0': + dependencies: + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + prismjs: 1.30.0 + '@lexical/code@0.41.0': dependencies: '@lexical/utils': 0.41.0 lexical: 0.41.0 prismjs: 1.30.0 + '@lexical/devtools-core@0.35.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@lexical/html': 0.35.0 + '@lexical/link': 0.35.0 + '@lexical/mark': 0.35.0 + '@lexical/table': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@lexical/devtools-core@0.41.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@lexical/html': 0.41.0 @@ -20114,6 +21272,10 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@lexical/dragon@0.35.0': + dependencies: + lexical: 0.35.0 + '@lexical/dragon@0.41.0': dependencies: '@lexical/extension': 0.41.0 @@ -20125,6 +21287,11 @@ snapshots: '@preact/signals-core': 1.14.1 lexical: 0.41.0 + '@lexical/hashtag@0.35.0': + dependencies: + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/hashtag@0.41.0': dependencies: '@lexical/text': 0.41.0 @@ -20139,24 +21306,46 @@ snapshots: - bufferutil - utf-8-validate + '@lexical/history@0.35.0': + dependencies: + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/history@0.41.0': dependencies: '@lexical/extension': 0.41.0 '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/html@0.35.0': + dependencies: + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/html@0.41.0': dependencies: '@lexical/selection': 0.41.0 '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/link@0.35.0': + dependencies: + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/link@0.41.0': dependencies: '@lexical/extension': 0.41.0 '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/list@0.35.0': + dependencies: + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/list@0.41.0': dependencies: '@lexical/extension': 0.41.0 @@ -20164,11 +21353,26 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/mark@0.35.0': + dependencies: + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/mark@0.41.0': dependencies: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/markdown@0.35.0': + dependencies: + '@lexical/code': 0.35.0 + '@lexical/link': 0.35.0 + '@lexical/list': 0.35.0 + '@lexical/rich-text': 0.35.0 + '@lexical/text': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/markdown@0.41.0': dependencies: '@lexical/code': 0.41.0 @@ -20179,14 +21383,29 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/offset@0.35.0': + dependencies: + lexical: 0.35.0 + '@lexical/offset@0.41.0': dependencies: lexical: 0.41.0 + '@lexical/overflow@0.35.0': + dependencies: + lexical: 0.35.0 + '@lexical/overflow@0.41.0': dependencies: lexical: 0.41.0 + '@lexical/plain-text@0.35.0': + dependencies: + '@lexical/clipboard': 0.35.0 + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/plain-text@0.41.0': dependencies: '@lexical/clipboard': 0.41.0 @@ -20195,6 +21414,31 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/react@0.35.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30)': + dependencies: + '@floating-ui/react': 0.27.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@lexical/devtools-core': 0.35.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@lexical/dragon': 0.35.0 + '@lexical/hashtag': 0.35.0 + '@lexical/history': 0.35.0 + '@lexical/link': 0.35.0 + '@lexical/list': 0.35.0 + '@lexical/mark': 0.35.0 + '@lexical/markdown': 0.35.0 + '@lexical/overflow': 0.35.0 + '@lexical/plain-text': 0.35.0 + '@lexical/rich-text': 0.35.0 + '@lexical/table': 0.35.0 + '@lexical/text': 0.35.0 + '@lexical/utils': 0.35.0 + '@lexical/yjs': 0.35.0(yjs@13.6.30) + lexical: 0.35.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-error-boundary: 3.1.4(react@19.2.3) + transitivePeerDependencies: + - yjs + '@lexical/react@0.41.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30)': dependencies: '@floating-ui/react': 0.27.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -20221,6 +21465,13 @@ snapshots: transitivePeerDependencies: - yjs + '@lexical/rich-text@0.35.0': + dependencies: + '@lexical/clipboard': 0.35.0 + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/rich-text@0.41.0': dependencies: '@lexical/clipboard': 0.41.0 @@ -20229,10 +21480,20 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/selection@0.35.0': + dependencies: + lexical: 0.35.0 + '@lexical/selection@0.41.0': dependencies: lexical: 0.41.0 + '@lexical/table@0.35.0': + dependencies: + '@lexical/clipboard': 0.35.0 + '@lexical/utils': 0.35.0 + lexical: 0.35.0 + '@lexical/table@0.41.0': dependencies: '@lexical/clipboard': 0.41.0 @@ -20240,15 +21501,33 @@ snapshots: '@lexical/utils': 0.41.0 lexical: 0.41.0 + '@lexical/text@0.35.0': + dependencies: + lexical: 0.35.0 + '@lexical/text@0.41.0': dependencies: lexical: 0.41.0 + '@lexical/utils@0.35.0': + dependencies: + '@lexical/list': 0.35.0 + '@lexical/selection': 0.35.0 + '@lexical/table': 0.35.0 + lexical: 0.35.0 + '@lexical/utils@0.41.0': dependencies: '@lexical/selection': 0.41.0 lexical: 0.41.0 + '@lexical/yjs@0.35.0(yjs@13.6.30)': + dependencies: + '@lexical/offset': 0.35.0 + '@lexical/selection': 0.35.0 + lexical: 0.35.0 + yjs: 13.6.30 + '@lexical/yjs@0.41.0(yjs@13.6.30)': dependencies: '@lexical/offset': 0.41.0 @@ -20256,6 +21535,174 @@ snapshots: lexical: 0.41.0 yjs: 13.6.30 + '@lezer/common@1.5.2': {} + + '@lezer/cpp@1.1.5': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/css@1.3.3': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/go@1.0.1': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/highlight@1.2.3': + dependencies: + '@lezer/common': 1.5.2 + + '@lezer/html@1.3.13': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/java@1.1.3': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/javascript@1.5.4': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/json@1.0.3': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/lr@1.4.10': + dependencies: + '@lezer/common': 1.5.2 + + '@lezer/markdown@1.6.3': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + + '@lezer/php@1.0.5': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/python@1.1.18': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/rust@1.0.2': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/sass@1.1.0': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/xml@1.0.6': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@lezer/yaml@1.0.4': + dependencies: + '@lezer/common': 1.5.2 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.10 + + '@marijn/find-cluster-break@1.0.2': {} + + '@mdxeditor/editor@3.54.0(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30)': + dependencies: + '@codemirror/commands': 6.10.3 + '@codemirror/lang-markdown': 6.5.0 + '@codemirror/language-data': 6.5.2 + '@codemirror/merge': 6.12.1 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@codesandbox/sandpack-react': 2.20.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@lexical/clipboard': 0.35.0 + '@lexical/link': 0.35.0 + '@lexical/list': 0.35.0 + '@lexical/markdown': 0.35.0 + '@lexical/plain-text': 0.35.0 + '@lexical/react': 0.35.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30) + '@lexical/rich-text': 0.35.0 + '@lexical/selection': 0.35.0 + '@lexical/utils': 0.35.0 + '@mdxeditor/gurx': 1.2.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/colors': 3.0.0 + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-icons': 1.3.2(react@19.2.3) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + classnames: 2.5.1 + cm6-theme-basic-light: 0.2.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.42.0)(@lezer/highlight@1.2.3) + codemirror: 6.0.2 + downshift: 7.6.2(react@19.2.3) + js-yaml: 4.1.1 + lexical: 0.35.0 + mdast-util-directive: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-frontmatter: 2.0.1 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-highlight-mark: 1.2.2 + mdast-util-mdx: 3.0.0 + mdast-util-mdx-jsx: 3.1.3 + mdast-util-to-markdown: 2.1.2 + micromark-extension-directive: 3.0.2 + micromark-extension-frontmatter: 2.0.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-extension-highlight-mark: 1.2.0 + micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs: 3.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-hook-form: 7.75.0(react@19.2.3) + unidiff: 1.0.4 + transitivePeerDependencies: + - '@codemirror/language' + - '@lezer/highlight' + - '@types/react' + - '@types/react-dom' + - supports-color + - yjs + + '@mdxeditor/gurx@1.2.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@medusajs/admin-bundler@2.14.1(@types/node@24.10.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(less@4.1.3)(lightningcss@1.30.2)(picomatch@4.0.3)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.7.1)': dependencies: '@medusajs/admin-shared': 2.14.1 @@ -22754,14 +24201,20 @@ snapshots: '@publint/pack@0.1.2': {} + '@radix-ui/colors@3.0.0': {} + '@radix-ui/number@1.1.0': {} + '@radix-ui/number@1.1.1': {} + '@radix-ui/primitive@1.0.0': dependencies: '@babel/runtime': 7.28.4 '@radix-ui/primitive@1.1.1': {} + '@radix-ui/primitive@1.1.3': {} + '@radix-ui/react-accessible-icon@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -22811,6 +24264,15 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-aspect-ratio@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -22876,6 +24338,18 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-compose-refs@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -22887,6 +24361,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-context-menu@2.2.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -22912,6 +24392,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-context@1.1.2(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-dialog@1.0.0(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -22934,6 +24420,28 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.3)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -22984,6 +24492,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-direction@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-dismissable-layer@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -22995,6 +24509,19 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23047,6 +24574,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-focus-scope@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23067,6 +24600,17 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-form@0.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23098,6 +24642,10 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-icons@1.3.2(react@19.2.3)': + dependencies: + react: 19.2.3 + '@radix-ui/react-id@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23111,6 +24659,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-id@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-label@2.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -23186,6 +24741,29 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.3)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-popover@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23211,7 +24789,7 @@ snapshots: '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.3)(react@19.2.3) '@radix-ui/react-context': 1.1.1(@types/react@19.2.3)(react@19.2.3) @@ -23227,6 +24805,24 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/rect': 1.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-portal@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23244,6 +24840,16 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-presence@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23262,6 +24868,16 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-primitive@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23278,6 +24894,15 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-progress@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@19.2.3)(react@19.2.3) @@ -23323,6 +24948,23 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-scroll-area@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/number': 1.1.0 @@ -23369,6 +25011,35 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.3)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-separator@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -23378,6 +25049,15 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-slider@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/number': 1.1.0 @@ -23410,6 +25090,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-slot@1.2.3(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-switch@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23476,6 +25163,21 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23487,6 +25189,17 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-toolbar@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23502,6 +25215,21 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-tooltip@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -23522,6 +25250,26 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23533,6 +25281,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-controllable-state@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23546,6 +25300,21 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.3)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-escape-keydown@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23559,6 +25328,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -23570,12 +25346,24 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-previous@1.1.0(@types/react@19.2.3)(react@19.2.3)': dependencies: react: 19.2.3 optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.3)(react@19.2.3)': dependencies: '@radix-ui/rect': 1.1.0 @@ -23583,6 +25371,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-use-size@1.1.0(@types/react@19.2.3)(react@19.2.3)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.3)(react@19.2.3) @@ -23590,6 +25385,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.3 + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.3)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.3)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.3 + '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -23599,8 +25401,19 @@ snapshots: '@types/react': 19.2.3 '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + '@radix-ui/rect@1.1.0': {} + '@radix-ui/rect@1.1.1': {} + '@react-aria/breadcrumbs@3.5.30(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -24319,6 +26132,16 @@ snapshots: dependencies: react: 19.2.3 + '@react-hook/intersection-observer@3.1.2(react@19.2.3)': + dependencies: + '@react-hook/passive-layout-effect': 1.2.1(react@19.2.3) + intersection-observer: 0.10.0 + react: 19.2.3 + + '@react-hook/passive-layout-effect@1.2.1(react@19.2.3)': + dependencies: + react: 19.2.3 + '@react-stately/calendar@3.9.1(react@19.2.3)': dependencies: '@internationalized/date': 3.10.1 @@ -25497,6 +27320,8 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@stitches/core@1.2.8': {} + '@storybook/addon-a11y@10.2.8(storybook@10.1.11(@testing-library/dom@10.4.1)(prettier@3.5.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 @@ -26982,6 +28807,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -26990,6 +28819,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-walk@8.3.4: dependencies: acorn: 8.16.0 @@ -27056,6 +28889,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + anser@2.3.5: {} + ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -27518,6 +29353,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bullmq@5.13.0: dependencies: cron-parser: 4.9.0 @@ -27735,10 +29575,14 @@ snapshots: cjs-module-lexer@2.1.1: {} + classnames@2.5.1: {} + clean-css@5.3.3: dependencies: source-map: 0.6.1 + clean-set@1.1.2: {} + clean-stack@2.2.0: {} clean-stack@3.0.1: @@ -27851,6 +29695,13 @@ snapshots: cluster-key-slot@1.1.2: {} + cm6-theme-basic-light@0.2.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.42.0)(@lezer/highlight@1.2.3): + dependencies: + '@codemirror/language': 6.12.3 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + '@lezer/highlight': 1.2.3 + cmdk@0.2.1(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@radix-ui/react-dialog': 1.0.0(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -27863,6 +29714,16 @@ snapshots: code-block-writer@13.0.3: {} + codemirror@6.0.2: + dependencies: + '@codemirror/autocomplete': 6.20.2 + '@codemirror/commands': 6.10.3 + '@codemirror/language': 6.12.3 + '@codemirror/lint': 6.9.6 + '@codemirror/search': 6.7.0 + '@codemirror/state': 6.6.0 + '@codemirror/view': 6.42.0 + collect-v8-coverage@1.0.2: {} color-convert@1.9.3: @@ -27966,8 +29827,17 @@ snapshots: transitivePeerDependencies: - supports-color + compute-scroll-into-view@2.0.4: {} + concat-map@0.0.1: {} + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + concat-stream@2.0.0: dependencies: buffer-from: 1.1.2 @@ -28117,6 +29987,8 @@ snapshots: create-require@1.1.1: {} + crelt@1.0.6: {} + cron-parser@4.9.0: dependencies: luxon: 3.7.2 @@ -28231,6 +30103,11 @@ snapshots: find-pkg: 0.1.2 fs-exists-sync: 0.1.0 + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + damerau-levenshtein@1.0.8: {} data-urls@5.0.0: @@ -28388,6 +30265,8 @@ snapshots: diff@4.0.2: {} + diff@5.2.2: {} + diffable-html@4.1.0: dependencies: htmlparser2: 3.10.1 @@ -28484,6 +30363,15 @@ snapshots: dotenv@17.3.1: {} + downshift@7.6.2(react@19.2.3): + dependencies: + '@babel/runtime': 7.28.4 + compute-scroll-into-view: 2.0.4 + prop-types: 15.8.1 + react: 19.2.3 + react-is: 17.0.2 + tslib: 2.8.1 + drizzle-kit@0.31.7: dependencies: '@drizzle-team/brocli': 0.10.2 @@ -28733,8 +30621,26 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + es6-error@4.1.1: {} + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + esbuild-register@3.6.0(esbuild@0.25.12): dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -28890,6 +30796,8 @@ snapshots: escalade@3.2.0: {} + escape-carriage@1.3.1: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -29102,6 +31010,13 @@ snapshots: esm@3.2.25: {} + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + espree@10.4.0: dependencies: acorn: 8.15.0 @@ -29110,8 +31025,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -29145,6 +31060,11 @@ snapshots: etag@1.8.1: {} + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + eventemitter3@5.0.1: {} events@3.3.0: {} @@ -29276,6 +31196,10 @@ snapshots: exsolve@1.0.8: {} + ext@1.7.0: + dependencies: + type: 2.7.3 + extract-stack@2.0.0: {} extract-zip@2.0.1: @@ -29345,6 +31269,10 @@ snapshots: dependencies: reusify: 1.1.0 + fault@2.0.1: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -29533,6 +31461,8 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + format@0.2.2: {} + formatly@0.3.0: dependencies: fd-package-json: 2.0.0 @@ -30092,8 +32022,8 @@ snapshots: import-in-the-middle@1.15.0: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -30160,6 +32090,8 @@ snapshots: interpret@2.2.0: {} + intersection-observer@0.10.0: {} + intl-messageformat@10.7.18: dependencies: '@formatjs/ecma402-abstract': 2.3.6 @@ -31268,6 +33200,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + knex@3.2.8(mysql2@3.15.3)(pg@8.20.0): dependencies: colorette: 2.0.19 @@ -31341,6 +33275,8 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lexical@0.35.0: {} + lexical@0.41.0: {} lib0@0.2.117: @@ -31588,6 +33524,8 @@ snapshots: dependencies: repeat-string: 1.6.1 + markdown-table@3.0.4: {} + marked-terminal@7.3.0(marked@15.0.12): dependencies: ansi-escapes: 7.2.0 @@ -31623,6 +33561,20 @@ snapshots: crypt: 0.0.2 is-buffer: 1.1.6 + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 @@ -31640,6 +33592,59 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-highlight-mark@1.2.2: + dependencies: + micromark-extension-highlight-mark: 1.2.0 + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@3.1.3: dependencies: '@types/estree-jsx': 1.0.5 @@ -31657,6 +33662,27 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 @@ -31690,6 +33716,23 @@ snapshots: media-typer@0.3.0: {} + medusa-plugin-content@0.2.0(patch_hash=4bf02a018ce742916b587bdd5a54f560e72e23ad00bd60f84fc2dbf9b9f158ff)(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@medusajs/framework@2.14.1(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@types/node@24.10.1)(ioredis@5.9.0)(mysql2@3.15.3)(vite@5.4.21(@types/node@24.10.1)(less@4.1.3)(lightningcss@1.30.2)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1))(zod@4.2.0))(@medusajs/js-sdk@2.14.1)(@medusajs/medusa@2.14.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30): + dependencies: + '@mdxeditor/editor': 3.54.0(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30) + '@medusajs/framework': 2.14.1(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@types/node@24.10.1)(ioredis@5.9.0)(mysql2@3.15.3)(vite@5.4.21(@types/node@24.10.1)(less@4.1.3)(lightningcss@1.30.2)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1))(zod@4.2.0) + '@medusajs/js-sdk': 2.14.1 + '@medusajs/medusa': 2.14.1(@medusajs/admin-sdk@2.14.1)(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@medusajs/framework@2.14.1(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@types/node@24.10.1)(ioredis@5.9.0)(mysql2@3.15.3)(vite@5.4.21(@types/node@24.10.1)(less@4.1.3)(lightningcss@1.30.2)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1))(zod@4.2.0))(@medusajs/icons@2.14.1(react@19.2.3))(@medusajs/test-utils@2.14.1)(@medusajs/ui@4.1.8(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@swc/core@1.15.3(@swc/helpers@0.5.18))(@types/node@24.10.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(awilix@12.0.5)(less@4.1.3)(lightningcss@1.30.2)(picomatch@4.0.3)(posthog-node@4.18.0)(react-dom@19.2.3(react@19.2.3))(react-router-dom@6.30.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(yalc@1.0.0-pre.53)(yaml@2.7.1) + multer: 1.4.5-lts.1 + transitivePeerDependencies: + - '@codemirror/language' + - '@lezer/highlight' + - '@types/react' + - '@types/react-dom' + - react + - react-dom + - supports-color + - yjs + meilisearch@0.53.0: {} memfs@4.51.1: @@ -31734,6 +33777,68 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-highlight-mark@1.2.0: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + uvu: 0.5.6 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-extension-mdx-jsx@3.0.1: dependencies: '@types/acorn': 4.0.6 @@ -31748,6 +33853,33 @@ snapshots: micromark-util-types: 2.0.2 vfile-message: 4.0.3 + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -31966,7 +34098,7 @@ snapshots: mlly@1.7.4: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.1 @@ -32109,6 +34241,16 @@ snapshots: transitivePeerDependencies: - '@types/node' + multer@1.4.5-lts.1: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + multer@2.0.2: dependencies: append-field: 1.0.0 @@ -32174,6 +34316,8 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + next-tick@1.1.0: {} + next@16.0.7(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.84.0): dependencies: '@next/env': 16.0.7 @@ -32602,6 +34746,8 @@ snapshots: outdent@0.8.0: {} + outvariant@1.4.0: {} + outvariant@1.4.3: {} own-keys@1.0.1: @@ -33487,6 +35633,10 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + react-devtools-inline@4.4.0: + dependencies: + es6-symbol: 3.1.4 + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -33557,6 +35707,11 @@ snapshots: - supports-color - utf-8-validate + react-error-boundary@3.1.4(react@19.2.3): + dependencies: + '@babel/runtime': 7.28.4 + react: 19.2.3 + react-error-boundary@4.1.2(react@19.2.3): dependencies: '@babel/runtime': 7.28.4 @@ -33579,6 +35734,10 @@ snapshots: dependencies: react: 19.2.3 + react-hook-form@7.75.0(react@19.2.3): + dependencies: + react: 19.2.3 + react-i18next@13.5.0(i18next@23.7.11)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@babel/runtime': 7.28.4 @@ -34495,6 +36654,13 @@ snapshots: state-local@1.0.7: {} + static-browser-server@1.0.3: + dependencies: + '@open-draft/deferred-promise': 2.2.0 + dotenv: 16.6.1 + mime-db: 1.54.0 + outvariant: 1.4.3 + statuses@2.0.2: {} std-env@3.10.0: {} @@ -34598,6 +36764,8 @@ snapshots: streamsearch@1.1.0: {} + strict-event-emitter@0.4.6: {} + strict-event-emitter@0.5.1: {} string-argv@0.3.2: {} @@ -34749,6 +36917,8 @@ snapshots: stubborn-utils@1.0.2: {} + style-mod@4.1.3: {} + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3): dependencies: client-only: 0.0.1 @@ -34931,7 +37101,7 @@ snapshots: terser@5.44.1: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -35223,6 +37393,8 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type@2.7.3: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -35368,6 +37540,10 @@ snapshots: unicorn-magic@0.3.0: {} + unidiff@1.0.4: + dependencies: + diff: 5.2.2 + unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 @@ -35515,6 +37691,13 @@ snapshots: uuid@9.0.1: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.2 + kleur: 4.1.5 + sade: 1.8.1 + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -35805,6 +37988,8 @@ snapshots: void-elements@3.1.0: {} + w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From 0f6c0ad4f2c888ec558e95601c377b34df4d83ca Mon Sep 17 00:00:00 2001 From: Petr Glaser Date: Thu, 7 May 2026 22:37:29 +0200 Subject: [PATCH 2/4] hide native product description row --- .../widgets/product-description-editor.tsx | 104 ++++++++++++++---- 1 file changed, 83 insertions(+), 21 deletions(-) diff --git a/apps/medusa-be/src/admin/widgets/product-description-editor.tsx b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx index 8633dc3da..eba7c88f4 100644 --- a/apps/medusa-be/src/admin/widgets/product-description-editor.tsx +++ b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx @@ -42,7 +42,14 @@ type UpdateProductResponse = { } const HEADING_TAG_PATTERN = /^h[1-6]$/ +const PRODUCT_DETAIL_ROUTE_PATTERN = /\/products\/[^/]+(?:\/edit)?\/?$/ const PRODUCT_EDIT_ROUTE_PATTERN = /\/products\/[^/]+\/edit\/?$/ +const PRODUCT_DETAIL_DESCRIPTION_ROW_SELECTOR = "div.grid.grid-cols-2" +const PRODUCT_DESCRIPTION_LABEL = "Description" +const DETAIL_DESCRIPTION_ROW_HIDDEN_ATTRIBUTE = + "data-product-description-editor-detail-row-hidden" +const DETAIL_DESCRIPTION_ROW_DISPLAY_ATTRIBUTE = + "data-product-description-editor-detail-row-display" const NATIVE_DESCRIPTION_FIELD_SELECTOR = 'form textarea[name="description"]' const NATIVE_DESCRIPTION_FIELD_WRAPPER_SELECTOR = ".flex.flex-col.space-y-2" const NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE = @@ -52,22 +59,75 @@ const NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE = const PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS = "product-description-editor-modal-open" -const restoreNativeProductDescriptionField = () => { - document.body.classList.remove(PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS) +const setStoredDisplay = ( + element: HTMLElement, + displayAttribute: string, + hiddenAttribute: string +) => { + if (!element.hasAttribute(displayAttribute)) { + element.setAttribute(displayAttribute, element.style.display) + } + + element.style.display = "none" + element.hidden = true + element.setAttribute(hiddenAttribute, "true") +} + +const restoreStoredDisplay = ( + selector: string, + displayAttribute: string, + hiddenAttribute: string +) => { + const elements = document.querySelectorAll(selector) + + for (const element of elements) { + element.hidden = false + element.style.display = element.getAttribute(displayAttribute) ?? "" + element.removeAttribute(hiddenAttribute) + element.removeAttribute(displayAttribute) + } +} + +const restoreProductDescriptionDetailRow = () => { + restoreStoredDisplay( + `[${DETAIL_DESCRIPTION_ROW_HIDDEN_ATTRIBUTE}="true"]`, + DETAIL_DESCRIPTION_ROW_DISPLAY_ATTRIBUTE, + DETAIL_DESCRIPTION_ROW_HIDDEN_ATTRIBUTE + ) +} + +const hideProductDescriptionDetailRow = () => { + if (!PRODUCT_DETAIL_ROUTE_PATTERN.test(window.location.pathname)) { + restoreProductDescriptionDetailRow() + return + } - const fields = document.querySelectorAll( - `[${NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE}="true"]` + const rows = document.querySelectorAll( + PRODUCT_DETAIL_DESCRIPTION_ROW_SELECTOR ) - for (const field of fields) { - field.hidden = false - field.style.display = - field.getAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE) ?? "" - field.removeAttribute(NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE) - field.removeAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE) + for (const row of rows) { + const label = row.firstElementChild?.textContent?.trim() + + if (label === PRODUCT_DESCRIPTION_LABEL) { + setStoredDisplay( + row, + DETAIL_DESCRIPTION_ROW_DISPLAY_ATTRIBUTE, + DETAIL_DESCRIPTION_ROW_HIDDEN_ATTRIBUTE + ) + } } } +const restoreNativeProductDescriptionField = () => { + document.body.classList.remove(PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS) + restoreStoredDisplay( + `[${NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE}="true"]`, + NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE, + NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE + ) +} + const hideNativeProductDescriptionField = () => { if (!PRODUCT_EDIT_ROUTE_PATTERN.test(window.location.pathname)) { restoreNativeProductDescriptionField() @@ -90,15 +150,16 @@ const hideNativeProductDescriptionField = () => { textarea.readOnly = true textarea.tabIndex = -1 textarea.setAttribute("aria-readonly", "true") - if (!field.hasAttribute(NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE)) { - field.setAttribute( - NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE, - field.style.display - ) - } - field.style.display = "none" - field.hidden = true - field.setAttribute(NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE, "true") + setStoredDisplay( + field, + NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE, + NATIVE_DESCRIPTION_FIELD_HIDDEN_ATTRIBUTE + ) +} + +const syncNativeProductDescriptionUi = () => { + hideProductDescriptionDetailRow() + hideNativeProductDescriptionField() } const htmlToMarkdown = (html: string) => { @@ -210,17 +271,18 @@ const ProductDescriptionEditor = ({ }, [product?.description]) useEffect(() => { - const observer = new MutationObserver(hideNativeProductDescriptionField) + const observer = new MutationObserver(syncNativeProductDescriptionUi) observer.observe(document.body, { childList: true, subtree: true, }) - hideNativeProductDescriptionField() + syncNativeProductDescriptionUi() return () => { observer.disconnect() + restoreProductDescriptionDetailRow() restoreNativeProductDescriptionField() } }, []) From 3d786f8ef2bac97d719cbc8e28d328675163c2aa Mon Sep 17 00:00:00 2001 From: Petr Glaser Date: Thu, 7 May 2026 23:11:10 +0200 Subject: [PATCH 3/4] address rich editor review feedback --- .../src/components/safe-html-content.tsx | 32 ++++- apps/medusa-be/package.json | 2 +- .../widgets/product-description-editor.css | 1 + .../widgets/product-description-editor.tsx | 133 ++++++++++++++++-- pnpm-lock.yaml | 2 +- 5 files changed, 158 insertions(+), 12 deletions(-) diff --git a/apps/frontend-demo/src/components/safe-html-content.tsx b/apps/frontend-demo/src/components/safe-html-content.tsx index 77983c110..0694195e4 100644 --- a/apps/frontend-demo/src/components/safe-html-content.tsx +++ b/apps/frontend-demo/src/components/safe-html-content.tsx @@ -14,6 +14,36 @@ type SafeHtmlContentProps = { const HTML_TAG_PATTERN = /<[^>]*>/ const HTML_ENTITY_PATTERN = /&#?\w+;/ +const REL_TOKEN_PATTERN = /\s+/ +const BLANK_TARGET_REL_TOKENS = ["noopener", "noreferrer"] + +DOMPurify.addHook("afterSanitizeAttributes", (node) => { + if ( + node.nodeType !== 1 || + !("tagName" in node) || + typeof node.getAttribute !== "function" || + typeof node.setAttribute !== "function" + ) { + return + } + + if ( + node.tagName.toLowerCase() !== "a" || + node.getAttribute("target")?.toLowerCase() !== "_blank" + ) { + return + } + + const relTokens = new Set( + (node.getAttribute("rel") ?? "").split(REL_TOKEN_PATTERN).filter(Boolean) + ) + + for (const token of BLANK_TARGET_REL_TOKENS) { + relTokens.add(token) + } + + node.setAttribute("rel", Array.from(relTokens).join(" ")) +}) /** * Safely renders HTML content with automatic detection and sanitization. @@ -74,7 +104,7 @@ export function SafeHtmlContent({ FORBID_ATTR: ["onerror", "onclick", "onload"], } - // Merge custom config with defaults + // Custom config shallow-overrides defaults; array fields are replaced. const finalConfig = { ...defaultConfig, ...config } const sanitized = DOMPurify.sanitize(content, finalConfig) diff --git a/apps/medusa-be/package.json b/apps/medusa-be/package.json index 4592333d1..4cb5c7519 100644 --- a/apps/medusa-be/package.json +++ b/apps/medusa-be/package.json @@ -77,7 +77,7 @@ "escape-html": "^1.0.3", "jose": "^6.1.3", "marked": "15.0.12", - "medusa-plugin-content": "^0.2.0", + "medusa-plugin-content": "0.2.0", "mime": "4.1.0", "mysql2": "^3.15.3", "qs": "^6.14.1", diff --git a/apps/medusa-be/src/admin/widgets/product-description-editor.css b/apps/medusa-be/src/admin/widgets/product-description-editor.css index 72cdc5a5c..5f4e8b75f 100644 --- a/apps/medusa-be/src/admin/widgets/product-description-editor.css +++ b/apps/medusa-be/src/admin/widgets/product-description-editor.css @@ -20,6 +20,7 @@ --accentSolidHover: #1d4ed8; --accentText: #1d4ed8; --accentTextContrast: #ffffff; + isolation: isolate; background: var(--basePageBg); color: var(--baseTextContrast); diff --git a/apps/medusa-be/src/admin/widgets/product-description-editor.tsx b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx index eba7c88f4..58717eb3e 100644 --- a/apps/medusa-be/src/admin/widgets/product-description-editor.tsx +++ b/apps/medusa-be/src/admin/widgets/product-description-editor.tsx @@ -44,6 +44,10 @@ type UpdateProductResponse = { const HEADING_TAG_PATTERN = /^h[1-6]$/ const PRODUCT_DETAIL_ROUTE_PATTERN = /\/products\/[^/]+(?:\/edit)?\/?$/ const PRODUCT_EDIT_ROUTE_PATTERN = /\/products\/[^/]+\/edit\/?$/ +const BACKTICK_RUN_PATTERN = /`+/g +const CLASS_NAME_SEPARATOR_PATTERN = /\s+/ +const TABLE_CELL_LINE_BREAK_PATTERN = /\s*\n+\s*/g +const TABLE_CELL_PIPE_PATTERN = /\|/g const PRODUCT_DETAIL_DESCRIPTION_ROW_SELECTOR = "div.grid.grid-cols-2" const PRODUCT_DESCRIPTION_LABEL = "Description" const DETAIL_DESCRIPTION_ROW_HIDDEN_ATTRIBUTE = @@ -59,6 +63,33 @@ const NATIVE_DESCRIPTION_FIELD_DISPLAY_ATTRIBUTE = const PRODUCT_DESCRIPTION_EDITOR_MODAL_OPEN_CLASS = "product-description-editor-modal-open" +const getLongestBacktickRun = (value: string) => + Math.max( + ...(value.match(BACKTICK_RUN_PATTERN)?.map((match) => match.length) ?? [0]) + ) + +const getInlineCodeMarkdown = (value: string) => { + const delimiter = "`".repeat(getLongestBacktickRun(value) + 1) + const needsPadding = value.startsWith("`") || value.endsWith("`") + + return needsPadding + ? `${delimiter} ${value} ${delimiter}` + : `${delimiter}${value}${delimiter}` +} + +const getCodeBlockMarkdown = (value: string, language = "") => { + const delimiter = "`".repeat(Math.max(3, getLongestBacktickRun(value) + 1)) + const code = value.endsWith("\n") ? value : `${value}\n` + + return `${delimiter}${language}\n${code}${delimiter}\n\n` +} + +const getCodeLanguage = (element: HTMLElement | null) => + element?.className + .split(CLASS_NAME_SEPARATOR_PATTERN) + .find((className) => className.startsWith("language-")) + ?.replace("language-", "") ?? "" + const setStoredDisplay = ( element: HTMLElement, displayAttribute: string, @@ -179,9 +210,77 @@ const htmlToMarkdown = (html: string) => { return "" } - const children = Array.from(node.childNodes).map(renderNode).join("") const tag = node.tagName.toLowerCase() + if (tag === "br") { + return "\n" + } + + if (tag === "hr") { + return "---\n\n" + } + + if (tag === "code" && node.parentElement?.tagName.toLowerCase() !== "pre") { + return getInlineCodeMarkdown(node.textContent ?? "") + } + + if (tag === "pre") { + const codeElement = node.querySelector("code") + + return getCodeBlockMarkdown( + codeElement?.textContent ?? node.textContent ?? "", + getCodeLanguage(codeElement) + ) + } + + if (tag === "table") { + const renderTableCell = (cell: Element) => + Array.from(cell.childNodes) + .map(renderNode) + .join("") + .trim() + .replace(TABLE_CELL_LINE_BREAK_PATTERN, " ") + .replace(TABLE_CELL_PIPE_PATTERN, "\\|") + + const renderTableRow = (row: Element) => + Array.from(row.children).map(renderTableCell) + + const renderTableLine = (cells: string[], columnTotal: number) => + `| ${Array.from( + { length: columnTotal }, + (_, index) => cells[index] ?? "" + ).join(" | ")} |` + + if (!(node instanceof HTMLTableElement)) { + return "" + } + + const headerRow = node.tHead?.rows[0] + const bodyRows = Array.from(node.tBodies).flatMap((body) => + Array.from(body.rows) + ) + const rows = headerRow ? [headerRow, ...bodyRows] : Array.from(node.rows) + + if (rows.length === 0) { + return "" + } + + const renderedRows = rows.map(renderTableRow) + const columnCount = Math.max(...renderedRows.map((row) => row.length), 1) + const [headerCells, ...contentRows] = renderedRows + + return `${[ + renderTableLine(headerCells, columnCount), + renderTableLine( + Array.from({ length: columnCount }, () => "---"), + columnCount + ), + ...contentRows.map((row) => renderTableLine(row, columnCount)), + ].join("\n")}\n\n` + } + + const children = Array.from(node.childNodes).map(renderNode).join("") + if (HEADING_TAG_PATTERN.test(tag)) { return `${"#".repeat(Number(tag.slice(1)))} ${children.trim()}\n\n` } @@ -190,10 +289,6 @@ const htmlToMarkdown = (html: string) => { return `${children.trim()}\n\n` } - if (tag === "br") { - return "\n" - } - if (tag === "strong" || tag === "b") { return `**${children}**` } @@ -202,6 +297,10 @@ const htmlToMarkdown = (html: string) => { return `*${children}*` } + if (tag === "del" || tag === "s" || tag === "strike") { + return `~~${children}~~` + } + if (tag === "a") { const href = node.getAttribute("href") return href ? `[${children}](${href})` : children @@ -271,7 +370,19 @@ const ProductDescriptionEditor = ({ }, [product?.description]) useEffect(() => { - const observer = new MutationObserver(syncNativeProductDescriptionUi) + let animationFrameId: number | null = null + const scheduleSync = () => { + if (animationFrameId !== null) { + return + } + + animationFrameId = window.requestAnimationFrame(() => { + animationFrameId = null + syncNativeProductDescriptionUi() + }) + } + + const observer = new MutationObserver(scheduleSync) observer.observe(document.body, { childList: true, @@ -281,6 +392,10 @@ const ProductDescriptionEditor = ({ syncNativeProductDescriptionUi() return () => { + if (animationFrameId !== null) { + window.cancelAnimationFrame(animationFrameId) + } + observer.disconnect() restoreProductDescriptionDetailRow() restoreNativeProductDescriptionField() @@ -293,7 +408,7 @@ const ProductDescriptionEditor = ({ `/admin/products/${product?.id}`, { body: { - description: description || null, + description: description.length > 0 ? description : null, }, method: "POST", } @@ -329,8 +444,8 @@ const ProductDescriptionEditor = ({ - - + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50cbec2d1..5d043d4b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -265,7 +265,7 @@ importers: specifier: 15.0.12 version: 15.0.12 medusa-plugin-content: - specifier: ^0.2.0 + specifier: 0.2.0 version: 0.2.0(patch_hash=4bf02a018ce742916b587bdd5a54f560e72e23ad00bd60f84fc2dbf9b9f158ff)(@codemirror/language@6.12.3)(@lezer/highlight@1.2.3)(@medusajs/framework@2.14.1(@medusajs/cli@2.14.1(@types/node@24.10.1)(mysql2@3.15.3))(@types/node@24.10.1)(ioredis@5.9.0)(mysql2@3.15.3)(vite@5.4.21(@types/node@24.10.1)(less@4.1.3)(lightningcss@1.30.2)(sass@1.84.0)(stylus@0.64.0)(terser@5.44.1))(zod@4.2.0))(@medusajs/js-sdk@2.14.1)(@medusajs/medusa@2.14.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.30) mime: specifier: 4.1.0 From fc5d03c84b0888001040d72266d8febad1885024 Mon Sep 17 00:00:00 2001 From: Petr Glaser Date: Thu, 7 May 2026 23:19:24 +0200 Subject: [PATCH 4/4] Allow editor formatting tags on storefront --- apps/frontend-demo/src/components/safe-html-content.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/frontend-demo/src/components/safe-html-content.tsx b/apps/frontend-demo/src/components/safe-html-content.tsx index 0694195e4..022482af8 100644 --- a/apps/frontend-demo/src/components/safe-html-content.tsx +++ b/apps/frontend-demo/src/components/safe-html-content.tsx @@ -72,10 +72,14 @@ export function SafeHtmlContent({ "p", "br", "strong", + "del", "em", "b", "i", + "s", + "strike", "u", + "hr", "ul", "ol", "li",