@mastra/playground-ui 53.0.0-alpha.8 → 53.0.0-alpha.9
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/dist/{code-diff-C-EHXZyK.cjs → code-diff-CHZ3P1ky.cjs} +51 -43
- package/dist/code-diff-CHZ3P1ky.cjs.map +1 -0
- package/dist/{code-diff-BB4sqHpq.js → code-diff-CIRbnIfl.js} +52 -44
- package/dist/code-diff-CIRbnIfl.js.map +1 -0
- package/dist/{combobox-BQrlN0eB.cjs → combobox-JNWmgC13.cjs} +8 -3
- package/dist/combobox-JNWmgC13.cjs.map +1 -0
- package/dist/{combobox-DeeAlYti.js → combobox-nxjXzRWu.js} +8 -3
- package/dist/combobox-nxjXzRWu.js.map +1 -0
- package/dist/components/CodeDiff.cjs.js +1 -1
- package/dist/components/CodeDiff.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.cjs.js.map +1 -1
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/Comment.es.js.map +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +0 -1
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +0 -1
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MainHeader.cjs.js +1 -1
- package/dist/components/MainHeader.cjs.js.map +1 -1
- package/dist/components/MainHeader.es.js +1 -1
- package/dist/components/MainHeader.es.js.map +1 -1
- package/dist/components/PropertyFilter.cjs.js +1 -1
- package/dist/components/PropertyFilter.es.js +1 -1
- package/dist/{data-code-section-Dn9smaz4.cjs → data-code-section-D5I0m1cS.cjs} +33 -4
- package/dist/data-code-section-D5I0m1cS.cjs.map +1 -0
- package/dist/{data-code-section-DN2yPgEz.js → data-code-section-d3NffL3V.js} +35 -6
- package/dist/data-code-section-d3NffL3V.js.map +1 -0
- package/dist/{data-panel-DEatwExN.cjs → data-panel-Bo2HCylZ.cjs} +2 -2
- package/dist/{data-panel-DEatwExN.cjs.map → data-panel-Bo2HCylZ.cjs.map} +1 -1
- package/dist/{data-panel-2Da0Utgy.js → data-panel-T3vp7wTD.js} +2 -2
- package/dist/{data-panel-2Da0Utgy.js.map → data-panel-T3vp7wTD.js.map} +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +61 -105
- package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +62 -106
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +62 -0
- package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-summary-description.d.ts +2 -0
- package/dist/domains/traces/components/span-summary-description.es.js +58 -0
- package/dist/domains/traces/components/span-summary-description.es.js.map +1 -0
- package/dist/domains/traces/components/timeline-expand-col.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-expand-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-expand-col.es.js +1 -1
- package/dist/domains/traces/components/timeline-expand-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js +1 -1
- package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -5
- package/dist/domains/traces/components/traces-toolbar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-toolbar.es.js +1 -5
- package/dist/domains/traces/components/traces-toolbar.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js +11 -18
- package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js +13 -20
- package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +5 -5
- package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-filters.es.js +5 -5
- package/dist/domains/traces/trace-filters.es.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.cjs.js +6 -0
- package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.es.js +6 -1
- package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +0 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +0 -1
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/src/domains/traces/components/span-summary-description.d.ts +10 -0
- package/dist/src/domains/traces/components/traces-toolbar.d.ts +1 -5
- package/dist/src/domains/traces/hooks/index.d.ts +1 -1
- package/dist/src/domains/traces/hooks/use-trace-filter-persistence.d.ts +5 -18
- package/dist/src/domains/traces/trace-filters.d.ts +4 -3
- package/dist/src/domains/traces/utils/span-utils.d.ts +2 -0
- package/dist/src/ds/components/CodeDiff/code-diff.stories.d.ts +2 -0
- package/dist/src/ds/components/Combobox/combobox.d.ts +3 -1
- package/dist/src/ds/components/DataCodeSection/data-code-section.d.ts +9 -1
- package/dist/src/ds/components/DataCodeSection/index.d.ts +1 -1
- package/dist/style.css +11 -3
- package/package.json +7 -7
- package/dist/code-diff-BB4sqHpq.js.map +0 -1
- package/dist/code-diff-C-EHXZyK.cjs.map +0 -1
- package/dist/combobox-BQrlN0eB.cjs.map +0 -1
- package/dist/combobox-DeeAlYti.js.map +0 -1
- package/dist/data-code-section-DN2yPgEz.js.map +0 -1
- package/dist/data-code-section-Dn9smaz4.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Comment.cjs.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-arrival.tsx","../../src/ds/components/Comment/comment-composer.tsx","../../src/ds/components/Comment/comment-editor.tsx","../../src/ds/components/Comment/comment-quote.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed' | 'thread';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef, HTMLAttributes } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n thread: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n thread: '',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nconst commentItemLayout: Record<CommentVariant, string> = {\n default: 'flex flex-col gap-1',\n embed: 'flex flex-col gap-1',\n thread: 'relative flex gap-2 rounded-lg px-2 hover:bg-surface3/60',\n};\n\nexport interface CommentItemProps extends HTMLAttributes<HTMLElement> {\n /** Same author moments after the row above: the header is dropped and the row tightens. */\n continued?: boolean;\n /** The comment a link pointed at. */\n highlighted?: boolean;\n}\n\nexport const CommentItem = forwardRef<HTMLElement, CommentItemProps>(\n ({ className, continued = false, highlighted = false, ...props }, ref) => {\n const variant = useCommentVariant();\n // A thread row is a stream entry among runs and moves, not a list item.\n const Root = variant === 'thread' ? 'div' : 'li';\n\n return (\n <Root\n // Cast needed: `Root` is polymorphic, so TS narrows the expected ref to a single element type.\n ref={ref as never}\n data-slot=\"comment-item\"\n className={cn(\n 'group/comment-item',\n commentItemLayout[variant],\n variant === 'thread' && (continued ? 'py-0.5' : 'py-1.5'),\n highlighted && 'bg-accent1/10',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemAvatarProps = ComponentPropsWithoutRef<'div'>;\n\n/** Fixed gutter: left empty on a continuation row, it keeps the body aligned under the avatar above. */\nexport const CommentItemAvatar = forwardRef<HTMLDivElement, CommentItemAvatarProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-avatar\" className={cn('w-6 shrink-0 pt-0.5', className)} {...props} />\n));\nCommentItemAvatar.displayName = 'CommentItemAvatar';\n\nexport type CommentItemContentProps = ComponentPropsWithoutRef<'div'>;\n\n/** Everything beside the gutter, stacked and free to shrink so long words wrap instead of widening the row. */\nexport const CommentItemContent = forwardRef<HTMLDivElement, CommentItemContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-content\" className={cn('min-w-0 flex-1', className)} {...props} />\n ),\n);\nCommentItemContent.displayName = 'CommentItemContent';\n\nconst commentItemHeaderLayout: Record<CommentVariant, string> = {\n default: 'flex items-center gap-2',\n embed: 'flex items-center gap-2',\n thread: 'flex items-baseline gap-1.5',\n};\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-header\"\n className={cn(commentItemHeaderLayout[variant], className)}\n {...props}\n />\n );\n});\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nconst commentItemAuthorSize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemAuthorTone: Record<CommentVariant, string> = {\n default: 'font-medium text-neutral6',\n embed: 'font-medium text-neutral6',\n thread: 'truncate font-medium text-neutral6',\n};\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n as=\"span\"\n variant={commentItemAuthorSize[variant]}\n data-slot=\"comment-item-author\"\n className={cn(commentItemAuthorTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nconst commentItemTimestampTone: Record<CommentVariant, string> = {\n default: 'text-ui-sm leading-ui-sm text-neutral3',\n embed: 'text-ui-sm leading-ui-sm text-neutral3',\n thread: 'text-ui-xs leading-ui-xs text-neutral2 shrink-0',\n};\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn(commentItemTimestampTone[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodySize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemBodyTone: Record<CommentVariant, string> = {\n default: 'whitespace-pre-wrap text-neutral6 border-l border-border1 pl-3',\n embed: 'whitespace-pre-wrap text-neutral6',\n thread: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n // Rendered markdown brings its own blocks, which a paragraph cannot hold.\n as={variant === 'thread' ? 'div' : 'p'}\n variant={commentItemBodySize[variant]}\n data-slot=\"comment-item-body\"\n className={cn(commentItemBodyTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nconst commentItemActionsLayout: Record<CommentVariant, string> = {\n default:\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100 motion-safe:transition-opacity',\n embed: '',\n // Hung over the row's own top edge, so it never reflows the body it floats above.\n // `pointer-fine` only: a touch screen has no hover to reveal it with.\n thread:\n 'bg-surface2 border-border1 absolute -top-2 right-2 flex items-center gap-0.5 rounded-lg border px-0.5 transition-opacity duration-200 ease-out motion-reduce:transition-none pointer-fine:opacity-0 pointer-fine:group-focus-within/comment-item:opacity-100 pointer-fine:group-hover/comment-item:opacity-100',\n};\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(commentItemActionsLayout[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import type { ReactNode } from 'react';\n\nimport { ArrivalScope, useWatched } from '@/ds/components/Arrival';\n\nimport './comment-arrival.css';\n\n/** A comment the reader watched land rises into place; one that was already there just appears. */\nexport function CommentArrival({ children }: { children: ReactNode }) {\n const watched = useWatched();\n\n return (\n <div data-slot=\"comment-arrival\" className={watched ? 'mastra-comment-arriving' : undefined}>\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n );\n}\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n thread: 'md',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n thread: 'outline',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n","import { useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentEditorProps {\n initialBody: string;\n /** Handed the trimmed draft. Closing is the caller's call, so a save that failed keeps what was typed. */\n onSave: (body: string) => void;\n onClose: () => void;\n /** The caller's save in flight: the box locks until it settles. */\n isPending?: boolean;\n /** Why the caller's last save failed. */\n error?: string;\n 'aria-label'?: string;\n className?: string;\n}\n\n/** Owns the draft only; whether a save landed is the caller's mutation to report. */\nexport function CommentEditor({\n initialBody,\n onSave,\n onClose,\n isPending = false,\n error,\n 'aria-label': ariaLabel = 'Edit comment',\n className,\n}: CommentEditorProps) {\n const [draft, setDraft] = useState(initialBody);\n const body = draft.trim();\n const canSave = body.length > 0 && !isPending;\n\n const save = () => {\n if (!canSave) return;\n if (body === initialBody) {\n onClose();\n return;\n }\n onSave(body);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n // An IME commit fires Enter mid-composition; acting on it would save half a word.\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n };\n\n return (\n <div data-slot=\"comment-editor\" className={cn('mt-1 flex flex-col gap-1.5', className)}>\n <div className=\"relative\">\n <textarea\n value={draft}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n readOnly={isPending}\n aria-label={ariaLabel}\n rows={2}\n className=\"text-neutral6 border-border1 bg-surface2 text-ui-sm focus:border-border2 block field-sizing-content max-h-40 w-full resize-none overflow-y-auto rounded-lg border px-2 pt-1.5 pb-9 outline-none\"\n />\n {/* Opaque, so a scrolled line passes behind the actions instead of under them. */}\n <div className=\"bg-surface2 absolute inset-x-px bottom-px flex items-center justify-end gap-1 rounded-b-lg px-1.5 pt-1 pb-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={isPending} onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"xs\" disabled={!canSave} onClick={save}>\n {isPending ? 'Saving…' : 'Save'}\n </Button>\n </div>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-ui-xs text-error m-0\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","import { X } from 'lucide-react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentQuoteProps {\n authorName?: string;\n quote: string;\n /** Given only while the quote is a draft the writer can still drop. */\n onDismiss?: () => void;\n className?: string;\n}\n\n/** The passage a reply answers, above the reply itself or inside the composer writing it. */\nexport function CommentQuote({ authorName, quote, onDismiss, className }: CommentQuoteProps) {\n return (\n <blockquote\n data-slot=\"comment-quote\"\n className={cn('text-neutral3 m-0 flex min-w-0 gap-2 border-l-2 border-border2 pl-2 text-ui-xs', className)}\n >\n <span className=\"min-w-0 flex-1\">\n {authorName ? <span className=\"text-neutral4 font-medium\">{authorName} </span> : null}\n <span className=\"line-clamp-2 wrap-anywhere whitespace-pre-line\">{quote}</span>\n </span>\n {onDismiss ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Remove quote\"\n onClick={onDismiss}\n className=\"shrink-0\"\n >\n <X size={12} aria-hidden />\n </Button>\n ) : null}\n </blockquote>\n );\n}\n"],"names":["createContext","useContext","cva","forwardRef","jsx","cn","Txt","useWatched","ArrivalScope","jsxs","InputGroup","InputGroupInput","InputGroupAddon","InputGroupButton","ArrowUp","useState","Button","X"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Comment.cjs.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-arrival.tsx","../../src/ds/components/Comment/comment-composer.tsx","../../src/ds/components/Comment/comment-editor.tsx","../../src/ds/components/Comment/comment-quote.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed' | 'thread';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef, HTMLAttributes } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n thread: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n thread: '',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nconst commentItemLayout: Record<CommentVariant, string> = {\n default: 'flex flex-col gap-1',\n embed: 'flex flex-col gap-1',\n thread: 'relative flex gap-2 rounded-lg px-2 hover:bg-surface3/60',\n};\n\nexport interface CommentItemProps extends HTMLAttributes<HTMLElement> {\n /** Same author moments after the row above: the header is dropped and the row tightens. */\n continued?: boolean;\n /** The comment a link pointed at. */\n highlighted?: boolean;\n}\n\nexport const CommentItem = forwardRef<HTMLElement, CommentItemProps>(\n ({ className, continued = false, highlighted = false, ...props }, ref) => {\n const variant = useCommentVariant();\n // A thread row is a stream entry among runs and moves, not a list item.\n const Root = variant === 'thread' ? 'div' : 'li';\n\n return (\n <Root\n // Cast needed: `Root` is polymorphic, so TS narrows the expected ref to a single element type.\n ref={ref as never}\n data-slot=\"comment-item\"\n className={cn(\n 'group/comment-item',\n commentItemLayout[variant],\n variant === 'thread' && (continued ? 'py-0.5' : 'py-1.5'),\n highlighted && 'bg-accent1/10',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemAvatarProps = ComponentPropsWithoutRef<'div'>;\n\n/** Fixed gutter: left empty on a continuation row, it keeps the body aligned under the avatar above. */\nexport const CommentItemAvatar = forwardRef<HTMLDivElement, CommentItemAvatarProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-avatar\" className={cn('w-6 shrink-0 pt-0.5', className)} {...props} />\n));\nCommentItemAvatar.displayName = 'CommentItemAvatar';\n\nexport type CommentItemContentProps = ComponentPropsWithoutRef<'div'>;\n\n/** Everything beside the gutter, stacked and free to shrink so long words wrap instead of widening the row. */\nexport const CommentItemContent = forwardRef<HTMLDivElement, CommentItemContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-content\" className={cn('min-w-0 flex-1', className)} {...props} />\n ),\n);\nCommentItemContent.displayName = 'CommentItemContent';\n\nconst commentItemHeaderLayout: Record<CommentVariant, string> = {\n default: 'flex items-center gap-2',\n embed: 'flex items-center gap-2',\n thread: 'flex items-baseline gap-1.5',\n};\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-header\"\n className={cn(commentItemHeaderLayout[variant], className)}\n {...props}\n />\n );\n});\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nconst commentItemAuthorSize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemAuthorTone: Record<CommentVariant, string> = {\n default: 'font-medium text-neutral6',\n embed: 'font-medium text-neutral6',\n thread: 'truncate font-medium text-neutral6',\n};\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n as=\"span\"\n variant={commentItemAuthorSize[variant]}\n data-slot=\"comment-item-author\"\n className={cn(commentItemAuthorTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nconst commentItemTimestampTone: Record<CommentVariant, string> = {\n default: 'text-ui-sm leading-ui-sm text-neutral3',\n embed: 'text-ui-sm leading-ui-sm text-neutral3',\n thread: 'text-ui-xs leading-ui-xs text-neutral2 shrink-0',\n};\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn(commentItemTimestampTone[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodySize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemBodyTone: Record<CommentVariant, string> = {\n default: 'whitespace-pre-wrap text-neutral6 border-l border-border1 pl-3',\n embed: 'whitespace-pre-wrap text-neutral6',\n thread: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n // Rendered markdown brings its own blocks, which a paragraph cannot hold.\n as={variant === 'thread' ? 'div' : 'p'}\n variant={commentItemBodySize[variant]}\n data-slot=\"comment-item-body\"\n className={cn(commentItemBodyTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nconst commentItemActionsLayout: Record<CommentVariant, string> = {\n default:\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100 motion-safe:transition-opacity',\n embed: '',\n // Hung over the row's own top edge, so it never reflows the body it floats above.\n // `pointer-fine` only: a touch screen has no hover to reveal it with.\n thread:\n 'bg-surface2 border-border1 absolute -top-2 right-2 flex items-center gap-0.5 rounded-lg border px-0.5 transition-opacity duration-200 ease-out motion-reduce:transition-none pointer-fine:opacity-0 pointer-fine:group-focus-within/comment-item:opacity-100 pointer-fine:group-hover/comment-item:opacity-100',\n};\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(commentItemActionsLayout[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import type { ReactNode } from 'react';\n\nimport { ArrivalScope, useWatched } from '@/ds/components/Arrival';\n\nimport './comment-arrival.css';\n\n/** A comment the reader watched land rises into place; one that was already there just appears. */\nexport function CommentArrival({ children }: { children: ReactNode }) {\n const watched = useWatched();\n\n return (\n <div data-slot=\"comment-arrival\" className={watched ? 'mastra-comment-arriving' : undefined}>\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n );\n}\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n thread: 'md',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n thread: 'outline',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n","import { useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentEditorProps {\n initialBody: string;\n /** Handed the trimmed draft. Closing is the caller's call, so a save that failed keeps what was typed. */\n onSave: (body: string) => void;\n onClose: () => void;\n /** The caller's save in flight: the box locks until it settles. */\n isPending?: boolean;\n /** Why the caller's last save failed. */\n error?: string;\n 'aria-label'?: string;\n className?: string;\n}\n\n/** Owns the draft only; whether a save landed is the caller's mutation to report. */\nexport function CommentEditor({\n initialBody,\n onSave,\n onClose,\n isPending = false,\n error,\n 'aria-label': ariaLabel = 'Edit comment',\n className,\n}: CommentEditorProps) {\n const [draft, setDraft] = useState(initialBody);\n const body = draft.trim();\n const canSave = body.length > 0 && !isPending;\n\n const save = () => {\n if (!canSave) return;\n if (body === initialBody) {\n onClose();\n return;\n }\n onSave(body);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n // An IME commit fires Enter mid-composition; acting on it would save half a word.\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n };\n\n return (\n <div data-slot=\"comment-editor\" className={cn('mt-1 flex flex-col gap-1.5', className)}>\n <div className=\"relative\">\n <textarea\n value={draft}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n readOnly={isPending}\n aria-label={ariaLabel}\n rows={2}\n className=\"border-border1 bg-surface2 text-ui-sm text-neutral6 focus:border-border2 block field-sizing-content max-h-40 w-full resize-none overflow-y-auto rounded-lg border px-2 pt-1.5 pb-9 outline-none\"\n />\n {/* Opaque, so a scrolled line passes behind the actions instead of under them. */}\n <div className=\"bg-surface2 absolute inset-x-px bottom-px flex items-center justify-end gap-1 rounded-b-lg px-1.5 pt-1 pb-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={isPending} onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"xs\" disabled={!canSave} onClick={save}>\n {isPending ? 'Saving…' : 'Save'}\n </Button>\n </div>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-ui-xs text-error m-0\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","import { X } from 'lucide-react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentQuoteProps {\n authorName?: string;\n quote: string;\n /** Given only while the quote is a draft the writer can still drop. */\n onDismiss?: () => void;\n className?: string;\n}\n\n/** The passage a reply answers, above the reply itself or inside the composer writing it. */\nexport function CommentQuote({ authorName, quote, onDismiss, className }: CommentQuoteProps) {\n return (\n <blockquote\n data-slot=\"comment-quote\"\n className={cn('m-0 flex min-w-0 gap-2 border-l-2 border-border2 pl-2 text-ui-xs text-neutral3', className)}\n >\n <span className=\"min-w-0 flex-1\">\n {authorName ? <span className=\"text-neutral4 font-medium\">{authorName} </span> : null}\n <span className=\"line-clamp-2 wrap-anywhere whitespace-pre-line\">{quote}</span>\n </span>\n {onDismiss ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Remove quote\"\n onClick={onDismiss}\n className=\"shrink-0\"\n >\n <X size={12} aria-hidden />\n </Button>\n ) : null}\n </blockquote>\n );\n}\n"],"names":["createContext","useContext","cva","forwardRef","jsx","cn","Txt","useWatched","ArrivalScope","jsxs","InputGroup","InputGroupInput","InputGroupAddon","InputGroupButton","ArrowUp","useState","Button","X"],"mappings":"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"}
|
|
@@ -272,7 +272,7 @@ function CommentEditor({
|
|
|
272
272
|
readOnly: isPending,
|
|
273
273
|
"aria-label": ariaLabel,
|
|
274
274
|
rows: 2,
|
|
275
|
-
className: "
|
|
275
|
+
className: "border-border1 bg-surface2 text-ui-sm text-neutral6 focus:border-border2 block field-sizing-content max-h-40 w-full resize-none overflow-y-auto rounded-lg border px-2 pt-1.5 pb-9 outline-none"
|
|
276
276
|
}
|
|
277
277
|
),
|
|
278
278
|
/* @__PURE__ */ jsxs("div", { className: "bg-surface2 absolute inset-x-px bottom-px flex items-center justify-end gap-1 rounded-b-lg px-1.5 pt-1 pb-1.5", children: [
|
|
@@ -289,7 +289,7 @@ function CommentQuote({ authorName, quote, onDismiss, className }) {
|
|
|
289
289
|
"blockquote",
|
|
290
290
|
{
|
|
291
291
|
"data-slot": "comment-quote",
|
|
292
|
-
className: cn("
|
|
292
|
+
className: cn("m-0 flex min-w-0 gap-2 border-l-2 border-border2 pl-2 text-ui-xs text-neutral3", className),
|
|
293
293
|
children: [
|
|
294
294
|
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
295
295
|
authorName ? /* @__PURE__ */ jsxs("span", { className: "text-neutral4 font-medium", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Comment.es.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-arrival.tsx","../../src/ds/components/Comment/comment-composer.tsx","../../src/ds/components/Comment/comment-editor.tsx","../../src/ds/components/Comment/comment-quote.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed' | 'thread';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef, HTMLAttributes } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n thread: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n thread: '',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nconst commentItemLayout: Record<CommentVariant, string> = {\n default: 'flex flex-col gap-1',\n embed: 'flex flex-col gap-1',\n thread: 'relative flex gap-2 rounded-lg px-2 hover:bg-surface3/60',\n};\n\nexport interface CommentItemProps extends HTMLAttributes<HTMLElement> {\n /** Same author moments after the row above: the header is dropped and the row tightens. */\n continued?: boolean;\n /** The comment a link pointed at. */\n highlighted?: boolean;\n}\n\nexport const CommentItem = forwardRef<HTMLElement, CommentItemProps>(\n ({ className, continued = false, highlighted = false, ...props }, ref) => {\n const variant = useCommentVariant();\n // A thread row is a stream entry among runs and moves, not a list item.\n const Root = variant === 'thread' ? 'div' : 'li';\n\n return (\n <Root\n // Cast needed: `Root` is polymorphic, so TS narrows the expected ref to a single element type.\n ref={ref as never}\n data-slot=\"comment-item\"\n className={cn(\n 'group/comment-item',\n commentItemLayout[variant],\n variant === 'thread' && (continued ? 'py-0.5' : 'py-1.5'),\n highlighted && 'bg-accent1/10',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemAvatarProps = ComponentPropsWithoutRef<'div'>;\n\n/** Fixed gutter: left empty on a continuation row, it keeps the body aligned under the avatar above. */\nexport const CommentItemAvatar = forwardRef<HTMLDivElement, CommentItemAvatarProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-avatar\" className={cn('w-6 shrink-0 pt-0.5', className)} {...props} />\n));\nCommentItemAvatar.displayName = 'CommentItemAvatar';\n\nexport type CommentItemContentProps = ComponentPropsWithoutRef<'div'>;\n\n/** Everything beside the gutter, stacked and free to shrink so long words wrap instead of widening the row. */\nexport const CommentItemContent = forwardRef<HTMLDivElement, CommentItemContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-content\" className={cn('min-w-0 flex-1', className)} {...props} />\n ),\n);\nCommentItemContent.displayName = 'CommentItemContent';\n\nconst commentItemHeaderLayout: Record<CommentVariant, string> = {\n default: 'flex items-center gap-2',\n embed: 'flex items-center gap-2',\n thread: 'flex items-baseline gap-1.5',\n};\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-header\"\n className={cn(commentItemHeaderLayout[variant], className)}\n {...props}\n />\n );\n});\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nconst commentItemAuthorSize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemAuthorTone: Record<CommentVariant, string> = {\n default: 'font-medium text-neutral6',\n embed: 'font-medium text-neutral6',\n thread: 'truncate font-medium text-neutral6',\n};\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n as=\"span\"\n variant={commentItemAuthorSize[variant]}\n data-slot=\"comment-item-author\"\n className={cn(commentItemAuthorTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nconst commentItemTimestampTone: Record<CommentVariant, string> = {\n default: 'text-ui-sm leading-ui-sm text-neutral3',\n embed: 'text-ui-sm leading-ui-sm text-neutral3',\n thread: 'text-ui-xs leading-ui-xs text-neutral2 shrink-0',\n};\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn(commentItemTimestampTone[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodySize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemBodyTone: Record<CommentVariant, string> = {\n default: 'whitespace-pre-wrap text-neutral6 border-l border-border1 pl-3',\n embed: 'whitespace-pre-wrap text-neutral6',\n thread: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n // Rendered markdown brings its own blocks, which a paragraph cannot hold.\n as={variant === 'thread' ? 'div' : 'p'}\n variant={commentItemBodySize[variant]}\n data-slot=\"comment-item-body\"\n className={cn(commentItemBodyTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nconst commentItemActionsLayout: Record<CommentVariant, string> = {\n default:\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100 motion-safe:transition-opacity',\n embed: '',\n // Hung over the row's own top edge, so it never reflows the body it floats above.\n // `pointer-fine` only: a touch screen has no hover to reveal it with.\n thread:\n 'bg-surface2 border-border1 absolute -top-2 right-2 flex items-center gap-0.5 rounded-lg border px-0.5 transition-opacity duration-200 ease-out motion-reduce:transition-none pointer-fine:opacity-0 pointer-fine:group-focus-within/comment-item:opacity-100 pointer-fine:group-hover/comment-item:opacity-100',\n};\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(commentItemActionsLayout[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import type { ReactNode } from 'react';\n\nimport { ArrivalScope, useWatched } from '@/ds/components/Arrival';\n\nimport './comment-arrival.css';\n\n/** A comment the reader watched land rises into place; one that was already there just appears. */\nexport function CommentArrival({ children }: { children: ReactNode }) {\n const watched = useWatched();\n\n return (\n <div data-slot=\"comment-arrival\" className={watched ? 'mastra-comment-arriving' : undefined}>\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n );\n}\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n thread: 'md',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n thread: 'outline',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n","import { useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentEditorProps {\n initialBody: string;\n /** Handed the trimmed draft. Closing is the caller's call, so a save that failed keeps what was typed. */\n onSave: (body: string) => void;\n onClose: () => void;\n /** The caller's save in flight: the box locks until it settles. */\n isPending?: boolean;\n /** Why the caller's last save failed. */\n error?: string;\n 'aria-label'?: string;\n className?: string;\n}\n\n/** Owns the draft only; whether a save landed is the caller's mutation to report. */\nexport function CommentEditor({\n initialBody,\n onSave,\n onClose,\n isPending = false,\n error,\n 'aria-label': ariaLabel = 'Edit comment',\n className,\n}: CommentEditorProps) {\n const [draft, setDraft] = useState(initialBody);\n const body = draft.trim();\n const canSave = body.length > 0 && !isPending;\n\n const save = () => {\n if (!canSave) return;\n if (body === initialBody) {\n onClose();\n return;\n }\n onSave(body);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n // An IME commit fires Enter mid-composition; acting on it would save half a word.\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n };\n\n return (\n <div data-slot=\"comment-editor\" className={cn('mt-1 flex flex-col gap-1.5', className)}>\n <div className=\"relative\">\n <textarea\n value={draft}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n readOnly={isPending}\n aria-label={ariaLabel}\n rows={2}\n className=\"text-neutral6 border-border1 bg-surface2 text-ui-sm focus:border-border2 block field-sizing-content max-h-40 w-full resize-none overflow-y-auto rounded-lg border px-2 pt-1.5 pb-9 outline-none\"\n />\n {/* Opaque, so a scrolled line passes behind the actions instead of under them. */}\n <div className=\"bg-surface2 absolute inset-x-px bottom-px flex items-center justify-end gap-1 rounded-b-lg px-1.5 pt-1 pb-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={isPending} onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"xs\" disabled={!canSave} onClick={save}>\n {isPending ? 'Saving…' : 'Save'}\n </Button>\n </div>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-ui-xs text-error m-0\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","import { X } from 'lucide-react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentQuoteProps {\n authorName?: string;\n quote: string;\n /** Given only while the quote is a draft the writer can still drop. */\n onDismiss?: () => void;\n className?: string;\n}\n\n/** The passage a reply answers, above the reply itself or inside the composer writing it. */\nexport function CommentQuote({ authorName, quote, onDismiss, className }: CommentQuoteProps) {\n return (\n <blockquote\n data-slot=\"comment-quote\"\n className={cn('text-neutral3 m-0 flex min-w-0 gap-2 border-l-2 border-border2 pl-2 text-ui-xs', className)}\n >\n <span className=\"min-w-0 flex-1\">\n {authorName ? <span className=\"text-neutral4 font-medium\">{authorName} </span> : null}\n <span className=\"line-clamp-2 wrap-anywhere whitespace-pre-line\">{quote}</span>\n </span>\n {onDismiss ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Remove quote\"\n onClick={onDismiss}\n className=\"shrink-0\"\n >\n <X size={12} aria-hidden />\n </Button>\n ) : null}\n </blockquote>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Comment.es.js","sources":["../../src/ds/components/Comment/comment-context.ts","../../src/ds/components/Comment/comment.tsx","../../src/ds/components/Comment/comment-arrival.tsx","../../src/ds/components/Comment/comment-composer.tsx","../../src/ds/components/Comment/comment-editor.tsx","../../src/ds/components/Comment/comment-quote.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport type CommentVariant = 'default' | 'embed' | 'thread';\n\nexport const CommentContext = createContext<CommentVariant | null>(null);\n\nexport function useCommentVariant(): CommentVariant {\n const variant = useContext(CommentContext);\n if (!variant) throw new Error('Comment compounds must be rendered within Comment');\n return variant;\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComponentPropsWithoutRef, HTMLAttributes } from 'react';\nimport { forwardRef } from 'react';\n\nimport { CommentContext, useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { Txt } from '@/ds/components/Txt';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nconst commentVariants = cva('flex flex-col', {\n variants: {\n variant: {\n default: 'gap-2',\n embed: 'gap-1 rounded-xl border border-border1 bg-surface3 p-3',\n thread: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface CommentProps extends ComponentPropsWithoutRef<'div'> {\n variant?: CommentVariant;\n}\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(({ className, variant = 'default', ...props }, ref) => (\n <CommentContext.Provider value={variant}>\n <div\n ref={ref}\n data-slot=\"comment\"\n data-variant={variant}\n className={cn(commentVariants({ variant }), className)}\n {...props}\n />\n </CommentContext.Provider>\n));\nComment.displayName = 'Comment';\n\nconst commentListGap: Record<CommentVariant, string> = {\n default: 'gap-3',\n embed: 'gap-2',\n thread: '',\n};\n\nexport type CommentListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport const CommentList = forwardRef<HTMLUListElement, CommentListProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <ul\n ref={ref}\n data-slot=\"comment-list\"\n className={cn('flex flex-col', commentListGap[variant], className)}\n {...props}\n />\n );\n});\nCommentList.displayName = 'CommentList';\n\nconst commentItemLayout: Record<CommentVariant, string> = {\n default: 'flex flex-col gap-1',\n embed: 'flex flex-col gap-1',\n thread: 'relative flex gap-2 rounded-lg px-2 hover:bg-surface3/60',\n};\n\nexport interface CommentItemProps extends HTMLAttributes<HTMLElement> {\n /** Same author moments after the row above: the header is dropped and the row tightens. */\n continued?: boolean;\n /** The comment a link pointed at. */\n highlighted?: boolean;\n}\n\nexport const CommentItem = forwardRef<HTMLElement, CommentItemProps>(\n ({ className, continued = false, highlighted = false, ...props }, ref) => {\n const variant = useCommentVariant();\n // A thread row is a stream entry among runs and moves, not a list item.\n const Root = variant === 'thread' ? 'div' : 'li';\n\n return (\n <Root\n // Cast needed: `Root` is polymorphic, so TS narrows the expected ref to a single element type.\n ref={ref as never}\n data-slot=\"comment-item\"\n className={cn(\n 'group/comment-item',\n commentItemLayout[variant],\n variant === 'thread' && (continued ? 'py-0.5' : 'py-1.5'),\n highlighted && 'bg-accent1/10',\n className,\n )}\n {...props}\n />\n );\n },\n);\nCommentItem.displayName = 'CommentItem';\n\nexport type CommentItemAvatarProps = ComponentPropsWithoutRef<'div'>;\n\n/** Fixed gutter: left empty on a continuation row, it keeps the body aligned under the avatar above. */\nexport const CommentItemAvatar = forwardRef<HTMLDivElement, CommentItemAvatarProps>(({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-avatar\" className={cn('w-6 shrink-0 pt-0.5', className)} {...props} />\n));\nCommentItemAvatar.displayName = 'CommentItemAvatar';\n\nexport type CommentItemContentProps = ComponentPropsWithoutRef<'div'>;\n\n/** Everything beside the gutter, stacked and free to shrink so long words wrap instead of widening the row. */\nexport const CommentItemContent = forwardRef<HTMLDivElement, CommentItemContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"comment-item-content\" className={cn('min-w-0 flex-1', className)} {...props} />\n ),\n);\nCommentItemContent.displayName = 'CommentItemContent';\n\nconst commentItemHeaderLayout: Record<CommentVariant, string> = {\n default: 'flex items-center gap-2',\n embed: 'flex items-center gap-2',\n thread: 'flex items-baseline gap-1.5',\n};\n\nexport type CommentItemHeaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const CommentItemHeader = forwardRef<HTMLDivElement, CommentItemHeaderProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-header\"\n className={cn(commentItemHeaderLayout[variant], className)}\n {...props}\n />\n );\n});\nCommentItemHeader.displayName = 'CommentItemHeader';\n\nconst commentItemAuthorSize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemAuthorTone: Record<CommentVariant, string> = {\n default: 'font-medium text-neutral6',\n embed: 'font-medium text-neutral6',\n thread: 'truncate font-medium text-neutral6',\n};\n\nexport type CommentItemAuthorProps = ComponentPropsWithoutRef<'span'>;\n\nexport const CommentItemAuthor = forwardRef<HTMLElement, CommentItemAuthorProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n as=\"span\"\n variant={commentItemAuthorSize[variant]}\n data-slot=\"comment-item-author\"\n className={cn(commentItemAuthorTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemAuthor.displayName = 'CommentItemAuthor';\n\nconst commentItemTimestampTone: Record<CommentVariant, string> = {\n default: 'text-ui-sm leading-ui-sm text-neutral3',\n embed: 'text-ui-sm leading-ui-sm text-neutral3',\n thread: 'text-ui-xs leading-ui-xs text-neutral2 shrink-0',\n};\n\nexport type CommentItemTimestampProps = ComponentPropsWithoutRef<'time'>;\n\nexport const CommentItemTimestamp = forwardRef<HTMLTimeElement, CommentItemTimestampProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <time\n ref={ref}\n data-slot=\"comment-item-timestamp\"\n className={cn(commentItemTimestampTone[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemTimestamp.displayName = 'CommentItemTimestamp';\n\nconst commentItemBodySize: Record<CommentVariant, TxtProps['variant']> = {\n default: 'ui-md',\n embed: 'ui-md',\n thread: 'ui-sm',\n};\n\nconst commentItemBodyTone: Record<CommentVariant, string> = {\n default: 'whitespace-pre-wrap text-neutral6 border-l border-border1 pl-3',\n embed: 'whitespace-pre-wrap text-neutral6',\n thread: '',\n};\n\nexport type CommentItemBodyProps = ComponentPropsWithoutRef<'p'>;\n\nexport const CommentItemBody = forwardRef<HTMLElement, CommentItemBodyProps>(({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <Txt\n ref={ref}\n // Rendered markdown brings its own blocks, which a paragraph cannot hold.\n as={variant === 'thread' ? 'div' : 'p'}\n variant={commentItemBodySize[variant]}\n data-slot=\"comment-item-body\"\n className={cn(commentItemBodyTone[variant], className)}\n {...props}\n />\n );\n});\nCommentItemBody.displayName = 'CommentItemBody';\n\nconst commentItemActionsLayout: Record<CommentVariant, string> = {\n default:\n 'flex items-center gap-1 opacity-0 group-focus-within/comment-item:opacity-100 group-hover/comment-item:opacity-100 motion-safe:transition-opacity',\n embed: '',\n // Hung over the row's own top edge, so it never reflows the body it floats above.\n // `pointer-fine` only: a touch screen has no hover to reveal it with.\n thread:\n 'bg-surface2 border-border1 absolute -top-2 right-2 flex items-center gap-0.5 rounded-lg border px-0.5 transition-opacity duration-200 ease-out motion-reduce:transition-none pointer-fine:opacity-0 pointer-fine:group-focus-within/comment-item:opacity-100 pointer-fine:group-hover/comment-item:opacity-100',\n};\n\nexport type CommentItemActionsProps = ComponentPropsWithoutRef<'div'>;\n\n/** Hidden in the `embed` variant, which drops per-item actions. */\nexport const CommentItemActions = forwardRef<HTMLDivElement, CommentItemActionsProps>(\n ({ className, ...props }, ref) => {\n const variant = useCommentVariant();\n if (variant === 'embed') return null;\n\n return (\n <div\n ref={ref}\n data-slot=\"comment-item-actions\"\n className={cn(commentItemActionsLayout[variant], className)}\n {...props}\n />\n );\n },\n);\nCommentItemActions.displayName = 'CommentItemActions';\n","import type { ReactNode } from 'react';\n\nimport { ArrivalScope, useWatched } from '@/ds/components/Arrival';\n\nimport './comment-arrival.css';\n\n/** A comment the reader watched land rises into place; one that was already there just appears. */\nexport function CommentArrival({ children }: { children: ReactNode }) {\n const watched = useWatched();\n\n return (\n <div data-slot=\"comment-arrival\" className={watched ? 'mastra-comment-arriving' : undefined}>\n <ArrivalScope>{children}</ArrivalScope>\n </div>\n );\n}\n","import { ArrowUp } from 'lucide-react';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { useCommentVariant } from './comment-context';\nimport type { CommentVariant } from './comment-context';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupButtonProps, InputGroupInputProps } from '@/ds/components/InputGroup';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { cn } from '@/lib/utils';\n\nexport type CommentComposerProps = ComponentPropsWithoutRef<'form'>;\n\nexport const CommentComposer = forwardRef<HTMLFormElement, CommentComposerProps>(({ className, ...props }, ref) => (\n <form ref={ref} data-slot=\"comment-composer\" className={cn('flex w-full items-center gap-2', className)} {...props} />\n));\nCommentComposer.displayName = 'CommentComposer';\n\nconst composerSize: Record<CommentVariant, ControlSize> = {\n default: 'md',\n embed: 'sm',\n thread: 'md',\n};\n\nconst composerInputVariant: Record<CommentVariant, 'default' | 'outline'> = {\n default: 'outline',\n embed: 'default',\n thread: 'outline',\n};\n\nexport interface CommentComposerInputProps extends InputGroupInputProps {\n /** Layout classes for the surrounding InputGroup. */\n groupClassName?: string;\n children?: ReactNode;\n}\n\nexport const CommentComposerInput = forwardRef<HTMLInputElement, CommentComposerInputProps>(\n ({ groupClassName, children, ...props }, ref) => {\n const variant = useCommentVariant();\n\n return (\n <InputGroup size={composerSize[variant]} variant={composerInputVariant[variant]} className={groupClassName}>\n <InputGroupInput ref={ref} data-slot=\"comment-composer-input\" {...props} />\n {children}\n </InputGroup>\n );\n },\n);\nCommentComposerInput.displayName = 'CommentComposerInput';\n\nexport type CommentComposerSendProps = Omit<InputGroupButtonProps, 'children'>;\n\nexport const CommentComposerSend = forwardRef<HTMLButtonElement, CommentComposerSendProps>(\n ({ 'aria-label': ariaLabel = 'Send comment', type = 'submit', ...props }, ref) => (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton ref={ref} data-slot=\"comment-composer-send\" type={type} aria-label={ariaLabel} {...props}>\n <ArrowUp />\n </InputGroupButton>\n </InputGroupAddon>\n ),\n);\nCommentComposerSend.displayName = 'CommentComposerSend';\n","import { useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentEditorProps {\n initialBody: string;\n /** Handed the trimmed draft. Closing is the caller's call, so a save that failed keeps what was typed. */\n onSave: (body: string) => void;\n onClose: () => void;\n /** The caller's save in flight: the box locks until it settles. */\n isPending?: boolean;\n /** Why the caller's last save failed. */\n error?: string;\n 'aria-label'?: string;\n className?: string;\n}\n\n/** Owns the draft only; whether a save landed is the caller's mutation to report. */\nexport function CommentEditor({\n initialBody,\n onSave,\n onClose,\n isPending = false,\n error,\n 'aria-label': ariaLabel = 'Edit comment',\n className,\n}: CommentEditorProps) {\n const [draft, setDraft] = useState(initialBody);\n const body = draft.trim();\n const canSave = body.length > 0 && !isPending;\n\n const save = () => {\n if (!canSave) return;\n if (body === initialBody) {\n onClose();\n return;\n }\n onSave(body);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n // An IME commit fires Enter mid-composition; acting on it would save half a word.\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n save();\n }\n };\n\n return (\n <div data-slot=\"comment-editor\" className={cn('mt-1 flex flex-col gap-1.5', className)}>\n <div className=\"relative\">\n <textarea\n value={draft}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n readOnly={isPending}\n aria-label={ariaLabel}\n rows={2}\n className=\"border-border1 bg-surface2 text-ui-sm text-neutral6 focus:border-border2 block field-sizing-content max-h-40 w-full resize-none overflow-y-auto rounded-lg border px-2 pt-1.5 pb-9 outline-none\"\n />\n {/* Opaque, so a scrolled line passes behind the actions instead of under them. */}\n <div className=\"bg-surface2 absolute inset-x-px bottom-px flex items-center justify-end gap-1 rounded-b-lg px-1.5 pt-1 pb-1.5\">\n <Button type=\"button\" variant=\"ghost\" size=\"xs\" disabled={isPending} onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"xs\" disabled={!canSave} onClick={save}>\n {isPending ? 'Saving…' : 'Save'}\n </Button>\n </div>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-ui-xs text-error m-0\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","import { X } from 'lucide-react';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nexport interface CommentQuoteProps {\n authorName?: string;\n quote: string;\n /** Given only while the quote is a draft the writer can still drop. */\n onDismiss?: () => void;\n className?: string;\n}\n\n/** The passage a reply answers, above the reply itself or inside the composer writing it. */\nexport function CommentQuote({ authorName, quote, onDismiss, className }: CommentQuoteProps) {\n return (\n <blockquote\n data-slot=\"comment-quote\"\n className={cn('m-0 flex min-w-0 gap-2 border-l-2 border-border2 pl-2 text-ui-xs text-neutral3', className)}\n >\n <span className=\"min-w-0 flex-1\">\n {authorName ? <span className=\"text-neutral4 font-medium\">{authorName} </span> : null}\n <span className=\"line-clamp-2 wrap-anywhere whitespace-pre-line\">{quote}</span>\n </span>\n {onDismiss ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Remove quote\"\n onClick={onDismiss}\n className=\"shrink-0\"\n >\n <X size={12} aria-hidden />\n </Button>\n ) : null}\n </blockquote>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DataCodeSection } from '../data-code-section-
|
|
1
|
+
export { D as DataCodeSection } from '../data-code-section-d3NffL3V.js';
|
|
2
2
|
//# sourceMappingURL=DataCodeSection.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DataPanel } from '../data-panel-
|
|
1
|
+
export { D as DataPanel } from '../data-panel-T3vp7wTD.js';
|
|
2
2
|
//# sourceMappingURL=DataPanel.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogsDataList.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LogsDataList.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogsDataList.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LogsDataList.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -82,7 +82,7 @@ function MainHeaderTitle({ children, isLoading, size = "default" }) {
|
|
|
82
82
|
"[&>svg]:size-[1.25em] [&>svg]:opacity-50",
|
|
83
83
|
{
|
|
84
84
|
"bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse": isLoading,
|
|
85
|
-
"text-
|
|
85
|
+
"text-ui-lg": size === "smaller"
|
|
86
86
|
}
|
|
87
87
|
),
|
|
88
88
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: " " }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainHeader.cjs.js","sources":["../../src/ds/components/MainHeader/main-header-column.tsx","../../src/ds/components/MainHeader/main-header-description.tsx","../../src/ds/components/MainHeader/main-header-root.tsx","../../src/ds/components/MainHeader/main-header-title.tsx","../../src/ds/components/MainHeader/main-header.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type MainHeaderColumnProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nexport function MainHeaderColumn({ children, className }: MainHeaderColumnProps) {\n return <div className={cn('grid content-start', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderDescriptionProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n};\n\nexport function MainHeaderDescription({ children, isLoading }: MainHeaderDescriptionProps) {\n return (\n <p\n className={cn('max-w-140 mt-1 ml-1 flex flex-wrap gap-x-4 gap-y-1 text-sm text-neutral3 first-of-type:mt-3', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': isLoading,\n })}\n >\n {isLoading ? <> </> : <>{children}</>}\n </p>\n );\n}\n","import React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MainHeaderRootProps {\n children?: React.ReactNode;\n title?: string | 'loading';\n description?: string | 'loading';\n icon?: React.ReactNode;\n withMargins?: boolean;\n className?: string;\n}\n\nexport function MainHeaderRoot({\n children,\n title,\n description,\n icon,\n className,\n withMargins = true,\n}: MainHeaderRootProps) {\n const titleIsLoading = title === 'loading';\n const descriptionIsLoading = description === 'loading';\n\n return children ? (\n <header\n className={cn(\n 'grid w-full grid-cols-[1fr_auto] gap-16 ',\n {\n 'mt-[6vh] mb-[4vh]': withMargins,\n },\n className,\n )}\n >\n {children}\n </header>\n ) : (\n <header className={cn('grid gap-2 py-8 ', className)}>\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral6',\n '[&>svg]:size-6 [&>svg]:text-neutral3',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': titleIsLoading,\n },\n )}\n >\n {titleIsLoading ? (\n <> </>\n ) : (\n <>\n {icon && icon} {title}\n </>\n )}\n </h1>\n {description && (\n <p\n className={cn('m-0 text-sm text-neutral4', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': descriptionIsLoading,\n })}\n >\n {descriptionIsLoading ? <> </> : description}\n </p>\n )}\n </header>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderTitleProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n size?: 'default' | 'smaller';\n};\n\nexport function MainHeaderTitle({ children, isLoading, size = 'default' }: MainHeaderTitleProps) {\n return (\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral5',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': isLoading,\n 'text-
|
|
1
|
+
{"version":3,"file":"MainHeader.cjs.js","sources":["../../src/ds/components/MainHeader/main-header-column.tsx","../../src/ds/components/MainHeader/main-header-description.tsx","../../src/ds/components/MainHeader/main-header-root.tsx","../../src/ds/components/MainHeader/main-header-title.tsx","../../src/ds/components/MainHeader/main-header.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type MainHeaderColumnProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nexport function MainHeaderColumn({ children, className }: MainHeaderColumnProps) {\n return <div className={cn('grid content-start', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderDescriptionProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n};\n\nexport function MainHeaderDescription({ children, isLoading }: MainHeaderDescriptionProps) {\n return (\n <p\n className={cn('max-w-140 mt-1 ml-1 flex flex-wrap gap-x-4 gap-y-1 text-sm text-neutral3 first-of-type:mt-3', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': isLoading,\n })}\n >\n {isLoading ? <> </> : <>{children}</>}\n </p>\n );\n}\n","import React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MainHeaderRootProps {\n children?: React.ReactNode;\n title?: string | 'loading';\n description?: string | 'loading';\n icon?: React.ReactNode;\n withMargins?: boolean;\n className?: string;\n}\n\nexport function MainHeaderRoot({\n children,\n title,\n description,\n icon,\n className,\n withMargins = true,\n}: MainHeaderRootProps) {\n const titleIsLoading = title === 'loading';\n const descriptionIsLoading = description === 'loading';\n\n return children ? (\n <header\n className={cn(\n 'grid w-full grid-cols-[1fr_auto] gap-16 ',\n {\n 'mt-[6vh] mb-[4vh]': withMargins,\n },\n className,\n )}\n >\n {children}\n </header>\n ) : (\n <header className={cn('grid gap-2 py-8 ', className)}>\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral6',\n '[&>svg]:size-6 [&>svg]:text-neutral3',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': titleIsLoading,\n },\n )}\n >\n {titleIsLoading ? (\n <> </>\n ) : (\n <>\n {icon && icon} {title}\n </>\n )}\n </h1>\n {description && (\n <p\n className={cn('m-0 text-sm text-neutral4', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': descriptionIsLoading,\n })}\n >\n {descriptionIsLoading ? <> </> : description}\n </p>\n )}\n </header>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderTitleProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n size?: 'default' | 'smaller';\n};\n\nexport function MainHeaderTitle({ children, isLoading, size = 'default' }: MainHeaderTitleProps) {\n return (\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral5',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': isLoading,\n 'text-ui-lg': size === 'smaller',\n },\n )}\n >\n {isLoading ? <> </> : <>{children}</>}\n </h1>\n );\n}\n","import { MainHeaderColumn } from './main-header-column';\nimport { MainHeaderDescription } from './main-header-description';\nimport { MainHeaderRoot } from './main-header-root';\nimport { MainHeaderTitle } from './main-header-title';\n\nexport { type MainHeaderRootProps } from './main-header-root';\nexport { type MainHeaderTitleProps } from './main-header-title';\nexport { type MainHeaderDescriptionProps } from './main-header-description';\nexport { type MainHeaderColumnProps } from './main-header-column';\n\nexport const MainHeader = Object.assign(MainHeaderRoot, {\n Title: MainHeaderTitle,\n Description: MainHeaderDescription,\n Column: MainHeaderColumn,\n});\n"],"names":["cn","jsx","Fragment","jsxs"],"mappings":"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"}
|
|
@@ -78,7 +78,7 @@ function MainHeaderTitle({ children, isLoading, size = "default" }) {
|
|
|
78
78
|
"[&>svg]:size-[1.25em] [&>svg]:opacity-50",
|
|
79
79
|
{
|
|
80
80
|
"bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse": isLoading,
|
|
81
|
-
"text-
|
|
81
|
+
"text-ui-lg": size === "smaller"
|
|
82
82
|
}
|
|
83
83
|
),
|
|
84
84
|
children: isLoading ? /* @__PURE__ */ jsx(Fragment, { children: " " }) : /* @__PURE__ */ jsx(Fragment, { children })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainHeader.es.js","sources":["../../src/ds/components/MainHeader/main-header-column.tsx","../../src/ds/components/MainHeader/main-header-description.tsx","../../src/ds/components/MainHeader/main-header-root.tsx","../../src/ds/components/MainHeader/main-header-title.tsx","../../src/ds/components/MainHeader/main-header.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type MainHeaderColumnProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nexport function MainHeaderColumn({ children, className }: MainHeaderColumnProps) {\n return <div className={cn('grid content-start', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderDescriptionProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n};\n\nexport function MainHeaderDescription({ children, isLoading }: MainHeaderDescriptionProps) {\n return (\n <p\n className={cn('max-w-140 mt-1 ml-1 flex flex-wrap gap-x-4 gap-y-1 text-sm text-neutral3 first-of-type:mt-3', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': isLoading,\n })}\n >\n {isLoading ? <> </> : <>{children}</>}\n </p>\n );\n}\n","import React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MainHeaderRootProps {\n children?: React.ReactNode;\n title?: string | 'loading';\n description?: string | 'loading';\n icon?: React.ReactNode;\n withMargins?: boolean;\n className?: string;\n}\n\nexport function MainHeaderRoot({\n children,\n title,\n description,\n icon,\n className,\n withMargins = true,\n}: MainHeaderRootProps) {\n const titleIsLoading = title === 'loading';\n const descriptionIsLoading = description === 'loading';\n\n return children ? (\n <header\n className={cn(\n 'grid w-full grid-cols-[1fr_auto] gap-16 ',\n {\n 'mt-[6vh] mb-[4vh]': withMargins,\n },\n className,\n )}\n >\n {children}\n </header>\n ) : (\n <header className={cn('grid gap-2 py-8 ', className)}>\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral6',\n '[&>svg]:size-6 [&>svg]:text-neutral3',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': titleIsLoading,\n },\n )}\n >\n {titleIsLoading ? (\n <> </>\n ) : (\n <>\n {icon && icon} {title}\n </>\n )}\n </h1>\n {description && (\n <p\n className={cn('m-0 text-sm text-neutral4', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': descriptionIsLoading,\n })}\n >\n {descriptionIsLoading ? <> </> : description}\n </p>\n )}\n </header>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderTitleProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n size?: 'default' | 'smaller';\n};\n\nexport function MainHeaderTitle({ children, isLoading, size = 'default' }: MainHeaderTitleProps) {\n return (\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral5',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': isLoading,\n 'text-
|
|
1
|
+
{"version":3,"file":"MainHeader.es.js","sources":["../../src/ds/components/MainHeader/main-header-column.tsx","../../src/ds/components/MainHeader/main-header-description.tsx","../../src/ds/components/MainHeader/main-header-root.tsx","../../src/ds/components/MainHeader/main-header-title.tsx","../../src/ds/components/MainHeader/main-header.tsx"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type MainHeaderColumnProps = {\n children?: React.ReactNode;\n className?: string;\n};\n\nexport function MainHeaderColumn({ children, className }: MainHeaderColumnProps) {\n return <div className={cn('grid content-start', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderDescriptionProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n};\n\nexport function MainHeaderDescription({ children, isLoading }: MainHeaderDescriptionProps) {\n return (\n <p\n className={cn('max-w-140 mt-1 ml-1 flex flex-wrap gap-x-4 gap-y-1 text-sm text-neutral3 first-of-type:mt-3', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': isLoading,\n })}\n >\n {isLoading ? <> </> : <>{children}</>}\n </p>\n );\n}\n","import React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface MainHeaderRootProps {\n children?: React.ReactNode;\n title?: string | 'loading';\n description?: string | 'loading';\n icon?: React.ReactNode;\n withMargins?: boolean;\n className?: string;\n}\n\nexport function MainHeaderRoot({\n children,\n title,\n description,\n icon,\n className,\n withMargins = true,\n}: MainHeaderRootProps) {\n const titleIsLoading = title === 'loading';\n const descriptionIsLoading = description === 'loading';\n\n return children ? (\n <header\n className={cn(\n 'grid w-full grid-cols-[1fr_auto] gap-16 ',\n {\n 'mt-[6vh] mb-[4vh]': withMargins,\n },\n className,\n )}\n >\n {children}\n </header>\n ) : (\n <header className={cn('grid gap-2 py-8 ', className)}>\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral6',\n '[&>svg]:size-6 [&>svg]:text-neutral3',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': titleIsLoading,\n },\n )}\n >\n {titleIsLoading ? (\n <> </>\n ) : (\n <>\n {icon && icon} {title}\n </>\n )}\n </h1>\n {description && (\n <p\n className={cn('m-0 text-sm text-neutral4', {\n 'bg-surface4 w-[40rem] max-w-[80%] rounded-md animate-pulse': descriptionIsLoading,\n })}\n >\n {descriptionIsLoading ? <> </> : description}\n </p>\n )}\n </header>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type MainHeaderTitleProps = {\n children?: React.ReactNode;\n isLoading?: boolean;\n size?: 'default' | 'smaller';\n};\n\nexport function MainHeaderTitle({ children, isLoading, size = 'default' }: MainHeaderTitleProps) {\n return (\n <h1\n className={cn(\n 'flex items-center gap-2 text-xl font-normal text-neutral5',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n {\n 'bg-surface4 w-60 max-w-[50%] rounded-md animate-pulse': isLoading,\n 'text-ui-lg': size === 'smaller',\n },\n )}\n >\n {isLoading ? <> </> : <>{children}</>}\n </h1>\n );\n}\n","import { MainHeaderColumn } from './main-header-column';\nimport { MainHeaderDescription } from './main-header-description';\nimport { MainHeaderRoot } from './main-header-root';\nimport { MainHeaderTitle } from './main-header-title';\n\nexport { type MainHeaderRootProps } from './main-header-root';\nexport { type MainHeaderTitleProps } from './main-header-title';\nexport { type MainHeaderDescriptionProps } from './main-header-description';\nexport { type MainHeaderColumnProps } from './main-header-column';\n\nexport const MainHeader = Object.assign(MainHeaderRoot, {\n Title: MainHeaderTitle,\n Description: MainHeaderDescription,\n Column: MainHeaderColumn,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
7
7
|
const lucideReact = require('lucide-react');
|
|
8
8
|
const React = require('react');
|
|
9
9
|
const Button = require('../Button-D10WB4vc.cjs');
|
|
10
|
-
const combobox = require('../combobox-
|
|
10
|
+
const combobox = require('../combobox-JNWmgC13.cjs');
|
|
11
11
|
const popover = require('../popover-BPvIo79r.cjs');
|
|
12
12
|
const utils_cn = require('../cn-DCPcv4xv.cjs');
|
|
13
13
|
|
|
@@ -4,7 +4,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
4
4
|
import { ListFilterPlusIcon, ArrowLeftIcon, FilterIcon, PlusIcon, ChevronRightIcon } from 'lucide-react';
|
|
5
5
|
import { useMemo, useState, useRef, useCallback, useEffect } from 'react';
|
|
6
6
|
import { B as Button } from '../Button-BsfLQEC6.js';
|
|
7
|
-
import { C as Combobox } from '../combobox-
|
|
7
|
+
import { C as Combobox } from '../combobox-nxjXzRWu.js';
|
|
8
8
|
import { P as Popover, b as PopoverTrigger, a as PopoverContent } from '../popover-Be-ufAIL.js';
|
|
9
9
|
import { c as cn } from '../cn-B4oPhFx9.js';
|
|
10
10
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const langJson = require('@codemirror/lang-json');
|
|
5
5
|
const language = require('@codemirror/language');
|
|
6
|
+
const merge = require('@codemirror/merge');
|
|
6
7
|
const search = require('@codemirror/search');
|
|
7
8
|
const state = require('@codemirror/state');
|
|
8
9
|
const view = require('@codemirror/view');
|
|
@@ -67,6 +68,32 @@ const searchHighlightTheme = view.EditorView.baseTheme({
|
|
|
67
68
|
function searchHighlightExtension() {
|
|
68
69
|
return [searchHighlightField, searchHighlightTheme];
|
|
69
70
|
}
|
|
71
|
+
const diffLineTheme = view.EditorView.theme({
|
|
72
|
+
".cm-line.cm-diff-removed, .cm-line.cm-diff-removed.cm-activeLine": {
|
|
73
|
+
backgroundColor: "color-mix(in srgb, var(--accent2) 18%, transparent)"
|
|
74
|
+
},
|
|
75
|
+
".cm-line.cm-diff-added, .cm-line.cm-diff-added.cm-activeLine": {
|
|
76
|
+
backgroundColor: "color-mix(in srgb, var(--accent1) 18%, transparent)"
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
function diffHighlightExtension(doc, { against, side }) {
|
|
80
|
+
const [a, b] = side === "a" ? [doc, against] : [against, doc];
|
|
81
|
+
const text = state.Text.of(doc.split("\n"));
|
|
82
|
+
const line = view.Decoration.line({ class: side === "a" ? "cm-diff-removed" : "cm-diff-added" });
|
|
83
|
+
const builder = new state.RangeSetBuilder();
|
|
84
|
+
for (const chunk of merge.Chunk.build(state.Text.of(a.split("\n")), state.Text.of(b.split("\n")))) {
|
|
85
|
+
const from = side === "a" ? chunk.fromA : chunk.fromB;
|
|
86
|
+
const to = side === "a" ? chunk.endA : chunk.endB;
|
|
87
|
+
if (from >= to) continue;
|
|
88
|
+
for (let pos = from; pos <= Math.min(to, text.length); ) {
|
|
89
|
+
const l = text.lineAt(pos);
|
|
90
|
+
builder.add(l.from, l.from, line);
|
|
91
|
+
if (l.to >= to) break;
|
|
92
|
+
pos = l.to + 1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return [view.EditorView.decorations.of(builder.finish()), diffLineTheme];
|
|
96
|
+
}
|
|
70
97
|
function buildDarkTheme() {
|
|
71
98
|
return codemirrorThemeDracula.draculaInit({
|
|
72
99
|
settings: {
|
|
@@ -134,9 +161,11 @@ function DataCodeSection({
|
|
|
134
161
|
dialogTitle,
|
|
135
162
|
icon,
|
|
136
163
|
simplified = false,
|
|
137
|
-
className
|
|
164
|
+
className,
|
|
165
|
+
diff
|
|
138
166
|
}) {
|
|
139
167
|
const theme = useCodemirrorTheme();
|
|
168
|
+
const diffExtension = React.useMemo(() => diff ? diffHighlightExtension(codeStr, diff) : [], [codeStr, diff]);
|
|
140
169
|
const [showAsMultilineText, setShowAsMultilineText] = React.useState(false);
|
|
141
170
|
const [searchMinimized, setSearchMinimized] = React.useState(true);
|
|
142
171
|
const [searchQuery, setSearchQueryState] = React.useState("");
|
|
@@ -262,7 +291,7 @@ function DataCodeSection({
|
|
|
262
291
|
ReactCodeMirror,
|
|
263
292
|
{
|
|
264
293
|
ref: editorRef,
|
|
265
|
-
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension()],
|
|
294
|
+
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension(), diffExtension],
|
|
266
295
|
theme,
|
|
267
296
|
value: codeStr,
|
|
268
297
|
editable: false
|
|
@@ -309,7 +338,7 @@ function DataCodeSection({
|
|
|
309
338
|
ReactCodeMirror,
|
|
310
339
|
{
|
|
311
340
|
ref: expandedEditorRef,
|
|
312
|
-
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension()],
|
|
341
|
+
extensions: [langJson.json(), view.EditorView.lineWrapping, searchHighlightExtension(), diffExtension],
|
|
313
342
|
theme,
|
|
314
343
|
value: codeStr,
|
|
315
344
|
editable: false
|
|
@@ -332,4 +361,4 @@ function containsInnerNewline(obj) {
|
|
|
332
361
|
|
|
333
362
|
exports.DataCodeSection = DataCodeSection;
|
|
334
363
|
exports.DataPanelSectionHeading = DataPanelSectionHeading;
|
|
335
|
-
//# sourceMappingURL=data-code-section-
|
|
364
|
+
//# sourceMappingURL=data-code-section-D5I0m1cS.cjs.map
|