@anvia/react-ui 1.0.0-rc.1 → 1.0.0-rc.11
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.
- package/README.md +52 -39
- package/dist/attachment/index.d.ts +5 -5
- package/dist/attachment/index.js +4 -4
- package/dist/{attachment-BP597fV3.d.ts → attachment-mbjsroli.d.ts} +1 -1
- package/dist/chat/index.d.ts +13 -12
- package/dist/chat/index.js +11 -9
- package/dist/chat-tfA570mg.d.ts +86 -0
- package/dist/{chunk-7RMRM7W3.js → chunk-647LAYRV.js} +90 -65
- package/dist/chunk-647LAYRV.js.map +1 -0
- package/dist/chunk-6XOJFLX4.js +22 -0
- package/dist/chunk-6XOJFLX4.js.map +1 -0
- package/dist/chunk-CKA4CE26.js +25 -0
- package/dist/chunk-CKA4CE26.js.map +1 -0
- package/dist/{chunk-JWZDNM5D.js → chunk-CRXNFZRW.js} +145 -125
- package/dist/chunk-CRXNFZRW.js.map +1 -0
- package/dist/{chunk-7HR34SOF.js → chunk-CVXLQCDI.js} +13 -21
- package/dist/chunk-CVXLQCDI.js.map +1 -0
- package/dist/{chunk-ULGJLLZE.js → chunk-F6AKBUO3.js} +12 -12
- package/dist/chunk-F6AKBUO3.js.map +1 -0
- package/dist/{chunk-FABSIZZ7.js → chunk-HWJIMLHC.js} +97 -90
- package/dist/chunk-HWJIMLHC.js.map +1 -0
- package/dist/{chunk-SBYUKODG.js → chunk-MISX4WUT.js} +10 -15
- package/dist/chunk-MISX4WUT.js.map +1 -0
- package/dist/{chunk-R3NA6BWW.js → chunk-OQE6SHZE.js} +54 -56
- package/dist/chunk-OQE6SHZE.js.map +1 -0
- package/dist/{chunk-VEYJNQVW.js → chunk-S4XLE2RN.js} +11 -16
- package/dist/chunk-S4XLE2RN.js.map +1 -0
- package/dist/{chunk-43U2XQP2.js → chunk-SOG2GVE4.js} +69 -25
- package/dist/chunk-SOG2GVE4.js.map +1 -0
- package/dist/{chunk-56CV6S76.js → chunk-UCBAG42A.js} +9 -21
- package/dist/chunk-UCBAG42A.js.map +1 -0
- package/dist/completion/index.d.ts +4 -3
- package/dist/completion/index.js +4 -4
- package/dist/completion-input-DHlwrhxB.d.ts +24 -0
- package/dist/{composer-CzsbDFPt.d.ts → composer-CigccTLT.d.ts} +19 -7
- package/dist/human-input/index.d.ts +10 -8
- package/dist/human-input/index.js +5 -4
- package/dist/human-input-D7jgYsfM.d.ts +27 -0
- package/dist/image/index.d.ts +6 -6
- package/dist/image/index.js +4 -4
- package/dist/{image-DanUxcl2.d.ts → image-VZv6Ddsn.d.ts} +1 -1
- package/dist/index.d.ts +19 -18
- package/dist/index.js +60 -64
- package/dist/index.js.map +1 -1
- package/dist/message/index.d.ts +12 -11
- package/dist/message/index.js +8 -6
- package/dist/{message-CkEnKhAn.d.ts → message-CNRnZQwU.d.ts} +1 -1
- package/dist/selection-toolbar/index.d.ts +2 -2
- package/dist/selection-toolbar/index.js +5 -4
- package/dist/shared.d.ts +9 -8
- package/dist/shared.js +1 -1
- package/dist/stream/index.d.ts +2 -0
- package/dist/stream/index.js +1 -1
- package/dist/{thread-uEm8hH0s.d.ts → thread-Bz6-1zaJ.d.ts} +1 -0
- package/dist/thread-list/index.d.ts +3 -3
- package/dist/thread-list/index.js +6 -6
- package/package.json +17 -17
- package/dist/chat-B3kucz1w.d.ts +0 -13
- package/dist/chunk-43U2XQP2.js.map +0 -1
- package/dist/chunk-56CV6S76.js.map +0 -1
- package/dist/chunk-7HR34SOF.js.map +0 -1
- package/dist/chunk-7RMRM7W3.js.map +0 -1
- package/dist/chunk-FABSIZZ7.js.map +0 -1
- package/dist/chunk-JWZDNM5D.js.map +0 -1
- package/dist/chunk-R3NA6BWW.js.map +0 -1
- package/dist/chunk-SBYUKODG.js.map +0 -1
- package/dist/chunk-ULGJLLZE.js.map +0 -1
- package/dist/chunk-VEYJNQVW.js.map +0 -1
- package/dist/completion-input-WjK6kUyG.d.ts +0 -23
- package/dist/human-input-CydeYm_7.d.ts +0 -20
- package/dist/stream/styles.css +0 -17
- package/dist/styles.css +0 -130
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/message/actions.tsx","../src/message/entity.tsx","../src/message/parts.tsx","../src/strict-json.ts","../src/entities.ts","../src/message/markdown-entities.ts","../src/message/root.tsx","../src/message/index.ts"],"sourcesContent":["import { forwardRef, type MouseEvent, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useChatContext, useMessage } from \"../contexts\";\nimport { messageText } from \"../format\";\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\nconst MessageActions = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageActions(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? (\n <>\n <MessageCopy />\n <MessageRegenerate />\n </>\n ),\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype MessageCopyState = \"idle\" | \"copied\" | \"error\";\n\nconst MessageCopy = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function MessageCopy(\n { onClick, ...props },\n ref,\n) {\n const { message } = useMessage();\n const [copyState, setCopyState] = useState<MessageCopyState>(\"idle\");\n const text = messageText(message);\n const previousTextRef = useRef(text);\n const disabled = props.disabled ?? text.length === 0;\n\n useEffect(() => {\n if (previousTextRef.current !== text) {\n previousTextRef.current = text;\n setCopyState(\"idle\");\n }\n }, [text]);\n\n const handleClick = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n const writeText = navigator.clipboard?.writeText;\n if (writeText === undefined) {\n setCopyState(\"error\");\n return;\n }\n try {\n await writeText.call(navigator.clipboard, text);\n setCopyState(\"copied\");\n } catch {\n setCopyState(\"error\");\n }\n },\n [disabled, onClick, text],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Copy\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": copyState,\n } as PrimitiveProps<\"button\">,\n ref,\n );\n});\n\nconst MessageRegenerate = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function MessageRegenerate({ onClick, ...props }, ref) {\n const chat = useChatContext();\n const { message } = useMessage();\n const latestAssistantMessage = [...chat.messages]\n .reverse()\n .find((item) => item.role === \"assistant\");\n const disabled =\n props.disabled ??\n (chat.status === \"submitted\" ||\n chat.status === \"streaming\" ||\n message.role !== \"assistant\" ||\n latestAssistantMessage?.id !== message.id);\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void chat.regenerate();\n },\n [chat, disabled, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Regenerate\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"idle\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\nexport { MessageActions, MessageCopy, MessageRegenerate };\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport type { ComposerEntity } from \"../contexts\";\n\nexport type MessageEntityProps = HTMLAttributes<HTMLSpanElement> & {\n entity: ComposerEntity;\n};\n\nconst MessageEntity = forwardRef<HTMLSpanElement, MessageEntityProps>(function MessageEntity(\n { children, entity, ...props },\n ref,\n) {\n return (\n <span {...props} data-role=\"entity\" ref={ref}>\n {children ?? entity.text}\n </span>\n );\n});\n\nexport { MessageEntity };\n","import type { UIAttachment, UIMessagePart } from \"@anvia/client\";\nimport {\n type SmoothStreamItemAdapter,\n type StreamSmoothingLifecycle,\n useSmoothStreamItems,\n useSmoothStreamText,\n} from \"@anvia/react\";\nimport {\n type ComponentPropsWithoutRef,\n createElement,\n forwardRef,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport type { Components, Options as ReactMarkdownOptions } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { AttachmentPrimitive } from \"../attachment/index\";\nimport type { ComposerEntity } from \"../contexts\";\nimport {\n InternalAttachmentProvider,\n InternalMessagePartProvider,\n useMessage,\n useMessagePart,\n useOptionalMessagePart,\n} from \"../contexts\";\nimport { entitiesForTextSegment, messageTextLayout, validComposerEntities } from \"../entities\";\nimport { stringifyValue } from \"../format\";\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { StreamMarkdown } from \"../stream\";\nimport { MessageEntity } from \"./entity\";\nimport { createMessageEntityRemarkPlugin, messageEntityRehypeOptions } from \"./markdown-entities\";\n\ntype MessagePartChildren = ReactNode | ((part: UIMessagePart) => ReactNode);\nexport type MessagePartsFilter = (part: UIMessagePart) => boolean;\nexport type MessageToolPart = Extract<UIMessagePart, { type: \"tool\" }>;\ntype MessageToolChildren = ReactNode | ((part: MessageToolPart) => ReactNode);\nexport type MessageToolRenderWhen = \"always\" | \"pending\" | \"settled\";\nexport type MessageAttachmentPart = Extract<UIMessagePart, { type: \"attachment\" }>;\ntype MessageAttachmentChildren = ReactNode | ((attachment: UIAttachment) => ReactNode);\n\nexport type MessageStreamOptions = StreamSmoothingLifecycle;\n\ntype MessageStreamProps = {\n stream?: MessageStreamOptions;\n};\n\nconst messagePartStreamAdapter: SmoothStreamItemAdapter<UIMessagePart> = {\n getKey: (part) => part.id,\n getText: (part) => (part.type === \"text\" || part.type === \"reasoning\" ? part.text : undefined),\n withText: (part, text) => {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n return part.text === text ? part : { ...part, text };\n }\n return part;\n },\n};\n\ntype MessagePartsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n filter?: MessagePartsFilter;\n} & MessageStreamProps;\n\nconst MessageParts = forwardRef<HTMLDivElement, MessagePartsProps>(function MessageParts(\n { children, filter, stream, ...props },\n ref,\n) {\n const { message } = useMessage();\n const parts = filter === undefined ? message.parts : message.parts.filter(filter);\n if (stream !== undefined) {\n return (\n <SmoothedMessageParts {...props} parts={parts} ref={ref} stream={stream}>\n {children}\n </SmoothedMessageParts>\n );\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderMessagePartNodes(parts, children),\n \"data-role\": \"parts\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype SmoothedMessagePartsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n parts: readonly UIMessagePart[];\n stream: MessageStreamOptions;\n};\n\nconst SmoothedMessageParts = forwardRef<HTMLDivElement, SmoothedMessagePartsProps>(\n function SmoothedMessageParts({ children, parts, stream, ...props }, ref) {\n const streamOptions = {\n adapter: messagePartStreamAdapter,\n isStreaming: stream.isStreaming,\n resetKey: stream.resetKey,\n };\n if (stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamItems(parts, streamOptions);\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderMessagePartNodes(smooth.items, children, smooth.liveItemKey),\n \"data-role\": \"parts\",\n \"data-state\": smooth.isDraining ? \"draining\" : stream.isStreaming ? \"streaming\" : \"idle\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nfunction renderMessagePartNodes(\n parts: readonly UIMessagePart[],\n children: MessagePartChildren | undefined,\n liveItemKey?: string | null,\n): ReactNode[] {\n return parts.map((part) => (\n <InternalMessagePartProvider\n isLive={liveItemKey === part.id}\n key={part.id}\n part={part}\n streamControlled={liveItemKey !== undefined}\n >\n {typeof children === \"function\" ? children(part) : (children ?? <MessagePart />)}\n </InternalMessagePartProvider>\n ));\n}\n\ntype MessagePartProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessagePartChildren;\n};\n\nconst MessagePart = forwardRef<HTMLDivElement, MessagePartProps>(function MessagePart(\n { children, ...props },\n ref,\n) {\n const { part } = useMessagePart();\n const renderedChildren =\n typeof children === \"function\" ? children(part) : (children ?? defaultPart(part));\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": part.type,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype MessageTextProps = PrimitiveProps<\"span\"> & MessageStreamProps;\n\nconst MessageText = forwardRef<HTMLSpanElement, MessageTextProps>(function MessageText(props, ref) {\n const { part, streamControlled } = useMessagePart();\n if (part.type !== \"text\") {\n return null;\n }\n\n return (\n <MessageTextContent\n {...props}\n content={part.text}\n partId={part.id}\n ref={ref}\n streamControlled={streamControlled}\n />\n );\n});\n\ntype MessageTextContentProps = MessageTextProps & {\n content: string;\n partId: string;\n streamControlled: boolean;\n};\n\nconst MessageTextContent = forwardRef<HTMLSpanElement, MessageTextContentProps>(\n function MessageTextContent({ content, partId, stream, streamControlled, ...props }, ref) {\n const ownsStream = stream !== undefined && !streamControlled && props.children === undefined;\n const streamOptions = {\n isStreaming: ownsStream ? stream.isStreaming : false,\n resetKey: ownsStream ? stream.resetKey : partId,\n };\n if (ownsStream && stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamText(content, streamOptions);\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? (ownsStream ? smooth.text : content),\n \"data-role\": \"text\",\n \"data-state\": ownsStream\n ? smooth.isDraining\n ? \"draining\"\n : stream.isStreaming\n ? \"streaming\"\n : \"idle\"\n : undefined,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\ntype MessageMarkdownProps = Omit<PrimitiveProps<\"div\">, \"children\"> &\n MessageStreamProps & {\n children?: string;\n components?: Components;\n renderEntity?: ((entity: ComposerEntity) => ReactNode) | undefined;\n remarkPlugins?: ReactMarkdownOptions[\"remarkPlugins\"];\n };\n\nconst MessageMarkdown = forwardRef<HTMLDivElement, MessageMarkdownProps>(function MessageMarkdown(\n { children, ...props },\n ref,\n) {\n const { message } = useMessage();\n const partContext = useOptionalMessagePart();\n const part = partContext?.part;\n if (part !== undefined && part.type !== \"text\") {\n return null;\n }\n\n const layout = messageTextLayout(message.parts);\n const markdown = children ?? (part?.type === \"text\" ? part.text : layout.text);\n const expectedMarkdown = part?.type === \"text\" ? part.text : layout.text;\n const validEntities =\n children === undefined || children === expectedMarkdown\n ? validComposerEntities(layout.text, message.metadata)\n : [];\n const segment =\n part?.type === \"text\"\n ? layout.segments.find((candidate) => candidate.part.id === part.id)\n : undefined;\n const entities =\n segment === undefined ? validEntities : entitiesForTextSegment(validEntities, segment);\n const lastPart = message.parts.at(-1);\n const liveEligible = part?.type === \"text\" ? lastPart?.id === part.id : lastPart?.type === \"text\";\n\n return (\n <MessageMarkdownContent\n {...props}\n entities={entities}\n liveEligible={liveEligible}\n markdown={markdown}\n ref={ref}\n resetKey={message.id}\n streamControlled={partContext?.streamControlled ?? false}\n streamLive={partContext?.isLive ?? false}\n />\n );\n});\n\ntype MessageMarkdownContentProps = Omit<MessageMarkdownProps, \"children\"> & {\n entities: ComposerEntity[];\n liveEligible: boolean;\n markdown: string;\n resetKey: string;\n streamControlled: boolean;\n streamLive: boolean;\n};\n\nconst MessageMarkdownContent = forwardRef<HTMLDivElement, MessageMarkdownContentProps>(\n function MessageMarkdownContent(\n {\n components,\n renderEntity,\n remarkPlugins,\n entities,\n liveEligible,\n markdown,\n resetKey,\n stream,\n streamControlled,\n streamLive,\n ...props\n },\n ref,\n ) {\n const ownsStream = stream !== undefined && !streamControlled;\n const streamOptions = {\n isStreaming: ownsStream ? stream.isStreaming : false,\n resetKey: ownsStream ? stream.resetKey : resetKey,\n };\n if (ownsStream && stream.flushImmediately !== undefined) {\n Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });\n }\n const smooth = useSmoothStreamText(markdown, streamOptions);\n const renderedMarkdown = ownsStream ? smooth.text : markdown;\n const renderedEntities = useMemo(\n () =>\n entities.length === 0\n ? entities\n : validComposerEntities(renderedMarkdown, {\n composer: { entities },\n }),\n [entities, renderedMarkdown],\n );\n const renderedComponents = useMemo(\n () => markdownComponents(components, renderedEntities, renderEntity),\n [components, renderEntity, renderedEntities],\n );\n const renderedRemarkPlugins = useMemo(\n () =>\n renderedEntities.length === 0\n ? remarkPlugins\n : [\n createMessageEntityRemarkPlugin(renderedMarkdown, renderedEntities),\n ...(remarkPlugins ?? [remarkGfm]),\n ],\n [remarkPlugins, renderedEntities, renderedMarkdown],\n );\n const live = streamControlled\n ? streamLive\n : ownsStream && liveEligible && (stream.isStreaming || smooth.isDraining);\n\n return (\n <StreamMarkdown\n {...props}\n components={renderedComponents}\n content={renderedMarkdown}\n data-state={\n ownsStream && smooth.isDraining\n ? \"draining\"\n : ownsStream && stream.isStreaming\n ? \"streaming\"\n : \"idle\"\n }\n live={live}\n ref={ref}\n remarkPlugins={renderedRemarkPlugins}\n remarkRehypeOptions={\n renderedEntities.length === 0 ? undefined : messageEntityRehypeOptions()\n }\n />\n );\n },\n);\n\nfunction markdownComponents(\n components: Components | undefined,\n entities: ComposerEntity[],\n renderEntity: ((entity: ComposerEntity) => ReactNode) | undefined,\n): Components {\n const consumerSpan = components?.span;\n return {\n code: defaultCodeComponent,\n pre: defaultPreComponent,\n ...components,\n span(spanProps) {\n const internalProps = spanProps as typeof spanProps & {\n \"data-entity-index\"?: string | undefined;\n };\n const entityIndexValue = internalProps[\"data-entity-index\"];\n const entityIndex =\n typeof entityIndexValue === \"string\" && /^\\d+$/.test(entityIndexValue)\n ? Number(entityIndexValue)\n : undefined;\n const entity = entityIndex === undefined ? undefined : entities[entityIndex];\n const consumerProps = { ...internalProps };\n delete consumerProps[\"data-entity-index\"];\n\n if (entity !== undefined) {\n if (renderEntity !== undefined) {\n return renderEntity(entity);\n }\n const entityProps = {\n ...consumerProps,\n \"data-role\": \"entity\",\n };\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, entityProps);\n }\n const { node: _node, ...elementProps } = entityProps;\n return <MessageEntity {...elementProps} entity={entity} />;\n }\n\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, consumerProps);\n }\n const { node: _node, ...elementProps } = consumerProps;\n return <span {...elementProps} />;\n },\n };\n}\n\ntype MessageCodeBlockProps = Omit<PrimitiveProps<\"pre\">, \"children\"> & {\n children?: ReactNode;\n code?: string;\n language?: string;\n};\n\nconst MessageCodeBlock = forwardRef<HTMLPreElement, MessageCodeBlockProps>(\n function MessageCodeBlock({ children, code, language, ...props }, ref) {\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n \"data-role\": \"code-block\",\n children: children ?? (\n <code className={language === undefined ? undefined : `language-${language}`}>\n {code ?? \"\"}\n </code>\n ),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageReasoning = forwardRef<HTMLDetailsElement, PrimitiveProps<\"details\">>(\n function MessageReasoning(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"reasoning\") {\n return null;\n }\n\n return renderPrimitive(\n \"details\",\n {\n ...props,\n children: props.children ?? (\n <>\n <summary>Reasoning</summary>\n <pre>{part.text}</pre>\n </>\n ),\n } as PrimitiveProps<\"details\">,\n ref,\n );\n },\n);\n\ntype MessageToolProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessageToolChildren;\n renderWhen?: MessageToolRenderWhen;\n};\n\nconst MessageTool = forwardRef<HTMLDivElement, MessageToolProps>(function MessageTool(\n { children, renderWhen = \"always\", ...props },\n ref,\n) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || !shouldRenderTool(part, renderWhen)) {\n return null;\n }\n const renderedChildren =\n typeof children === \"function\" ? children(part) : (children ?? defaultToolContent());\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": \"tool\",\n \"data-state\": part.state,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst MessageToolName = forwardRef<HTMLSpanElement, PrimitiveProps<\"span\">>(\n function MessageToolName(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? part.toolName,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\nconst MessageToolStatus = forwardRef<HTMLSpanElement, PrimitiveProps<\"span\">>(\n function MessageToolStatus(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? toolStateLabel(part.state),\n \"data-state\": part.state,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\nconst MessageToolInput = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageToolInput(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.input),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageToolOutput = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageToolOutput(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || part.state !== \"output-available\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.output),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageToolError = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageToolError(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"tool\" || part.state !== \"error\") {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? part.error.message,\n role: props.role ?? \"alert\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype MessageAttachmentProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n children?: MessageAttachmentChildren;\n};\n\nconst MessageAttachment = forwardRef<HTMLDivElement, MessageAttachmentProps>(\n function MessageAttachment({ children, ...props }, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"attachment\") {\n return null;\n }\n const renderedChildren =\n typeof children === \"function\"\n ? children(part.attachment)\n : (children ?? <AttachmentPrimitive.Root />);\n\n return (\n <InternalAttachmentProvider value={{ attachment: part.attachment }}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n children: renderedChildren,\n } as PrimitiveProps<\"div\">,\n ref,\n )}\n </InternalAttachmentProvider>\n );\n },\n);\n\nconst MessageData = forwardRef<HTMLPreElement, PrimitiveProps<\"pre\">>(\n function MessageData(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"data\") {\n return null;\n }\n\n return renderPrimitive(\n \"pre\",\n {\n ...props,\n children: props.children ?? stringifyValue(part.data),\n } as PrimitiveProps<\"pre\">,\n ref,\n );\n },\n);\n\nconst MessageError = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageError(props, ref) {\n const { part } = useMessagePart();\n if (part.type !== \"error\") {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? part.error.message,\n role: props.role ?? \"alert\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nfunction defaultPart(part: UIMessagePart): ReactNode {\n if (part.type === \"text\") {\n return <MessageText />;\n }\n if (part.type === \"reasoning\") {\n return <MessageReasoning />;\n }\n if (part.type === \"tool\") {\n return <MessageTool />;\n }\n if (part.type === \"attachment\") {\n return <MessageAttachment />;\n }\n if (part.type === \"data\") {\n return <MessageData />;\n }\n return <MessageError />;\n}\n\nfunction defaultToolContent(): ReactNode {\n return (\n <>\n <MessageToolName />\n <MessageToolStatus />\n <MessageToolInput />\n <MessageToolOutput />\n <MessageToolError />\n </>\n );\n}\n\nfunction defaultCodeComponent({\n children,\n className,\n node: _node,\n ...props\n}: ComponentPropsWithoutRef<\"code\"> & { node?: unknown }): ReactNode {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n}\n\nfunction defaultPreComponent({\n children,\n node: _node,\n ...props\n}: ComponentPropsWithoutRef<\"pre\"> & { node?: unknown }): ReactNode {\n return <MessageCodeBlock {...props}>{children}</MessageCodeBlock>;\n}\n\nfunction shouldRenderTool(part: MessageToolPart, renderWhen: MessageToolRenderWhen): boolean {\n if (renderWhen === \"always\") {\n return true;\n }\n if (renderWhen === \"pending\") {\n return part.state === \"input-streaming\" || part.state === \"input-available\";\n }\n return part.state === \"output-available\" || part.state === \"error\";\n}\n\nfunction toolStateLabel(state: MessageToolPart[\"state\"]): string {\n if (state === \"output-available\") {\n return \"Done\";\n }\n if (state === \"error\") {\n return \"Error\";\n }\n return \"Running\";\n}\n\nexport {\n MessageAttachment,\n MessageCodeBlock,\n MessageData,\n MessageError,\n MessageMarkdown,\n MessagePart,\n MessageParts,\n MessageReasoning,\n MessageText,\n MessageTool,\n MessageToolError,\n MessageToolInput,\n MessageToolName,\n MessageToolOutput,\n MessageToolStatus,\n};\n","import type { ComposerEntityData } from \"./contexts/composer\";\n\nexport function isComposerEntityData(value: unknown): value is ComposerEntityData {\n return isComposerEntityDataWithAncestors(value, new WeakSet<object>());\n}\n\nfunction isComposerEntityDataWithAncestors(\n value: unknown,\n ancestors: WeakSet<object>,\n): value is ComposerEntityData {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"object\" || ancestors.has(value)) return false;\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (Object.getPrototypeOf(value) !== Array.prototype || !hasOnlyDenseArrayProperties(value)) {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!isComposerEntityDataWithAncestors(value[index], ancestors)) return false;\n }\n return true;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return false;\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (\n descriptor === undefined ||\n !descriptor.enumerable ||\n !(\"value\" in descriptor) ||\n !isComposerEntityDataWithAncestors(descriptor.value, ancestors)\n ) {\n return false;\n }\n }\n return true;\n } catch {\n return false;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction hasOnlyDenseArrayProperties(value: unknown[]): boolean {\n const keys = Reflect.ownKeys(value);\n if (keys.length !== value.length + 1 || keys.at(-1) !== \"length\") return false;\n for (let index = 0; index < value.length; index += 1) {\n const key = String(index);\n if (keys[index] !== key) return false;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === undefined || !descriptor.enumerable || !(\"value\" in descriptor)) {\n return false;\n }\n }\n return true;\n}\n","import type { UIMessagePart } from \"@anvia/client\";\nimport type { ComposerEntity } from \"./contexts/composer\";\nimport { isComposerEntityData } from \"./strict-json\";\n\nexport type MessageTextSegment = {\n part: Extract<UIMessagePart, { type: \"text\" }>;\n from: number;\n to: number;\n};\n\nexport type MessageTextLayout = {\n text: string;\n segments: MessageTextSegment[];\n};\n\nexport function messageTextLayout(parts: readonly UIMessagePart[]): MessageTextLayout {\n const textParts = parts.filter(\n (part): part is Extract<UIMessagePart, { type: \"text\" }> => part.type === \"text\",\n );\n const segments: MessageTextSegment[] = [];\n let offset = 0;\n\n for (const [index, part] of textParts.entries()) {\n const from = offset;\n const to = from + part.text.length;\n segments.push({ part, from, to });\n offset = to + (index === textParts.length - 1 ? 0 : 2);\n }\n\n return {\n text: textParts.map((part) => part.text).join(\"\\n\\n\"),\n segments,\n };\n}\n\nexport function validComposerEntities(text: string, metadata: unknown): ComposerEntity[] {\n const candidates = composerEntityCandidates(metadata);\n const individuallyValid = candidates.flatMap((candidate, index) => {\n const entity = parseComposerEntity(candidate, text);\n return entity === undefined ? [] : [{ entity, index }];\n });\n individuallyValid.sort(\n (left, right) =>\n left.entity.range.from - right.entity.range.from ||\n left.entity.range.to - right.entity.range.to ||\n left.index - right.index,\n );\n\n const overlapping = new Set<number>();\n let groupStart = 0;\n let groupEnd = individuallyValid[0]?.entity.range.to ?? 0;\n let groupHasOverlap = false;\n for (let index = 1; index <= individuallyValid.length; index += 1) {\n const current = individuallyValid[index];\n if (current !== undefined && current.entity.range.from < groupEnd) {\n groupHasOverlap = true;\n groupEnd = Math.max(groupEnd, current.entity.range.to);\n continue;\n }\n if (groupHasOverlap) {\n for (let groupIndex = groupStart; groupIndex < index; groupIndex += 1) {\n const candidate = individuallyValid[groupIndex];\n if (candidate !== undefined) {\n overlapping.add(candidate.index);\n }\n }\n }\n groupStart = index;\n groupEnd = current?.entity.range.to ?? 0;\n groupHasOverlap = false;\n }\n\n return individuallyValid\n .filter((candidate) => !overlapping.has(candidate.index))\n .map((candidate) => candidate.entity);\n}\n\nexport function entitiesForTextSegment(\n entities: ComposerEntity[],\n segment: MessageTextSegment,\n): ComposerEntity[] {\n return entities.flatMap((entity) => {\n if (entity.range.from < segment.from || entity.range.to > segment.to) {\n return [];\n }\n return [\n {\n ...entity,\n range: {\n from: entity.range.from - segment.from,\n to: entity.range.to - segment.from,\n },\n },\n ];\n });\n}\n\nexport function shiftComposerEntityRanges(\n entities: ComposerEntity[],\n offset: number,\n): ComposerEntity[] {\n if (offset === 0) {\n return entities;\n }\n return entities.map((entity) => ({\n ...entity,\n range: {\n from: entity.range.from + offset,\n to: entity.range.to + offset,\n },\n }));\n}\n\nfunction composerEntityCandidates(metadata: unknown): unknown[] {\n if (!isRecord(metadata) || !isRecord(metadata.composer)) {\n return [];\n }\n return Array.isArray(metadata.composer.entities) ? metadata.composer.entities : [];\n}\n\nfunction parseComposerEntity(value: unknown, text: string): ComposerEntity | undefined {\n if (!isRecord(value) || !isRecord(value.range)) {\n return undefined;\n }\n if (\n !isNonEmptyString(value.id) ||\n !isNonEmptyString(value.triggerId) ||\n !isNonEmptyString(value.trigger) ||\n !isNonEmptyString(value.label) ||\n !isNonEmptyString(value.text)\n ) {\n return undefined;\n }\n const { from, to } = value.range;\n if (\n typeof from !== \"number\" ||\n typeof to !== \"number\" ||\n !Number.isInteger(from) ||\n !Number.isInteger(to) ||\n from < 0 ||\n to <= from ||\n to > text.length ||\n text.slice(from, to) !== value.text\n ) {\n return undefined;\n }\n if (value.data !== undefined && !isComposerEntityData(value.data)) return undefined;\n const entity: ComposerEntity = {\n id: value.id,\n triggerId: value.triggerId,\n trigger: value.trigger,\n label: value.label,\n text: value.text,\n range: { from, to },\n };\n if (value.data !== undefined) entity.data = value.data;\n return entity;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { Options as ReactMarkdownOptions } from \"react-markdown\";\nimport type { ComposerEntity } from \"../contexts\";\n\ntype MarkdownPoint = {\n offset?: number | undefined;\n};\n\ntype MarkdownPosition = {\n start: MarkdownPoint;\n end: MarkdownPoint;\n};\n\ntype MarkdownNode = {\n type: string;\n value?: string | undefined;\n children?: MarkdownNode[] | undefined;\n position?: MarkdownPosition | undefined;\n entityIndex?: number | undefined;\n};\n\nconst phrasingParentTypes = new Set([\n \"paragraph\",\n \"heading\",\n \"emphasis\",\n \"strong\",\n \"delete\",\n \"link\",\n \"linkReference\",\n \"tableCell\",\n]);\nconst literalNodeTypes = new Set([\"code\", \"inlineCode\", \"html\", \"yaml\"]);\n\nexport function createMessageEntityRemarkPlugin(markdown: string, entities: ComposerEntity[]) {\n return function messageEntityRemarkPlugin() {\n return (tree: MarkdownNode): void => {\n const rendered = new Set<number>();\n transformNode(tree, markdown, entities, rendered);\n };\n };\n}\n\nexport function messageEntityRehypeOptions(): ReactMarkdownOptions[\"remarkRehypeOptions\"] {\n return {\n handlers: {\n messageEntity(_state: unknown, node: MarkdownNode) {\n const entityIndex = node.entityIndex;\n return {\n type: \"element\",\n tagName: \"span\",\n properties: {\n dataEntityIndex: entityIndex === undefined ? \"\" : String(entityIndex),\n },\n children: [{ type: \"text\", value: node.value ?? \"\" }],\n };\n },\n } as never,\n };\n}\n\nfunction transformNode(\n node: MarkdownNode,\n markdown: string,\n entities: ComposerEntity[],\n rendered: Set<number>,\n): void {\n if (literalNodeTypes.has(node.type) || node.children === undefined) {\n return;\n }\n\n for (const child of node.children) {\n transformNode(child, markdown, entities, rendered);\n }\n if (!phrasingParentTypes.has(node.type)) {\n return;\n }\n\n for (let entityIndex = entities.length - 1; entityIndex >= 0; entityIndex -= 1) {\n if (rendered.has(entityIndex)) {\n continue;\n }\n const entity = entities[entityIndex];\n if (entity !== undefined && replaceEntity(node, markdown, entity, entityIndex)) {\n rendered.add(entityIndex);\n }\n }\n}\n\nfunction replaceEntity(\n parent: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n entityIndex: number,\n): boolean {\n const children = parent.children;\n if (children === undefined) {\n return false;\n }\n const firstIndex = children.findIndex((child) => containsStart(child, entity.range.from));\n const lastIndex = findLastIndex(children, (child) => containsEnd(child, entity.range.to));\n if (firstIndex < 0 || lastIndex < firstIndex) {\n return false;\n }\n\n const first = children[firstIndex];\n const last = children[lastIndex];\n const firstPosition = offsets(first);\n const lastPosition = offsets(last);\n if (\n first === undefined ||\n last === undefined ||\n firstPosition === undefined ||\n lastPosition === undefined ||\n entity.range.from < firstPosition.from ||\n entity.range.to > lastPosition.to\n ) {\n return false;\n }\n\n if (firstIndex === lastIndex && literalNodeTypes.has(first.type)) {\n return false;\n }\n const before = contentBefore(first, markdown, entity);\n const after = contentAfter(last, markdown, entity);\n if (before === undefined || after === undefined) {\n return false;\n }\n\n const replacement: MarkdownNode[] = [];\n replacement.push(...before);\n replacement.push({\n type: \"messageEntity\",\n value: entity.text,\n entityIndex,\n position: {\n start: { offset: entity.range.from },\n end: { offset: entity.range.to },\n },\n });\n replacement.push(...after);\n children.splice(firstIndex, lastIndex - firstIndex + 1, ...replacement);\n return true;\n}\n\nfunction contentBefore(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): MarkdownNode[] | undefined {\n const position = offsets(node);\n if (position === undefined) {\n return undefined;\n }\n if (entity.range.from === position.from) {\n return [];\n }\n if (node.type !== \"text\" || node.value === undefined) {\n if (node.children === undefined || literalNodeTypes.has(node.type)) {\n return undefined;\n }\n const childIndex = node.children.findIndex((child) => containsStart(child, entity.range.from));\n const child = node.children[childIndex];\n if (child === undefined) {\n return undefined;\n }\n const childContent = contentBefore(child, markdown, entity);\n return childContent === undefined\n ? undefined\n : [...node.children.slice(0, childIndex), ...childContent];\n }\n const split = textValueRange(node, markdown, entity);\n if (split === undefined) {\n return undefined;\n }\n return [\n {\n ...node,\n value: node.value.slice(0, split.from),\n position: {\n start: node.position?.start ?? {},\n end: { offset: entity.range.from },\n },\n },\n ];\n}\n\nfunction contentAfter(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): MarkdownNode[] | undefined {\n const position = offsets(node);\n if (position === undefined) {\n return undefined;\n }\n if (entity.range.to === position.to) {\n return [];\n }\n if (node.type !== \"text\" || node.value === undefined) {\n if (node.children === undefined || literalNodeTypes.has(node.type)) {\n return undefined;\n }\n const childIndex = findLastIndex(node.children, (child) => containsEnd(child, entity.range.to));\n const child = node.children[childIndex];\n if (child === undefined) {\n return undefined;\n }\n const childContent = contentAfter(child, markdown, entity);\n return childContent === undefined\n ? undefined\n : [...childContent, ...node.children.slice(childIndex + 1)];\n }\n const split = textValueRange(node, markdown, entity);\n if (split === undefined) {\n return undefined;\n }\n return [\n {\n ...node,\n value: node.value.slice(split.to),\n position: {\n start: { offset: entity.range.to },\n end: node.position?.end ?? {},\n },\n },\n ];\n}\n\nfunction textValueRange(\n node: MarkdownNode,\n markdown: string,\n entity: ComposerEntity,\n): { from: number; to: number } | undefined {\n const position = offsets(node);\n const value = node.value;\n if (position === undefined || value === undefined) {\n return undefined;\n }\n const raw = markdown.slice(position.from, position.to);\n const relativeFrom = entity.range.from - position.from;\n const relativeTo = entity.range.to - position.from;\n if (raw === value) {\n return { from: relativeFrom, to: relativeTo };\n }\n\n const occurrence = countOccurrences(raw.slice(0, relativeFrom), entity.text);\n const valueFrom = occurrenceIndex(value, entity.text, occurrence);\n return valueFrom === undefined\n ? undefined\n : { from: valueFrom, to: valueFrom + entity.text.length };\n}\n\nfunction countOccurrences(value: string, search: string): number {\n let count = 0;\n let offset = 0;\n while (offset <= value.length - search.length) {\n const index = value.indexOf(search, offset);\n if (index < 0) {\n break;\n }\n count += 1;\n offset = index + search.length;\n }\n return count;\n}\n\nfunction occurrenceIndex(value: string, search: string, occurrence: number): number | undefined {\n let offset = 0;\n for (let index = 0; index <= occurrence; index += 1) {\n const found = value.indexOf(search, offset);\n if (found < 0) {\n return undefined;\n }\n if (index === occurrence) {\n return found;\n }\n offset = found + search.length;\n }\n return undefined;\n}\n\nfunction containsStart(node: MarkdownNode, offset: number): boolean {\n const position = offsets(node);\n return position !== undefined && offset >= position.from && offset < position.to;\n}\n\nfunction containsEnd(node: MarkdownNode, offset: number): boolean {\n const position = offsets(node);\n return position !== undefined && offset > position.from && offset <= position.to;\n}\n\nfunction offsets(node: MarkdownNode | undefined): { from: number; to: number } | undefined {\n const from = node?.position?.start.offset;\n const to = node?.position?.end.offset;\n return typeof from === \"number\" && typeof to === \"number\" ? { from, to } : undefined;\n}\n\nfunction findLastIndex<T>(items: T[], predicate: (item: T) => boolean): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (item !== undefined && predicate(item)) {\n return index;\n }\n }\n return -1;\n}\n","import type { UIMessage } from \"@anvia/client\";\nimport { forwardRef, type ReactNode, useCallback, useMemo } from \"react\";\n\nimport { useMessage } from \"../contexts\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { registerMessageElement } from \"./elements\";\n\ntype MessageChildren = ReactNode | ((message: UIMessage) => ReactNode);\n\ntype MessageRootProps = Omit<PrimitiveProps<\"article\">, \"children\"> & {\n children?: MessageChildren;\n};\n\nconst MessageRoot = forwardRef<HTMLElement, MessageRootProps>(function MessageRoot(\n { children, ...props },\n ref,\n) {\n const { message } = useMessage();\n const renderedChildren = typeof children === \"function\" ? children(message) : children;\n const registerElement = useCallback(\n (element: HTMLElement | null) => {\n if (element !== null) registerMessageElement(element, message.id);\n },\n [message.id],\n );\n const composedRef = useMemo(() => composeRefs(ref, registerElement), [ref, registerElement]);\n\n return renderPrimitive(\n \"article\",\n {\n ...props,\n children: renderedChildren,\n \"data-role\": message.role,\n } as PrimitiveProps<\"article\">,\n composedRef,\n );\n});\n\nconst MessageContent = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function MessageContent(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nexport { MessageContent, MessageRoot };\n","import { MessageActions, MessageCopy, MessageRegenerate } from \"./actions\";\nimport { MessageEntity } from \"./entity\";\nimport {\n MessageAttachment,\n MessageCodeBlock,\n MessageData,\n MessageError,\n MessageMarkdown,\n MessagePart,\n MessageParts,\n MessageReasoning,\n MessageText,\n MessageTool,\n MessageToolError,\n MessageToolInput,\n MessageToolName,\n MessageToolOutput,\n MessageToolStatus,\n} from \"./parts\";\nimport { MessageContent, MessageRoot } from \"./root\";\n\nexport const MessagePrimitive = {\n Root: MessageRoot,\n Content: MessageContent,\n Parts: MessageParts,\n Part: MessagePart,\n Text: MessageText,\n Markdown: MessageMarkdown,\n Entity: MessageEntity,\n CodeBlock: MessageCodeBlock,\n Reasoning: MessageReasoning,\n Tool: MessageTool,\n ToolName: MessageToolName,\n ToolInput: MessageToolInput,\n ToolOutput: MessageToolOutput,\n ToolError: MessageToolError,\n ToolStatus: MessageToolStatus,\n Attachment: MessageAttachment,\n Data: MessageData,\n Error: MessageError,\n Actions: MessageActions,\n Copy: MessageCopy,\n Regenerate: MessageRegenerate,\n} as const;\n\nexport type { MessageContextValue, MessagePartContextValue } from \"../contexts\";\nexport { useChatContext, useMessage, useMessagePart } from \"../contexts\";\nexport type { MessageEntityProps } from \"./entity\";\nexport type {\n MessageAttachmentPart,\n MessagePartsFilter,\n MessageStreamOptions,\n MessageToolPart,\n MessageToolRenderWhen,\n} from \"./parts\";\n"],"mappings":"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","names":["MessageActions","MessageCopy","MessageRegenerate","forwardRef","jsx","MessageEntity","forwardRef","child","Fragment","jsx","jsxs","forwardRef","MessageParts","SmoothedMessageParts","MessagePart","MessageText","MessageTextContent","MessageMarkdown","MessageMarkdownContent","_node","elementProps","MessageCodeBlock","MessageReasoning","MessageTool","MessageToolName","MessageToolStatus","MessageToolInput","MessageToolOutput","MessageToolError","MessageAttachment","MessageData","MessageError","forwardRef","useCallback","useMemo","forwardRef","MessageRoot","useCallback","useMemo","MessageContent"]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
InternalImageProvider,
|
|
7
7
|
useImage,
|
|
8
8
|
useOptionalAttachment
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SOG2GVE4.js";
|
|
10
10
|
|
|
11
11
|
// src/image/parts.tsx
|
|
12
12
|
import {
|
|
@@ -24,7 +24,9 @@ var ImageRoot = forwardRef(function ImageRoot2({ attachment: attachmentProp, chi
|
|
|
24
24
|
const attachment = attachmentProp ?? attachmentContext?.attachment;
|
|
25
25
|
const [zoomOpen, setZoomOpen] = useState(false);
|
|
26
26
|
if (attachment === void 0) {
|
|
27
|
-
throw new Error(
|
|
27
|
+
throw new Error(
|
|
28
|
+
"ImagePrimitive.Root requires an attachment prop or AttachmentPrimitive context."
|
|
29
|
+
);
|
|
28
30
|
}
|
|
29
31
|
const src = imageSource(attachment);
|
|
30
32
|
const isImage = isImageAttachment(attachment);
|
|
@@ -52,9 +54,7 @@ var ImageRoot = forwardRef(function ImageRoot2({ attachment: attachmentProp, chi
|
|
|
52
54
|
/* @__PURE__ */ jsx(ImagePreview, {}),
|
|
53
55
|
/* @__PURE__ */ jsx(ImageName, {})
|
|
54
56
|
] }),
|
|
55
|
-
"data-
|
|
56
|
-
"data-state": src === void 0 ? "unavailable" : "ready",
|
|
57
|
-
"data-type": attachment.type
|
|
57
|
+
"data-state": src === void 0 ? "unavailable" : "ready"
|
|
58
58
|
},
|
|
59
59
|
ref
|
|
60
60
|
) });
|
|
@@ -73,12 +73,11 @@ var ImagePreview = forwardRef(function ImagePreview2({ alt, errorFallback, loadi
|
|
|
73
73
|
{
|
|
74
74
|
...props,
|
|
75
75
|
children: image.src === void 0 ? fallback : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
76
|
-
state === "ready" ? null : /* @__PURE__ */ jsx("span", {
|
|
76
|
+
state === "ready" ? null : /* @__PURE__ */ jsx("span", { children: fallback }),
|
|
77
77
|
/* @__PURE__ */ jsx(
|
|
78
78
|
"img",
|
|
79
79
|
{
|
|
80
80
|
alt: alt ?? image.name ?? "Image",
|
|
81
|
-
"data-anvia-image-img": "",
|
|
82
81
|
hidden: state !== "ready",
|
|
83
82
|
onError: () => setState("error"),
|
|
84
83
|
onLoad: () => setState("ready"),
|
|
@@ -86,7 +85,6 @@ var ImagePreview = forwardRef(function ImagePreview2({ alt, errorFallback, loadi
|
|
|
86
85
|
}
|
|
87
86
|
)
|
|
88
87
|
] }),
|
|
89
|
-
"data-anvia-image-preview": "",
|
|
90
88
|
"data-state": state
|
|
91
89
|
},
|
|
92
90
|
ref
|
|
@@ -99,8 +97,7 @@ var ImageName = forwardRef(
|
|
|
99
97
|
"figcaption",
|
|
100
98
|
{
|
|
101
99
|
...props,
|
|
102
|
-
children: props.children ?? image.name ?? image.mediaType ?? image.attachment.type
|
|
103
|
-
"data-anvia-image-name": ""
|
|
100
|
+
children: props.children ?? image.name ?? image.mediaType ?? image.attachment.type
|
|
104
101
|
},
|
|
105
102
|
ref
|
|
106
103
|
);
|
|
@@ -111,8 +108,7 @@ var ImageActions = forwardRef(
|
|
|
111
108
|
return renderPrimitive(
|
|
112
109
|
"div",
|
|
113
110
|
{
|
|
114
|
-
...props
|
|
115
|
-
"data-anvia-image-actions": ""
|
|
111
|
+
...props
|
|
116
112
|
},
|
|
117
113
|
ref
|
|
118
114
|
);
|
|
@@ -145,7 +141,6 @@ var ImageCopy = forwardRef(function ImageCopy2({ onClick, ...props }, ref) {
|
|
|
145
141
|
disabled,
|
|
146
142
|
onClick: handleClick,
|
|
147
143
|
type: props.type ?? "button",
|
|
148
|
-
"data-anvia-image-copy": "",
|
|
149
144
|
"data-state": copyState
|
|
150
145
|
},
|
|
151
146
|
ref
|
|
@@ -176,7 +171,6 @@ var ImageDownload = forwardRef(function ImageDownload2({ filename, onClick, ...p
|
|
|
176
171
|
disabled,
|
|
177
172
|
onClick: handleClick,
|
|
178
173
|
type: props.type ?? "button",
|
|
179
|
-
"data-anvia-image-download": "",
|
|
180
174
|
"data-state": disabled ? "disabled" : "enabled"
|
|
181
175
|
},
|
|
182
176
|
ref
|
|
@@ -204,7 +198,6 @@ var ImageZoomTrigger = forwardRef(
|
|
|
204
198
|
disabled,
|
|
205
199
|
onClick: handleClick,
|
|
206
200
|
type: props.type ?? "button",
|
|
207
|
-
"data-anvia-image-zoom-trigger": "",
|
|
208
201
|
"data-state": disabled ? "disabled" : "enabled"
|
|
209
202
|
},
|
|
210
203
|
ref
|
|
@@ -280,13 +273,12 @@ var ImageZoomOverlay = forwardRef(
|
|
|
280
273
|
"div",
|
|
281
274
|
{
|
|
282
275
|
...props,
|
|
283
|
-
children: /* @__PURE__ */ jsx("img", { alt: image.name ?? "Image",
|
|
276
|
+
children: /* @__PURE__ */ jsx("img", { alt: image.name ?? "Image", src: image.src }),
|
|
284
277
|
onClick: handleClick,
|
|
285
278
|
onKeyDown: handleKeyDown,
|
|
286
279
|
"aria-modal": props["aria-modal"] ?? true,
|
|
287
280
|
role: props.role ?? "dialog",
|
|
288
|
-
tabIndex: props.tabIndex ?? -1
|
|
289
|
-
"data-anvia-image-zoom-overlay": ""
|
|
281
|
+
tabIndex: props.tabIndex ?? -1
|
|
290
282
|
},
|
|
291
283
|
composedRef
|
|
292
284
|
);
|
|
@@ -415,7 +407,7 @@ function focusableElements(container) {
|
|
|
415
407
|
}
|
|
416
408
|
|
|
417
409
|
// src/image/index.ts
|
|
418
|
-
var
|
|
410
|
+
var ImagePrimitive = {
|
|
419
411
|
Root: ImageRoot,
|
|
420
412
|
Preview: ImagePreview,
|
|
421
413
|
Name: ImageName,
|
|
@@ -427,6 +419,6 @@ var Image = {
|
|
|
427
419
|
};
|
|
428
420
|
|
|
429
421
|
export {
|
|
430
|
-
|
|
422
|
+
ImagePrimitive
|
|
431
423
|
};
|
|
432
|
-
//# sourceMappingURL=chunk-
|
|
424
|
+
//# sourceMappingURL=chunk-CVXLQCDI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/image/parts.tsx","../src/image/index.ts"],"sourcesContent":["import type { UIAttachment } from \"@anvia/client\";\nimport {\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n type ImageContextValue,\n InternalImageProvider,\n useImage,\n useOptionalAttachment,\n} from \"../contexts\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\ntype ImageRootChildren = ReactNode | ((image: ImageContextValue) => ReactNode);\ntype ImageRenderWhen = \"image\" | \"always\";\n\ntype ImageRootProps = Omit<PrimitiveProps<\"figure\">, \"children\"> & {\n attachment?: UIAttachment;\n children?: ImageRootChildren;\n renderWhen?: ImageRenderWhen;\n};\n\nconst ImageRoot = forwardRef<HTMLElement, ImageRootProps>(function ImageRoot(\n { attachment: attachmentProp, children, renderWhen = \"image\", ...props },\n ref,\n) {\n const attachmentContext = useOptionalAttachment();\n const attachment = attachmentProp ?? attachmentContext?.attachment;\n const [zoomOpen, setZoomOpen] = useState(false);\n\n if (attachment === undefined) {\n throw new Error(\n \"ImagePrimitive.Root requires an attachment prop or AttachmentPrimitive context.\",\n );\n }\n\n const src = imageSource(attachment);\n const isImage = isImageAttachment(attachment);\n const value = useMemo<ImageContextValue>(() => {\n const context: ImageContextValue = {\n attachment,\n isImage,\n zoomOpen,\n setZoomOpen,\n };\n if (src !== undefined) context.src = src;\n if (attachment.name !== undefined) context.name = attachment.name;\n if (attachment.mediaType !== undefined) context.mediaType = attachment.mediaType;\n return context;\n }, [attachment, attachment.mediaType, attachment.name, isImage, src, zoomOpen]);\n if (!isImage && renderWhen !== \"always\") {\n return null;\n }\n\n const renderedChildren = typeof children === \"function\" ? children(value) : children;\n\n return (\n <InternalImageProvider value={value}>\n {renderPrimitive(\n \"figure\",\n {\n ...props,\n children: renderedChildren ?? (\n <>\n <ImagePreview />\n <ImageName />\n </>\n ),\n \"data-state\": src === undefined ? \"unavailable\" : \"ready\",\n } as PrimitiveProps<\"figure\">,\n ref,\n )}\n </InternalImageProvider>\n );\n});\n\ntype ImagePreviewProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n alt?: string;\n errorFallback?: ReactNode;\n loadingFallback?: ReactNode;\n};\n\nconst ImagePreview = forwardRef<HTMLDivElement, ImagePreviewProps>(function ImagePreview(\n { alt, errorFallback, loadingFallback, ...props },\n ref,\n) {\n const image = useImage();\n const [state, setState] = useState<\"loading\" | \"ready\" | \"error\">(\n image.src === undefined ? \"error\" : \"loading\",\n );\n\n useEffect(() => {\n setState(image.src === undefined ? \"error\" : \"loading\");\n }, [image.src]);\n\n const fallback =\n state === \"loading\"\n ? (loadingFallback ?? \"Loading image\")\n : state === \"error\"\n ? (errorFallback ?? \"Image unavailable\")\n : null;\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children:\n image.src === undefined ? (\n fallback\n ) : (\n <>\n {state === \"ready\" ? null : <span>{fallback}</span>}\n <img\n alt={alt ?? image.name ?? \"Image\"}\n hidden={state !== \"ready\"}\n onError={() => setState(\"error\")}\n onLoad={() => setState(\"ready\")}\n src={image.src}\n />\n </>\n ),\n \"data-state\": state,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst ImageName = forwardRef<HTMLElement, PrimitiveProps<\"figcaption\">>(\n function ImageName(props, ref) {\n const image = useImage();\n\n return renderPrimitive(\n \"figcaption\",\n {\n ...props,\n children: props.children ?? image.name ?? image.mediaType ?? image.attachment.type,\n } as PrimitiveProps<\"figcaption\">,\n ref,\n );\n },\n);\n\nconst ImageActions = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ImageActions(props, ref) {\n return renderPrimitive(\n \"div\",\n {\n ...props,\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\ntype ImageActionState = \"idle\" | \"done\" | \"error\";\n\nconst ImageCopy = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function ImageCopy(\n { onClick, ...props },\n ref,\n) {\n const image = useImage();\n const [copyState, setCopyState] = useState<ImageActionState>(\"idle\");\n const disabled = props.disabled ?? image.src === undefined;\n\n const handleClick = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled || image.src === undefined) {\n return;\n }\n try {\n await copyImage(image);\n setCopyState(\"done\");\n } catch {\n setCopyState(\"error\");\n }\n },\n [disabled, image, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Copy image\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": copyState,\n } as PrimitiveProps<\"button\">,\n ref,\n );\n});\n\ntype ImageDownloadProps = PrimitiveProps<\"button\"> & {\n filename?: string;\n};\n\nconst ImageDownload = forwardRef<HTMLButtonElement, ImageDownloadProps>(function ImageDownload(\n { filename, onClick, ...props },\n ref,\n) {\n const image = useImage();\n const disabled = props.disabled ?? image.src === undefined;\n\n const handleClick = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled || image.src === undefined) {\n return;\n }\n try {\n await downloadImage(image, filename);\n } catch {\n return;\n }\n },\n [disabled, filename, image, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Download\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n});\n\nconst ImageZoomTrigger = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ImageZoomTrigger({ onClick, ...props }, ref) {\n const image = useImage();\n const disabled = props.disabled ?? image.src === undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n image.setZoomOpen(true);\n },\n [disabled, image, onClick],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"Open image\",\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n },\n);\n\ntype ImageZoomOverlayProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n container?: Element | DocumentFragment;\n};\n\nconst ImageZoomOverlay = forwardRef<HTMLDivElement, ImageZoomOverlayProps>(\n function ImageZoomOverlay({ container, onClick, onKeyDown, ...props }, ref) {\n const image = useImage();\n const portalContainer = container ?? globalThis.document?.body;\n const overlayRef = useRef<HTMLDivElement | null>(null);\n const composedRef = useMemo(() => composeRefs(overlayRef, ref), [ref]);\n\n useEffect(() => {\n if (!image.zoomOpen) {\n return;\n }\n const document = globalThis.document;\n if (document === undefined) {\n return;\n }\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n image.setZoomOpen(false);\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [image.setZoomOpen, image.zoomOpen]);\n\n useEffect(() => {\n if (!image.zoomOpen) {\n return;\n }\n const activeElement = globalThis.document?.activeElement;\n const previousFocus = activeElement instanceof HTMLElement ? activeElement : undefined;\n focusOverlay(overlayRef.current);\n return () => {\n if (previousFocus?.isConnected === true) {\n previousFocus.focus();\n }\n };\n }, [image.zoomOpen]);\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n image.setZoomOpen(false);\n }\n },\n [image, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === \"Escape\") {\n image.setZoomOpen(false);\n return;\n }\n if (event.key === \"Tab\") {\n trapOverlayFocus(event, overlayRef.current);\n }\n },\n [image, onKeyDown],\n );\n\n if (!image.zoomOpen || image.src === undefined || portalContainer === undefined) {\n return null;\n }\n\n const overlay = renderPrimitive(\n \"div\",\n {\n ...props,\n children: <img alt={image.name ?? \"Image\"} src={image.src} />,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n \"aria-modal\": props[\"aria-modal\"] ?? true,\n role: props.role ?? \"dialog\",\n tabIndex: props.tabIndex ?? -1,\n } as PrimitiveProps<\"div\">,\n composedRef,\n );\n\n return createPortal(overlay, portalContainer);\n },\n);\n\nfunction isImageAttachment(attachment: UIAttachment): boolean {\n return attachment.type === \"image\" || attachment.mediaType?.startsWith(\"image/\") === true;\n}\n\nfunction imageSource(attachment: UIAttachment): string | undefined {\n if (!isImageAttachment(attachment)) {\n return attachment.url;\n }\n if (attachment.url !== undefined) {\n return attachment.url;\n }\n if (attachment.data !== undefined && attachment.mediaType !== undefined) {\n return `data:${attachment.mediaType};base64,${attachment.data}`;\n }\n return undefined;\n}\n\nasync function copyImage(image: ImageContextValue): Promise<void> {\n if (image.src === undefined) {\n throw new Error(\"Image source is unavailable.\");\n }\n const clipboard = globalThis.navigator?.clipboard as\n | (Clipboard & { write?: (items: ClipboardItem[]) => Promise<void> })\n | undefined;\n const ClipboardItemConstructor = globalThis.ClipboardItem;\n if (clipboard?.write === undefined || ClipboardItemConstructor === undefined) {\n throw new Error(\"Clipboard image copy is unavailable.\");\n }\n const blob = await imageBlob(image);\n await clipboard.write([new ClipboardItemConstructor({ [blob.type]: blob })]);\n}\n\nasync function imageBlob(image: ImageContextValue): Promise<Blob> {\n if (image.attachment.data !== undefined) {\n return base64ToBlob(\n image.attachment.data,\n image.attachment.mediaType ?? image.mediaType ?? \"image/png\",\n );\n }\n if (image.src === undefined || globalThis.fetch === undefined) {\n throw new Error(\"Image source is unavailable.\");\n }\n const response = await fetch(image.src);\n return response.blob();\n}\n\nfunction base64ToBlob(data: string, mediaType: string): Blob {\n const binary = globalThis.atob(data);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n return new Blob([bytes], { type: mediaType });\n}\n\nasync function downloadImage(\n image: ImageContextValue,\n filename: string | undefined,\n): Promise<void> {\n const document = globalThis.document;\n const url = globalThis.URL;\n if (image.src === undefined || document === undefined || url?.createObjectURL === undefined) {\n return;\n }\n const blobUrl = url.createObjectURL(await imageBlob(image));\n const link = document.createElement(\"a\");\n try {\n link.href = blobUrl;\n link.download = filename ?? image.name ?? defaultImageFilename(image);\n link.rel = \"noopener\";\n document.body.append(link);\n link.click();\n } finally {\n link.remove();\n url.revokeObjectURL(blobUrl);\n }\n}\n\nfunction defaultImageFilename(image: ImageContextValue): string {\n const extension = image.mediaType?.split(\"/\")[1]?.split(\";\")[0] ?? \"png\";\n return `image.${extension}`;\n}\n\nfunction focusOverlay(overlay: HTMLDivElement | null): void {\n if (overlay === null) {\n return;\n }\n const [firstFocusable] = focusableElements(overlay);\n (firstFocusable ?? overlay).focus();\n}\n\nfunction trapOverlayFocus(\n event: KeyboardEvent<HTMLDivElement>,\n overlay: HTMLDivElement | null,\n): void {\n if (overlay === null) {\n return;\n }\n const focusable = focusableElements(overlay);\n if (focusable.length === 0) {\n event.preventDefault();\n overlay.focus();\n return;\n }\n\n const firstFocusable = focusable[0];\n const lastFocusable = focusable[focusable.length - 1];\n const activeElement = globalThis.document?.activeElement;\n if (event.shiftKey && activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable?.focus();\n return;\n }\n if (!event.shiftKey && activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable?.focus();\n return;\n }\n if (activeElement instanceof Node && !overlay.contains(activeElement)) {\n event.preventDefault();\n (event.shiftKey ? lastFocusable : firstFocusable)?.focus();\n }\n}\n\nfunction focusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(\n container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not(:disabled)\",\n \"input:not(:disabled)\",\n \"select:not(:disabled)\",\n \"textarea:not(:disabled)\",\n \"[tabindex]\",\n ].join(\",\"),\n ),\n ).filter((element) => element.tabIndex >= 0 && element.getAttribute(\"aria-hidden\") !== \"true\");\n}\n\nexport {\n ImageActions,\n ImageCopy,\n ImageDownload,\n ImageName,\n ImagePreview,\n ImageRoot,\n ImageZoomOverlay,\n ImageZoomTrigger,\n};\n","import {\n ImageActions,\n ImageCopy,\n ImageDownload,\n ImageName,\n ImagePreview,\n ImageRoot,\n ImageZoomOverlay,\n ImageZoomTrigger,\n} from \"./parts\";\n\nexport const ImagePrimitive = {\n Root: ImageRoot,\n Preview: ImagePreview,\n Name: ImageName,\n Actions: ImageActions,\n Copy: ImageCopy,\n Download: ImageDownload,\n ZoomTrigger: ImageZoomTrigger,\n ZoomOverlay: ImageZoomOverlay,\n} as const;\n\nexport type { ImageContextValue } from \"../contexts\";\nexport { useImage } from \"../contexts\";\n"],"mappings":"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","names":["ImageRoot","ImagePreview","ImageName","ImageActions","ImageCopy","ImageDownload","ImageZoomTrigger","ImageZoomOverlay","handleKeyDown"]}
|
|
@@ -165,10 +165,10 @@ function wrapStreamRevealGraphemes(targets, graphemes, lifecycleScope, lifecycle
|
|
|
165
165
|
type: "element",
|
|
166
166
|
tagName: "span",
|
|
167
167
|
properties: {
|
|
168
|
-
"data-
|
|
169
|
-
"data-
|
|
170
|
-
"data-
|
|
171
|
-
"data-
|
|
168
|
+
"data-reveal-duration-ms": String(remainingMs),
|
|
169
|
+
"data-reveal-opacity": String(opacity),
|
|
170
|
+
"data-reveal-id": revealId,
|
|
171
|
+
"data-state": "revealing"
|
|
172
172
|
},
|
|
173
173
|
children: [{ type: "text", value: text }]
|
|
174
174
|
});
|
|
@@ -293,8 +293,8 @@ var StreamMarkdown = forwardRef(
|
|
|
293
293
|
},
|
|
294
294
|
block.startOffset
|
|
295
295
|
)),
|
|
296
|
-
"data-
|
|
297
|
-
"data-
|
|
296
|
+
"data-role": "markdown",
|
|
297
|
+
"data-state": props["data-state"] ?? (live ? "streaming" : "idle")
|
|
298
298
|
},
|
|
299
299
|
ref
|
|
300
300
|
);
|
|
@@ -323,7 +323,7 @@ function withStreamRevealComponent(components, onRevealSettled) {
|
|
|
323
323
|
span(spanProps) {
|
|
324
324
|
const safeProps = componentPropsWithoutKey(spanProps);
|
|
325
325
|
const internalProps = safeProps;
|
|
326
|
-
if (internalProps["data-
|
|
326
|
+
if (internalProps["data-state"] === "revealing") {
|
|
327
327
|
return streamRevealSpan(internalProps, onRevealSettled);
|
|
328
328
|
}
|
|
329
329
|
if (consumerSpan !== void 0) {
|
|
@@ -347,9 +347,9 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
347
347
|
const {
|
|
348
348
|
children,
|
|
349
349
|
node: _node,
|
|
350
|
-
"data-
|
|
351
|
-
"data-
|
|
352
|
-
"data-
|
|
350
|
+
"data-reveal-duration-ms": durationMs,
|
|
351
|
+
"data-reveal-opacity": opacity,
|
|
352
|
+
"data-reveal-id": revealId,
|
|
353
353
|
onAnimationEnd,
|
|
354
354
|
...elementProps
|
|
355
355
|
} = props;
|
|
@@ -359,7 +359,7 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
359
359
|
"span",
|
|
360
360
|
{
|
|
361
361
|
...elementProps,
|
|
362
|
-
"data-
|
|
362
|
+
"data-state": "revealing",
|
|
363
363
|
key: revealId ?? "stream-reveal",
|
|
364
364
|
onAnimationEnd: (event) => {
|
|
365
365
|
onAnimationEnd?.(event);
|
|
@@ -377,4 +377,4 @@ function streamRevealSpan(props, onRevealSettled) {
|
|
|
377
377
|
export {
|
|
378
378
|
StreamMarkdown
|
|
379
379
|
};
|
|
380
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-F6AKBUO3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stream/markdown.tsx","../src/stream/markdown-blocks.ts","../src/stream/markdown-reveal.ts"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type CSSProperties,\n createElement,\n forwardRef,\n memo,\n type ReactNode,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport ReactMarkdown, {\n type Components,\n type Options as ReactMarkdownOptions,\n} from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { type PrimitiveProps, renderPrimitive } from \"../primitives\";\nimport { splitStreamMarkdownBlocks } from \"./markdown-blocks\";\nimport { createStreamGradientRevealPlugin, type StreamRevealLifecycle } from \"./markdown-reveal\";\n\nexport type StreamMarkdownProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n \"data-state\"?: string | undefined;\n components?: Components;\n content: string;\n live?: boolean;\n remarkPlugins?: ReactMarkdownOptions[\"remarkPlugins\"];\n remarkRehypeOptions?: ReactMarkdownOptions[\"remarkRehypeOptions\"];\n};\n\nconst defaultRemarkPlugins: NonNullable<ReactMarkdownOptions[\"remarkPlugins\"]> = [remarkGfm];\n\nexport const StreamMarkdown = forwardRef<HTMLDivElement, StreamMarkdownProps>(\n function StreamMarkdown(\n { components, content, live = false, remarkPlugins, remarkRehypeOptions, ...props },\n ref,\n ) {\n const revealLifecycleRef = useRef({\n activeScope: null,\n content,\n id: 0,\n settledRevealIds: new Set<string>(),\n startedAtByRevealId: new Map<string, number>(),\n } satisfies StreamRevealLifecycle & { content: string; id: number });\n const revealLifecycle = revealLifecycleRef.current;\n if (revealLifecycle.content !== content) {\n if (!content.startsWith(revealLifecycle.content)) {\n revealLifecycle.id += 1;\n revealLifecycle.activeScope = null;\n revealLifecycle.settledRevealIds.clear();\n revealLifecycle.startedAtByRevealId.clear();\n }\n revealLifecycle.content = content;\n }\n if (!live && revealLifecycle.activeScope !== null) {\n for (const revealId of revealLifecycle.startedAtByRevealId.keys()) {\n revealLifecycle.settledRevealIds.add(revealId);\n }\n }\n const settleReveal = useCallback((revealId: string) => {\n revealLifecycleRef.current.settledRevealIds.add(revealId);\n }, []);\n\n const blocks = useMemo(\n () =>\n splitStreamMarkdownBlocks(content, {\n singleDocument: remarkPlugins !== undefined,\n }),\n [content, remarkPlugins],\n );\n const streamingComponents = useMemo(\n () => withStreamRevealComponent(components, settleReveal),\n [components, settleReveal],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: blocks.map((block, index) => (\n <StreamMarkdownBlock\n components={streamingComponents}\n content={block.content}\n live={live && index === blocks.length - 1}\n revealLifecycle={revealLifecycle}\n revealScope={`${revealLifecycle.id}:${block.startOffset}`}\n remarkPlugins={remarkPlugins ?? defaultRemarkPlugins}\n remarkRehypeOptions={remarkRehypeOptions}\n key={block.startOffset}\n />\n )),\n \"data-role\": \"markdown\",\n \"data-state\": props[\"data-state\"] ?? (live ? \"streaming\" : \"idle\"),\n } as PrimitiveProps<\"div\">,\n ref,\n );\n },\n);\n\nconst StreamMarkdownBlock = memo(function StreamMarkdownBlock(props: {\n components: Components;\n content: string;\n live: boolean;\n revealLifecycle: StreamRevealLifecycle;\n revealScope: string;\n remarkPlugins: ReactMarkdownOptions[\"remarkPlugins\"];\n remarkRehypeOptions: ReactMarkdownOptions[\"remarkRehypeOptions\"];\n}) {\n const revealPlugin = useMemo(\n () => createStreamGradientRevealPlugin(props.revealScope, props.revealLifecycle),\n [props.revealScope, props.revealLifecycle],\n );\n return (\n <ReactMarkdown\n components={props.components}\n rehypePlugins={props.live ? [revealPlugin] : undefined}\n remarkPlugins={props.remarkPlugins}\n remarkRehypeOptions={props.remarkRehypeOptions}\n >\n {props.content}\n </ReactMarkdown>\n );\n});\n\nfunction withStreamRevealComponent(\n components: Components | undefined,\n onRevealSettled: (revealId: string) => void,\n): Components {\n const consumerSpan = components?.span;\n return {\n ...components,\n span(spanProps) {\n const safeProps = componentPropsWithoutKey(spanProps);\n const internalProps = safeProps as typeof safeProps & {\n \"data-reveal-duration-ms\"?: string | undefined;\n \"data-reveal-opacity\"?: string | undefined;\n \"data-reveal-id\"?: string | undefined;\n \"data-state\"?: string | undefined;\n };\n if (internalProps[\"data-state\"] === \"revealing\") {\n return streamRevealSpan(internalProps, onRevealSettled);\n }\n if (consumerSpan !== undefined) {\n return createElement(consumerSpan, safeProps);\n }\n const { node: _node, ...elementProps } = safeProps;\n return <span {...elementProps} />;\n },\n };\n}\n\nfunction componentPropsWithoutKey<T extends object>(props: T): T {\n const result: Record<string, unknown> = {};\n for (const name of Object.keys(props)) {\n if (name !== \"key\") {\n result[name] = (props as Record<string, unknown>)[name];\n }\n }\n return result as T;\n}\n\nfunction streamRevealSpan(\n props: ComponentPropsWithoutRef<\"span\"> & {\n node?: unknown;\n \"data-reveal-duration-ms\"?: string | undefined;\n \"data-reveal-opacity\"?: string | undefined;\n \"data-reveal-id\"?: string | undefined;\n },\n onRevealSettled: (revealId: string) => void,\n): ReactNode {\n const {\n children,\n node: _node,\n \"data-reveal-duration-ms\": durationMs,\n \"data-reveal-opacity\": opacity,\n \"data-reveal-id\": revealId,\n onAnimationEnd,\n ...elementProps\n } = props;\n const parsedOpacity = Number(opacity);\n const parsedDurationMs = Number(durationMs);\n return (\n <span\n {...elementProps}\n data-state=\"revealing\"\n key={revealId ?? \"stream-reveal\"}\n onAnimationEnd={(event) => {\n onAnimationEnd?.(event);\n if (revealId !== undefined) onRevealSettled(revealId);\n }}\n style={\n {\n \"--anvia-stream-reveal-opacity\": Number.isFinite(parsedOpacity) ? parsedOpacity : 1,\n \"--anvia-stream-reveal-duration\": `${Number.isFinite(parsedDurationMs) ? parsedDurationMs : 180}ms`,\n } as CSSProperties\n }\n >\n {children}\n </span>\n );\n}\n","import { lexer } from \"marked\";\n\nexport type StreamMarkdownBlock = {\n content: string;\n startOffset: number;\n};\n\nexport function splitStreamMarkdownBlocks(\n content: string,\n options: { singleDocument?: boolean } = {},\n): StreamMarkdownBlock[] {\n if (content.length === 0) {\n return [];\n }\n if (options.singleDocument === true) {\n return [{ content, startOffset: 0 }];\n }\n\n try {\n const tokens = lexer(content, { gfm: false });\n if (tokens.some((token) => token.type === \"def\") || Object.keys(tokens.links).length > 0) {\n return [{ content, startOffset: 0 }];\n }\n\n const rawBlocks: string[] = [];\n for (const token of tokens) {\n if (token.type === \"space\" && rawBlocks.length > 0) {\n const lastIndex = rawBlocks.length - 1;\n rawBlocks[lastIndex] = `${rawBlocks[lastIndex] ?? \"\"}${token.raw}`;\n } else {\n rawBlocks.push(token.raw);\n }\n }\n\n if (rawBlocks.length === 0 || rawBlocks.join(\"\") !== content) {\n return [{ content, startOffset: 0 }];\n }\n\n let startOffset = 0;\n return rawBlocks.map((block) => {\n const result = { content: block, startOffset };\n startOffset += block.length;\n return result;\n });\n } catch {\n return [{ content, startOffset: 0 }];\n }\n}\n","export const streamRevealConfig = {\n bandGraphemes: 2,\n durationMs: 180,\n minimumOpacity: 0.12,\n tailGraphemes: 24,\n} as const;\n\nexport type StreamRevealLifecycle = {\n activeScope: string | null;\n settledRevealIds: Set<string>;\n startedAtByRevealId: Map<string, number>;\n};\n\ntype MarkdownNode = {\n type: string;\n tagName?: string;\n value?: string;\n properties?: Record<string, unknown>;\n children?: MarkdownNode[];\n};\n\ntype TextTarget = {\n endOffset: number;\n index: number;\n node: MarkdownNode;\n parent: MarkdownNode;\n startOffset: number;\n};\n\ntype RevealGrapheme = {\n endOffset: number;\n opacity: number;\n startOffset: number;\n};\n\nexport function createStreamGradientRevealPlugin(\n lifecycleScope: string,\n lifecycle: StreamRevealLifecycle,\n) {\n return function streamGradientRevealPlugin() {\n return (tree: MarkdownNode) => {\n if (lifecycle.activeScope !== lifecycleScope) {\n lifecycle.activeScope = lifecycleScope;\n lifecycle.settledRevealIds.clear();\n lifecycle.startedAtByRevealId.clear();\n }\n const targets = collectTextTargets(tree);\n const renderedText = targets.map((target) => target.node.value ?? \"\").join(\"\");\n const graphemes = createRevealGraphemes(renderedText);\n wrapStreamRevealGraphemes(targets, graphemes, lifecycleScope, lifecycle);\n };\n };\n}\n\nfunction collectTextTargets(tree: MarkdownNode): TextTarget[] {\n const targets: TextTarget[] = [];\n let offset = 0;\n\n function visit(node: MarkdownNode, parent: MarkdownNode | undefined, index: number): void {\n if (node.type === \"element\" && node.tagName === \"pre\") {\n return;\n }\n if (node.type === \"text\" && node.value !== undefined && parent !== undefined) {\n if (!/\\S/u.test(node.value)) {\n return;\n }\n const startOffset = offset;\n offset += node.value.length;\n targets.push({\n endOffset: offset,\n index,\n node,\n parent,\n startOffset,\n });\n return;\n }\n for (const [childIndex, child] of (node.children ?? []).entries()) {\n visit(child, node, childIndex);\n }\n }\n\n visit(tree, undefined, 0);\n return targets;\n}\n\nfunction createRevealGraphemes(content: string): RevealGrapheme[] {\n const tail = segmentTailGraphemeRanges(content, streamRevealConfig.tailGraphemes);\n const graphemes: RevealGrapheme[] = [];\n\n for (let index = 0; index < tail.length; index += 1) {\n const grapheme = tail[index];\n const bandStartIndex =\n Math.floor(index / streamRevealConfig.bandGraphemes) * streamRevealConfig.bandGraphemes;\n const bandEndIndex =\n Math.min(bandStartIndex + streamRevealConfig.bandGraphemes, tail.length) - 1;\n if (grapheme === undefined) {\n continue;\n }\n const progress = tail.length === 1 ? 1 : bandEndIndex / (tail.length - 1);\n graphemes.push({\n startOffset: grapheme.startOffset,\n endOffset: grapheme.endOffset,\n opacity: Math.max(\n streamRevealConfig.minimumOpacity,\n 1 - progress * (1 - streamRevealConfig.minimumOpacity),\n ),\n });\n }\n return graphemes;\n}\n\nfunction wrapStreamRevealGraphemes(\n targets: readonly TextTarget[],\n graphemes: readonly RevealGrapheme[],\n lifecycleScope: string,\n lifecycle: StreamRevealLifecycle,\n): void {\n const activeRevealIds = new Set<string>();\n const nowMs = Date.now();\n for (const target of [...targets].reverse()) {\n const value = target.node.value ?? \"\";\n const intersectingGraphemes = graphemes.filter(\n (grapheme) =>\n grapheme.endOffset > target.startOffset && grapheme.startOffset < target.endOffset,\n );\n if (intersectingGraphemes.length === 0) {\n continue;\n }\n\n const replacement: MarkdownNode[] = [];\n let cursor = 0;\n for (const grapheme of intersectingGraphemes) {\n const start = Math.max(0, grapheme.startOffset - target.startOffset);\n const end = Math.min(value.length, grapheme.endOffset - target.startOffset);\n if (start > cursor) {\n replacement.push({ type: \"text\", value: value.slice(cursor, start) });\n }\n if (end > start) {\n const text = value.slice(start, end);\n const absoluteStart = target.startOffset + start;\n const absoluteEnd = target.startOffset + end;\n const revealId = `${lifecycleScope}:${absoluteStart}:${absoluteEnd}:${hashText(text)}`;\n activeRevealIds.add(revealId);\n const startedAt = lifecycle.startedAtByRevealId.get(revealId) ?? nowMs;\n lifecycle.startedAtByRevealId.set(revealId, startedAt);\n const elapsedMs = Math.max(0, nowMs - startedAt);\n if (elapsedMs >= streamRevealConfig.durationMs) {\n lifecycle.settledRevealIds.add(revealId);\n }\n if (lifecycle.settledRevealIds.has(revealId)) {\n replacement.push({ type: \"text\", value: text });\n } else {\n const progress = Math.min(elapsedMs / streamRevealConfig.durationMs, 1);\n const opacity = grapheme.opacity + (1 - grapheme.opacity) * progress;\n const remainingMs = Math.max(1, streamRevealConfig.durationMs - elapsedMs);\n replacement.push({\n type: \"element\",\n tagName: \"span\",\n properties: {\n \"data-reveal-duration-ms\": String(remainingMs),\n \"data-reveal-opacity\": String(opacity),\n \"data-reveal-id\": revealId,\n \"data-state\": \"revealing\",\n },\n children: [{ type: \"text\", value: text }],\n });\n }\n }\n cursor = Math.max(cursor, end);\n }\n if (cursor < value.length) {\n replacement.push({ type: \"text\", value: value.slice(cursor) });\n }\n target.parent.children?.splice(target.index, 1, ...replacement);\n }\n\n pruneRevealLifecycle(lifecycle, activeRevealIds);\n}\n\nfunction pruneRevealLifecycle(\n lifecycle: StreamRevealLifecycle,\n activeRevealIds: ReadonlySet<string>,\n): void {\n for (const revealId of lifecycle.startedAtByRevealId.keys()) {\n if (!activeRevealIds.has(revealId)) lifecycle.startedAtByRevealId.delete(revealId);\n }\n for (const revealId of lifecycle.settledRevealIds) {\n if (!activeRevealIds.has(revealId)) lifecycle.settledRevealIds.delete(revealId);\n }\n}\n\nfunction hashText(text: string): string {\n let hash = 2_166_136_261;\n for (let index = 0; index < text.length; index += 1) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 16_777_619);\n }\n return (hash >>> 0).toString(36);\n}\n\nfunction segmentTailGraphemeRanges(\n content: string,\n limit: number,\n): Array<{\n endOffset: number;\n startOffset: number;\n}> {\n if (typeof Intl !== \"undefined\" && typeof Intl.Segmenter === \"function\") {\n const segmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n const segments = segmenter.segment(content);\n const ranges: Array<{ endOffset: number; startOffset: number }> = [];\n let cursor = content.length;\n while (cursor > 0 && ranges.length < limit) {\n const segment = segments.containing(cursor - 1);\n if (segment === undefined) {\n break;\n }\n ranges.unshift({\n startOffset: segment.index,\n endOffset: segment.index + segment.segment.length,\n });\n cursor = segment.index;\n }\n return ranges;\n }\n\n const ranges: Array<{ endOffset: number; startOffset: number }> = [];\n let cursor = content.length;\n while (cursor > 0 && ranges.length < limit) {\n let startOffset = cursor - 1;\n const code = content.charCodeAt(startOffset);\n if (code >= 0xdc00 && code <= 0xdfff && startOffset > 0) {\n const previousCode = content.charCodeAt(startOffset - 1);\n if (previousCode >= 0xd800 && previousCode <= 0xdbff) {\n startOffset -= 1;\n }\n }\n ranges.unshift({ startOffset, endOffset: cursor });\n cursor = startOffset;\n }\n return ranges;\n}\n"],"mappings":";;;;;AAAA;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO,mBAGA;AACP,OAAO,eAAe;;;ACftB,SAAS,aAAa;AAOf,SAAS,0BACd,SACA,UAAwC,CAAC,GAClB;AACvB,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,CAAC;AAAA,EACV;AACA,MAAI,QAAQ,mBAAmB,MAAM;AACnC,WAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;AAAA,EACrC;AAEA,MAAI;AACF,UAAM,SAAS,MAAM,SAAS,EAAE,KAAK,MAAM,CAAC;AAC5C,QAAI,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS,GAAG;AACxF,aAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;AAAA,IACrC;AAEA,UAAM,YAAsB,CAAC;AAC7B,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,SAAS,WAAW,UAAU,SAAS,GAAG;AAClD,cAAM,YAAY,UAAU,SAAS;AACrC,kBAAU,SAAS,IAAI,GAAG,UAAU,SAAS,KAAK,EAAE,GAAG,MAAM,GAAG;AAAA,MAClE,OAAO;AACL,kBAAU,KAAK,MAAM,GAAG;AAAA,MAC1B;AAAA,IACF;AAEA,QAAI,UAAU,WAAW,KAAK,UAAU,KAAK,EAAE,MAAM,SAAS;AAC5D,aAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;AAAA,IACrC;AAEA,QAAI,cAAc;AAClB,WAAO,UAAU,IAAI,CAAC,UAAU;AAC9B,YAAM,SAAS,EAAE,SAAS,OAAO,YAAY;AAC7C,qBAAe,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;AAAA,EACrC;AACF;;;AC/CO,IAAM,qBAAqB;AAAA,EAChC,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,eAAe;AACjB;AA8BO,SAAS,iCACd,gBACA,WACA;AACA,SAAO,SAAS,6BAA6B;AAC3C,WAAO,CAAC,SAAuB;AAC7B,UAAI,UAAU,gBAAgB,gBAAgB;AAC5C,kBAAU,cAAc;AACxB,kBAAU,iBAAiB,MAAM;AACjC,kBAAU,oBAAoB,MAAM;AAAA,MACtC;AACA,YAAM,UAAU,mBAAmB,IAAI;AACvC,YAAM,eAAe,QAAQ,IAAI,CAAC,WAAW,OAAO,KAAK,SAAS,EAAE,EAAE,KAAK,EAAE;AAC7E,YAAM,YAAY,sBAAsB,YAAY;AACpD,gCAA0B,SAAS,WAAW,gBAAgB,SAAS;AAAA,IACzE;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,MAAkC;AAC5D,QAAM,UAAwB,CAAC;AAC/B,MAAI,SAAS;AAEb,WAAS,MAAM,MAAoB,QAAkC,OAAqB;AACxF,QAAI,KAAK,SAAS,aAAa,KAAK,YAAY,OAAO;AACrD;AAAA,IACF;AACA,QAAI,KAAK,SAAS,UAAU,KAAK,UAAU,UAAa,WAAW,QAAW;AAC5E,UAAI,CAAC,MAAM,KAAK,KAAK,KAAK,GAAG;AAC3B;AAAA,MACF;AACA,YAAM,cAAc;AACpB,gBAAU,KAAK,MAAM;AACrB,cAAQ,KAAK;AAAA,QACX,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,eAAW,CAAC,YAAY,KAAK,MAAM,KAAK,YAAY,CAAC,GAAG,QAAQ,GAAG;AACjE,YAAM,OAAO,MAAM,UAAU;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,MAAM,QAAW,CAAC;AACxB,SAAO;AACT;AAEA,SAAS,sBAAsB,SAAmC;AAChE,QAAM,OAAO,0BAA0B,SAAS,mBAAmB,aAAa;AAChF,QAAM,YAA8B,CAAC;AAErC,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,WAAW,KAAK,KAAK;AAC3B,UAAM,iBACJ,KAAK,MAAM,QAAQ,mBAAmB,aAAa,IAAI,mBAAmB;AAC5E,UAAM,eACJ,KAAK,IAAI,iBAAiB,mBAAmB,eAAe,KAAK,MAAM,IAAI;AAC7E,QAAI,aAAa,QAAW;AAC1B;AAAA,IACF;AACA,UAAM,WAAW,KAAK,WAAW,IAAI,IAAI,gBAAgB,KAAK,SAAS;AACvE,cAAU,KAAK;AAAA,MACb,aAAa,SAAS;AAAA,MACtB,WAAW,SAAS;AAAA,MACpB,SAAS,KAAK;AAAA,QACZ,mBAAmB;AAAA,QACnB,IAAI,YAAY,IAAI,mBAAmB;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,0BACP,SACA,WACA,gBACA,WACM;AACN,QAAM,kBAAkB,oBAAI,IAAY;AACxC,QAAM,QAAQ,KAAK,IAAI;AACvB,aAAW,UAAU,CAAC,GAAG,OAAO,EAAE,QAAQ,GAAG;AAC3C,UAAM,QAAQ,OAAO,KAAK,SAAS;AACnC,UAAM,wBAAwB,UAAU;AAAA,MACtC,CAAC,aACC,SAAS,YAAY,OAAO,eAAe,SAAS,cAAc,OAAO;AAAA,IAC7E;AACA,QAAI,sBAAsB,WAAW,GAAG;AACtC;AAAA,IACF;AAEA,UAAM,cAA8B,CAAC;AACrC,QAAI,SAAS;AACb,eAAW,YAAY,uBAAuB;AAC5C,YAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,cAAc,OAAO,WAAW;AACnE,YAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,SAAS,YAAY,OAAO,WAAW;AAC1E,UAAI,QAAQ,QAAQ;AAClB,oBAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,MAAM,QAAQ,KAAK,EAAE,CAAC;AAAA,MACtE;AACA,UAAI,MAAM,OAAO;AACf,cAAM,OAAO,MAAM,MAAM,OAAO,GAAG;AACnC,cAAM,gBAAgB,OAAO,cAAc;AAC3C,cAAM,cAAc,OAAO,cAAc;AACzC,cAAM,WAAW,GAAG,cAAc,IAAI,aAAa,IAAI,WAAW,IAAI,SAAS,IAAI,CAAC;AACpF,wBAAgB,IAAI,QAAQ;AAC5B,cAAM,YAAY,UAAU,oBAAoB,IAAI,QAAQ,KAAK;AACjE,kBAAU,oBAAoB,IAAI,UAAU,SAAS;AACrD,cAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,SAAS;AAC/C,YAAI,aAAa,mBAAmB,YAAY;AAC9C,oBAAU,iBAAiB,IAAI,QAAQ;AAAA,QACzC;AACA,YAAI,UAAU,iBAAiB,IAAI,QAAQ,GAAG;AAC5C,sBAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,QAChD,OAAO;AACL,gBAAM,WAAW,KAAK,IAAI,YAAY,mBAAmB,YAAY,CAAC;AACtE,gBAAM,UAAU,SAAS,WAAW,IAAI,SAAS,WAAW;AAC5D,gBAAM,cAAc,KAAK,IAAI,GAAG,mBAAmB,aAAa,SAAS;AACzE,sBAAY,KAAK;AAAA,YACf,MAAM;AAAA,YACN,SAAS;AAAA,YACT,YAAY;AAAA,cACV,2BAA2B,OAAO,WAAW;AAAA,cAC7C,uBAAuB,OAAO,OAAO;AAAA,cACrC,kBAAkB;AAAA,cAClB,cAAc;AAAA,YAChB;AAAA,YACA,UAAU,CAAC,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,UAC1C,CAAC;AAAA,QACH;AAAA,MACF;AACA,eAAS,KAAK,IAAI,QAAQ,GAAG;AAAA,IAC/B;AACA,QAAI,SAAS,MAAM,QAAQ;AACzB,kBAAY,KAAK,EAAE,MAAM,QAAQ,OAAO,MAAM,MAAM,MAAM,EAAE,CAAC;AAAA,IAC/D;AACA,WAAO,OAAO,UAAU,OAAO,OAAO,OAAO,GAAG,GAAG,WAAW;AAAA,EAChE;AAEA,uBAAqB,WAAW,eAAe;AACjD;AAEA,SAAS,qBACP,WACA,iBACM;AACN,aAAW,YAAY,UAAU,oBAAoB,KAAK,GAAG;AAC3D,QAAI,CAAC,gBAAgB,IAAI,QAAQ,EAAG,WAAU,oBAAoB,OAAO,QAAQ;AAAA,EACnF;AACA,aAAW,YAAY,UAAU,kBAAkB;AACjD,QAAI,CAAC,gBAAgB,IAAI,QAAQ,EAAG,WAAU,iBAAiB,OAAO,QAAQ;AAAA,EAChF;AACF;AAEA,SAAS,SAAS,MAAsB;AACtC,MAAI,OAAO;AACX,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,YAAQ,KAAK,WAAW,KAAK;AAC7B,WAAO,KAAK,KAAK,MAAM,QAAU;AAAA,EACnC;AACA,UAAQ,SAAS,GAAG,SAAS,EAAE;AACjC;AAEA,SAAS,0BACP,SACA,OAIC;AACD,MAAI,OAAO,SAAS,eAAe,OAAO,KAAK,cAAc,YAAY;AACvE,UAAM,YAAY,IAAI,KAAK,UAAU,QAAW,EAAE,aAAa,WAAW,CAAC;AAC3E,UAAM,WAAW,UAAU,QAAQ,OAAO;AAC1C,UAAMA,UAA4D,CAAC;AACnE,QAAIC,UAAS,QAAQ;AACrB,WAAOA,UAAS,KAAKD,QAAO,SAAS,OAAO;AAC1C,YAAM,UAAU,SAAS,WAAWC,UAAS,CAAC;AAC9C,UAAI,YAAY,QAAW;AACzB;AAAA,MACF;AACA,MAAAD,QAAO,QAAQ;AAAA,QACb,aAAa,QAAQ;AAAA,QACrB,WAAW,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,MAC7C,CAAC;AACD,MAAAC,UAAS,QAAQ;AAAA,IACnB;AACA,WAAOD;AAAA,EACT;AAEA,QAAM,SAA4D,CAAC;AACnE,MAAI,SAAS,QAAQ;AACrB,SAAO,SAAS,KAAK,OAAO,SAAS,OAAO;AAC1C,QAAI,cAAc,SAAS;AAC3B,UAAM,OAAO,QAAQ,WAAW,WAAW;AAC3C,QAAI,QAAQ,SAAU,QAAQ,SAAU,cAAc,GAAG;AACvD,YAAM,eAAe,QAAQ,WAAW,cAAc,CAAC;AACvD,UAAI,gBAAgB,SAAU,gBAAgB,OAAQ;AACpD,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,WAAO,QAAQ,EAAE,aAAa,WAAW,OAAO,CAAC;AACjD,aAAS;AAAA,EACX;AACA,SAAO;AACT;;;AFlKU;AAsGN,0BAAAE,sBAAA;AAxJJ,IAAM,uBAA2E,CAAC,SAAS;AAEpF,IAAM,iBAAiB;AAAA,EAC5B,SAASC,gBACP,EAAE,YAAY,SAAS,OAAO,OAAO,eAAe,qBAAqB,GAAG,MAAM,GAClF,KACA;AACA,UAAM,qBAAqB,OAAO;AAAA,MAChC,aAAa;AAAA,MACb;AAAA,MACA,IAAI;AAAA,MACJ,kBAAkB,oBAAI,IAAY;AAAA,MAClC,qBAAqB,oBAAI,IAAoB;AAAA,IAC/C,CAAmE;AACnE,UAAM,kBAAkB,mBAAmB;AAC3C,QAAI,gBAAgB,YAAY,SAAS;AACvC,UAAI,CAAC,QAAQ,WAAW,gBAAgB,OAAO,GAAG;AAChD,wBAAgB,MAAM;AACtB,wBAAgB,cAAc;AAC9B,wBAAgB,iBAAiB,MAAM;AACvC,wBAAgB,oBAAoB,MAAM;AAAA,MAC5C;AACA,sBAAgB,UAAU;AAAA,IAC5B;AACA,QAAI,CAAC,QAAQ,gBAAgB,gBAAgB,MAAM;AACjD,iBAAW,YAAY,gBAAgB,oBAAoB,KAAK,GAAG;AACjE,wBAAgB,iBAAiB,IAAI,QAAQ;AAAA,MAC/C;AAAA,IACF;AACA,UAAM,eAAe,YAAY,CAAC,aAAqB;AACrD,yBAAmB,QAAQ,iBAAiB,IAAI,QAAQ;AAAA,IAC1D,GAAG,CAAC,CAAC;AAEL,UAAM,SAAS;AAAA,MACb,MACE,0BAA0B,SAAS;AAAA,QACjC,gBAAgB,kBAAkB;AAAA,MACpC,CAAC;AAAA,MACH,CAAC,SAAS,aAAa;AAAA,IACzB;AACA,UAAM,sBAAsB;AAAA,MAC1B,MAAM,0BAA0B,YAAY,YAAY;AAAA,MACxD,CAAC,YAAY,YAAY;AAAA,IAC3B;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,UAAU,OAAO,IAAI,CAAC,OAAO,UAC3B;AAAA,UAAC;AAAA;AAAA,YACC,YAAY;AAAA,YACZ,SAAS,MAAM;AAAA,YACf,MAAM,QAAQ,UAAU,OAAO,SAAS;AAAA,YACxC;AAAA,YACA,aAAa,GAAG,gBAAgB,EAAE,IAAI,MAAM,WAAW;AAAA,YACvD,eAAe,iBAAiB;AAAA,YAChC;AAAA;AAAA,UACK,MAAM;AAAA,QACb,CACD;AAAA,QACD,aAAa;AAAA,QACb,cAAc,MAAM,YAAY,MAAM,OAAO,cAAc;AAAA,MAC7D;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,KAAK,SAASC,qBAAoB,OAQ3D;AACD,QAAM,eAAe;AAAA,IACnB,MAAM,iCAAiC,MAAM,aAAa,MAAM,eAAe;AAAA,IAC/E,CAAC,MAAM,aAAa,MAAM,eAAe;AAAA,EAC3C;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAY,MAAM;AAAA,MAClB,eAAe,MAAM,OAAO,CAAC,YAAY,IAAI;AAAA,MAC7C,eAAe,MAAM;AAAA,MACrB,qBAAqB,MAAM;AAAA,MAE1B,gBAAM;AAAA;AAAA,EACT;AAEJ,CAAC;AAED,SAAS,0BACP,YACA,iBACY;AACZ,QAAM,eAAe,YAAY;AACjC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,KAAK,WAAW;AACd,YAAM,YAAY,yBAAyB,SAAS;AACpD,YAAM,gBAAgB;AAMtB,UAAI,cAAc,YAAY,MAAM,aAAa;AAC/C,eAAO,iBAAiB,eAAe,eAAe;AAAA,MACxD;AACA,UAAI,iBAAiB,QAAW;AAC9B,eAAO,cAAc,cAAc,SAAS;AAAA,MAC9C;AACA,YAAM,EAAE,MAAM,OAAO,GAAG,aAAa,IAAI;AACzC,aAAO,oBAAC,UAAM,GAAG,cAAc;AAAA,IACjC;AAAA,EACF;AACF;AAEA,SAAS,yBAA2C,OAAa;AAC/D,QAAM,SAAkC,CAAC;AACzC,aAAW,QAAQ,OAAO,KAAK,KAAK,GAAG;AACrC,QAAI,SAAS,OAAO;AAClB,aAAO,IAAI,IAAK,MAAkC,IAAI;AAAA,IACxD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBACP,OAMA,iBACW;AACX,QAAM;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,IACN,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,gBAAgB,OAAO,OAAO;AACpC,QAAM,mBAAmB,OAAO,UAAU;AAC1C,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,cAAW;AAAA,MACX,KAAK,YAAY;AAAA,MACjB,gBAAgB,CAAC,UAAU;AACzB,yBAAiB,KAAK;AACtB,YAAI,aAAa,OAAW,iBAAgB,QAAQ;AAAA,MACtD;AAAA,MACA,OACE;AAAA,QACE,iCAAiC,OAAO,SAAS,aAAa,IAAI,gBAAgB;AAAA,QAClF,kCAAkC,GAAG,OAAO,SAAS,gBAAgB,IAAI,mBAAmB,GAAG;AAAA,MACjG;AAAA;AAAA,IAGD;AAAA,EACH;AAEJ;","names":["ranges","cursor","createElement","StreamMarkdown","StreamMarkdownBlock"]}
|