@mastra/react 1.3.3-alpha.0 → 1.3.3-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-Bafx0WPw.js","names":["RTooltipProvider","RTooltipRoot","TooltipContent","RTooltipPortal","RTooltipContent","TooltipTrigger","RTooltipTrigger","TooltipTrigger","TooltipContent"],"sources":["../src/ui/Icon/Icon.tsx","../src/ui/Entity/context.tsx","../src/ui/Entity/Entity.tsx","../src/ui/Entity/ToolApproval.tsx","../src/ui/Entity/Entry.tsx","../src/ui/Tooltip/Tooltip.tsx","../src/ui/IconButton/IconButton.tsx","../src/ui/Code/highlight.ts","../src/ui/Code/Code.tsx","../src/ui/Icons/AgentIcon.tsx","../src/ui/Icons/ToolsIcon.tsx","../src/ui/Icons/WorkflowIcon.tsx","../src/ui/Message/Message.tsx","../src/ui/MessageFactory/MessageFactory.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface IconProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const IconSizes = {\n sm: 'mastra:[&>svg]:size-3',\n md: 'mastra:[&>svg]:size-4',\n lg: 'mastra:[&>svg]:size-5',\n};\n\nexport const Icon = ({ children, className, size = 'md', ...props }: IconProps) => {\n return (\n <div className={className || IconSizes[size]} {...props}>\n {children}\n </div>\n );\n};\n","import { createContext, useContext } from 'react';\nimport type { EntityVariant } from './types';\n\nexport type EntityContextType = {\n expanded: boolean;\n setExpanded: (expanded: boolean) => void;\n variant: EntityVariant;\n disabled: boolean;\n};\n\nexport const EntityContext = createContext<EntityContextType>({\n expanded: false,\n setExpanded: () => {},\n variant: 'initial',\n disabled: false,\n});\n\nexport const EntityProvider = EntityContext.Provider;\n\nexport const useEntity = () => useContext(EntityContext);\n","import { ChevronDownIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Icon } from '../Icon/Icon';\nimport { EntityProvider, useEntity } from './context';\n\nimport type { EntityVariant } from './types';\n\nexport interface EntityProps extends React.ComponentPropsWithoutRef<'div'> {\n variant?: EntityVariant;\n initialExpanded?: boolean;\n disabled?: boolean;\n}\n\nexport const Entity = ({\n className,\n variant = 'initial',\n initialExpanded = false,\n disabled = false,\n ...props\n}: EntityProps) => {\n const [expanded, setExpanded] = useState(initialExpanded);\n\n return (\n <EntityProvider value={{ expanded, setExpanded, variant, disabled }}>\n <div className={className} {...props} />\n </EntityProvider>\n );\n};\n\nexport const EntityTriggerClass = twMerge(\n 'mastra:aria-disabled:cursor-not-allowed mastra:aria-disabled:bg-surface5 mastra:aria-disabled:text-text3',\n 'mastra:aria-expanded:rounded-b-none mastra:aria-expanded:border-b-0',\n 'mastra:bg-surface3 mastra:text-text6 mastra:hover:bg-surface4 mastra:active:bg-surface5',\n 'mastra:rounded-lg mastra:py-2 mastra:px-4 mastra:border mastra:border-border1',\n 'mastra:cursor-pointer mastra:inline-flex mastra:items-center mastra:gap-1 mastra:font-mono',\n);\n\nexport const EntityTriggerVariantClasses: Record<EntityVariant, string> = {\n agent: 'mastra:[&_svg.mastra-icon]:text-accent1',\n workflow: 'mastra:[&_svg.mastra-icon]:text-accent3',\n tool: 'mastra:[&_svg.mastra-icon]:text-accent6',\n memory: 'mastra:[&_svg.mastra-icon]:text-accent2',\n initial: 'mastra:[&_svg.mastra-icon]:text-text3',\n};\n\nexport const EntityTrigger = ({ className, children, ...props }: React.ComponentPropsWithoutRef<'button'>) => {\n const { expanded, setExpanded, variant, disabled } = useEntity();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n setExpanded(!expanded);\n props?.onClick?.(e);\n };\n\n return (\n <button\n className={className || twMerge(EntityTriggerClass, !disabled && EntityTriggerVariantClasses[variant])}\n {...props}\n onClick={handleClick}\n aria-expanded={expanded}\n aria-disabled={disabled}\n >\n {children}\n </button>\n );\n};\n\nexport const EntityContentClass = twMerge(\n 'mastra:space-y-4',\n 'mastra:rounded-lg mastra:rounded-tl-none mastra:p-4 mastra:border mastra:border-border1 mastra:-mt-[0.5px]',\n 'mastra:bg-surface3 mastra:text-text6',\n);\n\nexport const EntityContent = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n const { expanded } = useEntity();\n\n if (!expanded) return null;\n\n return <div className={className || EntityContentClass} {...props} />;\n};\n\nexport const EntityCaret = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n const { expanded } = useEntity();\n\n return (\n <Icon>\n <ChevronDownIcon\n className={twMerge(\n `mastra:text-text3 mastra:transition-transform mastra:duration-200 mastra:ease-in-out`,\n expanded ? 'mastra:rotate-0' : 'mastra:-rotate-90',\n className,\n )}\n {...props}\n />\n </Icon>\n );\n};\n","import { twMerge } from 'tailwind-merge';\n\nexport const ToolApprovalClass = twMerge(\n 'mastra:rounded-lg mastra:border mastra:border-border1 mastra:max-w-1/2 mastra:mt-2',\n 'mastra:bg-surface3 mastra:text-text6',\n);\n\nexport const ToolApproval = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalClass} {...props} />;\n};\n\nexport const ToolApprovalTitleClass = twMerge('mastra:text-text6 mastra:inline-flex mastra:items-center mastra:gap-1');\nexport const ToolApprovalTitle = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalTitleClass} {...props} />;\n};\n\nexport const ToolApprovalHeaderClass = twMerge(\n 'mastra:flex mastra:justify-between mastra:items-center mastra:gap-2',\n 'mastra:border-b mastra:border-border1 mastra:px-4 mastra:py-2',\n);\nexport const ToolApprovalHeader = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalHeaderClass} {...props} />;\n};\n\nexport const ToolApprovalContentClass = twMerge('mastra:text-text6 mastra:p-4');\nexport const ToolApprovalContent = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalContentClass} {...props} />;\n};\n\nexport const ToolApprovalActionsClass = twMerge('mastra:flex mastra:gap-2 mastra:items-center');\nexport const ToolApprovalActions = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalActionsClass} {...props} />;\n};\n","import type { ElementType } from 'react';\n\nexport const EntryClass = 'mastra:space-y-2';\nexport const Entry = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || EntryClass} {...props} />;\n};\n\ntype EntryTitleProps = React.ComponentPropsWithoutRef<'div'> & {\n as?: ElementType;\n};\n\nexport const EntryTitleClass = 'mastra:font-mono mastra:text-sm mastra:text-text3';\nexport const EntryTitle = ({ className, as: Root = 'h3', ...props }: EntryTitleProps) => {\n return <Root className={className || EntryTitleClass} {...props} />;\n};\n","import type { TooltipTriggerProps, TooltipContentProps } from '@radix-ui/react-tooltip';\nimport {\n TooltipTrigger as RTooltipTrigger,\n TooltipProvider as RTooltipProvider,\n Root as RTooltipRoot,\n TooltipPortal as RTooltipPortal,\n TooltipContent as RTooltipContent,\n} from '@radix-ui/react-tooltip';\n\nexport interface TooltipProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n}\n\nexport const Tooltip = ({ children }: TooltipProps) => {\n return (\n <RTooltipProvider>\n <RTooltipRoot>{children}</RTooltipRoot>\n </RTooltipProvider>\n );\n};\n\nexport const TooltipContentClass =\n 'mastra:bg-surface4 mastra:text-text6 mastra mastra:rounded-lg mastra:py-1 mastra:px-2 mastra:text-xs mastra:border mastra:border-border1 mastra-tooltip-enter';\nexport const TooltipContent = ({ children, className, ...props }: TooltipContentProps) => {\n return (\n <RTooltipPortal>\n <RTooltipContent className={className || TooltipContentClass} {...props}>\n {children}\n </RTooltipContent>\n </RTooltipPortal>\n );\n};\n\nexport const TooltipTrigger = (props: TooltipTriggerProps) => {\n return <RTooltipTrigger {...props} asChild />;\n};\n","import { twMerge } from 'tailwind-merge';\nimport type { IconProps } from '../Icon/Icon';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../Tooltip/Tooltip';\n\nexport interface IconButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n children: React.ReactNode;\n tooltip: React.ReactNode;\n size?: IconProps['size'];\n}\n\nexport const IconButtonClass =\n 'mastra:text-text3 mastra:hover:text-text6 mastra:active:text-text6 mastra:hover:bg-surface4 mastra:active:bg-surface5 mastra:rounded-md mastra:cursor-pointer';\n\nexport const IconButton = ({ children, tooltip, size = 'md', className, ...props }: IconButtonProps) => {\n return (\n <Tooltip>\n <TooltipTrigger>\n <button\n {...props}\n className={\n className || twMerge(IconButtonClass, size === 'md' && 'mastra:p-0.5', size === 'lg' && 'mastra:p-1')\n }\n >\n <Icon size={size}>{children}</Icon>\n </button>\n </TooltipTrigger>\n\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n","import { toJsxRuntime } from 'hast-util-to-jsx-runtime';\nimport type { JSX } from 'react';\nimport { Fragment } from 'react';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { codeToHast } from 'shiki/bundle/web';\n\nexport async function highlight(code: string, lang: BundledLanguage) {\n const out = await codeToHast(code, {\n lang,\n theme: 'dracula-soft',\n });\n\n return toJsxRuntime(out, {\n Fragment,\n jsx,\n jsxs,\n }) as JSX.Element;\n}\n","import { CheckIcon, CopyIcon } from 'lucide-react';\nimport type { JSX } from 'react';\nimport { useLayoutEffect, useState } from 'react';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { IconButton } from '../IconButton/IconButton';\nimport { highlight } from './highlight';\n\nexport interface CodeBlockProps {\n code: string;\n language: BundledLanguage;\n className?: string;\n cta?: React.ReactNode;\n}\n\nexport const CodeBlockClass =\n 'mastra:rounded-lg mastra:[&>pre]:p-4 mastra:overflow-hidden mastra:[&>pre]:!bg-surface4 mastra:[&>pre>code]:leading-5 mastra:relative';\n\nexport const CodeBlock = ({ code, language, className, cta }: CodeBlockProps) => {\n const [nodes, setNodes] = useState<JSX.Element | null>(null);\n\n useLayoutEffect(() => {\n void highlight(code, language).then(setNodes);\n }, [language]);\n\n return (\n <div className={className || CodeBlockClass}>\n {nodes ?? null}\n {cta}\n </div>\n );\n};\n\nexport interface CodeCopyButtonProps {\n code: string;\n}\n\nexport const CodeCopyButton = ({ code }: CodeCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const handleCopy = () => {\n void navigator.clipboard.writeText(code);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n };\n return (\n <div className=\"mastra:absolute mastra:top-2 mastra:right-2\">\n <IconButton tooltip=\"Copy\" onClick={handleCopy}>\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n );\n};\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const AgentIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.5 15C10.3565 15 12.137 14.2625 13.4497 12.9497C14.7625 11.637 15.5 9.85652 15.5 8C15.5 6.14348 14.7625 4.36301 13.4497 3.05025C12.137 1.7375 10.3565 1 8.5 1C6.64348 1 4.86301 1.7375 3.55025 3.05025C2.2375 4.36301 1.5 6.14348 1.5 8C1.5 9.85652 2.2375 11.637 3.55025 12.9497C4.86301 14.2625 6.64348 15 8.5 15ZM5.621 10.879L4.611 11.889C3.84179 11.1198 3.31794 10.1398 3.1057 9.07291C2.89346 8.00601 3.00236 6.90013 3.41864 5.89512C3.83491 4.89012 4.53986 4.03112 5.44434 3.42676C6.34881 2.8224 7.41219 2.49983 8.5 2.49983C9.58781 2.49983 10.6512 2.8224 11.5557 3.42676C12.4601 4.03112 13.1651 4.89012 13.5814 5.89512C13.9976 6.90013 14.1065 8.00601 13.8943 9.07291C13.6821 10.1398 13.1582 11.1198 12.389 11.889L11.379 10.879C11.1004 10.6003 10.7696 10.3792 10.4055 10.2284C10.0414 10.0776 9.6511 9.99995 9.257 10H7.743C7.3489 9.99995 6.95865 10.0776 6.59455 10.2284C6.23045 10.3792 5.89963 10.6003 5.621 10.879Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.5 4C7.96957 4 7.46086 4.21071 7.08579 4.58579C6.71071 4.96086 6.5 5.46957 6.5 6V6.5C6.5 7.03043 6.71071 7.53914 7.08579 7.91421C7.46086 8.28929 7.96957 8.5 8.5 8.5C9.03043 8.5 9.53914 8.28929 9.91421 7.91421C10.2893 7.53914 10.5 7.03043 10.5 6.5V6C10.5 5.46957 10.2893 4.96086 9.91421 4.58579C9.53914 4.21071 9.03043 4 8.5 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const ToolsIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.5605 1.42351C8.0791 0.904904 8.92215 0.906157 9.4395 1.42351L10.6922 2.67617C11.2108 3.19477 11.2095 4.03782 10.6922 4.55517L9.4395 5.80783C8.9209 6.32643 8.07785 6.32518 7.5605 5.80783L6.30784 4.55517C5.78923 4.03656 5.79049 3.19352 6.30784 2.67617L7.5605 1.42351ZM3.17618 5.80783C3.69478 5.28923 4.53782 5.29048 5.05517 5.80783L6.30784 7.0605C6.82644 7.5791 6.82519 8.42214 6.30784 8.93949L5.05517 10.1922C4.53657 10.7108 3.69353 10.7095 3.17618 10.1922L1.92351 8.93949C1.40491 8.42089 1.40616 7.57785 1.92351 7.0605L3.17618 5.80783ZM11.9448 5.80783C12.4634 5.28923 13.3065 5.29048 13.8238 5.80783L15.0765 7.0605C15.5951 7.5791 15.5938 8.42214 15.0765 8.93949L13.8238 10.1922C13.3052 10.7108 12.4622 10.7095 11.9448 10.1922L10.6922 8.93949C10.1736 8.42089 10.1748 7.57785 10.6922 7.0605L11.9448 5.80783ZM7.5605 10.1922C8.0791 9.67355 8.92215 9.67481 9.4395 10.1922L10.6922 11.4448C11.2108 11.9634 11.2095 12.8065 10.6922 13.3238L9.4395 14.5765C8.9209 15.0951 8.07785 15.0938 7.5605 14.5765L6.30784 13.3238C5.78923 12.8052 5.79049 11.9622 6.30784 11.4448L7.5605 10.1922Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const WorkflowIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.24388 2.4018C6.24388 2.0394 6.53767 1.74561 6.90008 1.74561H10.0991C10.4614 1.74561 10.7553 2.0394 10.7553 2.4018V4.57546C10.7553 4.93787 10.4614 5.23166 10.0991 5.23166H9.31982V7.35469L10.0033 9.22664C9.90442 9.20146 9.80035 9.1761 9.6915 9.14986L9.62652 9.13422C9.30473 9.05687 8.92256 8.96501 8.61993 8.84491C8.5819 8.82981 8.54147 8.81292 8.49957 8.79391C8.45767 8.81292 8.41724 8.82981 8.3792 8.84491C8.07657 8.96501 7.6944 9.05687 7.37261 9.13422L7.30763 9.14986C7.19879 9.1761 7.09471 9.20146 6.99577 9.22664L7.67932 7.35469V5.23166H6.90008C6.53767 5.23166 6.24388 4.93787 6.24388 4.57546V2.4018ZM6.99577 9.22664C6.99577 9.22664 6.99578 9.22664 6.99577 9.22664L6.43283 10.7683H6.81806C7.18047 10.7683 7.47426 11.0622 7.47426 11.4245V13.5982C7.47426 13.9606 7.18047 14.2544 6.81806 14.2544H3.61909C3.25668 14.2544 2.96289 13.9606 2.96289 13.5982V11.4245C2.96289 11.0622 3.25668 10.7683 3.61909 10.7683H4.26617C4.2921 10.4663 4.32783 10.1494 4.37744 9.85171C4.43762 9.49063 4.52982 9.08135 4.68998 8.76102C4.93975 8.2615 5.44743 8.01751 5.7771 7.88788C6.14684 7.74249 6.57537 7.63889 6.92317 7.55505C7.24707 7.47696 7.49576 7.41679 7.67932 7.35469L6.99577 9.22664ZM6.43283 10.7683L6.99577 9.22664C6.75846 9.28705 6.55067 9.34646 6.37745 9.41458C6.22784 9.47341 6.1623 9.51712 6.14023 9.53254C6.09752 9.63631 6.04409 9.83055 5.99562 10.1214C5.96201 10.3231 5.93498 10.5439 5.91341 10.7683H6.43283ZM10.0033 9.22664L9.31982 7.35469C9.50338 7.41679 9.75206 7.47696 10.076 7.55505C10.4238 7.63889 10.8523 7.74249 11.2221 7.88788C11.5517 8.01751 12.0594 8.2615 12.3091 8.76102C12.4693 9.08135 12.5615 9.49063 12.6217 9.85171C12.6713 10.1494 12.707 10.4663 12.733 10.7683H13.38C13.7424 10.7683 14.0362 11.0622 14.0362 11.4245V13.5982C14.0362 13.9606 13.7424 14.2544 13.38 14.2544H10.1811C9.81867 14.2544 9.52488 13.9606 9.52488 13.5982V11.4245C9.52488 11.0622 9.81867 10.7683 10.1811 10.7683H10.5663L10.0033 9.22664ZM10.0033 9.22664L10.5663 10.7683H11.0857C11.0642 10.5439 11.0372 10.3231 11.0035 10.1214C10.9551 9.83055 10.9016 9.63631 10.8589 9.53254C10.8369 9.51712 10.7713 9.47341 10.6217 9.41458C10.4485 9.34646 10.2407 9.28705 10.0033 9.22664Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import type { HTMLAttributes } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport interface MessageProps extends HTMLAttributes<HTMLDivElement> {\n position: 'left' | 'right';\n}\n\nexport const MessageClass = 'mastra:flex mastra:flex-col mastra:w-full mastra:py-4 mastra:gap-2 mastra:group';\nexport const Message = ({ position, className, children, ...props }: MessageProps) => {\n return (\n <div\n className={\n className ||\n twMerge(\n MessageClass,\n position === 'left'\n ? ''\n : 'mastra:items-end mastra:[&_.mastra-message-content]:bg-surface4 mastra:[&_.mastra-message-content]:px-4',\n )\n }\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport interface MessageContentProps extends HTMLAttributes<HTMLDivElement> {\n isStreaming?: boolean;\n}\nexport const MessageContentClass =\n 'mastra:max-w-4/5 mastra:py-2 mastra:text-text6 mastra:rounded-lg mastra-message-content mastra:text-md';\nexport const MessageContent = ({ children, className, isStreaming, ...props }: MessageContentProps) => {\n return (\n <div className={className || MessageContentClass} {...props}>\n {children}\n {isStreaming && <MessageStreaming />}\n </div>\n );\n};\n\nexport const MessageActionsClass =\n 'mastra:gap-2 mastra:flex mastra:opacity-0 mastra:group-hover:opacity-100 mastra:group-focus-within:opacity-100 mastra:items-center';\nexport const MessageActions = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n return (\n <div className={className || MessageActionsClass} {...props}>\n {children}\n </div>\n );\n};\n\nexport const MessageUsagesClass = 'mastra:flex mastra:gap-2 mastra:items-center';\nexport const MessageUsages = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n return (\n <div className={className || MessageUsagesClass} {...props}>\n {children}\n </div>\n );\n};\n\nexport const MessageUsageClass =\n 'mastra:flex mastra:gap-2 mastra:items-center mastra:font-mono mastra:text-xs mastra:bg-surface3 mastra:rounded-lg mastra:px-2 mastra:py-1';\nexport const MessageUsage = ({ children, className, ...props }: HTMLAttributes<HTMLDListElement>) => {\n return (\n <dl className={className || MessageUsageClass} {...props}>\n {children}\n </dl>\n );\n};\n\nexport const MessageUsageEntryClass = 'mastra:text-text3 mastra:text-xs mastra:flex mastra:gap-1 mastra:items-center';\nexport const MessageUsageEntry = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return (\n <dt className={className || MessageUsageEntryClass} {...props}>\n {children}\n </dt>\n );\n};\n\nexport const MessageUsageValueClass = 'mastra:text-text6 mastra:text-xs';\nexport const MessageUsageValue = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return (\n <dd className={className || MessageUsageValueClass} {...props}>\n {children}\n </dd>\n );\n};\n\nexport const MessageListClass = 'mastra:overflow-y-auto mastra:h-full mastra-list';\n\nexport const MessageList = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n // Force scroll to bottom after DOM update\n const scrollToBottom = () => {\n if (!listRef.current) return;\n listRef.current.scrollTo({ top: listRef.current.scrollHeight, behavior: 'smooth' });\n };\n\n requestAnimationFrame(scrollToBottom);\n });\n\n return (\n <div className={className || MessageListClass} {...props} ref={listRef}>\n {children}\n </div>\n );\n};\n\nexport const MessageStreamingClass =\n 'mastra:inline-block mastra:w-[2px] mastra:h-[1em] mastra:bg-text5 mastra:ml-0.5 mastra:align-text-bottom mastra:animate-pulse';\n\nexport const MessageStreaming = ({ className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return <span className={className || MessageStreamingClass} {...props} />;\n};\n","import type { MastraDBMessage, AIV5Type } from '@mastra/core/agent/message-list';\nimport type { ReactNode } from 'react';\nimport { memo } from 'react';\nimport type { AccumulatorPart, MastraDBMessageMetadata } from '../../lib/mastra-db';\nimport type {\n DataPart,\n DynamicToolPart,\n MessageFactoryPart,\n MessageRenderers,\n MessageRoleRendererProps,\n MessageRoleRenderers,\n MessageStatusRenderers,\n PartByType,\n} from './types';\n\nexport interface MessageFactoryProps extends MessageRenderers {\n /** The message whose `content.parts` are rendered. */\n message: MastraDBMessage;\n /** Optional wrappers keyed off `message.role`. */\n roles?: MessageRoleRenderers;\n /** Optional message-level slots dispatched off `message.content.metadata`. */\n status?: MessageStatusRenderers;\n /** Rendered for any part that has no matching renderer. Defaults to `null`. */\n fallback?: (part: AccumulatorPart | DynamicToolPart) => ReactNode;\n}\n\n/** A part as it actually appears at runtime, including boundary-cast tool parts. */\ntype RuntimePart = MessageFactoryPart;\n\nconst isDynamicToolPart = (part: RuntimePart): part is DynamicToolPart =>\n // `tool-invocation` is the v4 typed discriminant and must NOT be treated as a\n // v5 `tool-${string}` streaming part, even though it shares the `tool-` prefix.\n part.type === 'dynamic-tool' || (part.type.startsWith('tool-') && part.type !== 'tool-invocation');\n\nconst isDataPart = (part: RuntimePart): part is DataPart => part.type.startsWith('data-');\n\n/**\n * Normalize the legacy persisted `type: 'source'` part (nested\n * `source: { id, url, title }`) into the flat `AIV5Type.SourceUrlUIPart` shape\n * the runtime accumulator emits, so the `SourceUrl` renderer receives one\n * stable prop contract regardless of which discriminant produced the citation.\n */\nconst sourceToSourceUrl = (part: PartByType<'source'>): AIV5Type.SourceUrlUIPart => ({\n type: 'source-url',\n sourceId: part.source.id,\n url: part.source.url,\n title: part.source.title,\n providerMetadata: part.providerMetadata,\n});\n\n/**\n * Resolve a stable key for a part so unchanged parts keep their identity across\n * streaming updates (and don't needlessly re-render).\n */\nconst getPartKey = (part: RuntimePart, index: number): string => {\n if (isDynamicToolPart(part)) {\n return part.toolCallId ?? `${part.type}-${index}`;\n }\n switch (part.type) {\n case 'text':\n // Intrinsic cast: the `'text'`-narrowed member is `(v4 text part) | MastraTextPart`;\n // only `MastraTextPart` carries `textId`, so this is an optional structural read.\n return (part as { textId?: string }).textId ?? `text-${index}`;\n case 'reasoning':\n // Intrinsic cast: same as `textId` — only the Mastra reasoning member has `reasoningId`.\n return (part as { reasoningId?: string }).reasoningId ?? `reasoning-${index}`;\n case 'tool-invocation':\n return part.toolInvocation.toolCallId ?? `tool-invocation-${index}`;\n case 'source-url':\n return part.sourceId || `source-url-${index}`;\n case 'source':\n return part.source.id ?? `source-${index}`;\n default:\n break;\n }\n // Intrinsic cast: fallback key over a heterogeneous union whose members do not\n // share an `id` field; an optional structural read is the minimal honest form.\n const id = (part as { id?: string }).id;\n return id ?? `${part.type}-${index}`;\n};\n\n/**\n * Dispatch a single part to the one matching renderer. Only the renderer whose\n * discriminant matches `part.type` is invoked, so unrelated renderers never run\n * for a given part. Returns `fallback?.(part) ?? null` when no renderer matches.\n */\nconst renderPart = (\n part: RuntimePart,\n renderers: MessageRenderers,\n fallback?: MessageFactoryProps['fallback'],\n): ReactNode => {\n // Runtime-only tool parts (`dynamic-tool` / `tool-${string}`) are not in the\n // typed union, so they are dispatched explicitly before the typed switch.\n if (isDynamicToolPart(part)) {\n return renderers.DynamicTool?.(part) ?? fallback?.(part) ?? null;\n }\n\n // `data-${string}` cannot be a `case` label, so match it by prefix first.\n if (isDataPart(part)) {\n return renderers.Data?.(part) ?? fallback?.(part) ?? null;\n }\n\n switch (part.type) {\n case 'text':\n return renderers.Text?.(part) ?? fallback?.(part) ?? null;\n case 'reasoning':\n return renderers.Reasoning?.(part) ?? fallback?.(part) ?? null;\n case 'file':\n return renderers.File?.(part) ?? fallback?.(part) ?? null;\n case 'step-start':\n // `step-start` is an internal step-framing marker with no user-facing\n // content. Absent an explicit opt-in renderer it renders nothing and is\n // intentionally NOT routed to `fallback`.\n return renderers.StepStart?.(part) ?? null;\n case 'tool-invocation':\n return renderers.ToolInvocation?.(part) ?? fallback?.(part) ?? null;\n case 'source':\n // Legacy nested `type: 'source'` part — normalize to the flat shape the\n // `SourceUrl` renderer expects so both discriminants share one contract.\n return renderers.SourceUrl?.(sourceToSourceUrl(part)) ?? fallback?.(part) ?? null;\n case 'source-url':\n // Flat runtime/V5 citation part emitted by the accumulator.\n return renderers.SourceUrl?.(part) ?? fallback?.(part) ?? null;\n case 'source-document':\n return renderers.SourceDocument?.(part) ?? fallback?.(part) ?? null;\n default: {\n // Compile-time exhaustiveness: if a new TYPED part discriminant is added\n // to the union and not handled above, this assignment fails to compile.\n const _exhaustive: never = part;\n void _exhaustive;\n // Runtime-only / unrecognized parts degrade gracefully.\n return fallback?.(part) ?? null;\n }\n }\n};\n\ninterface PartRendererProps {\n part: RuntimePart;\n renderers: MessageRenderers;\n fallback?: MessageFactoryProps['fallback'];\n}\n\n/**\n * Memoized per-part renderer. Keeping each part isolated means a streaming\n * update to one part does not re-render the completed parts around it.\n */\nconst PartRenderer = memo(({ part, renderers, fallback }: PartRendererProps) => (\n <>{renderPart(part, renderers, fallback)}</>\n));\nPartRenderer.displayName = 'PartRenderer';\n\n/**\n * Concatenate the text of every `text` part into a single string. Used as the\n * body forwarded to the replacement (`Tripwire`/`Warning`/`Error`) and adjacent\n * (`Task`) status slots, so consumers don't re-derive it from parts.\n */\nconst joinText = (parts: RuntimePart[]): string =>\n parts\n .filter((part): part is PartByType<'text'> => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n/**\n * Normalize the two task-completion metadata fields into one\n * `{ passed, suppressFeedback }` verdict, or `undefined` when neither is set.\n * `completionResult` (network mode) takes precedence; `isTaskCompleteResult`\n * (supervisor mode) is the fallback. Both share the same persisted shape.\n */\nconst resolveTaskVerdict = (\n metadata: MastraDBMessageMetadata | undefined,\n): { passed: boolean; suppressFeedback?: boolean } | undefined => {\n const verdict = metadata?.completionResult ?? metadata?.isTaskCompleteResult;\n if (!verdict) return undefined;\n return { passed: !!verdict.passed, suppressFeedback: verdict.suppressFeedback };\n};\n\nconst roleRendererFor = (\n role: MastraDBMessage['role'],\n roles?: MessageRoleRenderers,\n): ((props: MessageRoleRendererProps) => ReactNode) | undefined => {\n switch (role) {\n case 'user':\n return roles?.User;\n case 'assistant':\n return roles?.Assistant;\n case 'system':\n return roles?.System;\n case 'signal':\n return roles?.Signal;\n default:\n return undefined;\n }\n};\n\nconst MessageFactoryComponent = ({ message, roles, status, fallback, ...renderers }: MessageFactoryProps) => {\n // `MastraMessagePart[]` widens into `RuntimePart[]` (`AccumulatorPart` is a\n // member of `MessageFactoryPart`), so no cast is needed here.\n const parts: RuntimePart[] = message.content.parts ?? [];\n // Intrinsic cast: core types `content.metadata` as `Record<string, unknown>`\n // (message-list/state/types.ts), so narrowing to the SDK's typed metadata\n // shape requires a cast. This matches the convention used across the accumulator.\n const metadata = message.content.metadata as MastraDBMessageMetadata | undefined;\n\n // Replacement status slots: when the message-level status matches and a slot\n // is provided, the slot renders *instead of* the parts walk. If the status\n // matches but no slot is provided, fall through to the normal parts walk.\n let content: ReactNode;\n if (metadata?.status === 'tripwire' && status?.Tripwire) {\n content = status.Tripwire({ text: joinText(parts), tripwire: metadata.tripwire, message });\n } else if (metadata?.status === 'warning' && status?.Warning) {\n content = status.Warning({ text: joinText(parts), message });\n } else if (metadata?.status === 'error' && status?.Error) {\n content = status.Error({ text: joinText(parts), message });\n } else {\n content = (\n <>\n {parts.map((part, index) => (\n <PartRenderer key={getPartKey(part, index)} part={part} renderers={renderers} fallback={fallback} />\n ))}\n </>\n );\n\n // Wrapping `Pending` slot: when the optimistic user bubble is still\n // \"sending\", wrap the parts walk so the consumer can apply a sending style\n // without the message disappearing from the list.\n if (metadata?.status === 'pending' && status?.Pending) {\n content = status.Pending({ children: content, text: joinText(parts), message });\n }\n\n // Adjacent `Task` slot: when a completion verdict exists it renders after\n // the parts. The factory always invokes `Task` when a verdict is present —\n // it does not filter on `suppressFeedback` (the consumer decides).\n const verdict = resolveTaskVerdict(metadata);\n if (verdict && status?.Task) {\n content = (\n <>\n {content}\n {status.Task({ ...verdict, text: joinText(parts), message })}\n </>\n );\n }\n }\n\n const RoleWrapper = roleRendererFor(message.role, roles);\n if (RoleWrapper) {\n return <>{RoleWrapper({ message, children: content })}</>;\n }\n\n return <>{content}</>;\n};\n\n/**\n * Renders a single {@link MastraDBMessage} by dispatching each part in\n * `content.parts` to an optional, type-safe, per-part-type render function.\n * Only the renderer matching a part's `type` is invoked, and each renderer\n * receives fully narrowed props.\n */\nexport const MessageFactory = memo(MessageFactoryComponent);\nMessageFactory.displayName = 'MessageFactory';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/react",
3
- "version": "1.3.3-alpha.0",
3
+ "version": "1.3.3-alpha.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mastra-ai/mastra.git",
@@ -26,6 +26,16 @@
26
26
  "default": "./dist/index.cjs"
27
27
  }
28
28
  },
