@cossistant/react 0.0.32 → 0.0.33
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/hooks/index.d.ts +2 -2
- package/hooks/index.js +2 -2
- package/hooks/private/use-grouped-messages.d.ts +27 -2
- package/hooks/private/use-grouped-messages.d.ts.map +1 -1
- package/hooks/private/use-grouped-messages.js +154 -106
- package/hooks/private/use-grouped-messages.js.map +1 -1
- package/hooks/use-new-message-sound.d.ts.map +1 -1
- package/hooks/use-new-message-sound.js +2 -2
- package/hooks/use-new-message-sound.js.map +1 -1
- package/hooks/use-typing-sound.d.ts.map +1 -1
- package/hooks/use-typing-sound.js +2 -2
- package/hooks/use-typing-sound.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/package.json +3 -5
- package/packages/tiny-markdown/src/context/index.d.ts +1 -0
- package/packages/tiny-markdown/src/context/tiny-markdown-context.d.ts +3 -0
- package/packages/tiny-markdown/src/hooks/index.d.ts +4 -0
- package/packages/tiny-markdown/src/hooks/use-caret-position.d.ts +1 -0
- package/packages/tiny-markdown/src/hooks/use-tiny-markdown.d.ts +1 -0
- package/packages/tiny-markdown/src/hooks/use-tiny-mention.d.ts +1 -0
- package/packages/tiny-markdown/src/hooks/use-tiny-shortcuts.d.ts +1 -0
- package/packages/tiny-markdown/src/index.d.ts +4 -0
- package/packages/tiny-markdown/src/types.d.ts +75 -0
- package/packages/tiny-markdown/src/types.d.ts.map +1 -0
- package/packages/tiny-markdown/src/utils/index.d.ts +3 -0
- package/packages/tiny-markdown/src/utils/markdown-parser.d.ts +1 -0
- package/packages/tiny-markdown/src/utils/mention-parser.d.ts +1 -0
- package/packages/tiny-markdown/src/utils/merge-refs.d.ts +1 -0
- package/packages/types/src/api/conversation.d.ts +304 -4
- package/packages/types/src/api/conversation.d.ts.map +1 -1
- package/packages/types/src/api/timeline-item.d.ts +228 -3
- package/packages/types/src/api/timeline-item.d.ts.map +1 -1
- package/packages/types/src/realtime-events.d.ts +229 -4
- package/packages/types/src/realtime-events.d.ts.map +1 -1
- package/packages/types/src/schemas.d.ts +76 -1
- package/packages/types/src/schemas.d.ts.map +1 -1
- package/primitives/command-block-utils.d.ts +26 -0
- package/primitives/command-block-utils.d.ts.map +1 -0
- package/primitives/command-block-utils.js +310 -0
- package/primitives/command-block-utils.js.map +1 -0
- package/primitives/index.d.ts +7 -3
- package/primitives/index.js +11 -2
- package/primitives/index.parts.d.ts +6 -2
- package/primitives/index.parts.js +5 -1
- package/primitives/multimodal-input.d.ts +2 -2
- package/primitives/multimodal-input.d.ts.map +1 -1
- package/primitives/timeline-code-block.d.ts +32 -0
- package/primitives/timeline-code-block.d.ts.map +1 -0
- package/primitives/timeline-code-block.js +66 -0
- package/primitives/timeline-code-block.js.map +1 -0
- package/primitives/timeline-command-block.d.ts +29 -0
- package/primitives/timeline-command-block.d.ts.map +1 -0
- package/primitives/timeline-command-block.js +97 -0
- package/primitives/timeline-command-block.js.map +1 -0
- package/primitives/timeline-item-group.d.ts.map +1 -1
- package/primitives/timeline-item-group.js +5 -15
- package/primitives/timeline-item-group.js.map +1 -1
- package/primitives/timeline-item.d.ts +21 -1
- package/primitives/timeline-item.d.ts.map +1 -1
- package/primitives/timeline-item.js +148 -83
- package/primitives/timeline-item.js.map +1 -1
- package/primitives/timeline-message-layout.d.ts +9 -0
- package/primitives/timeline-message-layout.d.ts.map +1 -0
- package/primitives/timeline-message-layout.js +20 -0
- package/primitives/timeline-message-layout.js.map +1 -0
- package/realtime/event-filter.js +4 -3
- package/realtime/event-filter.js.map +1 -1
- package/sounds/sound-data.d.ts +6 -0
- package/sounds/sound-data.d.ts.map +1 -0
- package/sounds/sound-data.js +7 -0
- package/sounds/sound-data.js.map +1 -0
- package/support/components/button.d.ts +2 -2
- package/support/components/button.d.ts.map +1 -1
- package/support/components/button.js +1 -0
- package/support/components/button.js.map +1 -1
- package/support/components/conversation-event.d.ts +3 -0
- package/support/components/conversation-event.d.ts.map +1 -1
- package/support/components/conversation-event.js +46 -15
- package/support/components/conversation-event.js.map +1 -1
- package/support/components/conversation-timeline.d.ts.map +1 -1
- package/support/components/conversation-timeline.js +12 -0
- package/support/components/conversation-timeline.js.map +1 -1
- package/support/components/index.d.ts +2 -1
- package/support/components/index.js +2 -1
- package/support/components/timeline-activity-group.d.ts +25 -0
- package/support/components/timeline-activity-group.d.ts.map +1 -0
- package/support/components/timeline-activity-group.js +104 -0
- package/support/components/timeline-activity-group.js.map +1 -0
- package/support/components/timeline-code-block.d.ts +14 -0
- package/support/components/timeline-code-block.d.ts.map +1 -0
- package/support/components/timeline-code-block.js +44 -0
- package/support/components/timeline-code-block.js.map +1 -0
- package/support/components/timeline-command-block.d.ts +12 -0
- package/support/components/timeline-command-block.d.ts.map +1 -0
- package/support/components/timeline-command-block.js +42 -0
- package/support/components/timeline-command-block.js.map +1 -0
- package/support/components/timeline-message-item.d.ts +2 -1
- package/support/components/timeline-message-item.d.ts.map +1 -1
- package/support/components/timeline-message-item.js +23 -3
- package/support/components/timeline-message-item.js.map +1 -1
- package/support/index.d.ts +4 -4
- package/support/store/support-store.d.ts +5 -5
- package/utils/metadata-hash.d.ts +1 -1
- package/utils/metadata-hash.js +9 -4
- package/utils/metadata-hash.js.map +1 -1
- package/utils/timeline-item-sender.d.ts +17 -0
- package/utils/timeline-item-sender.d.ts.map +1 -0
- package/utils/timeline-item-sender.js +43 -0
- package/utils/timeline-item-sender.js.map +1 -0
- package/utils/use-render-element.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-item.js","names":["React","renderProps: TimelineItemRenderProps"],"sources":["../../src/primitives/timeline-item.tsx"],"sourcesContent":["import { hasMarkdownFormatting } from \"@cossistant/tiny-markdown/utils\";\nimport type { TimelineItem as TimelineItemType } from \"@cossistant/types/api/timeline-item\";\nimport * as React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkBreaks from \"remark-breaks\";\nimport { useRenderElement } from \"../utils/use-render-element\";\n\n/**\n * Metadata describing the origin of a timeline item and pre-parsed content that can\n * be consumed by render-prop children.\n */\nexport type TimelineItemRenderProps = {\n\tisVisitor: boolean;\n\tisAI: boolean;\n\tisHuman: boolean;\n\ttimestamp: Date;\n\ttext: string | null;\n\tsenderType: \"visitor\" | \"ai\" | \"human\";\n\titemType: \"message\" | \"event\" | \"identification\" | \"tool\";\n};\n\nexport type TimelineItemProps = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"children\"\n> & {\n\tchildren?:\n\t\t| React.ReactNode\n\t\t| ((props: TimelineItemRenderProps) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\titem: TimelineItemType;\n};\n\n/**\n * Generic timeline item wrapper that adds accessibility attributes and resolves the\n * sender type into convenient render props for custom layouts. Works with\n * message, event, identification, and tool timeline item types.\n */\nexport const TimelineItem = (() => {\n\tconst Component = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n\t\t({ children, className, asChild = false, item, ...props }, ref) => {\n\t\t\t// Determine sender type from timeline item properties\n\t\t\tconst isVisitor = item.visitorId !== null;\n\t\t\tconst isAI = item.aiAgentId !== null;\n\t\t\tconst isHuman = item.userId !== null && !isVisitor;\n\n\t\t\tconst senderType = isVisitor ? \"visitor\" : isAI ? \"ai\" : \"human\";\n\n\t\t\tconst renderProps: TimelineItemRenderProps = {\n\t\t\t\tisVisitor,\n\t\t\t\tisAI,\n\t\t\t\tisHuman,\n\t\t\t\ttimestamp: new Date(item.createdAt),\n\t\t\t\ttext: item.text,\n\t\t\t\tsenderType,\n\t\t\t\titemType: item.type,\n\t\t\t};\n\n\t\t\tconst content =\n\t\t\t\ttypeof children === \"function\" ? children(renderProps) : children;\n\n\t\t\tconst itemTypeLabel = (() => {\n\t\t\t\tif (item.type === \"event\") {\n\t\t\t\t\treturn \"Event\";\n\t\t\t\t}\n\t\t\t\tif (item.type === \"identification\") {\n\t\t\t\t\treturn \"Identification\";\n\t\t\t\t}\n\t\t\t\tif (item.type === \"tool\") {\n\t\t\t\t\treturn \"Tool call\";\n\t\t\t\t}\n\t\t\t\tif (isVisitor) {\n\t\t\t\t\treturn \"visitor\";\n\t\t\t\t}\n\t\t\t\tif (isAI) {\n\t\t\t\t\treturn \"AI assistant\";\n\t\t\t\t}\n\t\t\t\treturn \"human agent\";\n\t\t\t})();\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"div\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tstate: renderProps,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\trole: \"article\",\n\t\t\t\t\t\t\"aria-label\": `${item.type === \"message\" ? \"Message\" : item.type === \"tool\" ? \"Tool call\" : \"Event\"} from ${itemTypeLabel}`,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItem\";\n\treturn Component;\n})();\n\nconst MemoizedMarkdownBlock = React.memo(\n\t({ content }: { content: string }) => {\n\t\tconst shouldRenderMarkdown = hasMarkdownFormatting(content);\n\n\t\tif (!shouldRenderMarkdown) {\n\t\t\treturn <span className=\"whitespace-pre-wrap break-words\">{content}</span>;\n\t\t}\n\n\t\treturn (\n\t\t\t<ReactMarkdown\n\t\t\t\t// Allow mention: protocol URLs (not sanitized by default)\n\t\t\t\tcomponents={{\n\t\t\t\t\t// Render paragraphs as block elements to preserve multiline spacing\n\t\t\t\t\tp: ({ children }) => {\n\t\t\t\t\t\t// Skip empty paragraphs (caused by consecutive blank lines in markdown)\n\t\t\t\t\t\tconst isEmpty =\n\t\t\t\t\t\t\tchildren === undefined ||\n\t\t\t\t\t\t\tchildren === null ||\n\t\t\t\t\t\t\tchildren === \"\" ||\n\t\t\t\t\t\t\t(Array.isArray(children) &&\n\t\t\t\t\t\t\t\tchildren.every((c) => c === \"\\n\" || c === \"\" || c == null));\n\t\t\t\t\t\tif (isEmpty) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn <span className=\"mt-1 block first:mt-0\">{children}</span>;\n\t\t\t\t\t},\n\t\t\t\t\t// Ensure proper line break handling\n\t\t\t\t\tbr: () => <br />,\n\t\t\t\t\t// Handle code blocks properly\n\t\t\t\t\tcode: ({ children, ...props }) => {\n\t\t\t\t\t\t// Check if it's inline code by looking at the parent element\n\t\t\t\t\t\tconst isInline = !(\n\t\t\t\t\t\t\t\"className\" in props &&\n\t\t\t\t\t\t\ttypeof props.className === \"string\" &&\n\t\t\t\t\t\t\tprops.className.includes(\"language-\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn isInline ? (\n\t\t\t\t\t\t\t<code className=\"rounded bg-co-background-300 px-1 py-0.5 text-xs\">\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<pre className=\"overflow-x-auto rounded bg-co-background-300 p-2\">\n\t\t\t\t\t\t\t\t<code className=\"text-xs\">{children}</code>\n\t\t\t\t\t\t\t</pre>\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\t// Handle strong/bold text\n\t\t\t\t\tstrong: ({ children }) => (\n\t\t\t\t\t\t<strong className=\"font-semibold\">{children}</strong>\n\t\t\t\t\t),\n\t\t\t\t\t// Handle ordered lists\n\t\t\t\t\tol: ({ children }) => (\n\t\t\t\t\t\t<ol className=\"my-0 list-decimal pl-6\">{children}</ol>\n\t\t\t\t\t),\n\t\t\t\t\t// Handle unordered lists\n\t\t\t\t\tul: ({ children }) => (\n\t\t\t\t\t\t<ul className=\"my-0 list-disc pl-6\">{children}</ul>\n\t\t\t\t\t),\n\t\t\t\t\t// Handle list items\n\t\t\t\t\tli: ({ children }) => (\n\t\t\t\t\t\t<li className=\"[&>span.block]:mt-0 [&>span.block]:inline\">\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t),\n\t\t\t\t\t// Handle blockquotes\n\t\t\t\t\tblockquote: ({ children }) => (\n\t\t\t\t\t\t<blockquote className=\"my-1 border-co-border border-l-2 pl-3 italic opacity-80\">\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</blockquote>\n\t\t\t\t\t),\n\t\t\t\t\t// Handle emphasis\n\t\t\t\t\tem: ({ children }) => <em className=\"italic\">{children}</em>,\n\t\t\t\t\t// Handle links - with special handling for mentions\n\t\t\t\t\t// Mention format: [@Name](mention:type:id) - the @ is inside the link\n\t\t\t\t\ta: ({ href, children, node }) => {\n\t\t\t\t\t\t// Get the raw href from the AST node if available (react-markdown may sanitize href)\n\t\t\t\t\t\tconst rawHref =\n\t\t\t\t\t\t\thref || (node?.properties?.href as string | undefined) || \"\";\n\n\t\t\t\t\t\t// Check if this is a mention link: mention:type:id\n\t\t\t\t\t\tif (rawHref.startsWith(\"mention:\")) {\n\t\t\t\t\t\t\t// Parse mention:type:id format\n\t\t\t\t\t\t\tconst parts = rawHref.split(\":\");\n\t\t\t\t\t\t\tconst mentionType = parts[1]; // visitor, ai-agent, human-agent\n\t\t\t\t\t\t\tconst mentionId = parts.slice(2).join(\":\"); // id (may contain colons)\n\n\t\t\t\t\t\t\t// Render as styled orange pill (same design as input)\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"rounded bg-co-orange/15 font-medium text-co-orange\"\n\t\t\t\t\t\t\t\t\tdata-mention-id={mentionId}\n\t\t\t\t\t\t\t\t\tdata-mention-type={mentionType}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Regular link\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tclassName=\"underline hover:opacity-80\"\n\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tremarkPlugins={[remarkBreaks]}\n\t\t\t\turlTransform={(url) => url}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</ReactMarkdown>\n\t\t);\n\t},\n\t(prevProps, nextProps) => {\n\t\tif (prevProps.content !== nextProps.content) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n);\n\nMemoizedMarkdownBlock.displayName = \"MemoizedMarkdownBlock\";\n\nexport type TimelineItemContentProps = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"children\"\n> & {\n\tchildren?: React.ReactNode | ((content: string) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\ttext?: string | null;\n\trenderMarkdown?: boolean;\n};\n\n/**\n * Renders the content of a timeline item, optionally piping Markdown content through a\n * memoised renderer or handing the raw text to a render prop for custom\n * formatting.\n */\nexport const TimelineItemContent = (() => {\n\tconst Component = React.forwardRef<HTMLDivElement, TimelineItemContentProps>(\n\t\t(\n\t\t\t{\n\t\t\t\tchildren,\n\t\t\t\tclassName,\n\t\t\t\tasChild = false,\n\t\t\t\ttext = \"\",\n\t\t\t\trenderMarkdown = true,\n\t\t\t\t...props\n\t\t\t},\n\t\t\tref\n\t\t) => {\n\t\t\tconst content = React.useMemo(() => {\n\t\t\t\tconst textContent = text ?? \"\";\n\t\t\t\tif (typeof children === \"function\") {\n\t\t\t\t\treturn children(textContent);\n\t\t\t\t}\n\t\t\t\tif (children) {\n\t\t\t\t\treturn children;\n\t\t\t\t}\n\t\t\t\tif (renderMarkdown && textContent) {\n\t\t\t\t\treturn <MemoizedMarkdownBlock content={textContent} />;\n\t\t\t\t}\n\t\t\t\treturn textContent;\n\t\t\t}, [children, text, renderMarkdown]);\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"div\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...props.style,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItemContent\";\n\treturn Component;\n})();\n\nexport type TimelineItemTimestampProps = Omit<\n\tReact.HTMLAttributes<HTMLSpanElement>,\n\t\"children\"\n> & {\n\tchildren?: React.ReactNode | ((timestamp: Date) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\ttimestamp: Date;\n\tformat?: (date: Date) => string;\n};\n\n/**\n * Timestamp helper that renders a formatted date or allows callers to supply a\n * render prop for custom time displays while preserving semantic markup.\n */\nexport const TimelineItemTimestamp = (() => {\n\tconst Component = React.forwardRef<\n\t\tHTMLSpanElement,\n\t\tTimelineItemTimestampProps\n\t>(\n\t\t(\n\t\t\t{\n\t\t\t\tchildren,\n\t\t\t\tclassName,\n\t\t\t\tasChild = false,\n\t\t\t\ttimestamp,\n\t\t\t\tformat = (date) =>\n\t\t\t\t\tdate.toLocaleTimeString([], {\n\t\t\t\t\t\thour: \"2-digit\",\n\t\t\t\t\t\tminute: \"2-digit\",\n\t\t\t\t\t}),\n\t\t\t\t...props\n\t\t\t},\n\t\t\tref\n\t\t) => {\n\t\t\tconst content =\n\t\t\t\ttypeof children === \"function\"\n\t\t\t\t\t? children(timestamp)\n\t\t\t\t\t: children || format(timestamp);\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"span\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItemTimestamp\";\n\treturn Component;\n})();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timeline-item.js","names":["React","renderProps: TimelineItemRenderProps"],"sources":["../../src/primitives/timeline-item.tsx"],"sourcesContent":["import type { MarkdownToken } from \"@cossistant/tiny-markdown\";\nimport {\n\thasMarkdownFormatting,\n\tparseMarkdown,\n} from \"@cossistant/tiny-markdown/utils\";\nimport type { TimelineItem as TimelineItemType } from \"@cossistant/types/api/timeline-item\";\nimport * as React from \"react\";\nimport { useRenderElement } from \"../utils/use-render-element\";\nimport {\n\ttype CommandVariants,\n\tmapCommandVariants,\n\tmapInlineCommandFromParagraphChildren,\n} from \"./command-block-utils\";\nimport { TimelineCodeBlock } from \"./timeline-code-block\";\nimport { TimelineCommandBlock } from \"./timeline-command-block\";\n\n/**\n * Metadata describing the origin of a timeline item and pre-parsed content that can\n * be consumed by render-prop children.\n */\nexport type TimelineItemRenderProps = {\n\tisVisitor: boolean;\n\tisAI: boolean;\n\tisHuman: boolean;\n\ttimestamp: Date;\n\ttext: string | null;\n\tsenderType: \"visitor\" | \"ai\" | \"human\";\n\titemType: \"message\" | \"event\" | \"identification\" | \"tool\";\n};\n\nexport type TimelineItemProps = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"children\"\n> & {\n\tchildren?:\n\t\t| React.ReactNode\n\t\t| ((props: TimelineItemRenderProps) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\titem: TimelineItemType;\n};\n\n/**\n * Generic timeline item wrapper that adds accessibility attributes and resolves the\n * sender type into convenient render props for custom layouts. Works with\n * message, event, identification, and tool timeline item types.\n */\nexport const TimelineItem = (() => {\n\tconst Component = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n\t\t({ children, className, asChild = false, item, ...props }, ref) => {\n\t\t\t// Determine sender type from timeline item properties\n\t\t\tconst isVisitor = item.visitorId !== null;\n\t\t\tconst isAI = item.aiAgentId !== null;\n\t\t\tconst isHuman = item.userId !== null && !isVisitor;\n\n\t\t\tconst senderType = isVisitor ? \"visitor\" : isAI ? \"ai\" : \"human\";\n\n\t\t\tconst renderProps: TimelineItemRenderProps = {\n\t\t\t\tisVisitor,\n\t\t\t\tisAI,\n\t\t\t\tisHuman,\n\t\t\t\ttimestamp: new Date(item.createdAt),\n\t\t\t\ttext: item.text,\n\t\t\t\tsenderType,\n\t\t\t\titemType: item.type,\n\t\t\t};\n\n\t\t\tconst content =\n\t\t\t\ttypeof children === \"function\" ? children(renderProps) : children;\n\n\t\t\tconst itemTypeLabel = (() => {\n\t\t\t\tif (item.type === \"event\") {\n\t\t\t\t\treturn \"Event\";\n\t\t\t\t}\n\t\t\t\tif (item.type === \"identification\") {\n\t\t\t\t\treturn \"Identification\";\n\t\t\t\t}\n\t\t\t\tif (item.type === \"tool\") {\n\t\t\t\t\treturn \"Tool call\";\n\t\t\t\t}\n\t\t\t\tif (isVisitor) {\n\t\t\t\t\treturn \"visitor\";\n\t\t\t\t}\n\t\t\t\tif (isAI) {\n\t\t\t\t\treturn \"AI assistant\";\n\t\t\t\t}\n\t\t\t\treturn \"human agent\";\n\t\t\t})();\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"div\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tstate: renderProps,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\trole: \"article\",\n\t\t\t\t\t\t\"aria-label\": `${item.type === \"message\" ? \"Message\" : item.type === \"tool\" ? \"Tool call\" : \"Event\"} from ${itemTypeLabel}`,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItem\";\n\treturn Component;\n})();\n\nfunction parseMentionHref(\n\thref: string\n): { mentionType: string; mentionId: string } | null {\n\tif (!href.startsWith(\"mention:\")) {\n\t\treturn null;\n\t}\n\n\tconst parts = href.split(\":\");\n\tconst mentionType = parts[1];\n\tconst mentionId = parts.slice(2).join(\":\");\n\n\tif (!(mentionType && mentionId)) {\n\t\treturn null;\n\t}\n\n\treturn { mentionType, mentionId };\n}\n\nexport type TimelineInlineCodeRendererProps = {\n\tcode: string;\n};\n\nexport type TimelineCodeBlockRendererProps = {\n\tcode: string;\n\tlanguage?: string;\n\tfileName?: string;\n};\n\nexport type TimelineCommandBlockRendererProps = {\n\tcommand: string;\n\tcommands: CommandVariants;\n};\n\nexport type TimelineItemContentMarkdownRenderers = {\n\tinlineCode?: (props: TimelineInlineCodeRendererProps) => React.ReactNode;\n\tcodeBlock?: (props: TimelineCodeBlockRendererProps) => React.ReactNode;\n\tcommandBlock?: (props: TimelineCommandBlockRendererProps) => React.ReactNode;\n};\n\nfunction renderInlineCode(\n\tcode: string,\n\tkey: string,\n\trenderers?: TimelineItemContentMarkdownRenderers\n): React.ReactNode {\n\tif (renderers?.inlineCode) {\n\t\treturn (\n\t\t\t<React.Fragment key={key}>\n\t\t\t\t{renderers.inlineCode({ code })}\n\t\t\t</React.Fragment>\n\t\t);\n\t}\n\n\treturn <code key={key}>{code}</code>;\n}\n\nfunction renderCodeBlock(\n\tprops: TimelineCodeBlockRendererProps,\n\tkey: string,\n\trenderers?: TimelineItemContentMarkdownRenderers\n): React.ReactNode {\n\tif (renderers?.codeBlock) {\n\t\treturn (\n\t\t\t<React.Fragment key={key}>{renderers.codeBlock(props)}</React.Fragment>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TimelineCodeBlock\n\t\t\tcode={props.code}\n\t\t\tfileName={props.fileName}\n\t\t\tkey={key}\n\t\t\tlanguage={props.language}\n\t\t/>\n\t);\n}\n\nfunction renderCommandBlock(\n\tprops: TimelineCommandBlockRendererProps,\n\tkey: string,\n\trenderers?: TimelineItemContentMarkdownRenderers\n): React.ReactNode {\n\tif (renderers?.commandBlock) {\n\t\treturn (\n\t\t\t<React.Fragment key={key}>{renderers.commandBlock(props)}</React.Fragment>\n\t\t);\n\t}\n\n\treturn <TimelineCommandBlock commands={props.commands} key={key} />;\n}\n\nfunction hasNonWhitespaceParagraphContent(children: MarkdownToken[]): boolean {\n\treturn children.some(\n\t\t(child) => child.type !== \"text\" || child.content.trim().length > 0\n\t);\n}\n\nfunction renderMarkdownToken(\n\ttoken: MarkdownToken,\n\tkey: string,\n\trenderers?: TimelineItemContentMarkdownRenderers\n): React.ReactNode {\n\tswitch (token.type) {\n\t\tcase \"text\":\n\t\t\treturn token.content;\n\t\tcase \"strong\":\n\t\t\treturn (\n\t\t\t\t<strong className=\"font-semibold\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</strong>\n\t\t\t);\n\t\tcase \"em\":\n\t\t\treturn (\n\t\t\t\t<em className=\"italic\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</em>\n\t\t\t);\n\t\tcase \"code\": {\n\t\t\tif (token.inline) {\n\t\t\t\treturn renderInlineCode(token.content, key, renderers);\n\t\t\t}\n\n\t\t\tconst commandVariants = mapCommandVariants(token.content);\n\t\t\tif (commandVariants) {\n\t\t\t\treturn renderCommandBlock(\n\t\t\t\t\t{\n\t\t\t\t\t\tcommand: token.content,\n\t\t\t\t\t\tcommands: commandVariants,\n\t\t\t\t\t},\n\t\t\t\t\tkey,\n\t\t\t\t\trenderers\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn renderCodeBlock(\n\t\t\t\t{\n\t\t\t\t\tcode: token.content,\n\t\t\t\t\tfileName: token.fileName,\n\t\t\t\t\tlanguage: token.language,\n\t\t\t\t},\n\t\t\t\tkey,\n\t\t\t\trenderers\n\t\t\t);\n\t\t}\n\t\tcase \"p\": {\n\t\t\tconst inlineCommand = mapInlineCommandFromParagraphChildren(\n\t\t\t\ttoken.children\n\t\t\t);\n\t\t\tif (inlineCommand) {\n\t\t\t\tconst beforeChildren = token.children.slice(0, inlineCommand.index);\n\t\t\t\tconst afterChildren = token.children.slice(inlineCommand.index + 1);\n\t\t\t\tconst hasBefore = hasNonWhitespaceParagraphContent(beforeChildren);\n\t\t\t\tconst hasAfter = hasNonWhitespaceParagraphContent(afterChildren);\n\n\t\t\t\tif (!(hasBefore || hasAfter)) {\n\t\t\t\t\treturn renderCommandBlock(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcommand: inlineCommand.command,\n\t\t\t\t\t\t\tcommands: inlineCommand.variants,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\trenderers\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"mt-1 block first:mt-0\" key={key}>\n\t\t\t\t\t\t{hasBefore ? (\n\t\t\t\t\t\t\t<span className=\"block\">\n\t\t\t\t\t\t\t\t{beforeChildren.map((child, index) =>\n\t\t\t\t\t\t\t\t\trenderMarkdownToken(\n\t\t\t\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t\t\t\t`${key}-before-${index}`,\n\t\t\t\t\t\t\t\t\t\trenderers\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{renderCommandBlock(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcommand: inlineCommand.command,\n\t\t\t\t\t\t\t\tcommands: inlineCommand.variants,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t`${key}-command`,\n\t\t\t\t\t\t\trenderers\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{hasAfter ? (\n\t\t\t\t\t\t\t<span className=\"mt-1 block\">\n\t\t\t\t\t\t\t\t{afterChildren.map((child, index) =>\n\t\t\t\t\t\t\t\t\trenderMarkdownToken(child, `${key}-after-${index}`, renderers)\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<span className=\"mt-1 block first:mt-0\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t);\n\t\t}\n\t\tcase \"blockquote\":\n\t\t\treturn (\n\t\t\t\t<blockquote\n\t\t\t\t\tclassName=\"my-1 border-co-border border-l-2 pl-3 italic opacity-80\"\n\t\t\t\t\tkey={key}\n\t\t\t\t>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</blockquote>\n\t\t\t);\n\t\tcase \"ul\":\n\t\t\treturn (\n\t\t\t\t<ul className=\"my-0 list-disc pl-6\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</ul>\n\t\t\t);\n\t\tcase \"ol\":\n\t\t\treturn (\n\t\t\t\t<ol className=\"my-0 list-decimal pl-6\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</ol>\n\t\t\t);\n\t\tcase \"li\":\n\t\t\treturn (\n\t\t\t\t<li className=\"[&>span.block]:mt-0 [&>span.block]:inline\" key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</li>\n\t\t\t);\n\t\tcase \"a\": {\n\t\t\tconst mention = parseMentionHref(token.href);\n\n\t\t\tif (mention) {\n\t\t\t\treturn (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"rounded bg-co-orange/15 font-medium text-co-orange\"\n\t\t\t\t\t\tdata-mention-id={mention.mentionId}\n\t\t\t\t\t\tdata-mention-type={mention.mentionType}\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t>\n\t\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<a\n\t\t\t\t\tclassName=\"underline hover:opacity-80\"\n\t\t\t\t\thref={token.href}\n\t\t\t\t\tkey={key}\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</a>\n\t\t\t);\n\t\t}\n\t\tcase \"mention\":\n\t\t\treturn (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"rounded bg-co-orange/15 font-medium text-co-orange\"\n\t\t\t\t\tdata-mention-id={token.mention.id}\n\t\t\t\t\tdata-mention-type={token.mention.type}\n\t\t\t\t\tkey={key}\n\t\t\t\t>\n\t\t\t\t\t@{token.mention.name}\n\t\t\t\t</span>\n\t\t\t);\n\t\tcase \"header\": {\n\t\t\tconst headerClass =\n\t\t\t\ttoken.level === 1\n\t\t\t\t\t? \"mt-1 block text-base font-semibold first:mt-0\"\n\t\t\t\t\t: token.level === 2\n\t\t\t\t\t\t? \"mt-1 block text-sm font-semibold first:mt-0\"\n\t\t\t\t\t\t: \"mt-1 block text-sm font-medium first:mt-0\";\n\n\t\t\treturn (\n\t\t\t\t<span className={headerClass} key={key}>\n\t\t\t\t\t{token.children.map((child, index) =>\n\t\t\t\t\t\trenderMarkdownToken(child, `${key}-${index}`, renderers)\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t);\n\t\t}\n\t\tcase \"br\":\n\t\t\treturn <br key={key} />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nconst MemoizedMarkdownBlock = React.memo(\n\t({\n\t\tcontent,\n\t\tmarkdownRenderers,\n\t}: {\n\t\tcontent: string;\n\t\tmarkdownRenderers?: TimelineItemContentMarkdownRenderers;\n\t}) => {\n\t\tconst shouldRenderMarkdown = hasMarkdownFormatting(content);\n\n\t\tif (!shouldRenderMarkdown) {\n\t\t\treturn <span className=\"whitespace-pre-wrap break-words\">{content}</span>;\n\t\t}\n\n\t\tconst tokens = parseMarkdown(content);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{tokens.map((token, index) =>\n\t\t\t\t\trenderMarkdownToken(token, `markdown-${index}`, markdownRenderers)\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t},\n\t(prevProps, nextProps) =>\n\t\tprevProps.content === nextProps.content &&\n\t\tprevProps.markdownRenderers === nextProps.markdownRenderers\n);\n\nMemoizedMarkdownBlock.displayName = \"MemoizedMarkdownBlock\";\n\nexport type TimelineItemContentProps = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"children\"\n> & {\n\tchildren?: React.ReactNode | ((content: string) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\ttext?: string | null;\n\trenderMarkdown?: boolean;\n\tmarkdownRenderers?: TimelineItemContentMarkdownRenderers;\n};\n\n/**\n * Renders the content of a timeline item, optionally piping Markdown content through a\n * memoised renderer or handing the raw text to a render prop for custom\n * formatting.\n */\nexport const TimelineItemContent = (() => {\n\tconst Component = React.forwardRef<HTMLDivElement, TimelineItemContentProps>(\n\t\t(\n\t\t\t{\n\t\t\t\tchildren,\n\t\t\t\tclassName,\n\t\t\t\tasChild = false,\n\t\t\t\ttext = \"\",\n\t\t\t\trenderMarkdown = true,\n\t\t\t\tmarkdownRenderers,\n\t\t\t\t...props\n\t\t\t},\n\t\t\tref\n\t\t) => {\n\t\t\tconst content = React.useMemo(() => {\n\t\t\t\tconst textContent = text ?? \"\";\n\t\t\t\tif (typeof children === \"function\") {\n\t\t\t\t\treturn children(textContent);\n\t\t\t\t}\n\t\t\t\tif (children) {\n\t\t\t\t\treturn children;\n\t\t\t\t}\n\t\t\t\tif (renderMarkdown && textContent) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MemoizedMarkdownBlock\n\t\t\t\t\t\t\tcontent={textContent}\n\t\t\t\t\t\t\tmarkdownRenderers={markdownRenderers}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn textContent;\n\t\t\t}, [children, markdownRenderers, text, renderMarkdown]);\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"div\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...props.style,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItemContent\";\n\treturn Component;\n})();\n\nexport type TimelineItemTimestampProps = Omit<\n\tReact.HTMLAttributes<HTMLSpanElement>,\n\t\"children\"\n> & {\n\tchildren?: React.ReactNode | ((timestamp: Date) => React.ReactNode);\n\tasChild?: boolean;\n\tclassName?: string;\n\ttimestamp: Date;\n\tformat?: (date: Date) => string;\n};\n\n/**\n * Timestamp helper that renders a formatted date or allows callers to supply a\n * render prop for custom time displays while preserving semantic markup.\n */\nexport const TimelineItemTimestamp = (() => {\n\tconst Component = React.forwardRef<\n\t\tHTMLSpanElement,\n\t\tTimelineItemTimestampProps\n\t>(\n\t\t(\n\t\t\t{\n\t\t\t\tchildren,\n\t\t\t\tclassName,\n\t\t\t\tasChild = false,\n\t\t\t\ttimestamp,\n\t\t\t\tformat = (date) =>\n\t\t\t\t\tdate.toLocaleTimeString([], {\n\t\t\t\t\t\thour: \"2-digit\",\n\t\t\t\t\t\tminute: \"2-digit\",\n\t\t\t\t\t}),\n\t\t\t\t...props\n\t\t\t},\n\t\t\tref\n\t\t) => {\n\t\t\tconst content =\n\t\t\t\ttypeof children === \"function\"\n\t\t\t\t\t? children(timestamp)\n\t\t\t\t\t: children || format(timestamp);\n\n\t\t\treturn useRenderElement(\n\t\t\t\t\"span\",\n\t\t\t\t{\n\t\t\t\t\tclassName,\n\t\t\t\t\tasChild,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tref,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t);\n\n\tComponent.displayName = \"TimelineItemTimestamp\";\n\treturn Component;\n})();\n"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/primitives/timeline-message-layout.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Detects whether message text includes fenced code content that should use
|
|
4
|
+
* the expanded timeline bubble layout.
|
|
5
|
+
*/
|
|
6
|
+
declare function hasExpandedTimelineContent(text: string | null | undefined): boolean;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { hasExpandedTimelineContent };
|
|
9
|
+
//# sourceMappingURL=timeline-message-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-message-layout.d.ts","names":[],"sources":["../../src/primitives/timeline-message-layout.ts"],"sourcesContent":[],"mappings":";;AAOA;;;iBAAgB,0BAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mapInlineCommandFromParagraphChildren } from "./command-block-utils.js";
|
|
2
|
+
import { parseMarkdown } from "@cossistant/tiny-markdown/utils";
|
|
3
|
+
|
|
4
|
+
//#region src/primitives/timeline-message-layout.ts
|
|
5
|
+
/**
|
|
6
|
+
* Detects whether message text includes fenced code content that should use
|
|
7
|
+
* the expanded timeline bubble layout.
|
|
8
|
+
*/
|
|
9
|
+
function hasExpandedTimelineContent(text) {
|
|
10
|
+
if (!text || text.trim().length === 0) return false;
|
|
11
|
+
return parseMarkdown(text).some((token) => {
|
|
12
|
+
if (token.type === "code" && token.inline === false) return true;
|
|
13
|
+
if (token.type === "p") return mapInlineCommandFromParagraphChildren(token.children) !== null;
|
|
14
|
+
return false;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { hasExpandedTimelineContent };
|
|
20
|
+
//# sourceMappingURL=timeline-message-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-message-layout.js","names":[],"sources":["../../src/primitives/timeline-message-layout.ts"],"sourcesContent":["import { parseMarkdown } from \"@cossistant/tiny-markdown/utils\";\nimport { mapInlineCommandFromParagraphChildren } from \"./command-block-utils\";\n\n/**\n * Detects whether message text includes fenced code content that should use\n * the expanded timeline bubble layout.\n */\nexport function hasExpandedTimelineContent(\n\ttext: string | null | undefined\n): boolean {\n\tif (!text || text.trim().length === 0) {\n\t\treturn false;\n\t}\n\n\tconst tokens = parseMarkdown(text);\n\treturn tokens.some((token) => {\n\t\tif (token.type === \"code\" && token.inline === false) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (token.type === \"p\") {\n\t\t\treturn mapInlineCommandFromParagraphChildren(token.children) !== null;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,2BACf,MACU;AACV,KAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,WAAW,EACnC,QAAO;AAIR,QADe,cAAc,KAAK,CACpB,MAAM,UAAU;AAC7B,MAAI,MAAM,SAAS,UAAU,MAAM,WAAW,MAC7C,QAAO;AAGR,MAAI,MAAM,SAAS,IAClB,QAAO,sCAAsC,MAAM,SAAS,KAAK;AAGlE,SAAO;GACN"}
|
package/realtime/event-filter.js
CHANGED
|
@@ -17,19 +17,20 @@ function getTargetVisitorId(event) {
|
|
|
17
17
|
*/
|
|
18
18
|
function shouldDeliverEvent(event, websiteId, visitorId) {
|
|
19
19
|
if (websiteId && event.payload.websiteId !== websiteId) return false;
|
|
20
|
-
if (visitorId &&
|
|
20
|
+
if (visitorId && isBlockedTimelineEventForVisitor(event)) return false;
|
|
21
21
|
if (!visitorId) return true;
|
|
22
22
|
const targetVisitorId = getTargetVisitorId(event);
|
|
23
23
|
if (targetVisitorId && targetVisitorId !== visitorId) return false;
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Returns true if the event carries a timeline item
|
|
27
|
+
* Returns true if the event carries a blocked timeline item for visitor delivery.
|
|
28
28
|
*/
|
|
29
|
-
function
|
|
29
|
+
function isBlockedTimelineEventForVisitor(event) {
|
|
30
30
|
if (event.type === "timelineItemCreated" || event.type === "timelineItemUpdated") {
|
|
31
31
|
const item = event.payload.item;
|
|
32
32
|
if (item && item.visibility === "private") return true;
|
|
33
|
+
if (item && item.type === "tool" && (!("visibility" in item) || item.visibility !== "public")) return true;
|
|
33
34
|
}
|
|
34
35
|
return false;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-filter.js","names":[],"sources":["../../src/realtime/event-filter.ts"],"sourcesContent":["import type { AnyRealtimeEvent } from \"@cossistant/types/realtime-events\";\n\nfunction getTargetVisitorId(event: AnyRealtimeEvent): string | null {\n\tconst payloadVisitorId = event.payload.visitorId;\n\n\tif (typeof payloadVisitorId === \"string\" && payloadVisitorId.length > 0) {\n\t\treturn payloadVisitorId;\n\t}\n\n\tif (event.type === \"timelineItemCreated\") {\n\t\tconst itemVisitorId = event.payload.item.visitorId;\n\n\t\tif (typeof itemVisitorId === \"string\" && itemVisitorId.length > 0) {\n\t\t\treturn itemVisitorId;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Determines whether a realtime event should be processed based on website and\n * visitor identifiers.\n *\n * When a visitorId is provided (i.e. the consumer is a visitor/widget), private\n * timeline items are filtered out to prevent leaking internal data.\n */\nexport function shouldDeliverEvent(\n\tevent: AnyRealtimeEvent,\n\twebsiteId: string | null,\n\tvisitorId: string | null\n): boolean {\n\tif (websiteId && event.payload.websiteId !== websiteId) {\n\t\treturn false;\n\t}\n\n\t// When consuming as a visitor, never deliver private timeline items.\n\t// This is a defense-in-depth measure; the server should also filter these.\n\tif (visitorId &&
|
|
1
|
+
{"version":3,"file":"event-filter.js","names":[],"sources":["../../src/realtime/event-filter.ts"],"sourcesContent":["import type { AnyRealtimeEvent } from \"@cossistant/types/realtime-events\";\n\nfunction getTargetVisitorId(event: AnyRealtimeEvent): string | null {\n\tconst payloadVisitorId = event.payload.visitorId;\n\n\tif (typeof payloadVisitorId === \"string\" && payloadVisitorId.length > 0) {\n\t\treturn payloadVisitorId;\n\t}\n\n\tif (event.type === \"timelineItemCreated\") {\n\t\tconst itemVisitorId = event.payload.item.visitorId;\n\n\t\tif (typeof itemVisitorId === \"string\" && itemVisitorId.length > 0) {\n\t\t\treturn itemVisitorId;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Determines whether a realtime event should be processed based on website and\n * visitor identifiers.\n *\n * When a visitorId is provided (i.e. the consumer is a visitor/widget), private\n * timeline items are filtered out to prevent leaking internal data.\n */\nexport function shouldDeliverEvent(\n\tevent: AnyRealtimeEvent,\n\twebsiteId: string | null,\n\tvisitorId: string | null\n): boolean {\n\tif (websiteId && event.payload.websiteId !== websiteId) {\n\t\treturn false;\n\t}\n\n\t// When consuming as a visitor, never deliver private/non-public tool timeline items.\n\t// This is a defense-in-depth measure; the server should also filter these.\n\tif (visitorId && isBlockedTimelineEventForVisitor(event)) {\n\t\treturn false;\n\t}\n\n\tif (!visitorId) {\n\t\treturn true;\n\t}\n\n\tconst targetVisitorId = getTargetVisitorId(event);\n\n\tif (targetVisitorId && targetVisitorId !== visitorId) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns true if the event carries a blocked timeline item for visitor delivery.\n */\nfunction isBlockedTimelineEventForVisitor(event: AnyRealtimeEvent): boolean {\n\tif (\n\t\tevent.type === \"timelineItemCreated\" ||\n\t\tevent.type === \"timelineItemUpdated\"\n\t) {\n\t\tconst payload = event.payload as Record<string, unknown>;\n\t\tconst item = payload.item as Record<string, unknown> | undefined;\n\t\tif (item && item.visibility === \"private\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (\n\t\t\titem &&\n\t\t\titem.type === \"tool\" &&\n\t\t\t(!(\"visibility\" in item) || item.visibility !== \"public\")\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport { getTargetVisitorId };\n"],"mappings":";AAEA,SAAS,mBAAmB,OAAwC;CACnE,MAAM,mBAAmB,MAAM,QAAQ;AAEvC,KAAI,OAAO,qBAAqB,YAAY,iBAAiB,SAAS,EACrE,QAAO;AAGR,KAAI,MAAM,SAAS,uBAAuB;EACzC,MAAM,gBAAgB,MAAM,QAAQ,KAAK;AAEzC,MAAI,OAAO,kBAAkB,YAAY,cAAc,SAAS,EAC/D,QAAO;;AAIT,QAAO;;;;;;;;;AAUR,SAAgB,mBACf,OACA,WACA,WACU;AACV,KAAI,aAAa,MAAM,QAAQ,cAAc,UAC5C,QAAO;AAKR,KAAI,aAAa,iCAAiC,MAAM,CACvD,QAAO;AAGR,KAAI,CAAC,UACJ,QAAO;CAGR,MAAM,kBAAkB,mBAAmB,MAAM;AAEjD,KAAI,mBAAmB,oBAAoB,UAC1C,QAAO;AAGR,QAAO;;;;;AAMR,SAAS,iCAAiC,OAAkC;AAC3E,KACC,MAAM,SAAS,yBACf,MAAM,SAAS,uBACd;EAED,MAAM,OADU,MAAM,QACD;AACrB,MAAI,QAAQ,KAAK,eAAe,UAC/B,QAAO;AAER,MACC,QACA,KAAK,SAAS,WACb,EAAE,gBAAgB,SAAS,KAAK,eAAe,UAEhD,QAAO;;AAGT,QAAO"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/sounds/sound-data.d.ts
|
|
2
|
+
declare const NEW_MESSAGE_SOUND_DATA_URL = "data:audio/mp4;base64,AAAAHGZ0eXBNNEEgAAAAAE00QSBtcDQyaXNvbQAAA1Ztb292AAAAbG12aGQAAAAA5a8JFeWvCRUAAH0AAAAkAAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAB6HRyYWsAAABcdGtoZAAAAAflrwkV5a8JFQAAAAEAAAAAAAAkAAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAYRtZGlhAAAAIG1kaGQAAAAA5a8JFeWvCRUAAH0AAAAkAAAAAAAAAAAiaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAAAAAAABOm1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAA/nN0YmwAAAB2c3RzZAAAAAAAAAABAAAAZm1wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAB9AAAAAAAAM2VzZHMAAAAAA4CAgCIAAAAEgICAFEAUABgAAAAw2AAA+gAFgICAAhKQBoCAgAECAAAAD3NidGQAAAAASTE2AAAAGHN0dHMAAAAAAAAAAQAAAAkAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAJAAAAAQAAADhzdHN6AAAAAAAAAAAAAAAJAAAABgAAAFYAAAG6AAABKgAAAQsAAACxAAAAewAAAKQAAABMAAAAFHN0Y28AAAAAAAAAAQAAEAAAAAD6dWR0YQAAAPJtZXRhAAAAAAAAACJoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAADEaWxzdAAAALwtLS0tAAAAHG1lYW4AAAAAY29tLmFwcGxlLmlUdW5lcwAAABRuYW1lAAAAAGlUdW5TTVBCAAAAhGRhdGEAAAABAAAAACAwMDAwMDAwMCAwMDAwMDg0MCAwMDAwMDFEMiAwMDAwMDAwMDAwMDAxOUVFIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwAAAMhmZyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
|
|
3
|
+
declare const TYPING_LOOP_SOUND_DATA_URL = "data:audio/mp4;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
|
|
4
|
+
//#endregion
|
|
5
|
+
export { NEW_MESSAGE_SOUND_DATA_URL, TYPING_LOOP_SOUND_DATA_URL };
|
|
6
|
+
//# sourceMappingURL=sound-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sound-data.d.ts","names":[],"sources":["../../src/sounds/sound-data.ts"],"sourcesContent":[],"mappings":";cAGa,0BAAA;AAAA,cAGA,0BAAA,GAH0B,g3fAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/sounds/sound-data.ts
|
|
2
|
+
const NEW_MESSAGE_SOUND_DATA_URL = "data:audio/mp4;base64,AAAAHGZ0eXBNNEEgAAAAAE00QSBtcDQyaXNvbQAAA1Ztb292AAAAbG12aGQAAAAA5a8JFeWvCRUAAH0AAAAkAAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAB6HRyYWsAAABcdGtoZAAAAAflrwkV5a8JFQAAAAEAAAAAAAAkAAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAYRtZGlhAAAAIG1kaGQAAAAA5a8JFeWvCRUAAH0AAAAkAAAAAAAAAAAiaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAAAAAAABOm1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAA/nN0YmwAAAB2c3RzZAAAAAAAAAABAAAAZm1wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAB9AAAAAAAAM2VzZHMAAAAAA4CAgCIAAAAEgICAFEAUABgAAAAw2AAA+gAFgICAAhKQBoCAgAECAAAAD3NidGQAAAAASTE2AAAAGHN0dHMAAAAAAAAAAQAAAAkAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAJAAAAAQAAADhzdHN6AAAAAAAAAAAAAAAJAAAABgAAAFYAAAG6AAABKgAAAQsAAACxAAAAewAAAKQAAABMAAAAFHN0Y28AAAAAAAAAAQAAEAAAAAD6dWR0YQAAAPJtZXRhAAAAAAAAACJoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAADEaWxzdAAAALwtLS0tAAAAHG1lYW4AAAAAY29tLmFwcGxlLmlUdW5lcwAAABRuYW1lAAAAAGlUdW5TTVBCAAAAhGRhdGEAAAABAAAAACAwMDAwMDAwMCAwMDAwMDg0MCAwMDAwMDFEMiAwMDAwMDAwMDAwMDAxOUVFIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwAAAMhmZyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
|
|
3
|
+
const TYPING_LOOP_SOUND_DATA_URL = "data:audio/mp4;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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";
|
|
4
|
+
|
|
5
|
+
//#endregion
|
|
6
|
+
export { NEW_MESSAGE_SOUND_DATA_URL, TYPING_LOOP_SOUND_DATA_URL };
|
|
7
|
+
//# sourceMappingURL=sound-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sound-data.js","names":[],"sources":["../../src/sounds/sound-data.ts"],"sourcesContent":["// Inline base64-encoded AAC audio files\n// Converted from WAV to AAC (m4a) at 64kbps for minimal bundle size (~24KB total)\n\nexport const NEW_MESSAGE_SOUND_DATA_URL =\n\t\"data:audio/mp4;base64,AAAAHGZ0eXBNNEEgAAAAAE00QSBtcDQyaXNvbQAAA1Ztb292AAAAbG12aGQAAAAA5a8JFeWvCRUAAH0AAAAkAAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAB6HRyYWsAAABcdGtoZAAAAAflrwkV5a8JFQAAAAEAAAAAAAAkAAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAYRtZGlhAAAAIG1kaGQAAAAA5a8JFeWvCRUAAH0AAAAkAAAAAAAAAAAiaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAAAAAAABOm1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAA/nN0YmwAAAB2c3RzZAAAAAAAAAABAAAAZm1wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAB9AAAAAAAAM2VzZHMAAAAAA4CAgCIAAAAEgICAFEAUABgAAAAw2AAA+gAFgICAAhKQBoCAgAECAAAAD3NidGQAAAAASTE2AAAAGHN0dHMAAAAAAAAAAQAAAAkAAAQAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAJAAAAAQAAADhzdHN6AAAAAAAAAAAAAAAJAAAABgAAAFYAAAG6AAABKgAAAQsAAACxAAAAewAAAKQAAABMAAAAFHN0Y28AAAAAAAAAAQAAEAAAAAD6dWR0YQAAAPJtZXRhAAAAAAAAACJoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAAADEaWxzdAAAALwtLS0tAAAAHG1lYW4AAAAAY29tLmFwcGxlLmlUdW5lcwAAABRuYW1lAAAAAGlUdW5TTVBCAAAAhGRhdGEAAAABAAAAACAwMDAwMDAwMCAwMDAwMDg0MCAwMDAwMDFEMiAwMDAwMDAwMDAwMDAxOUVFIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwAAAMhmZyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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\";\n\nexport const TYPING_LOOP_SOUND_DATA_URL =\n\t\"data:audio/mp4;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+JbWRhdCEAA0BoHCEAA0BoHCEL1BqSDiQPhcdWbgOtrkXWlmHgHgIk1HXQqKioYYC3VtYlNJ44NA/D+n3QSFghFD4nXCcV4VbRcia0w/8R84Ajb1hwO42ncMAW3r6iAG3D7cAhC9QAjY1lEhGC51smbcdZzBpoBPfa3O1bcf+apCxmtkzMGzC/w72k0JOFMJzIdTmz2TCWixZ8YXkQuYAlD86ht3vYQ2/NtO9f8+viBBEOEoIBkQRoEBEEJrziHeOMt5AsBmKGCQIBcpBwQugl9hYxnm4KiYg2mosm9HPsao6dkRmLtuZZFIShJXAsqdO7SlnAIQvUEJKUIQMhAEIwGIQa1rTsek5P5RQBH9R6jIOyRQVJVniPMulSILEw3yPJW658JJrzGk63hBZGTpJcfj/1zdwHPJ0aCXuBTR+EuFQveapDCNjGUDCQEiEGvL4fMb7PGv8ig7K3m8JGEhrCBveirfdkKgCwrVCCI4AhC9PyrgYhAyEAQjCKTg2228U/xeZe+gBUR3/8SX8OqcYpdgQefQKjE7LXQveFbkACJO/0YbI15OK1AUKtZfRRqkgAydPFHL4uJ8EkCI7BBAiAghCRbWOe7OX3YDVclGyv93W7DMJW08357VaVTWU7AV4hC9PwnYwiD4TjRM3exa5GbbaR/4IeSUNmLMizO1fk/j7GH3/yB8jKfxeHwuiAzLWuRchogh4CHijrCz3XDF29aFuAIQvU8H4LkTC4H3iHqEPwHCEAA0BoHCEAA0BoHCEL0+iSDiMPiaXebkkC5EVrZD4COv+058jaEJ1c+AmfcTY5A9czhnfRLBCMHwpdg3EFyKqXCDwH/CP/aD2Xu8erniq0gAJw0/M/IQvUAhrOI0OAhEFDycznqa07NGIwHeA4H62Ylo8mcSjBNbEQAwINmE2Zb6icFf3KzAXD9T22KXACxU6FNFWCZepYyEYhGoA8+AV3cOE39CJ5AUKRoWI7hbHSYABRkhjWOkUcIVJSbDh8AN3t30GFYu8JpwrRQLaayvUzPbamfNSwBb2u9oobdsXVvZiTlPghC9PwkY1kEQFYYCIYSai5TGbGumWwH4Cp6qJkr5zaRMdpes/W1uLqr0WGah19PMPPjgRYSBIbLjMVazPTWwoWU5qAe8Ic+A7zc5Xc2ziSftJvEEJGOIwOIwu1fCG0/r0+lgpWuTigu4sQsS05F98DGBvJR4AhC9PwkQ9DEIGIgWDpoM2QBEt3W1kNRb+EnvDXXus12yf93Xh1J2VaADVd0UXN8Z0w2ACAVwqC6eYQOQaBtbrMkj//gEBil9qZN5I1qm45dDX+3bIB+LzFgdVPnBHVgUicIQvTyCkGHxoXIqVEMP8R9CC/akoWp5BZCD41LkZKakIcIAHn/hscIQADQGgcIQADQGgcIQADQGgcIQvTsBmKA0CHwhmlyMqXBABH/ARXTn2eNUQAgHh7uBEMHzDctciql0v4BDwhUYe2Y4AhC9QIltBqAZBCjXC2g3ob20IBXgCJSXxtbT+PzbTmZ+nvXcfinvzv5t/YRHcPQdVLLyp5ACW+99/Z9Bv2Bqc+gbR8/mqAM8FRQZPNjjGbOmABs75LzsuqqqT8WPMq0gIMAkd3QsgtEFZNWQqxsrBgZtyo2wAAs4AhC9OoGgtjQQEYgDEQSW3OZYbmAIaWunxCX0Zn2o+G9q9A/avleC8E9H3ulWwQhxhticRmRrZO7tgWrFkdnozCzMUAAHSCWztAH03AwQhQ0WYbgC68HRjW52XldZ6ZAEHAIQvT4K7GgQ+FLQEuZi5FaJaKR4F1MmqHwOjL3B+m6qQ7ihyNKVEVdwUhA+IouRe0m0UfzzZ9CBeI0F8hC9TofguRUbCnBxB6fD8FyKiYU0PEfcAhAANAaBwhAANAaBwhC9P4nD6S+kLkRYmGIEQfmpmfxOH0nmIXIe9wMv8fh+ambiEL1BCK1IMPha+jhMb3BcjOrkAAHEwuHob7TWYyAEWicnWmkiIITrpDFY4hmcqQw8ut5JPBY8niIBCVgKJdY5vzmR1pCyZhNOoLSiYURWlCCIPOvwaD0jFrkXx10jkc/F29PZBFaxyBwkxvJNKQo3yF+yQpSCEGGQjyCEmRUkAm2YTkA5gjFtKhUJ6IPSAYes1uIQvT8AraiAGIgmTtm8/H1WuQMAMPJmFx3FEblxGqci790bINzZeItm29NJgr5WqkeGa0n2rrsrcBIY/MkMfkCGLvEJSiDZRDH40hUFj8GQDahy/GDYFheWVOtFWRFZOlr68vA0YgeIqY2vF9+XMUvypKBAMIsouCbo+c0da836FkGwHHpq6HufC7SbFELOah/LhOuvtfuHV/FBMhfrHgjhwcOBikLg5M6bHI2oPswZOoYP0tj93stltkQw8Xmh5MNCWK8q1AUxgE68AhC9QAjpFlAiFE4PW9s+c4reMt19wzdmWE5AjvNRebACgbsuW8TPKEAE77n7c5ERCJA/ffyPAfRqsw2nMvyS6ih1gocG7q8gZhlf1r+JdS2ag8f/rt+PzGE0J7SwHeladlpTClqmcADDGchACKiMgDEQCCEJNPjvvbD5P+45DoBNavsbbn7PTR+6scQG+JQcEg5q0NFpiwDOMVAMnfU74AF5chC9PACpVjRQjCYb7hhLewbtsAxyIi3J8i+VWkkua9vvHWKuv8Hx+m+g0He9MfUuD9a0zHUOPRF0nRdDLd2pCd/ORvMeWo6g5z8d7jVhtTouZJuFwluU2c2gGgJUA/iOhoaBCVCiMBCIID6v5p7o0s8uGGJQG4KFzP6PVIan+2u4LX7nC0qYOyjhWrH4QsAMQD80f+NPeyA6dRIVAnpLNWxC9Cdf1qZ9qxyjAI6iHAIQvT6ZKUSAyanRGOVgYW6zZHAA//Gb6lZn7MYRc0p/KWmB2myvnHsd7z/28c/8rU9bVDOo5E8XEoTgGb4vnNzktzI5kBB5AUMJAZJIHbQQLdXtIlND8IQzHuYoggKuaFdwdrwdzi5IBOU0OaljFBZmdcSTxCGfQ2ysHbXmPQXCEL1Nh+C5FyqYjwCPEmg/Bci42A/Di/xcAhAANAaBwhC9QIioqGD41+WgwLkRUmEHgJA2zs/H/M8I+qowfvwhi0PP2tvCkOikQPkez6ZblC5E1ph/4h4beyz+1/+fjrG8wkscwT8+m7gCEL1ACK1okMp9LiKnOBBQXhcY/XY9/bEjtIsg2lWIlrEoU4hh0E7OPrO8QrY8hhrRClQIXMCQwl8jGgk8XlKyeQSLV7uU1JKYfXY2zO9HHa06KX+Ei78LSKro15vE2xGCIKv11xxGPDDTd2jGAACnI7VeRftv7aoJpM0QhLmk5tIgWhlVtBwCDIuAP0XzXf8ofULwg7yKBGK8GaMnogaTEAPwaAw3hBQtPrtMZkQlGAo11Mz9/MLK0RcCEL08gKk2QBkoBCEIL34dsji78jJABLlNXp+quz1SV0boYURs/VH9z9L5LpetAdS0Ob758h8ZnvR+Y8Xf6A4EoAlPkT7NPDu03i/54En5x/aq0wCVQfh3lzDCMdPURu7pSq1PP+cEIoYAiKJgEIQi44U29Hv+r7hy47tQbZ1uZFlrpZ0BsbSulUqVVVDqTHMcinPq0qhgHX86oND/xkyO++XMoA5R7f03A/gd6noJOYJOAhC9Pwlg1kEIEQjBEoRcQkV2vxD4BgB7p4pXZaa1Nko0f6vrPHhpqS9GYES5dC2F6NsWJufpKkrycJcFPG182fCqosLwjW85U2dlo6lrMUbJTSABLA7ppIp9/yTQCFhQEERECx7GmVyd26cGB32yYxN9D2OeTh2Nac5mg0QT5DCKdzk1SkqZLx3EgWv570JmHjdxOyAiA4IQvT+JKWJEKAhEE01dkw3kuyBubAieodmX0Ra/TJ7KmVgsm+3LQc++J/vV3gesvtlnZ0lsOQV8W+pT/yfPDFeorI8O0n+a0MXAgRrN4grTrT0ZAmQAkYiEgQpDDiHBnbODRABgneNOvGnlfIoXy5/YVOleVbmEa85lCk6fXD/iPMn+DRKGDzcCEL08gMiQRBh8QcJmZa5DSKhhz30J5p0nFBDUvZVs45utWI6KeAISg+Ig5sXIqVUIP8R9kDWZp/MA7N8NjgIQvUCRg+pw6FyJrTSDgEQ7vnebCCQgfY06XIytMMPEQASORDwjghC9QABhIlD4XwuYueB0uRmmffyQEhet9x52bVRcYDInCktUQxxhifw8T2AaORw+F0sbb1guRkQgRoIgQ+g9FZ8o9KuNahQGQ7CaFxqiEzoynDQ4AhC9QlsYYfC+tdFnOQLkZwkAHE0gBgQ4n9XJwYROLKJz5hJwyGH1pDWzief4MSxVwhlQE8RisCfwBp5vz5R8Sdt/U1JZ6/Sjz20DBIsFayGHxPLz1kMzYt1dacHnoh4gBm1zf52TScmdRPA5YnqtjK2DIYvPEcM4nhqBBNAishNg8dxxcMfPDjSdOCeqUcIQvULcEMIws+o389TT78ZPE5IUAAVjEcV0TDfAiR4Py30OPWEoEwiGwQJXJsxM/ZUjHzhLPSiHrb1SR5x4aJ++PhET90+xCf0j+zhP8Av4Gif2Q+A5DwJ8dyHsLkBPtfcyFXtxHoCyfDJRDc7QmbT4FjqkNs+nIGxN+Hn/vGcFKxRV5kfNhMl+0Y5iIpZqCe+KtzGIwVfzH6Oenxf6+qAAABMSK5+YUNmgVUH8LyPSNgdn9s625NJ0nkJtwjIgk8Bgic8hhN1cnld0T4nx8nxrgVBwyB0/baHBhOdwaS25kpbCy2HSrOlaEgkYILosIqgQWIVlVsVVZeAMR/bt7MUwILgCEL1CCK3CUiAIRhF56PyeMzdcLPv00KgN6yMcjHPvciSNQfde0xFYUpU7HHrWXmGC15k4uBGt0Hbnj/FGIf+f5A5lNxIWtxmGlg0EXyaSDcFc3ON3PIrBWmOqkFxS0dRIonomg+gGHAgQhcrOT9kzv4v/IDJTJwQ3XYxNnLTsuUtUIKRdFmjizQHOSWfEnwYgGDCrghC9QIjpFlAaGAhBCLXRvb5h6Sf4u6QFfYkY1qExX96vZcp5Y0mP8TytqhJ+c/b+b57mORNQ5ODvdWuLtZjOuZ1DlAtSndSrMEYe275FpAsroGFmFRvVajpJT8Y6GygOJAEIQEIQccRzjtvntPb9y62FvU4Ct1xc/8UeHb7Hs8P4dm8jy4+iVET8iUYC7MyA1LVXADazr5ORMAK8AhC9QYjpgjQglCjq2Xj07ND66gMsGVIK8k5KhxcDd6pAP9ivK4XBaPYeg1C1P1DolUuD4HKVoQUQRoqTSgM1Rrz0XO0x6h7oOt7Sw2spCy3IVlzywhAEOhseBANDCQJreceHPiFv9Ad3MA6fd48cRZtkKK59ieCoyLjGC1y6Ik8WM0MLhHoEYAfVjdXu36zzk1ZFRdMjKuq0DwUFp8KddyoOAhC9PADskGRYXQ7RWHVgYFZ2qGN5h/A9q7hxYt1HxeV0w726kzbLj2Oaxx7eaOGtCjRGpP2t+rY6GtPPYJ2K/QGM4B9HK/Y7qdwFTUSFzcmwWCADazOoGUad77+176pTGyZ5cdEaVIxJNuVRwVLiVqSSxyWUL9qFXsCjT4hVKAJo5v3zrbII3NPGc8e23gIQvT8aIQRRGFxqLcANhsCbe6/pXf5EkJOBqq00+2sLln5dbMz7Ca3vVb6iTFJGsvS1hdEZh6oVXC4naySDI8IFQWccaGgMoGABMfiutSSTRQ2YjKM1OVjVV1x2k7nTSoKJyBl9eCnZPvCmjySLXLE6FUanAhC9P4rQgfCcaBALkVIQCZCJCMHXCmySvqrfgumaZrHZIA1kQPhOOhV5RZci9sENEMjD949pGzooD/jm0aMx+AIQvT/bSIHl9Z1DqelZBciurHnHkAHBlmjJ484INkypFJzLpO1UJ0qBOfQJzopIQiGT3xDi3ECOnuE+L8Yx8/HocDYQKv8jwNww9IfSMbOr5cmDm3RtsIYfC/zrQkvw3Zci+rHnnHgBywp+3x9UqQHahMcsnTmE3k9L/hkyDu8Hg90NIVq9Cxfm5IgMhsBw02j7R1ILghC9QoityIAQjCT4HPaPbjybwgMoOg50pYxL0rh1JFNl/YVzdjc6i9As6hUrdiE7c0hi9sQ2GJneKQDiyHU+kEOf9MIdK5ERxscnbMQcnK7CajEyFs8UWmBjEFEwfNYLlWe9CVuxXgcx3aCywA0AjjLMPry14SsErxBVC28lCIKPofIrP8S90FgAAWmKFrlKFdddZOVpVXSzTO6nn3pFvA38ZajSbIdjFIMbZiOlyZS+X2H6XJSVrTjDmWsHfSXOxZkKPQpPSIxofTCc6MsbJjpFmnN2RcIQvT4AaVZBCBUIAxEAxCAhCCjiesOexT/dW7xQLRBFFErgXj22Vkqait3R1CoVxJW3QOkvStZ7F6y9RIhPYx98U/EELJkLE89MERmKw3Py+jbX9cSO63aOfq9GDbnlMGYgC8gQABhohBAhBIhBrrVesYfbR/mgACdiChkydVSM0nQXgDgXgbmCOZSUJGm2scB8ws+MbAcCEL1BiOxUlhANiEEBiIBkEHJ7eZ6nOZjvjXHsTmSgjBznpK6Vsrt5s6llBPQsGbj64tZ1b1XyrT0tu61P1zRqeuFaHYAQxFXDMbouhQIjSvndUzELK8jeh8NRAn36+LjEH+K2JUaEMcGYoDJYDEIPca8zvvJ2vb+YEYchDxpdCl8/s61cAX0bwgBjDWZcKL4kph3IeEQlLbYxC/1Pl0+e40G43ZWr+PnRiCDFgBSJHhN8pzDAqDgCEL1BmSlEgMuNa6zGYNLG1g4/6iQ3eG2y1eBzj9tTYXOcaZstpyVMiNGhxGpdgfpYJTuc7L99PpFJzLA96mMhDkCI6KxkKJAwvze4e/AcAAS4NVB7dpZWzzSsmYu7tqOHpbr0WyfngIoNA2Ql0YCt+xTOx2wRpWi8XSHCEL0+G4PiHGWBuLkZGaIIgHgAhuub/dIiWLL1TL1R6AaLD4jVLAuRcioQ8AD4rCuhqzpUT2JaB1RJ+AIQvUyH4LkPCwpoCmQ/Bcib3Ax7xFwCEL09AKjkYPhOlAC5F2JZ94h4CNhGHfH/zelbZ0vr7B2Wfpjwwq7PAtt/U7AK0EQPiFjZhcibEs+8Q9GaslWytF/a46xxYcfrCN6ODmBPR9m8chC9QCEtCJEgWXNXl3eW9U6CigfauLfnOyYF2UPlUdvLzquZ4RCvgyKJROXIx++GkzNupxCdNIQi8Uv+NObEmXd66O6EUsrwvmzwpVA7dpSDw1AlWWvZECK1IwLuvpLziVs2uEAN7CziBeWbx907i6H64/XzoexTk3q7+IFR8Zrv5uP2g6xjeGRArURI8O/y8xOYw6fCJQ8PbyZmmvV1PjmfMXiAeM4CEL0/COkWIzsIQgJBBQ1rGY8ZNQ+4N2CGYeCm4XG2iRzakwsJx43nOJkP83M/EO2IFIveez3+k/6cHXS291m1JHN+jFqY7HPKyScIK6StDKu87cGdepq9/AMFY4EQooCLhHeY8J/ojAbsBCpDSsPS09zhfbadNuFb1rMORxCAElrMJqx0ybnoK6JHlBmmFLWAx/whvYenZDYABlvsKivCEL1CISxQWxgVCCUJvbh1vnm78F+QywPKd++aTwYEGjBE9VNmxKSWBlCowwksvg2bf+UOWqev6qYtSR5VcY4NrSf03/zoEXUgAD8SCst/TB+8okAQ4SQgII0EA1EAhCEGrtMZmeF/qFMA3c8F679jhVSgdZsyhuMSxIFKUnpxIGjLKx8b/Tg6Til5m9hejQds1JG4pQHDKu4CEL07gOlEsBCEKOGK77TXQwFBFj1m48DaNhynVX6wWeweGtd8p6DI8p219UuionW8dEjoY/3eS7+ebKMT8PjMdYzih1YQuuMHYBwkxoUihYKzkNayABKp+zWbYN/gipGpIyjqOoKU4vxQqknwekyzxlGZJQ0/WwLtFhADprhfUrdznTwCEL08AVDh8hIFyIkUzD/FYFfhTWq0QUNNO4KEYfGFyMkUzD/EA8TFHLByEAA0BoHCEL1OB+C5FWtyEJEHp0PwXIaB/L/cAhC9QAjtRCD4TzqQq6MLkZx1ZY8DjEsv7mz3flb8hhDg4eTAMmMd3g9DyAegCZPB0Nl3JcgOtoRoEbKH9YVP5jtBED4UfeozXikhcjLEw+AfAQ82vfaYjLFf7f/brhR9P+3/xyYg/e57i7cVVtBxP3Xz9l+nghC9PwDtaKEgTC0e07Ks3IMBmcLYk6xCoNlKwtfW139+un81EMoqNQkeW8LRNcnltYTyjSEWrgEwnEtE6YcqAvGHgBiXd7XthVcnofvZSV69FHhhq8RhLSYdRwS6Qp4ttL3rrEdpoIAAwmxmMlCMJOl5yi/i/eCAMAEypBWbda2UBqk6TUko4Nbb999S/fhMDZeKQMjAEUq/0v+uVul8fHxaPeH4+7n4/TXQhDJK7vECWXMFG/HPF+KNxjUAOuiVOiMbknIQvT+I6RYwOIWEIQEIgEIgc1fUZlMr0/C+SgINXEjwNm5M0uYGsXCAlCR1d51h39a7i1knlH12hF+HaPgr0Cr7GDu8lT/J7+7LHtGiTOBEj79WfnPfroFV6K2BACOFCEECECCEJrfA7J9sfrAtJmsJua3ZNVUoXCZIckt6WYNG8YM4nCyVTYSG6HIQvT2A2NZQIhgEIwkmq8cGzyKZKBEpJKONdXCWO+L76xxR+utL8kwq4/wO3ePv30fJUpVMPSfowltszahm+7BQ02N1KyFX6udlF3GUMbt+kZXoIASwgTIQSgIQhBd6zyyduQ8ljuygOGaV6bhgt+x4OXPSqE1DSwxKouiyTzBb7wg+VM2rmIG2z1a3VehlqtvgaZxAE9VsKYBYS4IQvT0BaMwg+N5jI8LkRKiGHgIEEBlPZ15V/m6Fqv9GgpjNeD9zubPgngZDD40sVw2FyKlVCD/EPD+OESpVRSLOUDIb34IQvT+Kg+Y6iFlyMqXDHwEAAQzPz0M33gSSHzuOIGlyMsbhMhEBEQ6e7wCYx9uCEL1AqsPlPiZ02bXIzQvC/5PGXj3d/trOvV5pTWUiAAMFQojD4n0gGxch5GMtLyR9awckmAp7rKCKZgEJoOIQvT+IrQww+NLvi3G3OWuRnOSB+jiYzHZ8JnQRCFFISZNExSch5As+7YhOu8gqBJ5PDrJ1HJ1WKKgbxDQQitBDD42vp12eLguRFSYQeAnLKHrn3DOhCE2iQtYkhKg122x3kBE4bmqaLaAcU/b2JHIQvUIg7aQmIGXAJxfxfijGig/pAFhTcipciMZAQCTBkTwJ2j5PlVtgCNhRPYZ8hhuYEPhN6sId8yBPLZohkPAhD338ByPhjwWT+AXusl4XKQt0iEuHP8Yk0VAJ+n90GrDjVFtUHWEcjxOdnRBh8b3TqtGLpn2qsESqMQ4itaCJYVT4dzc9uvrnfJCAwNaIXnj1qqtFa7u0PjVt9A9BSocmVN1YIhmbZPC9NJ9x7KT59wUnkZBANkhlcsRqDJ0J93msL8hAf808hV7GFD1/Uq6vu3onVPfjvlQElRbc2oSUp3gHW+OCEL1CCKEWQyIYBiEJuOuY98zC+IP3BgUfCvBf2f/gR0Yl/S67x5uiv73/l+KpsiNpBJicUxBE+sHEBgusZOGztbWiXQ/mEAE0ttwKddlUFZ+27GCfTgeuw27ub8UIHsA00QgQRgIQhYvPfeN1TrX4ICGbyBm2OhvanhUiEldFji0VmfjSqzK9pZNDyzDBQQBmMuAJcchTlh4CEL1AiO2AQhsISgIQg9pwe8ruPUf8lt7abDF7DWBt05+dhqEVO6n7eQwlLxMR70XdYLGFQKeeZlBAeQfFLcVejwABqNo8Bg9XtB8pcD8i12eaYpAByACQENK1N/s2WxZQFg/iKFCICkMBiIKHF7PDwzw/9igZWUUBtcD37SnA6RRKGEZUZp8tixjfzphTxTvAPUuzs8flGMXCEL1CiOkWJEiUKPh7Y2+Ug+GjDNAbuzMRXZJd40AnO+yN4SO4G2ZVwXo327iWIwiYrm1se/Ckcrbt2m4cw+yUjajP5U+vkU5dmLiRBZrm79qWlgrX/aUIFB0dTIYBCELOOpTus8dzqH4EUHOa8ZKcyzDisolTShZJiMXgvHfuv4RWMoAAesTlMVi3u7OnoaOgDri1L0n9eAIQvUHbiUF31bm1hlTRQAANcZ5f8k+UpdbSxWKrjwKC3EThQJED9aL6ub6961DmMdwiFh5Fm7feYbzKdARb8DuMNP+DXpyrWcCBskJNgWfVMk17/FO5xhjQAAsP5P7Xz1+0hs8oqg1GASF1U0agfFl1NylhIWr+qcdEen3lrBQpGrSpzY9r5H7JpYuERjFyEL1EWaDocRBl95pKmt6AHIAC4/yD/VaJyC1Ug5n9+M1URzC9jjDKoTCHRF/6ieiOhy/0KnV6D1y0ji0bgzgNW9AL1RdmY1BQ4jDD/DrCLpAbjAAKZaefiQS+NkKTY1MuaMcarE06vM+dbLLJ1nssa7Xd75QXowOEESiVm45V5YEHCjbYiOIQvTuArMxRKHXQ3i45YB4j8iBRF7ZdJc0A3lkqEnXsF1pG7ChKcePaYsxR1gQgRFRUQJA446lzlu4CqtcjN/YtfYEyqNa4nbYBtbuChpd85uHzXa3Nsua00mhmCF734hC9PpMD5C3ABci5lIuAADxAfHw37+5Ae5ZM0CSw+VHtFCLkVMwePgHiGgfEHuMnwb30c=\";\n"],"mappings":";AAGA,MAAa,6BACZ;AAED,MAAa,6BACZ"}
|
|
@@ -4,8 +4,8 @@ import * as class_variance_authority_dist_types0 from "class-variance-authority/
|
|
|
4
4
|
|
|
5
5
|
//#region src/support/components/button.d.ts
|
|
6
6
|
declare const coButtonVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
8
|
-
size?: "default" | "large" | "icon" | null | undefined;
|
|
7
|
+
variant?: "tab" | "default" | "secondary" | "ghost" | "outline" | "tab-selected" | null | undefined;
|
|
8
|
+
size?: "small" | "default" | "large" | "icon" | null | undefined;
|
|
9
9
|
} & class_variance_authority_dist_types0.ClassProp) | undefined) => string;
|
|
10
10
|
type CossistantButtonProps = React$1.ComponentProps<"button"> & {
|
|
11
11
|
asChild?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","names":[],"sources":["../../../src/support/components/button.tsx"],"sourcesContent":[],"mappings":";;;;;cAKa,
|
|
1
|
+
{"version":3,"file":"button.d.ts","names":[],"sources":["../../../src/support/components/button.tsx"],"sourcesContent":[],"mappings":";;;;;cAKa,wBA6BZ;;;AA7BD,CAAA,GA6BC,oCAAA,CAAA,SAAA,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;AAEW,KAAA,qBAAA,GAAwB,OAAA,CAAM,cAAT,CAAA,QAAA,CAAA,GAAA;EAAG,OAAM,CAAA,EAAA,OAAA;CAElB,GAApB,YAAoB,CAAA,OAAA,gBAAA,CAAA;;;AAMxB;;AAEC,iBAFe,QAAA,CAEf;EAAA,SAAA;EAAA,OAAA;EAAA,IAAA;EAAA,GAAA;AAAA,CAAA,EAGE,qBAHF,CAAA,EAG0B,OAAA,CAAM,YAHhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","names":["ButtonPrimitive"],"sources":["../../../src/support/components/button.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { Button as ButtonPrimitive } from \"../../primitives/button\";\nimport { cn } from \"../utils\";\n\nexport const coButtonVariants = cva(\n\t\"group/btn inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded border font-medium text-sm outline-none transition-all hover:cursor-pointer focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"bg-co-primary text-co-primary-foreground hover:bg-co-primary/90\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"border-co-border bg-co-background-50/50 text-co-primary hover:bg-co-background-100 hover:text-co-foreground dark:bg-co-background-300 dark:hover:bg-co-background-400\",\n\t\t\t\tghost:\n\t\t\t\t\t\"border-transparent text-co-primary hover:bg-co-background-200 hover:text-co-foreground dark:hover:bg-co-background-300\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-co-border bg-co-background text-co-primary hover:bg-co-background-100 dark:bg-co-background-200 dark:hover:bg-co-background-300\",\n\t\t\t\ttab: \"opacity-40 hover:bg-co-background-100 hover:text-co-foreground hover:opacity-90 dark:hover:bg-co-background-200\",\n\t\t\t\t\"tab-selected\":\n\t\t\t\t\t\"hover:bg-co-background-100 hover:text-co-foreground dark:hover:bg-co-background-200\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-8 px-4 py-2 has-[>svg]:px-3\",\n\t\t\t\tlarge: \"h-14 px-6 has-[>svg]:px-4\",\n\t\t\t\ticon: \"size-6\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t}\n);\n\nexport type CossistantButtonProps = React.ComponentProps<\"button\"> & {\n\tasChild?: boolean;\n} & VariantProps<typeof coButtonVariants>;\n\n/**\n * Styled button primitive that forwards variant and size props to the shared\n * design tokens.\n */\nexport function CoButton({\n\tclassName,\n\tvariant,\n\tsize,\n\t...props\n}: CossistantButtonProps): React.ReactElement {\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tclassName={cn(coButtonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAKA,MAAa,mBAAmB,IAC/B,keACA;CACC,UAAU;EACT,SAAS;GACR,SACC;GACD,WACC;GACD,OACC;GACD,SACC;GACD,KAAK;GACL,gBACC;GACD;EACD,MAAM;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN;EACD;CACD,iBAAiB;EAChB,SAAS;EACT,MAAM;EACN;CACD,CACD;;;;;AAUD,SAAgB,SAAS,EACxB,WACA,SACA,MACA,GAAG,SAC0C;AAC7C,QACC,oBAACA;EACA,WAAW,GAAG,iBAAiB;GAAE;GAAS;GAAM;GAAW,CAAC,CAAC;EAC7D,GAAI;GACH"}
|
|
1
|
+
{"version":3,"file":"button.js","names":["ButtonPrimitive"],"sources":["../../../src/support/components/button.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { Button as ButtonPrimitive } from \"../../primitives/button\";\nimport { cn } from \"../utils\";\n\nexport const coButtonVariants = cva(\n\t\"group/btn inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded border font-medium text-sm outline-none transition-all hover:cursor-pointer focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"bg-co-primary text-co-primary-foreground hover:bg-co-primary/90\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"border-co-border bg-co-background-50/50 text-co-primary hover:bg-co-background-100 hover:text-co-foreground dark:bg-co-background-300 dark:hover:bg-co-background-400\",\n\t\t\t\tghost:\n\t\t\t\t\t\"border-transparent text-co-primary hover:bg-co-background-200 hover:text-co-foreground dark:hover:bg-co-background-300\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-co-border bg-co-background text-co-primary hover:bg-co-background-100 dark:bg-co-background-200 dark:hover:bg-co-background-300\",\n\t\t\t\ttab: \"opacity-40 hover:bg-co-background-100 hover:text-co-foreground hover:opacity-90 dark:hover:bg-co-background-200\",\n\t\t\t\t\"tab-selected\":\n\t\t\t\t\t\"hover:bg-co-background-100 hover:text-co-foreground dark:hover:bg-co-background-200\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-8 px-4 py-2 has-[>svg]:px-3\",\n\t\t\t\tlarge: \"h-14 px-6 has-[>svg]:px-4\",\n\t\t\t\tsmall: \"h-6 px-1 text-xs has-[>svg]:px-1.5\",\n\t\t\t\ticon: \"size-6\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t}\n);\n\nexport type CossistantButtonProps = React.ComponentProps<\"button\"> & {\n\tasChild?: boolean;\n} & VariantProps<typeof coButtonVariants>;\n\n/**\n * Styled button primitive that forwards variant and size props to the shared\n * design tokens.\n */\nexport function CoButton({\n\tclassName,\n\tvariant,\n\tsize,\n\t...props\n}: CossistantButtonProps): React.ReactElement {\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tclassName={cn(coButtonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAKA,MAAa,mBAAmB,IAC/B,keACA;CACC,UAAU;EACT,SAAS;GACR,SACC;GACD,WACC;GACD,OACC;GACD,SACC;GACD,KAAK;GACL,gBACC;GACD;EACD,MAAM;GACL,SAAS;GACT,OAAO;GACP,OAAO;GACP,MAAM;GACN;EACD;CACD,iBAAiB;EAChB,SAAS;EACT,MAAM;EACN;CACD,CACD;;;;;AAUD,SAAgB,SAAS,EACxB,WACA,SACA,MACA,GAAG,SAC0C;AAC7C,QACC,oBAACA;EACA,WAAW,GAAG,iBAAiB;GAAE;GAAS;GAAM;GAAW,CAAC,CAAC;EAC7D,GAAI;GACH"}
|
|
@@ -7,6 +7,9 @@ type ConversationEventProps = {
|
|
|
7
7
|
availableAIAgents: AvailableAIAgent[];
|
|
8
8
|
availableHumanAgents: AvailableHumanAgent[];
|
|
9
9
|
createdAt?: string;
|
|
10
|
+
compact?: boolean;
|
|
11
|
+
showAvatar?: boolean;
|
|
12
|
+
className?: string;
|
|
10
13
|
};
|
|
11
14
|
declare const ConversationEvent: React.FC<ConversationEventProps>;
|
|
12
15
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-event.d.ts","names":[],"sources":["../../../src/support/components/conversation-event.tsx"],"sourcesContent":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"conversation-event.d.ts","names":[],"sources":["../../../src/support/components/conversation-event.tsx"],"sourcesContent":[],"mappings":";;;;KAWY,sBAAA;SACJ;EADI,iBAAA,EAEQ,gBAFc,EAAA;EAC1B,oBAAA,EAEe,mBAFf,EAAA;EACY,SAAA,CAAA,EAAA,MAAA;EACG,OAAA,CAAA,EAAA,OAAA;EAAmB,UAAA,CAAA,EAAA,OAAA;EAO7B,SAAA,CAAA,EAAA,MAAA;;cAAA,mBAAmB,KAAA,CAAM,GAAG"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { cn } from "../utils/index.js";
|
|
1
2
|
import { Avatar } from "./avatar.js";
|
|
2
3
|
import { useSupportText } from "../text/index.js";
|
|
3
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
import { motion } from "motion/react";
|
|
5
6
|
|
|
6
7
|
//#region src/support/components/conversation-event.tsx
|
|
7
|
-
const ConversationEvent = ({ event, availableAIAgents, createdAt, availableHumanAgents }) => {
|
|
8
|
+
const ConversationEvent = ({ event, availableAIAgents, createdAt, availableHumanAgents, compact = false, showAvatar = true, className }) => {
|
|
8
9
|
const text = useSupportText();
|
|
9
10
|
const isAI = event.actorAiAgentId !== null;
|
|
10
11
|
const humanAgent = availableHumanAgents.find((agent) => agent.id === event.actorUserId);
|
|
@@ -29,12 +30,52 @@ const ConversationEvent = ({ event, availableAIAgents, createdAt, availableHuman
|
|
|
29
30
|
default: return text("component.conversationEvent.default", { actorName });
|
|
30
31
|
}
|
|
31
32
|
};
|
|
33
|
+
const avatarContent = isAI ? /* @__PURE__ */ jsx(Avatar, {
|
|
34
|
+
className: "size-5 flex-shrink-0",
|
|
35
|
+
image: aiAgent?.image,
|
|
36
|
+
isAI: true,
|
|
37
|
+
name: aiAgent?.name || text("common.fallbacks.cossistant"),
|
|
38
|
+
showBackground: !!aiAgent?.image
|
|
39
|
+
}) : /* @__PURE__ */ jsx(Avatar, {
|
|
40
|
+
className: "size-5 flex-shrink-0",
|
|
41
|
+
image: humanAgent?.image,
|
|
42
|
+
name: humanAgent?.name || text("common.fallbacks.someone")
|
|
43
|
+
});
|
|
44
|
+
if (compact) return /* @__PURE__ */ jsxs(motion.div, {
|
|
45
|
+
animate: {
|
|
46
|
+
opacity: 1,
|
|
47
|
+
scale: 1
|
|
48
|
+
},
|
|
49
|
+
className: cn("flex items-center gap-2 text-co-muted-foreground text-xs", className),
|
|
50
|
+
initial: {
|
|
51
|
+
opacity: 0,
|
|
52
|
+
scale: .95
|
|
53
|
+
},
|
|
54
|
+
transition: {
|
|
55
|
+
duration: .3,
|
|
56
|
+
ease: "easeOut"
|
|
57
|
+
},
|
|
58
|
+
children: [
|
|
59
|
+
showAvatar ? avatarContent : null,
|
|
60
|
+
/* @__PURE__ */ jsx("span", {
|
|
61
|
+
className: "break-words",
|
|
62
|
+
children: getEventText()
|
|
63
|
+
}),
|
|
64
|
+
createdAt ? /* @__PURE__ */ jsx("time", {
|
|
65
|
+
className: "text-[10px]",
|
|
66
|
+
children: new Date(createdAt).toLocaleTimeString([], {
|
|
67
|
+
hour: "2-digit",
|
|
68
|
+
minute: "2-digit"
|
|
69
|
+
})
|
|
70
|
+
}) : null
|
|
71
|
+
]
|
|
72
|
+
});
|
|
32
73
|
return /* @__PURE__ */ jsx(motion.div, {
|
|
33
74
|
animate: {
|
|
34
75
|
opacity: 1,
|
|
35
76
|
scale: 1
|
|
36
77
|
},
|
|
37
|
-
className: "flex items-center justify-center pt-4 pb-8",
|
|
78
|
+
className: cn("flex items-center justify-center pt-4 pb-8", className),
|
|
38
79
|
initial: {
|
|
39
80
|
opacity: 0,
|
|
40
81
|
scale: .95
|
|
@@ -46,20 +87,10 @@ const ConversationEvent = ({ event, availableAIAgents, createdAt, availableHuman
|
|
|
46
87
|
children: /* @__PURE__ */ jsxs("div", {
|
|
47
88
|
className: "flex items-center gap-2 text-co-muted-foreground text-xs",
|
|
48
89
|
children: [
|
|
49
|
-
/* @__PURE__ */ jsx("div", {
|
|
90
|
+
showAvatar ? /* @__PURE__ */ jsx("div", {
|
|
50
91
|
className: "flex flex-col justify-end",
|
|
51
|
-
children:
|
|
52
|
-
|
|
53
|
-
image: aiAgent?.image,
|
|
54
|
-
isAI: true,
|
|
55
|
-
name: aiAgent?.name || text("common.fallbacks.cossistant"),
|
|
56
|
-
showBackground: !!aiAgent?.image
|
|
57
|
-
}) : /* @__PURE__ */ jsx(Avatar, {
|
|
58
|
-
className: "size-5 flex-shrink-0",
|
|
59
|
-
image: humanAgent?.image,
|
|
60
|
-
name: humanAgent?.name || text("common.fallbacks.someone")
|
|
61
|
-
})
|
|
62
|
-
}),
|
|
92
|
+
children: avatarContent
|
|
93
|
+
}) : null,
|
|
63
94
|
/* @__PURE__ */ jsx("span", {
|
|
64
95
|
className: "px-2",
|
|
65
96
|
children: getEventText()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-event.js","names":["ConversationEvent: React.FC<ConversationEventProps>"],"sources":["../../../src/support/components/conversation-event.tsx"],"sourcesContent":["import type {\n\tAvailableAIAgent,\n\tAvailableHumanAgent,\n\tTimelinePartEvent,\n} from \"@cossistant/types\";\nimport { motion } from \"motion/react\";\nimport type React from \"react\";\nimport { useSupportText } from \"../text\";\nimport { Avatar } from \"./avatar\";\n\nexport type ConversationEventProps = {\n\tevent: TimelinePartEvent;\n\tavailableAIAgents: AvailableAIAgent[];\n\tavailableHumanAgents: AvailableHumanAgent[];\n\tcreatedAt?: string;\n};\n\nexport const ConversationEvent: React.FC<ConversationEventProps> = ({\n\tevent,\n\tavailableAIAgents,\n\tcreatedAt,\n\tavailableHumanAgents,\n}) => {\n\tconst text = useSupportText();\n\tconst isAI = event.actorAiAgentId !== null;\n\tconst humanAgent = availableHumanAgents.find(\n\t\t(agent) => agent.id === event.actorUserId\n\t);\n\tconst aiAgent = availableAIAgents.find(\n\t\t(agent) => agent.id === event.actorAiAgentId\n\t);\n\n\t// Get the actor name\n\tconst actorName = isAI\n\t\t? aiAgent?.name || text(\"common.fallbacks.cossistant\")\n\t\t: humanAgent?.name || text(\"common.fallbacks.someone\");\n\n\t// Convert event type to plain English\n\tconst getEventText = () => {\n\t\tswitch (event.eventType) {\n\t\t\tcase \"assigned\":\n\t\t\t\treturn text(\"component.conversationEvent.assigned\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"unassigned\":\n\t\t\t\treturn text(\"component.conversationEvent.unassigned\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_requested\":\n\t\t\t\treturn text(\"component.conversationEvent.participantRequested\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_joined\":\n\t\t\t\treturn text(\"component.conversationEvent.participantJoined\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_left\":\n\t\t\t\treturn text(\"component.conversationEvent.participantLeft\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"status_changed\":\n\t\t\t\treturn text(\"component.conversationEvent.statusChanged\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"priority_changed\":\n\t\t\t\treturn text(\"component.conversationEvent.priorityChanged\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"tag_added\":\n\t\t\t\treturn text(\"component.conversationEvent.tagAdded\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"tag_removed\":\n\t\t\t\treturn text(\"component.conversationEvent.tagRemoved\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"resolved\":\n\t\t\t\treturn text(\"component.conversationEvent.resolved\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"reopened\":\n\t\t\t\treturn text(\"component.conversationEvent.reopened\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_blocked\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorBlocked\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_unblocked\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorUnblocked\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_identified\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorIdentified\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tdefault:\n\t\t\t\treturn text(\"component.conversationEvent.default\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t}\n\t};\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\tclassName
|
|
1
|
+
{"version":3,"file":"conversation-event.js","names":["ConversationEvent: React.FC<ConversationEventProps>"],"sources":["../../../src/support/components/conversation-event.tsx"],"sourcesContent":["import type {\n\tAvailableAIAgent,\n\tAvailableHumanAgent,\n\tTimelinePartEvent,\n} from \"@cossistant/types\";\nimport { motion } from \"motion/react\";\nimport type React from \"react\";\nimport { useSupportText } from \"../text\";\nimport { cn } from \"../utils\";\nimport { Avatar } from \"./avatar\";\n\nexport type ConversationEventProps = {\n\tevent: TimelinePartEvent;\n\tavailableAIAgents: AvailableAIAgent[];\n\tavailableHumanAgents: AvailableHumanAgent[];\n\tcreatedAt?: string;\n\tcompact?: boolean;\n\tshowAvatar?: boolean;\n\tclassName?: string;\n};\n\nexport const ConversationEvent: React.FC<ConversationEventProps> = ({\n\tevent,\n\tavailableAIAgents,\n\tcreatedAt,\n\tavailableHumanAgents,\n\tcompact = false,\n\tshowAvatar = true,\n\tclassName,\n}) => {\n\tconst text = useSupportText();\n\tconst isAI = event.actorAiAgentId !== null;\n\tconst humanAgent = availableHumanAgents.find(\n\t\t(agent) => agent.id === event.actorUserId\n\t);\n\tconst aiAgent = availableAIAgents.find(\n\t\t(agent) => agent.id === event.actorAiAgentId\n\t);\n\n\t// Get the actor name\n\tconst actorName = isAI\n\t\t? aiAgent?.name || text(\"common.fallbacks.cossistant\")\n\t\t: humanAgent?.name || text(\"common.fallbacks.someone\");\n\n\t// Convert event type to plain English\n\tconst getEventText = () => {\n\t\tswitch (event.eventType) {\n\t\t\tcase \"assigned\":\n\t\t\t\treturn text(\"component.conversationEvent.assigned\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"unassigned\":\n\t\t\t\treturn text(\"component.conversationEvent.unassigned\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_requested\":\n\t\t\t\treturn text(\"component.conversationEvent.participantRequested\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_joined\":\n\t\t\t\treturn text(\"component.conversationEvent.participantJoined\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"participant_left\":\n\t\t\t\treturn text(\"component.conversationEvent.participantLeft\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"status_changed\":\n\t\t\t\treturn text(\"component.conversationEvent.statusChanged\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"priority_changed\":\n\t\t\t\treturn text(\"component.conversationEvent.priorityChanged\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"tag_added\":\n\t\t\t\treturn text(\"component.conversationEvent.tagAdded\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"tag_removed\":\n\t\t\t\treturn text(\"component.conversationEvent.tagRemoved\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"resolved\":\n\t\t\t\treturn text(\"component.conversationEvent.resolved\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"reopened\":\n\t\t\t\treturn text(\"component.conversationEvent.reopened\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_blocked\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorBlocked\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_unblocked\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorUnblocked\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tcase \"visitor_identified\":\n\t\t\t\treturn text(\"component.conversationEvent.visitorIdentified\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t\tdefault:\n\t\t\t\treturn text(\"component.conversationEvent.default\", {\n\t\t\t\t\tactorName,\n\t\t\t\t});\n\t\t}\n\t};\n\n\tconst avatarContent = isAI ? (\n\t\t<Avatar\n\t\t\tclassName=\"size-5 flex-shrink-0\"\n\t\t\timage={aiAgent?.image}\n\t\t\tisAI\n\t\t\tname={aiAgent?.name || text(\"common.fallbacks.cossistant\")}\n\t\t\tshowBackground={!!aiAgent?.image}\n\t\t/>\n\t) : (\n\t\t<Avatar\n\t\t\tclassName=\"size-5 flex-shrink-0\"\n\t\t\timage={humanAgent?.image}\n\t\t\tname={humanAgent?.name || text(\"common.fallbacks.someone\")}\n\t\t/>\n\t);\n\n\tif (compact) {\n\t\treturn (\n\t\t\t<motion.div\n\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 text-co-muted-foreground text-xs\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t\t>\n\t\t\t\t{showAvatar ? avatarContent : null}\n\t\t\t\t<span className=\"break-words\">{getEventText()}</span>\n\t\t\t\t{createdAt ? (\n\t\t\t\t\t<time className=\"text-[10px]\">\n\t\t\t\t\t\t{new Date(createdAt).toLocaleTimeString([], {\n\t\t\t\t\t\t\thour: \"2-digit\",\n\t\t\t\t\t\t\tminute: \"2-digit\",\n\t\t\t\t\t\t})}\n\t\t\t\t\t</time>\n\t\t\t\t) : null}\n\t\t\t</motion.div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<motion.div\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\tclassName={cn(\"flex items-center justify-center pt-4 pb-8\", className)}\n\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\ttransition={{ duration: 0.3, ease: \"easeOut\" }}\n\t\t>\n\t\t\t<div className=\"flex items-center gap-2 text-co-muted-foreground text-xs\">\n\t\t\t\t{showAvatar ? (\n\t\t\t\t\t<div className=\"flex flex-col justify-end\">{avatarContent}</div>\n\t\t\t\t) : null}\n\t\t\t\t<span className=\"px-2\">{getEventText()}</span>\n\t\t\t\t{createdAt && (\n\t\t\t\t\t<time className=\"text-[10px]\">\n\t\t\t\t\t\t{new Date(createdAt).toLocaleTimeString([], {\n\t\t\t\t\t\t\thour: \"2-digit\",\n\t\t\t\t\t\t\tminute: \"2-digit\",\n\t\t\t\t\t\t})}\n\t\t\t\t\t</time>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n};\n\nConversationEvent.displayName = \"ConversationEvent\";\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-timeline.d.ts","names":[],"sources":["../../../src/support/components/conversation-timeline.tsx"],"sourcesContent":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"conversation-timeline.d.ts","names":[],"sources":["../../../src/support/components/conversation-timeline.tsx"],"sourcesContent":[],"mappings":";;;;;;KA2CY,6BAAA;QACL;EADK,cAAA,EAAA,MAAA;AAKZ,CAAA;AAIY,KAJA,kCAAA,GAMX;EAGW,SAAA,EARA,KAAA,CAAM,aAQmB,CARL,6BAQK,CAAA;CAE7B;AAEY,KATR,yBAAA,GAA4B,MASpB,CAAA,MAAA,EAPnB,kCAOmB,CAAA;AACG,KALX,yBAAA,GAKW;EAEd,cAAA,EAAA,MAAA;EAED,KAAA,EAPA,YAOA,EAAA;EACa,SAAA,CAAA,EAAA,MAAA;EACd,iBAAM,EAPO,gBAOP,EAAA;EAAS,oBAAA,EANC,mBAMD,EAAA;EAGT,gBAAA,CAAA,EAAA,MAAA;UAPJ;;UAED;uBACa;QACd,KAAA,CAAM;;cAGA,0BAA0B,KAAA,CAAM,GAAG"}
|
|
@@ -6,6 +6,7 @@ import { useTypingSound } from "../../hooks/use-typing-sound.js";
|
|
|
6
6
|
import { useConversationTimeline } from "../../hooks/use-conversation-timeline.js";
|
|
7
7
|
import { ConversationEvent } from "./conversation-event.js";
|
|
8
8
|
import { filterSeenByIdsForViewer } from "./conversation-timeline-utils.js";
|
|
9
|
+
import { TimelineActivityGroup } from "./timeline-activity-group.js";
|
|
9
10
|
import { TimelineMessageGroup } from "./timeline-message-group.js";
|
|
10
11
|
import { useCallback, useMemo } from "react";
|
|
11
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -98,6 +99,17 @@ const ConversationTimelineList = ({ conversationId, items: timelineItems, classN
|
|
|
98
99
|
item: item.item
|
|
99
100
|
}, toolKey);
|
|
100
101
|
}
|
|
102
|
+
if (item.type === "activity_group") {
|
|
103
|
+
const groupKey$1 = item.firstItemId ?? item.items?.[0]?.id ?? `activity-group-${item.items?.[0]?.createdAt ?? index}`;
|
|
104
|
+
return /* @__PURE__ */ jsx(TimelineActivityGroup, {
|
|
105
|
+
availableAIAgents,
|
|
106
|
+
availableHumanAgents,
|
|
107
|
+
conversationId,
|
|
108
|
+
currentVisitorId,
|
|
109
|
+
group: item,
|
|
110
|
+
tools
|
|
111
|
+
}, groupKey$1);
|
|
112
|
+
}
|
|
101
113
|
const seenByIds = filterSeenByIdsForViewer(index === timeline.lastVisitorMessageGroupIndex && item.lastMessageId ? timeline.groupedMessages.getMessageSeenBy(item.lastMessageId) : EMPTY_SEEN_BY_IDS, currentVisitorId);
|
|
102
114
|
const seenByNames = seenByIds.length > 0 ? getSeenByNames(seenByIds) : EMPTY_SEEN_BY_NAMES;
|
|
103
115
|
const groupKey = item.lastMessageId ?? item.items?.[0]?.id ?? `group-${item.items?.[0]?.createdAt ?? index}`;
|