29
+ "./ui": {
30
+ "import": {
31
+ "types": "./dist/ui/index.d.ts",
32
+ "default": "./dist/ui/index.js"
33
+ },
34
+ "require": {
35
+ "types": "./dist/ui/index.d.ts",
36
+ "default": "./dist/ui/index.cjs"
37
+ }
38
+ },
29
39
  "./styles.css": "./dist/react.css"
30
40
  },
31
41
  "files": [
@@ -39,7 +49,7 @@
39
49
  "lucide-react": "^0.522.0",
40
50
  "shiki": "^1.29.2",
41
51
  "tailwind-merge": "^3.5.0",
42
- "@mastra/client-js": "1.35.0-alpha.0"
52
+ "@mastra/client-js": "1.35.0-alpha.2"
43
53
  },
44
54
  "peerDependencies": {
45
55
  "@mastra/core": ">=1.8.0-0 <2.0.0-0",
@@ -64,14 +74,14 @@
64
74
  "react-dom": "^19.2.5",
65
75
  "storybook": "^9.1.20",
66
76
  "tailwindcss": "^4.3.3",
67
- "tsup": "^8.5.1",
77
+ "tsdown": "0.22.9",
68
78
  "typescript": "^6.0.3",
69
79
  "vite": "^7.3.1",
70
80
  "vitest": "4.1.10",
71
81
  "zod": "^3.25.76",
72
82
  "@internal/lint": "0.0.117",
73
- "@internal/types-builder": "0.0.92",
74
- "@mastra/core": "1.54.0-alpha.0"
83
+ "@mastra/core": "1.54.0-alpha.2",
84
+ "@internal/types-builder": "0.0.92"
75
85
  },
76
86
  "eslintConfig": {
77
87
  "extends": [
@@ -85,9 +95,9 @@
85
95
  "lint": "oxlint . && eslint .",
86
96
  "lint:fix": "oxlint --fix . && eslint --fix .",
87
97
  "build": "echo 'Use turbo to run build'",
88
- "build:js": "tsup --config tsup.config.ts",
98
+ "build:js": "tsdown --config tsdown.config.ts",
89
99
  "build:css": "tailwindcss -i src/ui/index.css -o dist/react.css",
90
- "dev": "tsup --config tsup.config.ts --watch",
100
+ "dev": "tsdown --config tsdown.config.ts --watch",
91
101
  "test": "vitest",
92
102
  "test:unit": "vitest run",
93
103
  "storybook": "storybook dev -p 6006",