@agimon-ai/po-native-components 0.0.0-alpha.21 → 0.0.0-alpha.23

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.
Files changed (36) hide show
  1. package/dist/components/CodeBlock.d.mts.map +1 -1
  2. package/dist/components/CodeBlock.mjs +4 -33
  3. package/dist/components/CodeBlock.mjs.map +1 -1
  4. package/dist/components/CopyButton.d.mts +13 -0
  5. package/dist/components/CopyButton.d.mts.map +1 -0
  6. package/dist/components/CopyButton.mjs +43 -0
  7. package/dist/components/CopyButton.mjs.map +1 -0
  8. package/dist/components/HashlineLines.d.mts +13 -0
  9. package/dist/components/HashlineLines.d.mts.map +1 -0
  10. package/dist/components/HashlineLines.mjs +137 -0
  11. package/dist/components/HashlineLines.mjs.map +1 -0
  12. package/dist/components/Markdown.d.mts +8 -1
  13. package/dist/components/Markdown.d.mts.map +1 -1
  14. package/dist/components/Markdown.mjs +198 -17
  15. package/dist/components/Markdown.mjs.map +1 -1
  16. package/dist/components/SyntaxLine.d.mts +19 -0
  17. package/dist/components/SyntaxLine.d.mts.map +1 -0
  18. package/dist/components/SyntaxLine.mjs +132 -0
  19. package/dist/components/SyntaxLine.mjs.map +1 -0
  20. package/dist/components/ToolPathLink.d.mts +10 -0
  21. package/dist/components/ToolPathLink.d.mts.map +1 -0
  22. package/dist/components/ToolPathLink.mjs +40 -0
  23. package/dist/components/ToolPathLink.mjs.map +1 -0
  24. package/dist/icons/iconGlyphs.d.mts +16 -0
  25. package/dist/icons/iconGlyphs.d.mts.map +1 -1
  26. package/dist/icons/iconGlyphs.mjs +16 -0
  27. package/dist/icons/iconGlyphs.mjs.map +1 -1
  28. package/dist/icons/icons.d.mts +16 -0
  29. package/dist/icons/icons.d.mts.map +1 -1
  30. package/dist/icons/icons.mjs +5 -1
  31. package/dist/icons/icons.mjs.map +1 -1
  32. package/dist/index.d.mts +8 -4
  33. package/dist/index.mjs +7 -3
  34. package/dist/lib/markdown.mjs +101 -5
  35. package/dist/lib/markdown.mjs.map +1 -1
  36. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.mjs","names":["createContext","ReactNode","useContext","useMemo","Linking","StyleSheet","fontOf","MarkdownBlock","MarkdownHeadingLevel","MarkdownInline","parseMarkdown","CodeBlock","FileLinkHandler","text","explicit","FileLinkContext","undefined","URL_OR_ANCHOR","decoded","href","decodeURIComponent","InlineCode","onFileLink","open","includes","styles","code","fileLink","InlineLink","children","path","isFile","test","openURL","catch","link","renderInline","nodes","map","node","index","type","strong","em","Block","block","first","prose","heading","level","firstHeading","list","items","item","marker","ordered","start","itemText","language","rule","MarkdownProps","Markdown","blocks","root","HEADING_STEP","const","HEADING_SPACE","HEADING_INK","create","theme","minWidth","gap","spacing","uni__dependencies","color","colors","fontFamily","sans","fontSize","base","lineHeight","marginTop","letterSpacing","fontWeight","semibold","hi","fontStyle","backgroundColor","deep","green","mono","textDecorationLine","blue","flexDirection","paddingLeft","dim","flexShrink","height"],"sources":["../../src/components/Markdown.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext, useMemo } from 'react';\nimport { Linking, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { fontOf } from '../lib/fonts';\nimport { type MarkdownBlock, type MarkdownHeadingLevel, type MarkdownInline, parseMarkdown } from '../lib/markdown';\nimport { CodeBlock } from './CodeBlock';\n\n/*\n * Markdown in the web component's element styles, from the package's own\n * parser: headings, paragraphs, lists, code spans and fences, bold, italic\n * and links. Web links open with Linking; a file path goes to the host.\n *\n * ponytail: no tables, images or blockquotes yet; their source shows as text.\n */\n\n/**\n * What a piece of inline code or a relative link opens, when the host knows.\n * Returning undefined leaves it as plain code or an ordinary link. The same\n * contract as the web Markdown's handler.\n */\nexport type FileLinkHandler = (text: string, explicit?: boolean) => (() => void) | undefined;\n\n/** Passed by context so the inline renderers stay module functions. */\nconst FileLinkContext = createContext<FileLinkHandler | undefined>(undefined);\n\nconst URL_OR_ANCHOR = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/|#|\\?)/i;\n\nfunction decoded(href: string): string | undefined {\n try {\n return decodeURIComponent(href);\n } catch {\n return undefined;\n }\n}\n\nfunction InlineCode({ text }: { text: string }) {\n const onFileLink = useContext(FileLinkContext);\n const open = text.includes('\\n') ? undefined : onFileLink?.(text);\n if (open !== undefined) {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint={`open ${text}`}\n onPress={open}\n style={[styles.code, styles.fileLink]}\n >\n {text}\n </Text>\n );\n }\n return <Text style={styles.code}>{text}</Text>;\n}\n\nfunction InlineLink({ href, children }: { href: string; children: ReactNode }) {\n const onFileLink = useContext(FileLinkContext);\n const path = decoded(href);\n const isFile = path !== undefined && path !== '' && !URL_OR_ANCHOR.test(path);\n const open = isFile ? onFileLink?.(path, true) : undefined;\n return (\n <Text\n accessibilityRole=\"link\"\n onPress={() => {\n if (open !== undefined) open();\n else if (!isFile) Linking.openURL(href).catch(() => undefined);\n }}\n style={styles.link}\n >\n {children}\n </Text>\n );\n}\n\nfunction renderInline(nodes: readonly MarkdownInline[]): ReactNode[] {\n return nodes.map((node, index) => {\n switch (node.type) {\n case 'text':\n return node.text;\n case 'code':\n return <InlineCode key={index} text={node.text} />;\n case 'strong':\n return (\n <Text key={index} style={styles.strong}>\n {renderInline(node.children)}\n </Text>\n );\n case 'em':\n return (\n <Text key={index} style={styles.em}>\n {renderInline(node.children)}\n </Text>\n );\n case 'link':\n return (\n <InlineLink key={index} href={node.href}>\n {renderInline(node.children)}\n </InlineLink>\n );\n }\n });\n}\n\nfunction Block({ block, first }: { block: MarkdownBlock; first: boolean }) {\n switch (block.type) {\n case 'heading':\n return (\n <Text\n accessibilityRole=\"header\"\n style={[styles.prose, styles.heading(block.level), first && styles.firstHeading]}\n >\n {renderInline(block.children)}\n </Text>\n );\n case 'paragraph':\n return <Text style={styles.prose}>{renderInline(block.children)}</Text>;\n case 'list':\n return (\n <View accessibilityRole=\"list\" style={styles.list}>\n {block.items.map((item, index) => (\n <View key={index} style={styles.item}>\n <Text style={[styles.prose, styles.marker]}>{block.ordered ? `${block.start + index}.` : '\\u2022'}</Text>\n <Text style={[styles.prose, styles.itemText]}>{renderInline(item)}</Text>\n </View>\n ))}\n </View>\n );\n case 'code':\n return <CodeBlock text={block.text} language={block.language} />;\n case 'rule':\n return <View accessible={false} style={styles.rule} />;\n }\n}\n\nexport interface MarkdownProps {\n text: string;\n onFileLink?: FileLinkHandler;\n}\n\n/** Markdown in Po's shared presentation, parsed by the package's own small parser. */\nexport function Markdown({ text, onFileLink }: MarkdownProps) {\n const blocks = useMemo(() => parseMarkdown(text), [text]);\n return (\n <FileLinkContext.Provider value={onFileLink}>\n <View style={styles.root}>\n {blocks.map((block, index) => (\n <Block key={index} block={block} first={index === 0} />\n ))}\n </View>\n </FileLinkContext.Provider>\n );\n}\n\n/**\n * Headings step up from the prose and never shrink below it; h4 to h6 keep\n * the prose size and lean on weight, fading from `hi` to `dim`.\n */\nconst HEADING_STEP = { 1: '2xl', 2: 'xl', 3: 'lg', 4: 'base', 5: 'base', 6: 'base' } as const;\nconst HEADING_SPACE = { 1: 2, 2: 2, 3: 1, 4: 0, 5: 0, 6: 0 } as const;\nconst HEADING_INK = { 1: 'hi', 2: 'hi', 3: 'hi', 4: 'hi', 5: 'text', 6: 'dim' } as const;\n\nconst styles = StyleSheet.create((theme) => ({\n root: { minWidth: 0, gap: theme.spacing(2) },\n prose: {\n color: theme.colors.text,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n heading: (level: MarkdownHeadingLevel) => ({\n marginTop: theme.spacing(HEADING_SPACE[level]),\n fontSize: theme.fontSize[HEADING_STEP[level]],\n lineHeight: theme.lineHeight[HEADING_STEP[level]],\n letterSpacing: theme.letterSpacing[HEADING_STEP[level]],\n fontWeight: theme.fontWeight.semibold,\n color: theme.colors[HEADING_INK[level]],\n }),\n firstHeading: { marginTop: 0 },\n strong: { fontWeight: theme.fontWeight.semibold, color: theme.colors.hi },\n em: { fontStyle: 'italic' },\n code: {\n backgroundColor: theme.colors.deep,\n color: theme.colors.green,\n fontFamily: fontOf(theme.fontFamily.mono),\n },\n fileLink: { textDecorationLine: 'underline' },\n link: { color: theme.colors.blue, textDecorationLine: 'underline' },\n list: { gap: theme.spacing(0.5) },\n item: { flexDirection: 'row', gap: theme.spacing(2), paddingLeft: theme.spacing(1) },\n marker: { minWidth: theme.spacing(3), color: theme.colors.dim },\n itemText: { flexShrink: 1 },\n rule: { height: 1, backgroundColor: theme.colors['border-soft'] },\n}));\n"],"mappings":"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"}
1
+ {"version":3,"file":"Markdown.mjs","names":["createContext","ReactNode","useContext","useEffect","useMemo","useState","Linking","StyleSheet","fontOf","MarkdownBlock","MarkdownHeadingLevel","MarkdownInline","parseMarkdown","CodeBlock","FileLinkHandler","text","explicit","FileLinkContext","undefined","MarkdownImageLoader","path","Promise","url","dispose","ImageContext","URL_OR_ANCHOR","DIRECT_IMAGE","PLACEHOLDER_RATIO","decoded","href","decodeURIComponent","InlineCode","onFileLink","open","includes","styles","code","fileLink","InlineLink","children","isFile","test","openURL","catch","link","MarkdownImage","src","alt","loader","split","loaded","setLoaded","failed","ratio","setRatio","active","asset","Awaited","ReturnType","resolve","then","Error","result","current","uri","waiting","prose","imageState","nativeEvent","fit","width","height","size","source","Image","getSize","image","aspectRatio","renderInline","nodes","map","node","index","type","strong","em","MarkdownTable","header","rows","table","cell","column","headCell","row","Block","block","first","quoted","heading","level","firstHeading","parts","run","flush","length","push","root","list","items","item","marker","ordered","start","itemText","language","rule","quote","child","MarkdownProps","loadImage","Markdown","blocks","HEADING_STEP","const","HEADING_SPACE","HEADING_INK","create","theme","minWidth","gap","spacing","uni__dependencies","color","colors","fontFamily","sans","fontSize","base","lineHeight","marginTop","letterSpacing","fontWeight","semibold","hi","fontStyle","backgroundColor","deep","green","mono","textDecorationLine","blue","flexDirection","paddingLeft","dim","flexShrink","borderLeftWidth","borderLeftColor","border","borderTopWidth","borderColor","paddingHorizontal","paddingVertical","borderRightWidth","borderBottomWidth","maxHeight","borderRadius","md","borderWidth"],"sources":["../../src/components/Markdown.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext, useEffect, useMemo, useState } from 'react';\nimport { Image, Linking, ScrollView, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { fontOf } from '../lib/fonts';\nimport { type MarkdownBlock, type MarkdownHeadingLevel, type MarkdownInline, parseMarkdown } from '../lib/markdown';\nimport { CodeBlock } from './CodeBlock';\n\n/*\n * Markdown in the web component's element styles, from the package's own\n * parser: headings, paragraphs, lists, code spans and fences, bold, italic,\n * links, images, blockquotes and tables. Web links open with Linking; a file\n * path goes to the host. Raw HTML blocks are left out, as on the web.\n */\n\n/**\n * What a piece of inline code or a relative link opens, when the host knows.\n * Returning undefined leaves it as plain code or an ordinary link. The same\n * contract as the web Markdown's handler.\n */\nexport type FileLinkHandler = (text: string, explicit?: boolean) => (() => void) | undefined;\n\n/** Passed by context so the inline renderers stay module functions. */\nconst FileLinkContext = createContext<FileLinkHandler | undefined>(undefined);\n\n/** Loads a relative image path from the host; the same contract as the web Markdown's `loadImage`. */\nexport type MarkdownImageLoader = (path: string) => Promise<{ url: string; dispose(): void }>;\n\nconst ImageContext = createContext<MarkdownImageLoader | undefined>(undefined);\n\nconst URL_OR_ANCHOR = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/|#|\\?)/i;\n/** Sources an Image may load as written; any other scheme stays its alt text. */\nconst DIRECT_IMAGE = /^(?:https?:|data:image\\/)/i;\n/** Until the image reports its size, it holds a landscape box rather than collapsing. */\nconst PLACEHOLDER_RATIO = 16 / 9;\n\nfunction decoded(href: string): string | undefined {\n try {\n return decodeURIComponent(href);\n } catch {\n return undefined;\n }\n}\n\nfunction InlineCode({ text }: { text: string }) {\n const onFileLink = useContext(FileLinkContext);\n const open = text.includes('\\n') ? undefined : onFileLink?.(text);\n if (open !== undefined) {\n return (\n <Text\n accessibilityRole=\"link\"\n accessibilityHint={`open ${text}`}\n onPress={open}\n style={[styles.code, styles.fileLink]}\n >\n {text}\n </Text>\n );\n }\n return <Text style={styles.code}>{text}</Text>;\n}\n\nfunction InlineLink({ href, children }: { href: string; children: ReactNode }) {\n const onFileLink = useContext(FileLinkContext);\n const path = decoded(href);\n const isFile = path !== undefined && path !== '' && !URL_OR_ANCHOR.test(path);\n const open = isFile ? onFileLink?.(path, true) : undefined;\n return (\n <Text\n accessibilityRole=\"link\"\n onPress={() => {\n if (open !== undefined) open();\n else if (!isFile) Linking.openURL(href).catch(() => undefined);\n }}\n style={styles.link}\n >\n {children}\n </Text>\n );\n}\n\n/** One image: a file path through the host's loader, or a web or data address as written. */\nfunction MarkdownImage({ src, alt }: { src: string; alt: string }) {\n const loader = useContext(ImageContext);\n // An invalid encoded filename is shown as unavailable, never fetched.\n const path = URL_OR_ANCHOR.test(src) ? undefined : (decoded(src.split(/[?#]/u, 1)[0]!) ?? '');\n const [loaded, setLoaded] = useState<{ path: string; url?: string; failed?: boolean }>();\n const [ratio, setRatio] = useState(PLACEHOLDER_RATIO);\n useEffect(() => {\n if (loader === undefined || path === undefined) return;\n let active = true;\n let asset: Awaited<ReturnType<MarkdownImageLoader>> | undefined;\n void Promise.resolve()\n .then(() => {\n if (path === '') throw new Error('Invalid image path.');\n return loader(path);\n })\n .then((result) => {\n if (!active) return result.dispose();\n asset = result;\n setLoaded({ path, url: result.url });\n })\n .catch(() => {\n // The failure is shown in place, as the web image does.\n if (active) setLoaded({ path, failed: true });\n });\n return () => {\n active = false;\n asset?.dispose();\n };\n }, [path, loader]);\n const current = loaded?.path === path ? loaded : undefined;\n const uri = path === undefined ? (DIRECT_IMAGE.test(src) ? src : undefined) : current?.url;\n if (uri === undefined || current?.failed) {\n const waiting = path !== undefined && loader !== undefined && current === undefined;\n return (\n <Text style={[styles.prose, styles.imageState]} accessibilityRole={waiting ? 'text' : 'alert'}>\n {alt || path || 'Image'} ({waiting ? 'loading\\u2026' : 'unavailable'})\n </Text>\n );\n }\n return (\n <Image\n source={{ uri }}\n accessibilityLabel={alt || 'Image'}\n accessibilityIgnoresInvertColors\n resizeMode=\"contain\"\n onLoad={({ nativeEvent }) => {\n const fit = (width: number, height: number) => {\n if (width > 0 && height > 0) setRatio(width / height);\n };\n // iOS and Android report the size with the event; react-native-web does not, so it asks.\n const size = (nativeEvent as { source?: { width: number; height: number } } | undefined)?.source;\n if (size !== undefined) fit(size.width, size.height);\n else Image.getSize(uri, fit, () => undefined);\n }}\n onError={() => setLoaded({ path: path ?? src, failed: true })}\n style={[styles.image, { aspectRatio: ratio }]}\n />\n );\n}\nfunction renderInline(nodes: readonly MarkdownInline[]): ReactNode[] {\n return nodes.map((node, index) => {\n switch (node.type) {\n case 'text':\n return node.text;\n case 'code':\n return <InlineCode key={index} text={node.text} />;\n case 'strong':\n return (\n <Text key={index} style={styles.strong}>\n {renderInline(node.children)}\n </Text>\n );\n case 'em':\n return (\n <Text key={index} style={styles.em}>\n {renderInline(node.children)}\n </Text>\n );\n case 'link':\n return (\n <InlineLink key={index} href={node.href}>\n {renderInline(node.children)}\n </InlineLink>\n );\n case 'image':\n // Inside a heading or list item an image keeps to its alt text; paragraphs draw it.\n return node.alt;\n }\n });\n}\n\n/**\n * A table read column by column: every cell keeps to one line inside the sideways scroll, so each\n * column takes its widest cell and the rows line up without a table layout.\n */\nfunction MarkdownTable({ header, rows }: { header: MarkdownInline[][]; rows: MarkdownInline[][][] }) {\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={styles.table}>\n {header.map((cell, column) => (\n <View key={column}>\n <Text style={[styles.prose, styles.cell, styles.headCell]}>{renderInline(cell)}</Text>\n {rows.map((row, index) => (\n <Text key={index} style={[styles.prose, styles.cell]}>\n {renderInline(row[column] ?? [])}\n </Text>\n ))}\n </View>\n ))}\n </View>\n </ScrollView>\n );\n}\n\nfunction Block({ block, first, quoted = false }: { block: MarkdownBlock; first: boolean; quoted?: boolean }) {\n const prose = [styles.prose, quoted && styles.quoted];\n switch (block.type) {\n case 'heading':\n return (\n <Text\n accessibilityRole=\"header\"\n style={[...prose, styles.heading(block.level), first && styles.firstHeading, quoted && styles.quoted]}\n >\n {renderInline(block.children)}\n </Text>\n );\n case 'paragraph': {\n // An image breaks the paragraph's text into runs, since an Image cannot sit inside Text.\n const parts: ReactNode[] = [];\n let run: MarkdownInline[] = [];\n const flush = () => {\n if (run.length > 0)\n parts.push(\n <Text key={parts.length} style={prose}>\n {renderInline(run)}\n </Text>,\n );\n run = [];\n };\n for (const node of block.children) {\n if (node.type !== 'image') {\n run.push(node);\n continue;\n }\n flush();\n parts.push(<MarkdownImage key={parts.length} src={node.src} alt={node.alt} />);\n }\n flush();\n return parts.length === 1 ? parts[0] : <View style={styles.root}>{parts}</View>;\n }\n case 'list':\n return (\n <View accessibilityRole=\"list\" style={styles.list}>\n {block.items.map((item, index) => (\n <View key={index} style={styles.item}>\n <Text style={[...prose, styles.marker]}>{block.ordered ? `${block.start + index}.` : '\\u2022'}</Text>\n <Text style={[...prose, styles.itemText]}>{renderInline(item)}</Text>\n </View>\n ))}\n </View>\n );\n case 'code':\n return <CodeBlock text={block.text} language={block.language} />;\n case 'rule':\n return <View accessible={false} style={styles.rule} />;\n case 'quote':\n return (\n <View style={[styles.root, styles.quote]}>\n {block.children.map((child, index) => (\n <Block key={index} block={child} first={index === 0} quoted />\n ))}\n </View>\n );\n case 'table':\n return <MarkdownTable header={block.header} rows={block.rows} />;\n }\n}\n\nexport interface MarkdownProps {\n text: string;\n onFileLink?: FileLinkHandler;\n /** Loads relative image paths; without it they show as unavailable. */\n loadImage?: MarkdownImageLoader;\n}\n\n/** Markdown in Po's shared presentation, parsed by the package's own small parser. */\nexport function Markdown({ text, onFileLink, loadImage }: MarkdownProps) {\n const blocks = useMemo(() => parseMarkdown(text), [text]);\n return (\n <FileLinkContext.Provider value={onFileLink}>\n <ImageContext.Provider value={loadImage}>\n <View style={styles.root}>\n {blocks.map((block, index) => (\n <Block key={index} block={block} first={index === 0} />\n ))}\n </View>\n </ImageContext.Provider>\n </FileLinkContext.Provider>\n );\n}\n\n/**\n * Headings step up from the prose and never shrink below it; h4 to h6 keep\n * the prose size and lean on weight, fading from `hi` to `dim`.\n */\nconst HEADING_STEP = { 1: '2xl', 2: 'xl', 3: 'lg', 4: 'base', 5: 'base', 6: 'base' } as const;\nconst HEADING_SPACE = { 1: 2, 2: 2, 3: 1, 4: 0, 5: 0, 6: 0 } as const;\nconst HEADING_INK = { 1: 'hi', 2: 'hi', 3: 'hi', 4: 'hi', 5: 'text', 6: 'dim' } as const;\n\nconst styles = StyleSheet.create((theme) => ({\n root: { minWidth: 0, gap: theme.spacing(2) },\n prose: {\n color: theme.colors.text,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n heading: (level: MarkdownHeadingLevel) => ({\n marginTop: theme.spacing(HEADING_SPACE[level]),\n fontSize: theme.fontSize[HEADING_STEP[level]],\n lineHeight: theme.lineHeight[HEADING_STEP[level]],\n letterSpacing: theme.letterSpacing[HEADING_STEP[level]],\n fontWeight: theme.fontWeight.semibold,\n color: theme.colors[HEADING_INK[level]],\n }),\n firstHeading: { marginTop: 0 },\n strong: { fontWeight: theme.fontWeight.semibold, color: theme.colors.hi },\n em: { fontStyle: 'italic' },\n code: {\n backgroundColor: theme.colors.deep,\n color: theme.colors.green,\n fontFamily: fontOf(theme.fontFamily.mono),\n },\n fileLink: { textDecorationLine: 'underline' },\n link: { color: theme.colors.blue, textDecorationLine: 'underline' },\n list: { gap: theme.spacing(0.5) },\n item: { flexDirection: 'row', gap: theme.spacing(2), paddingLeft: theme.spacing(1) },\n marker: { minWidth: theme.spacing(3), color: theme.colors.dim },\n itemText: { flexShrink: 1 },\n rule: { height: 1, backgroundColor: theme.colors['border-soft'] },\n // The web blockquote: a rule at the left and quieter text.\n quote: { borderLeftWidth: 2, borderLeftColor: theme.colors.border, paddingLeft: theme.spacing(3) },\n quoted: { color: theme.colors.dim },\n // The web table: bordered cells, the header on the deep surface.\n table: {\n flexDirection: 'row',\n borderTopWidth: 1,\n borderLeftWidth: 1,\n borderColor: theme.colors.border,\n },\n cell: {\n paddingHorizontal: theme.spacing(2),\n paddingVertical: theme.spacing(1),\n borderRightWidth: 1,\n borderBottomWidth: 1,\n borderColor: theme.colors.border,\n },\n headCell: { backgroundColor: theme.colors.deep, fontWeight: theme.fontWeight.semibold, color: theme.colors.hi },\n // The web image's frame: at most 480 tall, a soft border and rounded corners.\n image: {\n width: '100%',\n maxHeight: 480,\n borderRadius: theme.borderRadius.md,\n borderWidth: 1,\n borderColor: theme.colors.border,\n },\n imageState: { color: theme.colors.dim },\n}));\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { SyntaxSpan } from "@agimon-ai/po-web-components/text";
2
+ import { TextProps } from "react-native";
3
+ //#region src/components/SyntaxLine.d.ts
4
+ /**
5
+ * Colours `text` as lines of spans, or undefined while loading and for text with
6
+ * no grammar. Pass a whole block, not one line: a line is not a parse unit.
7
+ */
8
+ export declare function useSyntaxLines(text: string, query?: {
9
+ path?: string | undefined;
10
+ }): readonly (readonly SyntaxSpan[])[] | undefined;
11
+ export interface SyntaxLineProps extends Omit<TextProps, 'children'> {
12
+ /** The line's spans from `useSyntaxLines`, or undefined to show `text` plain. */
13
+ spans?: readonly SyntaxSpan[] | undefined;
14
+ text: string;
15
+ }
16
+ /** One line: coloured when its spans are in, the plain text until then. */
17
+ export declare function SyntaxLine({ spans, text, ...props }: SyntaxLineProps): import("react").JSX.Element;
18
+ //#endregion
19
+ //# sourceMappingURL=SyntaxLine.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyntaxLine.d.mts","names":[],"sources":["../../src/components/SyntaxLine.tsx"],"mappings":";;;;;;;wBAgBgB,eAAe,cAAc;EAAS;uBAAgC;iBAuBrE,wBAAwB,KAAK;;EAE5C,iBAAiB;EACjB;;;wBAIc,aAAa,OAAO,SAAS,SAAS,kCAAe,IAAA"}
@@ -0,0 +1,132 @@
1
+ import { detectGrammar, highlightToLines } from "@agimon-ai/po-web-components/text";
2
+ import { StyleSheet } from "react-native-unistyles";
3
+ import { Text } from "react-native-unistyles/components/native/Text";
4
+ import { useEffect, useState } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+
7
+ //#region src/components/SyntaxLine.tsx
8
+ /**
9
+ * Colours `text` as lines of spans, or undefined while loading and for text with
10
+ * no grammar. Pass a whole block, not one line: a line is not a parse unit.
11
+ */
12
+ function useSyntaxLines(text, query = {}) {
13
+ const grammar = detectGrammar({
14
+ path: query.path,
15
+ text
16
+ });
17
+ const signature = `${grammar ?? ""}\u0000${text}`;
18
+ const [done, setDone] = useState();
19
+ useEffect(() => {
20
+ if (grammar === void 0) return;
21
+ let live = true;
22
+ highlightToLines(text, grammar).then((lines) => {
23
+ if (live && lines !== void 0) setDone({
24
+ signature,
25
+ lines
26
+ });
27
+ }, () => void 0);
28
+ return () => {
29
+ live = false;
30
+ };
31
+ }, [
32
+ text,
33
+ grammar,
34
+ signature
35
+ ]);
36
+ return done?.signature === signature ? done.lines : void 0;
37
+ }
38
+ /** One line: coloured when its spans are in, the plain text until then. */
39
+ function SyntaxLine({ spans, text, ...props }) {
40
+ return /* @__PURE__ */ jsx(Text, {
41
+ ...props,
42
+ children: spans?.map((span, index) => /* @__PURE__ */ jsx(Text, {
43
+ style: span.token === void 0 ? void 0 : syntax[span.token],
44
+ children: span.text
45
+ }, index)) ?? text
46
+ });
47
+ }
48
+ /** The web's `PO_SYNTAX_STYLES`, on the native theme's colours. */
49
+ const syntax = StyleSheet.create((theme) => ({
50
+ comment: {
51
+ color: theme.colors.faint,
52
+ fontStyle: "italic",
53
+ uni__dependencies: [0]
54
+ },
55
+ keyword: {
56
+ color: theme.colors.magenta,
57
+ uni__dependencies: [0]
58
+ },
59
+ constant: {
60
+ color: theme.colors.violet,
61
+ uni__dependencies: [0]
62
+ },
63
+ literal: {
64
+ color: theme.colors.orange,
65
+ uni__dependencies: [0]
66
+ },
67
+ string: {
68
+ color: theme.colors.green,
69
+ uni__dependencies: [0]
70
+ },
71
+ regexp: {
72
+ color: theme.colors.teal,
73
+ uni__dependencies: [0]
74
+ },
75
+ operator: {
76
+ color: theme.colors.blue,
77
+ uni__dependencies: [0]
78
+ },
79
+ punctuation: {
80
+ color: theme.colors.dim,
81
+ uni__dependencies: [0]
82
+ },
83
+ variable: {
84
+ color: theme.colors.text,
85
+ uni__dependencies: [0]
86
+ },
87
+ property: {
88
+ color: theme.colors.cyan,
89
+ uni__dependencies: [0]
90
+ },
91
+ callable: {
92
+ color: theme.colors.blue,
93
+ uni__dependencies: [0]
94
+ },
95
+ type: {
96
+ color: theme.colors.yellow,
97
+ uni__dependencies: [0]
98
+ },
99
+ tag: {
100
+ color: theme.colors.red,
101
+ uni__dependencies: [0]
102
+ },
103
+ attribute: {
104
+ color: theme.colors.yellow,
105
+ uni__dependencies: [0]
106
+ },
107
+ meta: {
108
+ color: theme.colors.faint,
109
+ uni__dependencies: [0]
110
+ },
111
+ heading: {
112
+ color: theme.colors.hi,
113
+ fontWeight: "bold",
114
+ uni__dependencies: [0]
115
+ },
116
+ link: {
117
+ color: theme.colors.cyan,
118
+ textDecorationLine: "underline",
119
+ uni__dependencies: [0]
120
+ },
121
+ emphasis: { fontStyle: "italic" },
122
+ strong: { fontWeight: "bold" },
123
+ strikethrough: { textDecorationLine: "line-through" },
124
+ invalid: {
125
+ color: theme.colors.red,
126
+ uni__dependencies: [0]
127
+ }
128
+ }));
129
+
130
+ //#endregion
131
+ export { SyntaxLine, useSyntaxLines };
132
+ //# sourceMappingURL=SyntaxLine.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyntaxLine.mjs","names":["detectGrammar","highlightToLines","SyntaxSpan","useEffect","useState","TextProps","StyleSheet","useSyntaxLines","text","query","path","grammar","signature","done","setDone","lines","undefined","live","then","SyntaxLineProps","Omit","spans","SyntaxLine","props","map","span","index","token","syntax","create","theme","comment","color","colors","faint","fontStyle","uni__dependencies","keyword","magenta","constant","violet","literal","orange","string","green","regexp","teal","operator","blue","punctuation","dim","variable","property","cyan","callable","type","yellow","tag","red","attribute","meta","heading","hi","fontWeight","link","textDecorationLine","emphasis","strong","strikethrough","invalid"],"sources":["../../src/components/SyntaxLine.tsx"],"sourcesContent":["import { detectGrammar, highlightToLines, type SyntaxSpan } from '@agimon-ai/po-web-components/text';\nimport { useEffect, useState } from 'react';\nimport { Text, type TextProps } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\n/*\n * Read-only code with the editor's colours, as the web's SyntaxText: the same\n * lezer grammars through `@agimon-ai/po-web-components/text`, and the web's\n * `PO_SYNTAX_STYLES` palette on the native theme. Highlighting is async, so the\n * plain text shows first and a result that never highlights stays plain.\n */\n\n/**\n * Colours `text` as lines of spans, or undefined while loading and for text with\n * no grammar. Pass a whole block, not one line: a line is not a parse unit.\n */\nexport function useSyntaxLines(text: string, query: { path?: string | undefined } = {}) {\n const grammar = detectGrammar({ path: query.path, text });\n const signature = `${grammar ?? ''}\\u0000${text}`;\n const [done, setDone] = useState<{ signature: string; lines: readonly (readonly SyntaxSpan[])[] }>();\n\n useEffect(() => {\n if (grammar === undefined) return;\n let live = true;\n void highlightToLines(text, grammar).then(\n (lines) => {\n if (live && lines !== undefined) setDone({ signature, lines });\n },\n // A grammar that fails to load leaves the plain text in place: colour is decoration.\n () => undefined,\n );\n return () => {\n live = false;\n };\n }, [text, grammar, signature]);\n\n return done?.signature === signature ? done.lines : undefined;\n}\n\nexport interface SyntaxLineProps extends Omit<TextProps, 'children'> {\n /** The line's spans from `useSyntaxLines`, or undefined to show `text` plain. */\n spans?: readonly SyntaxSpan[] | undefined;\n text: string;\n}\n\n/** One line: coloured when its spans are in, the plain text until then. */\nexport function SyntaxLine({ spans, text, ...props }: SyntaxLineProps) {\n return (\n <Text {...props}>\n {spans?.map((span, index) => (\n <Text key={index} style={span.token === undefined ? undefined : syntax[span.token]}>\n {span.text}\n </Text>\n )) ?? text}\n </Text>\n );\n}\n\n/** The web's `PO_SYNTAX_STYLES`, on the native theme's colours. */\nconst syntax = StyleSheet.create((theme) => ({\n comment: { color: theme.colors.faint, fontStyle: 'italic' },\n keyword: { color: theme.colors.magenta },\n constant: { color: theme.colors.violet },\n literal: { color: theme.colors.orange },\n string: { color: theme.colors.green },\n regexp: { color: theme.colors.teal },\n operator: { color: theme.colors.blue },\n punctuation: { color: theme.colors.dim },\n variable: { color: theme.colors.text },\n property: { color: theme.colors.cyan },\n callable: { color: theme.colors.blue },\n type: { color: theme.colors.yellow },\n tag: { color: theme.colors.red },\n attribute: { color: theme.colors.yellow },\n meta: { color: theme.colors.faint },\n heading: { color: theme.colors.hi, fontWeight: 'bold' },\n link: { color: theme.colors.cyan, textDecorationLine: 'underline' },\n emphasis: { fontStyle: 'italic' },\n strong: { fontWeight: 'bold' },\n strikethrough: { textDecorationLine: 'line-through' },\n invalid: { color: theme.colors.red },\n}));\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { TextProps } from "react-native";
2
+ //#region src/components/ToolPathLink.d.ts
3
+ export interface ToolPathLinkProps extends Omit<TextProps, 'children' | 'onPress'> {
4
+ path: string;
5
+ /** Opens the file; omitted when nothing installed can show it. */
6
+ onOpen?: () => void;
7
+ }
8
+ export declare function ToolPathLink({ path, onOpen, style, ...props }: ToolPathLinkProps): import("react").JSX.Element;
9
+ //#endregion
10
+ //# sourceMappingURL=ToolPathLink.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolPathLink.d.mts","names":[],"sources":["../../src/components/ToolPathLink.tsx"],"mappings":";;iBAYiB,0BAA0B,KAAK;EAC9C;;EAEA;;wBAGc,eAAe,MAAM,QAAQ,UAAU,SAAS,oCAAiB,IAAA"}
@@ -0,0 +1,40 @@
1
+ import { fontOf } from "../lib/fonts.mjs";
2
+ import { StyleSheet } from "react-native-unistyles";
3
+ import { Text } from "react-native-unistyles/components/native/Text";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/components/ToolPathLink.tsx
7
+ function ToolPathLink({ path, onOpen, style, ...props }) {
8
+ return /* @__PURE__ */ jsx(Text, {
9
+ numberOfLines: 1,
10
+ ellipsizeMode: "middle",
11
+ testID: "tool-path",
12
+ ...onOpen === void 0 ? {} : {
13
+ accessibilityRole: "link",
14
+ accessibilityHint: `open ${path}`,
15
+ onPress: onOpen
16
+ },
17
+ style: [
18
+ styles.path,
19
+ onOpen !== void 0 && styles.link,
20
+ style
21
+ ],
22
+ ...props,
23
+ children: path
24
+ });
25
+ }
26
+ const styles = StyleSheet.create((theme) => ({
27
+ path: {
28
+ flexShrink: 1,
29
+ color: theme.colors.text,
30
+ fontFamily: fontOf(theme.fontFamily.sans),
31
+ fontSize: theme.fontSize.base,
32
+ lineHeight: theme.lineHeight.base,
33
+ uni__dependencies: [0]
34
+ },
35
+ link: { textDecorationLine: "underline" }
36
+ }));
37
+
38
+ //#endregion
39
+ export { ToolPathLink };
40
+ //# sourceMappingURL=ToolPathLink.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolPathLink.mjs","names":["TextProps","StyleSheet","fontOf","ToolPathLinkProps","Omit","path","onOpen","ToolPathLink","style","props","undefined","accessibilityRole","const","accessibilityHint","onPress","styles","link","create","theme","flexShrink","color","colors","text","fontFamily","sans","fontSize","base","lineHeight","uni__dependencies","textDecorationLine"],"sources":["../../src/components/ToolPathLink.tsx"],"sourcesContent":["import { Text, type TextProps } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { fontOf } from '../lib/fonts';\n\n/*\n * The file path in a tool call's header, as a link when something can open it,\n * as the web's ToolPathLink. The host decides whether the path opens and hands\n * the answer down as `onOpen`; without one the path stays plain text, because\n * a link that opens nothing is worse than no link.\n */\n\nexport interface ToolPathLinkProps extends Omit<TextProps, 'children' | 'onPress'> {\n path: string;\n /** Opens the file; omitted when nothing installed can show it. */\n onOpen?: () => void;\n}\n\nexport function ToolPathLink({ path, onOpen, style, ...props }: ToolPathLinkProps) {\n return (\n <Text\n numberOfLines={1}\n ellipsizeMode=\"middle\"\n testID=\"tool-path\"\n {...(onOpen === undefined\n ? {}\n : { accessibilityRole: 'link' as const, accessibilityHint: `open ${path}`, onPress: onOpen })}\n style={[styles.path, onOpen !== undefined && styles.link, style]}\n {...props}\n >\n {path}\n </Text>\n );\n}\n\nconst styles = StyleSheet.create((theme) => ({\n path: {\n flexShrink: 1,\n color: theme.colors.text,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n link: { textDecorationLine: 'underline' },\n}));\n"],"mappings":";;;;;;AAkBA,SAAgBO,aAAa,EAAEF,MAAMC,QAAQE,OAAO,GAAGC,SAA4B;CACjF,OACE,oBAAC,MAAD;EACE,eAAe;EACf,eAAc;EACd,QAAO;EACP,GAAKH,WAAWI,SACZ,CAAC,IACD;GAAEC,mBAAmB;GAAiBE,mBAAmB,QAAQR;GAAQS,SAASR;EAAO;EAC7F,OAAO;GAACS,OAAOV;GAAMC,WAAWI,UAAaK,OAAOC;GAAMR;EAAK;EAC/D,GAAIC;YAEHJ;CACG;AAEV;AAEA,MAAMU,SAASd,WAAWgB,QAAQC,WAAW;CAC3Cb,MAAM;EACJc,YAAY;EACZC,OAAOF,MAAMG,OAAOC;EACpBC,YAAYrB,OAAOgB,MAAMK,WAAWC,IAAI;EACxCC,UAAUP,MAAMO,SAASC;EACzBC,YAAYT,MAAMS,WAAWD;EAAIE,mBAAA,CAAA,CAAA;CACnC;CACAZ,MAAM,EAAEa,oBAAoB,YAAY;AAC1C,EAAE"}
@@ -18,6 +18,10 @@ export declare const ICON_GLYPHS: {
18
18
  readonly sf: "chevron.right";
19
19
  readonly material: "chevron-right";
20
20
  };
21
+ readonly ChevronUp: {
22
+ readonly sf: "chevron.up";
23
+ readonly material: "expand-less";
24
+ };
21
25
  readonly Alert: {
22
26
  readonly sf: "exclamationmark.circle";
23
27
  readonly material: "error-outline";
@@ -134,6 +138,18 @@ export declare const ICON_GLYPHS: {
134
138
  readonly sf: "lock";
135
139
  readonly material: "lock-outline";
136
140
  };
141
+ readonly Download: {
142
+ readonly sf: "square.and.arrow.down";
143
+ readonly material: "file-download";
144
+ };
145
+ readonly Mic: {
146
+ readonly sf: "mic";
147
+ readonly material: "mic";
148
+ };
149
+ readonly Stop: {
150
+ readonly sf: "stop.fill";
151
+ readonly material: "stop";
152
+ };
137
153
  };
138
154
  export type IconName = keyof typeof ICON_GLYPHS;
139
155
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"iconGlyphs.d.mts","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"mappings":";;;;;;;qBAMa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAqCD,wBAAwB"}
1
+ {"version":3,"file":"iconGlyphs.d.mts","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"mappings":";;;;;;;qBAMa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAyCD,wBAAwB"}
@@ -18,6 +18,10 @@ const ICON_GLYPHS = {
18
18
  sf: "chevron.right",
19
19
  material: "chevron-right"
20
20
  },
21
+ ChevronUp: {
22
+ sf: "chevron.up",
23
+ material: "expand-less"
24
+ },
21
25
  Alert: {
22
26
  sf: "exclamationmark.circle",
23
27
  material: "error-outline"
@@ -133,6 +137,18 @@ const ICON_GLYPHS = {
133
137
  Lock: {
134
138
  sf: "lock",
135
139
  material: "lock-outline"
140
+ },
141
+ Download: {
142
+ sf: "square.and.arrow.down",
143
+ material: "file-download"
144
+ },
145
+ Mic: {
146
+ sf: "mic",
147
+ material: "mic"
148
+ },
149
+ Stop: {
150
+ sf: "stop.fill",
151
+ material: "stop"
136
152
  }
137
153
  };
138
154
 
@@ -1 +1 @@
1
- {"version":3,"file":"iconGlyphs.mjs","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"sourcesContent":["/**\n * The curated native icon set: the same names the web library re-exports from\n * lucide, each drawn with the platform's own family. iOS gets an SF Symbol,\n * Android and web get a Material Icons glyph. Kept free of React Native so a\n * unit test can check every glyph against the installed glyph map.\n */\nexport const ICON_GLYPHS = {\n Check: { sf: 'checkmark', material: 'check' },\n ChevronDown: { sf: 'chevron.down', material: 'expand-more' },\n ChevronRight: { sf: 'chevron.right', material: 'chevron-right' },\n Alert: { sf: 'exclamationmark.circle', material: 'error-outline' },\n Copy: { sf: 'doc.on.doc', material: 'content-copy' },\n Message: { sf: 'message', material: 'chat-bubble-outline' },\n // Each platform's own overflow mark: a horizontal ellipsis on iOS, vertical dots on Android.\n Kebab: { sf: 'ellipsis', material: 'more-vert' },\n Edit: { sf: 'pencil', material: 'edit' },\n Gear: { sf: 'gearshape', material: 'settings' },\n Send: { sf: 'paperplane', material: 'send' },\n Task: { sf: 'checkmark.square', material: 'check-box' },\n Trash: { sf: 'trash', material: 'delete-outline' },\n Wrench: { sf: 'wrench.and.screwdriver', material: 'build' },\n Close: { sf: 'xmark', material: 'close' },\n File: { sf: 'doc', material: 'insert-drive-file' },\n Search: { sf: 'magnifyingglass', material: 'search' },\n Image: { sf: 'photo', material: 'image' },\n Sliders: { sf: 'slider.horizontal.3', material: 'tune' },\n Folder: { sf: 'folder', material: 'folder' },\n Branch: { sf: 'arrow.triangle.branch', material: 'call-split' },\n // ponytail: SF Symbols has no fork distinct from a branch, so iOS draws Fork as Branch. Swap in a custom symbol if the two must differ there.\n Fork: { sf: 'arrow.triangle.branch', material: 'fork-right' },\n Home: { sf: 'house', material: 'home' },\n Activity: { sf: 'waveform.path.ecg', material: 'monitor-heart' },\n ArrowRight: { sf: 'arrow.right', material: 'arrow-forward' },\n Plus: { sf: 'plus', material: 'add' },\n Users: { sf: 'person.2', material: 'group' },\n PlayCircle: { sf: 'play.circle', material: 'play-circle-outline' },\n Workflow: { sf: 'flowchart', material: 'account-tree' },\n Palette: { sf: 'paintpalette', material: 'palette' },\n Lightbulb: { sf: 'lightbulb', material: 'lightbulb-outline' },\n Sparkles: { sf: 'sparkles', material: 'auto-awesome' },\n Lock: { sf: 'lock', material: 'lock-outline' },\n} as const;\n\nexport type IconName = keyof typeof ICON_GLYPHS;\n"],"mappings":";;;;;;;AAMA,MAAa,cAAc;CACzB,OAAO;EAAE,IAAI;EAAa,UAAU;CAAQ;CAC5C,aAAa;EAAE,IAAI;EAAgB,UAAU;CAAc;CAC3D,cAAc;EAAE,IAAI;EAAiB,UAAU;CAAgB;CAC/D,OAAO;EAAE,IAAI;EAA0B,UAAU;CAAgB;CACjE,MAAM;EAAE,IAAI;EAAc,UAAU;CAAe;CACnD,SAAS;EAAE,IAAI;EAAW,UAAU;CAAsB;CAE1D,OAAO;EAAE,IAAI;EAAY,UAAU;CAAY;CAC/C,MAAM;EAAE,IAAI;EAAU,UAAU;CAAO;CACvC,MAAM;EAAE,IAAI;EAAa,UAAU;CAAW;CAC9C,MAAM;EAAE,IAAI;EAAc,UAAU;CAAO;CAC3C,MAAM;EAAE,IAAI;EAAoB,UAAU;CAAY;CACtD,OAAO;EAAE,IAAI;EAAS,UAAU;CAAiB;CACjD,QAAQ;EAAE,IAAI;EAA0B,UAAU;CAAQ;CAC1D,OAAO;EAAE,IAAI;EAAS,UAAU;CAAQ;CACxC,MAAM;EAAE,IAAI;EAAO,UAAU;CAAoB;CACjD,QAAQ;EAAE,IAAI;EAAmB,UAAU;CAAS;CACpD,OAAO;EAAE,IAAI;EAAS,UAAU;CAAQ;CACxC,SAAS;EAAE,IAAI;EAAuB,UAAU;CAAO;CACvD,QAAQ;EAAE,IAAI;EAAU,UAAU;CAAS;CAC3C,QAAQ;EAAE,IAAI;EAAyB,UAAU;CAAa;CAE9D,MAAM;EAAE,IAAI;EAAyB,UAAU;CAAa;CAC5D,MAAM;EAAE,IAAI;EAAS,UAAU;CAAO;CACtC,UAAU;EAAE,IAAI;EAAqB,UAAU;CAAgB;CAC/D,YAAY;EAAE,IAAI;EAAe,UAAU;CAAgB;CAC3D,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAM;CACpC,OAAO;EAAE,IAAI;EAAY,UAAU;CAAQ;CAC3C,YAAY;EAAE,IAAI;EAAe,UAAU;CAAsB;CACjE,UAAU;EAAE,IAAI;EAAa,UAAU;CAAe;CACtD,SAAS;EAAE,IAAI;EAAgB,UAAU;CAAU;CACnD,WAAW;EAAE,IAAI;EAAa,UAAU;CAAoB;CAC5D,UAAU;EAAE,IAAI;EAAY,UAAU;CAAe;CACrD,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAe;AAC/C"}
1
+ {"version":3,"file":"iconGlyphs.mjs","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"sourcesContent":["/**\n * The curated native icon set: the same names the web library re-exports from\n * lucide, each drawn with the platform's own family. iOS gets an SF Symbol,\n * Android and web get a Material Icons glyph. Kept free of React Native so a\n * unit test can check every glyph against the installed glyph map.\n */\nexport const ICON_GLYPHS = {\n Check: { sf: 'checkmark', material: 'check' },\n ChevronDown: { sf: 'chevron.down', material: 'expand-more' },\n ChevronRight: { sf: 'chevron.right', material: 'chevron-right' },\n ChevronUp: { sf: 'chevron.up', material: 'expand-less' },\n Alert: { sf: 'exclamationmark.circle', material: 'error-outline' },\n Copy: { sf: 'doc.on.doc', material: 'content-copy' },\n Message: { sf: 'message', material: 'chat-bubble-outline' },\n // Each platform's own overflow mark: a horizontal ellipsis on iOS, vertical dots on Android.\n Kebab: { sf: 'ellipsis', material: 'more-vert' },\n Edit: { sf: 'pencil', material: 'edit' },\n Gear: { sf: 'gearshape', material: 'settings' },\n Send: { sf: 'paperplane', material: 'send' },\n Task: { sf: 'checkmark.square', material: 'check-box' },\n Trash: { sf: 'trash', material: 'delete-outline' },\n Wrench: { sf: 'wrench.and.screwdriver', material: 'build' },\n Close: { sf: 'xmark', material: 'close' },\n File: { sf: 'doc', material: 'insert-drive-file' },\n Search: { sf: 'magnifyingglass', material: 'search' },\n Image: { sf: 'photo', material: 'image' },\n Sliders: { sf: 'slider.horizontal.3', material: 'tune' },\n Folder: { sf: 'folder', material: 'folder' },\n Branch: { sf: 'arrow.triangle.branch', material: 'call-split' },\n // ponytail: SF Symbols has no fork distinct from a branch, so iOS draws Fork as Branch. Swap in a custom symbol if the two must differ there.\n Fork: { sf: 'arrow.triangle.branch', material: 'fork-right' },\n Home: { sf: 'house', material: 'home' },\n Activity: { sf: 'waveform.path.ecg', material: 'monitor-heart' },\n ArrowRight: { sf: 'arrow.right', material: 'arrow-forward' },\n Plus: { sf: 'plus', material: 'add' },\n Users: { sf: 'person.2', material: 'group' },\n PlayCircle: { sf: 'play.circle', material: 'play-circle-outline' },\n Workflow: { sf: 'flowchart', material: 'account-tree' },\n Palette: { sf: 'paintpalette', material: 'palette' },\n Lightbulb: { sf: 'lightbulb', material: 'lightbulb-outline' },\n Sparkles: { sf: 'sparkles', material: 'auto-awesome' },\n Lock: { sf: 'lock', material: 'lock-outline' },\n Download: { sf: 'square.and.arrow.down', material: 'file-download' },\n Mic: { sf: 'mic', material: 'mic' },\n Stop: { sf: 'stop.fill', material: 'stop' },\n} as const;\n\nexport type IconName = keyof typeof ICON_GLYPHS;\n"],"mappings":";;;;;;;AAMA,MAAa,cAAc;CACzB,OAAO;EAAE,IAAI;EAAa,UAAU;CAAQ;CAC5C,aAAa;EAAE,IAAI;EAAgB,UAAU;CAAc;CAC3D,cAAc;EAAE,IAAI;EAAiB,UAAU;CAAgB;CAC/D,WAAW;EAAE,IAAI;EAAc,UAAU;CAAc;CACvD,OAAO;EAAE,IAAI;EAA0B,UAAU;CAAgB;CACjE,MAAM;EAAE,IAAI;EAAc,UAAU;CAAe;CACnD,SAAS;EAAE,IAAI;EAAW,UAAU;CAAsB;CAE1D,OAAO;EAAE,IAAI;EAAY,UAAU;CAAY;CAC/C,MAAM;EAAE,IAAI;EAAU,UAAU;CAAO;CACvC,MAAM;EAAE,IAAI;EAAa,UAAU;CAAW;CAC9C,MAAM;EAAE,IAAI;EAAc,UAAU;CAAO;CAC3C,MAAM;EAAE,IAAI;EAAoB,UAAU;CAAY;CACtD,OAAO;EAAE,IAAI;EAAS,UAAU;CAAiB;CACjD,QAAQ;EAAE,IAAI;EAA0B,UAAU;CAAQ;CAC1D,OAAO;EAAE,IAAI;EAAS,UAAU;CAAQ;CACxC,MAAM;EAAE,IAAI;EAAO,UAAU;CAAoB;CACjD,QAAQ;EAAE,IAAI;EAAmB,UAAU;CAAS;CACpD,OAAO;EAAE,IAAI;EAAS,UAAU;CAAQ;CACxC,SAAS;EAAE,IAAI;EAAuB,UAAU;CAAO;CACvD,QAAQ;EAAE,IAAI;EAAU,UAAU;CAAS;CAC3C,QAAQ;EAAE,IAAI;EAAyB,UAAU;CAAa;CAE9D,MAAM;EAAE,IAAI;EAAyB,UAAU;CAAa;CAC5D,MAAM;EAAE,IAAI;EAAS,UAAU;CAAO;CACtC,UAAU;EAAE,IAAI;EAAqB,UAAU;CAAgB;CAC/D,YAAY;EAAE,IAAI;EAAe,UAAU;CAAgB;CAC3D,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAM;CACpC,OAAO;EAAE,IAAI;EAAY,UAAU;CAAQ;CAC3C,YAAY;EAAE,IAAI;EAAe,UAAU;CAAsB;CACjE,UAAU;EAAE,IAAI;EAAa,UAAU;CAAe;CACtD,SAAS;EAAE,IAAI;EAAgB,UAAU;CAAU;CACnD,WAAW;EAAE,IAAI;EAAa,UAAU;CAAoB;CAC5D,UAAU;EAAE,IAAI;EAAY,UAAU;CAAe;CACrD,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAe;CAC7C,UAAU;EAAE,IAAI;EAAyB,UAAU;CAAgB;CACnE,KAAK;EAAE,IAAI;EAAO,UAAU;CAAM;CAClC,MAAM;EAAE,IAAI;EAAa,UAAU;CAAO;AAC5C"}
@@ -22,6 +22,10 @@ export declare const ChevronRightIcon: {
22
22
  ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
23
23
  displayName: string;
24
24
  };
25
+ export declare const ChevronUpIcon: {
26
+ ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
27
+ displayName: string;
28
+ };
25
29
  export declare const AlertIcon: {
26
30
  ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
27
31
  displayName: string;
@@ -138,5 +142,17 @@ export declare const SlidersIcon: {
138
142
  ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
139
143
  displayName: string;
140
144
  };
145
+ export declare const DownloadIcon: {
146
+ ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
147
+ displayName: string;
148
+ };
149
+ export declare const MicIcon: {
150
+ ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
151
+ displayName: string;
152
+ };
153
+ export declare const StopIcon: {
154
+ ({ size, color, accessibilityLabel, style }: IconProps): import("react").JSX.Element;
155
+ displayName: string;
156
+ };
141
157
  //#endregion
142
158
  //# sourceMappingURL=icons.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.mts","names":[],"sources":["../../src/icons/icons.tsx"],"mappings":";;;iBAaiB;;EAEf;;EAEA,QAAQ;;EAER;EACA,QAAQ,UAAU;;qBAkCP;KA7B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA8BvE;KA9B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA+BvE;KA/B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAgCvE;KAhC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAiCvE;KAjC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAkCvE;KAlC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAmCvE;KAnC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAoCvE;KApC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAqCvE;KArC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAsCvE;KAtC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAuCvE;KAvC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAwCvE;KAxC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAyCvE;KAzC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA0CvE;KA1C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA2CvE;KA3C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA4CvE;KA5C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA6CvE;KA7C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA8CvE;KA9C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA+CvE;KA/C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAgDvE;KAhD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAiDvE;KAjD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAkDvE;KAlD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAmDvE;KAnD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAoDvE;KApD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAqDvE;KArD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAsDvE;KAtD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAuDvE;KAvD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAwDvE;KAxD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA0DvE;KA1D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA2DvE;KA3D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA4DvE;KA5D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA6DvE;KA7D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA"}
1
+ {"version":3,"file":"icons.d.mts","names":[],"sources":["../../src/icons/icons.tsx"],"mappings":";;;iBAaiB;;EAEf;;EAEA,QAAQ;;EAER;EACA,QAAQ,UAAU;;qBAkCP;KA7B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA8BvE;KA9B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA+BvE;KA/B8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAgCvE;KAhC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAiCvE;KAjC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAkCvE;KAlC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAmCvE;KAnC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAoCvE;KApC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAqCvE;KArC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAsCvE;KAtC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAuCvE;KAvC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAwCvE;KAxC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAyCvE;KAzC8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA0CvE;KA1C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA2CvE;KA3C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA4CvE;KA5C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA6CvE;KA7C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA8CvE;KA9C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA+CvE;KA/C8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAgDvE;KAhD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAiDvE;KAjD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAkDvE;KAlD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAmDvE;KAnD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAoDvE;KApD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAqDvE;KArD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAsDvE;KAtD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAuDvE;KAvD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAwDvE;KAxD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAyDvE;KAzD8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA2DvE;KA3D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA4DvE;KA5D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA6DvE;KA7D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA8DvE;KA9D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBA+DvE;KA/D8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAgEvE;KAhE8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA;;;qBAiEvE;KAjE8D,MAAA,OAAA,oBAAA,SAAA,4BAAS,IAAA"}
@@ -49,6 +49,7 @@ function createIcon(name) {
49
49
  const CheckIcon = createIcon("Check");
50
50
  const ChevronDownIcon = createIcon("ChevronDown");
51
51
  const ChevronRightIcon = createIcon("ChevronRight");
52
+ const ChevronUpIcon = createIcon("ChevronUp");
52
53
  const AlertIcon = createIcon("Alert");
53
54
  const CopyIcon = createIcon("Copy");
54
55
  const MessageIcon = createIcon("Message");
@@ -78,7 +79,10 @@ const FileIcon = createIcon("File");
78
79
  const SearchIcon = createIcon("Search");
79
80
  const ImageIcon = createIcon("Image");
80
81
  const SlidersIcon = createIcon("Sliders");
82
+ const DownloadIcon = createIcon("Download");
83
+ const MicIcon = createIcon("Mic");
84
+ const StopIcon = createIcon("Stop");
81
85
 
82
86
  //#endregion
83
- export { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, CloseIcon, CopyIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon };
87
+ export { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CopyIcon, DownloadIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, MicIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, StopIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon };
84
88
  //# sourceMappingURL=icons.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.mjs","names":["NativeColorToken","MaterialIcons","SymbolView","useContext","Platform","StyleProp","ViewStyle","useUnistyles","IconColorContext","ICON_GLYPHS","IconName","DEFAULT_SIZE","DEFAULT_COLOR","IconProps","size","color","accessibilityLabel","style","createIcon","name","glyph","Icon","theme","inherited","tint","colors","a11y","undefined","accessible","importantForAccessibility","accessibilityElementsHidden","const","accessibilityRole","OS","sf","width","height","material","displayName","CheckIcon","ChevronDownIcon","ChevronRightIcon","AlertIcon","CopyIcon","MessageIcon","KebabIcon","EditIcon","GearIcon","SendIcon","TaskIcon","TrashIcon","WrenchIcon","CloseIcon","FolderIcon","BranchIcon","ForkIcon","HomeIcon","ActivityIcon","ArrowRightIcon","PlusIcon","UsersIcon","PlayCircleIcon","WorkflowIcon","PaletteIcon","LightbulbIcon","SparklesIcon","LockIcon","FileIcon","SearchIcon","ImageIcon","SlidersIcon"],"sources":["../../src/icons/icons.tsx"],"sourcesContent":["import type { NativeColorToken } from '@agimon-ai/po-web-components/nativeTheme';\nimport MaterialIcons from '@expo/vector-icons/MaterialIcons';\nimport { SymbolView } from 'expo-symbols';\nimport { useContext } from 'react';\nimport { Platform, type StyleProp, type ViewStyle } from 'react-native';\nimport { useUnistyles } from 'react-native-unistyles';\n\nimport { IconColorContext } from './IconColorContext';\nimport { ICON_GLYPHS, type IconName } from './iconGlyphs';\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_COLOR: NativeColorToken = 'dim';\n\nexport interface IconProps {\n /** Edge length in points. */\n size?: number;\n /** A theme token; defaults to the enclosing Button's label colour, else `dim`. */\n color?: NativeColorToken;\n /** Given one, the icon is announced as an image; without one it is hidden from screen readers. */\n accessibilityLabel?: string;\n style?: StyleProp<ViewStyle>;\n}\n\nfunction createIcon(name: IconName) {\n const glyph = ICON_GLYPHS[name];\n function Icon({ size = DEFAULT_SIZE, color, accessibilityLabel, style }: IconProps) {\n const { theme } = useUnistyles();\n const inherited = useContext(IconColorContext);\n const tint = theme.colors[color ?? inherited ?? DEFAULT_COLOR];\n const a11y =\n accessibilityLabel === undefined\n ? ({\n accessible: false,\n importantForAccessibility: 'no-hide-descendants',\n accessibilityElementsHidden: true,\n } as const)\n : ({ accessible: true, accessibilityRole: 'image', accessibilityLabel } as const);\n if (Platform.OS === 'ios') {\n return (\n <SymbolView\n name={glyph.sf}\n size={size}\n tintColor={tint}\n style={[{ width: size, height: size }, style]}\n {...a11y}\n />\n );\n }\n return <MaterialIcons name={glyph.material} size={size} color={tint} style={style} {...a11y} />;\n }\n Icon.displayName = `${name}Icon`;\n return Icon;\n}\n\nexport const CheckIcon = createIcon('Check');\nexport const ChevronDownIcon = createIcon('ChevronDown');\nexport const ChevronRightIcon = createIcon('ChevronRight');\nexport const AlertIcon = createIcon('Alert');\nexport const CopyIcon = createIcon('Copy');\nexport const MessageIcon = createIcon('Message');\nexport const KebabIcon = createIcon('Kebab');\nexport const EditIcon = createIcon('Edit');\nexport const GearIcon = createIcon('Gear');\nexport const SendIcon = createIcon('Send');\nexport const TaskIcon = createIcon('Task');\nexport const TrashIcon = createIcon('Trash');\nexport const WrenchIcon = createIcon('Wrench');\nexport const CloseIcon = createIcon('Close');\nexport const FolderIcon = createIcon('Folder');\nexport const BranchIcon = createIcon('Branch');\nexport const ForkIcon = createIcon('Fork');\nexport const HomeIcon = createIcon('Home');\nexport const ActivityIcon = createIcon('Activity');\nexport const ArrowRightIcon = createIcon('ArrowRight');\nexport const PlusIcon = createIcon('Plus');\nexport const UsersIcon = createIcon('Users');\nexport const PlayCircleIcon = createIcon('PlayCircle');\nexport const WorkflowIcon = createIcon('Workflow');\nexport const PaletteIcon = createIcon('Palette');\nexport const LightbulbIcon = createIcon('Lightbulb');\nexport const SparklesIcon = createIcon('Sparkles');\nexport const LockIcon = createIcon('Lock');\n\nexport const FileIcon = createIcon('File');\nexport const SearchIcon = createIcon('Search');\nexport const ImageIcon = createIcon('Image');\nexport const SlidersIcon = createIcon('Sliders');\n"],"mappings":";;;;;;;;;;AAUA,MAAMW,eAAe;AACrB,MAAMC,gBAAkC;AAYxC,SAASM,WAAWC,MAAgB;CAClC,MAAMC,QAAQX,YAAYU;CAC1B,SAASE,KAAK,EAAEP,OAAOH,cAAcI,OAAOC,oBAAoBC,SAAoB;EAClF,MAAM,EAAEK,UAAUf,aAAa;EAC/B,MAAMgB,YAAYpB,WAAWK,gBAAgB;EAC7C,MAAMgB,OAAOF,MAAMG,OAAOV,SAASQ,aAAaX;EAChD,MAAMc,OACJV,uBAAuBW,SAClB;GACCC,YAAY;GACZC,2BAA2B;GAC3BC,6BAA6B;EAC/B,IACC;GAAEF,YAAY;GAAMI,mBAAmB;GAAShB;EAAmB;EAC1E,IAAIZ,SAAS6B,OAAO,OAClB,OACE,oBAAC,YAAD;GACE,MAAMb,MAAMc;GACNpB;GACN,WAAWU;GACX,OAAO,CAAC;IAAEW,OAAOrB;IAAMsB,QAAQtB;GAAK,GAAGG,KAAK;GAC5C,GAAIS;EAAK;EAIf,OAAO,oBAAC,eAAD;GAAe,MAAMN,MAAMiB;GAAgBvB;GAAM,OAAOU;GAAaP;GAAO,GAAIS;EAAK;CAC9F;CACAL,KAAKiB,cAAc,GAAGnB,KAAI;CAC1B,OAAOE;AACT;AAEA,MAAakB,YAAYrB,WAAW,OAAO;AAC3C,MAAasB,kBAAkBtB,WAAW,aAAa;AACvD,MAAauB,mBAAmBvB,WAAW,cAAc;AACzD,MAAawB,YAAYxB,WAAW,OAAO;AAC3C,MAAayB,WAAWzB,WAAW,MAAM;AACzC,MAAa0B,cAAc1B,WAAW,SAAS;AAC/C,MAAa2B,YAAY3B,WAAW,OAAO;AAC3C,MAAa4B,WAAW5B,WAAW,MAAM;AACzC,MAAa6B,WAAW7B,WAAW,MAAM;AACzC,MAAa8B,WAAW9B,WAAW,MAAM;AACzC,MAAa+B,WAAW/B,WAAW,MAAM;AACzC,MAAagC,YAAYhC,WAAW,OAAO;AAC3C,MAAaiC,aAAajC,WAAW,QAAQ;AAC7C,MAAakC,YAAYlC,WAAW,OAAO;AAC3C,MAAamC,aAAanC,WAAW,QAAQ;AAC7C,MAAaoC,aAAapC,WAAW,QAAQ;AAC7C,MAAaqC,WAAWrC,WAAW,MAAM;AACzC,MAAasC,WAAWtC,WAAW,MAAM;AACzC,MAAauC,eAAevC,WAAW,UAAU;AACjD,MAAawC,iBAAiBxC,WAAW,YAAY;AACrD,MAAayC,WAAWzC,WAAW,MAAM;AACzC,MAAa0C,YAAY1C,WAAW,OAAO;AAC3C,MAAa2C,iBAAiB3C,WAAW,YAAY;AACrD,MAAa4C,eAAe5C,WAAW,UAAU;AACjD,MAAa6C,cAAc7C,WAAW,SAAS;AAC/C,MAAa8C,gBAAgB9C,WAAW,WAAW;AACnD,MAAa+C,eAAe/C,WAAW,UAAU;AACjD,MAAagD,WAAWhD,WAAW,MAAM;AAEzC,MAAaiD,WAAWjD,WAAW,MAAM;AACzC,MAAakD,aAAalD,WAAW,QAAQ;AAC7C,MAAamD,YAAYnD,WAAW,OAAO;AAC3C,MAAaoD,cAAcpD,WAAW,SAAS"}
1
+ {"version":3,"file":"icons.mjs","names":["NativeColorToken","MaterialIcons","SymbolView","useContext","Platform","StyleProp","ViewStyle","useUnistyles","IconColorContext","ICON_GLYPHS","IconName","DEFAULT_SIZE","DEFAULT_COLOR","IconProps","size","color","accessibilityLabel","style","createIcon","name","glyph","Icon","theme","inherited","tint","colors","a11y","undefined","accessible","importantForAccessibility","accessibilityElementsHidden","const","accessibilityRole","OS","sf","width","height","material","displayName","CheckIcon","ChevronDownIcon","ChevronRightIcon","ChevronUpIcon","AlertIcon","CopyIcon","MessageIcon","KebabIcon","EditIcon","GearIcon","SendIcon","TaskIcon","TrashIcon","WrenchIcon","CloseIcon","FolderIcon","BranchIcon","ForkIcon","HomeIcon","ActivityIcon","ArrowRightIcon","PlusIcon","UsersIcon","PlayCircleIcon","WorkflowIcon","PaletteIcon","LightbulbIcon","SparklesIcon","LockIcon","FileIcon","SearchIcon","ImageIcon","SlidersIcon","DownloadIcon","MicIcon","StopIcon"],"sources":["../../src/icons/icons.tsx"],"sourcesContent":["import type { NativeColorToken } from '@agimon-ai/po-web-components/nativeTheme';\nimport MaterialIcons from '@expo/vector-icons/MaterialIcons';\nimport { SymbolView } from 'expo-symbols';\nimport { useContext } from 'react';\nimport { Platform, type StyleProp, type ViewStyle } from 'react-native';\nimport { useUnistyles } from 'react-native-unistyles';\n\nimport { IconColorContext } from './IconColorContext';\nimport { ICON_GLYPHS, type IconName } from './iconGlyphs';\n\nconst DEFAULT_SIZE = 16;\nconst DEFAULT_COLOR: NativeColorToken = 'dim';\n\nexport interface IconProps {\n /** Edge length in points. */\n size?: number;\n /** A theme token; defaults to the enclosing Button's label colour, else `dim`. */\n color?: NativeColorToken;\n /** Given one, the icon is announced as an image; without one it is hidden from screen readers. */\n accessibilityLabel?: string;\n style?: StyleProp<ViewStyle>;\n}\n\nfunction createIcon(name: IconName) {\n const glyph = ICON_GLYPHS[name];\n function Icon({ size = DEFAULT_SIZE, color, accessibilityLabel, style }: IconProps) {\n const { theme } = useUnistyles();\n const inherited = useContext(IconColorContext);\n const tint = theme.colors[color ?? inherited ?? DEFAULT_COLOR];\n const a11y =\n accessibilityLabel === undefined\n ? ({\n accessible: false,\n importantForAccessibility: 'no-hide-descendants',\n accessibilityElementsHidden: true,\n } as const)\n : ({ accessible: true, accessibilityRole: 'image', accessibilityLabel } as const);\n if (Platform.OS === 'ios') {\n return (\n <SymbolView\n name={glyph.sf}\n size={size}\n tintColor={tint}\n style={[{ width: size, height: size }, style]}\n {...a11y}\n />\n );\n }\n return <MaterialIcons name={glyph.material} size={size} color={tint} style={style} {...a11y} />;\n }\n Icon.displayName = `${name}Icon`;\n return Icon;\n}\n\nexport const CheckIcon = createIcon('Check');\nexport const ChevronDownIcon = createIcon('ChevronDown');\nexport const ChevronRightIcon = createIcon('ChevronRight');\nexport const ChevronUpIcon = createIcon('ChevronUp');\nexport const AlertIcon = createIcon('Alert');\nexport const CopyIcon = createIcon('Copy');\nexport const MessageIcon = createIcon('Message');\nexport const KebabIcon = createIcon('Kebab');\nexport const EditIcon = createIcon('Edit');\nexport const GearIcon = createIcon('Gear');\nexport const SendIcon = createIcon('Send');\nexport const TaskIcon = createIcon('Task');\nexport const TrashIcon = createIcon('Trash');\nexport const WrenchIcon = createIcon('Wrench');\nexport const CloseIcon = createIcon('Close');\nexport const FolderIcon = createIcon('Folder');\nexport const BranchIcon = createIcon('Branch');\nexport const ForkIcon = createIcon('Fork');\nexport const HomeIcon = createIcon('Home');\nexport const ActivityIcon = createIcon('Activity');\nexport const ArrowRightIcon = createIcon('ArrowRight');\nexport const PlusIcon = createIcon('Plus');\nexport const UsersIcon = createIcon('Users');\nexport const PlayCircleIcon = createIcon('PlayCircle');\nexport const WorkflowIcon = createIcon('Workflow');\nexport const PaletteIcon = createIcon('Palette');\nexport const LightbulbIcon = createIcon('Lightbulb');\nexport const SparklesIcon = createIcon('Sparkles');\nexport const LockIcon = createIcon('Lock');\n\nexport const FileIcon = createIcon('File');\nexport const SearchIcon = createIcon('Search');\nexport const ImageIcon = createIcon('Image');\nexport const SlidersIcon = createIcon('Sliders');\nexport const DownloadIcon = createIcon('Download');\nexport const MicIcon = createIcon('Mic');\nexport const StopIcon = createIcon('Stop');\n"],"mappings":";;;;;;;;;;AAUA,MAAMW,eAAe;AACrB,MAAMC,gBAAkC;AAYxC,SAASM,WAAWC,MAAgB;CAClC,MAAMC,QAAQX,YAAYU;CAC1B,SAASE,KAAK,EAAEP,OAAOH,cAAcI,OAAOC,oBAAoBC,SAAoB;EAClF,MAAM,EAAEK,UAAUf,aAAa;EAC/B,MAAMgB,YAAYpB,WAAWK,gBAAgB;EAC7C,MAAMgB,OAAOF,MAAMG,OAAOV,SAASQ,aAAaX;EAChD,MAAMc,OACJV,uBAAuBW,SAClB;GACCC,YAAY;GACZC,2BAA2B;GAC3BC,6BAA6B;EAC/B,IACC;GAAEF,YAAY;GAAMI,mBAAmB;GAAShB;EAAmB;EAC1E,IAAIZ,SAAS6B,OAAO,OAClB,OACE,oBAAC,YAAD;GACE,MAAMb,MAAMc;GACNpB;GACN,WAAWU;GACX,OAAO,CAAC;IAAEW,OAAOrB;IAAMsB,QAAQtB;GAAK,GAAGG,KAAK;GAC5C,GAAIS;EAAK;EAIf,OAAO,oBAAC,eAAD;GAAe,MAAMN,MAAMiB;GAAgBvB;GAAM,OAAOU;GAAaP;GAAO,GAAIS;EAAK;CAC9F;CACAL,KAAKiB,cAAc,GAAGnB,KAAI;CAC1B,OAAOE;AACT;AAEA,MAAakB,YAAYrB,WAAW,OAAO;AAC3C,MAAasB,kBAAkBtB,WAAW,aAAa;AACvD,MAAauB,mBAAmBvB,WAAW,cAAc;AACzD,MAAawB,gBAAgBxB,WAAW,WAAW;AACnD,MAAayB,YAAYzB,WAAW,OAAO;AAC3C,MAAa0B,WAAW1B,WAAW,MAAM;AACzC,MAAa2B,cAAc3B,WAAW,SAAS;AAC/C,MAAa4B,YAAY5B,WAAW,OAAO;AAC3C,MAAa6B,WAAW7B,WAAW,MAAM;AACzC,MAAa8B,WAAW9B,WAAW,MAAM;AACzC,MAAa+B,WAAW/B,WAAW,MAAM;AACzC,MAAagC,WAAWhC,WAAW,MAAM;AACzC,MAAaiC,YAAYjC,WAAW,OAAO;AAC3C,MAAakC,aAAalC,WAAW,QAAQ;AAC7C,MAAamC,YAAYnC,WAAW,OAAO;AAC3C,MAAaoC,aAAapC,WAAW,QAAQ;AAC7C,MAAaqC,aAAarC,WAAW,QAAQ;AAC7C,MAAasC,WAAWtC,WAAW,MAAM;AACzC,MAAauC,WAAWvC,WAAW,MAAM;AACzC,MAAawC,eAAexC,WAAW,UAAU;AACjD,MAAayC,iBAAiBzC,WAAW,YAAY;AACrD,MAAa0C,WAAW1C,WAAW,MAAM;AACzC,MAAa2C,YAAY3C,WAAW,OAAO;AAC3C,MAAa4C,iBAAiB5C,WAAW,YAAY;AACrD,MAAa6C,eAAe7C,WAAW,UAAU;AACjD,MAAa8C,cAAc9C,WAAW,SAAS;AAC/C,MAAa+C,gBAAgB/C,WAAW,WAAW;AACnD,MAAagD,eAAehD,WAAW,UAAU;AACjD,MAAaiD,WAAWjD,WAAW,MAAM;AAEzC,MAAakD,WAAWlD,WAAW,MAAM;AACzC,MAAamD,aAAanD,WAAW,QAAQ;AAC7C,MAAaoD,YAAYpD,WAAW,OAAO;AAC3C,MAAaqD,cAAcrD,WAAW,SAAS;AAC/C,MAAasD,eAAetD,WAAW,UAAU;AACjD,MAAauD,UAAUvD,WAAW,KAAK;AACvC,MAAawD,WAAWxD,WAAW,MAAM"}
package/dist/index.d.mts CHANGED
@@ -1,14 +1,16 @@
1
1
  import { Badge, BadgeProps, BadgeSize, BadgeTone } from "./components/Badge.mjs";
2
2
  import { Button, ButtonProps, ButtonSize, ButtonVariant } from "./components/Button.mjs";
3
3
  import { CodeBlock, CodeBlockProps } from "./components/CodeBlock.mjs";
4
+ import { CopyButton, CopyButtonProps } from "./components/CopyButton.mjs";
4
5
  import { Dialog, DialogBody, DialogClose, DialogContent, DialogContentProps, DialogDescription, DialogFooter, DialogFooterProps, DialogFooterVariant, DialogHeader, DialogHeaderProps, DialogPartProps, DialogProps, DialogTitle, DialogTrigger, DialogWidth } from "./components/Dialog.mjs";
5
6
  import { Dot, DotProps, DotSize, DotTone } from "./components/Dot.mjs";
6
7
  import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemProps, DropdownMenuContent, DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemProps, DropdownMenuItemVariant, DropdownMenuLabel, DropdownMenuPartProps, DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioGroupProps, DropdownMenuRadioItem, DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger } from "./components/DropdownMenu.mjs";
7
8
  import { EmptyState, EmptyStateProps } from "./components/EmptyState.mjs";
9
+ import { HashlineLines, HashlineLinesProps } from "./components/HashlineLines.mjs";
8
10
  import { FieldSize, FieldVariant, Input, InputProps } from "./components/Input.mjs";
9
11
  import { Label, LabelProps } from "./components/Label.mjs";
10
12
  import { List, ListProps, ListRow, ListRowProps } from "./components/List.mjs";
11
- import { FileLinkHandler, Markdown, MarkdownProps } from "./components/Markdown.mjs";
13
+ import { FileLinkHandler, Markdown, MarkdownImageLoader, MarkdownProps } from "./components/Markdown.mjs";
12
14
  import { STATUS_EDGE, StatusBadge, StatusBadgeProps, StatusBadgeSize, StatusTone } from "./components/StatusBadge.mjs";
13
15
  import { MessageItem, MessageItemBody, MessageItemGroup, MessageItemGroupProps, MessageItemHeader, MessageItemHeaderProps, MessageItemPartProps, MessageItemProps, MessageItemState, MessageItemStatus, MessageItemStatusProps, STATUS_GLYPH, STATUS_LABEL, toolTone, useMessageItem } from "./components/MessageItem.mjs";
14
16
  import { Panel, PanelBody, PanelHeader, PanelPartProps } from "./components/Panel.mjs";
@@ -18,11 +20,13 @@ import { SegmentedControl, SegmentedControlOption, SegmentedControlProps } from
18
20
  import { Sheet, SheetBody, SheetClose, SheetContent, SheetContentProps, SheetDescription, SheetFooter, SheetHeader, SheetHeaderProps, SheetPartProps, SheetProps, SheetTitle, SheetTrigger } from "./components/Sheet.mjs";
19
21
  import { Spinner, SpinnerProps } from "./components/Spinner.mjs";
20
22
  import { TabBadge, TabBadgeProps, Tabs, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTrigger, TabsTriggerProps } from "./components/Tabs.mjs";
23
+ import { SyntaxLine, SyntaxLineProps, useSyntaxLines } from "./components/SyntaxLine.mjs";
21
24
  import { Textarea, TextareaProps } from "./components/Textarea.mjs";
22
- import { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, CloseIcon, CopyIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, IconProps, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon } from "./icons/icons.mjs";
25
+ import { ToolPathLink, ToolPathLinkProps } from "./components/ToolPathLink.mjs";
26
+ import { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CopyIcon, DownloadIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, IconProps, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, MicIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, StopIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon } from "./icons/icons.mjs";
23
27
  import { IconName } from "./icons/iconGlyphs.mjs";
24
28
  import { fontOf } from "./lib/fonts.mjs";
25
29
  import { IconColorContext } from "./icons/IconColorContext.mjs";
26
30
  import { impactLight, selectionTick } from "./lib/haptics.mjs";
27
- import { AnsiSpan, ReviewComment, ansiSpans, buildReviewPrompt } from "@agimon-ai/po-web-components/text";
28
- export { ActivityIcon, AlertIcon, type AnsiSpan, ArrowRightIcon, Badge, type BadgeProps, type BadgeSize, type BadgeTone, BranchIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CheckIcon, ChevronDownIcon, ChevronRightIcon, CloseIcon, CodeBlock, type CodeBlockProps, CopyIcon, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, type DialogFooterProps, type DialogFooterVariant, DialogHeader, type DialogHeaderProps, type DialogPartProps, type DialogProps, DialogTitle, DialogTrigger, type DialogWidth, Dot, type DotProps, type DotSize, type DotTone, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemVariant, DropdownMenuLabel, type DropdownMenuPartProps, type DropdownMenuProps, DropdownMenuRadioGroup, type DropdownMenuRadioGroupProps, DropdownMenuRadioItem, type DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EditIcon, EmptyState, type EmptyStateProps, type FieldSize, type FieldVariant, FileIcon, type FileLinkHandler, FolderIcon, ForkIcon, GearIcon, HomeIcon, IconColorContext, type IconName, type IconProps, ImageIcon, Input, type InputProps, KebabIcon, Label, type LabelProps, LightbulbIcon, List, type ListProps, ListRow, type ListRowProps, LockIcon, Markdown, type MarkdownProps, MessageIcon, MessageItem, MessageItemBody, MessageItemGroup, type MessageItemGroupProps, MessageItemHeader, type MessageItemHeaderProps, type MessageItemPartProps, type MessageItemProps, type MessageItemState, MessageItemStatus, type MessageItemStatusProps, PaletteIcon, Panel, PanelBody, PanelHeader, type PanelPartProps, PlayCircleIcon, PlusIcon, PoNativeProvider, type PoNativeProviderProps, type ReviewComment, STATUS_EDGE, STATUS_GLYPH, STATUS_LABEL, SearchIcon, SectionLabel, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, SendIcon, Sheet, SheetBody, SheetClose, SheetContent, type SheetContentProps, SheetDescription, SheetFooter, SheetHeader, type SheetHeaderProps, type SheetPartProps, type SheetProps, SheetTitle, SheetTrigger, SlidersIcon, SparklesIcon, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, type StatusTone, TabBadge, type TabBadgeProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TaskIcon, Textarea, type TextareaProps, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon, ansiSpans, buildReviewPrompt, fontOf, impactLight, selectionTick, toolTone, useMessageItem };
31
+ import { AnsiSpan, PresentedLine, ReviewComment, ansiSpans, buildReviewPrompt, collapseLines, hashlineBody, resultTextLines } from "@agimon-ai/po-web-components/text";
32
+ export { ActivityIcon, AlertIcon, type AnsiSpan, ArrowRightIcon, Badge, type BadgeProps, type BadgeSize, type BadgeTone, BranchIcon, Button, type ButtonProps, type ButtonSize, type ButtonVariant, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CodeBlock, type CodeBlockProps, CopyButton, type CopyButtonProps, CopyIcon, Dialog, DialogBody, DialogClose, DialogContent, type DialogContentProps, DialogDescription, DialogFooter, type DialogFooterProps, type DialogFooterVariant, DialogHeader, type DialogHeaderProps, type DialogPartProps, type DialogProps, DialogTitle, DialogTrigger, type DialogWidth, Dot, type DotProps, type DotSize, type DotTone, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemVariant, DropdownMenuLabel, type DropdownMenuPartProps, type DropdownMenuProps, DropdownMenuRadioGroup, type DropdownMenuRadioGroupProps, DropdownMenuRadioItem, type DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EditIcon, EmptyState, type EmptyStateProps, type FieldSize, type FieldVariant, FileIcon, type FileLinkHandler, FolderIcon, ForkIcon, GearIcon, HashlineLines, type HashlineLinesProps, HomeIcon, IconColorContext, type IconName, type IconProps, ImageIcon, Input, type InputProps, KebabIcon, Label, type LabelProps, LightbulbIcon, List, type ListProps, ListRow, type ListRowProps, LockIcon, Markdown, type MarkdownImageLoader, type MarkdownProps, MessageIcon, MessageItem, MessageItemBody, MessageItemGroup, type MessageItemGroupProps, MessageItemHeader, type MessageItemHeaderProps, type MessageItemPartProps, type MessageItemProps, type MessageItemState, MessageItemStatus, type MessageItemStatusProps, MicIcon, PaletteIcon, Panel, PanelBody, PanelHeader, type PanelPartProps, PlayCircleIcon, PlusIcon, PoNativeProvider, type PoNativeProviderProps, type PresentedLine, type ReviewComment, STATUS_EDGE, STATUS_GLYPH, STATUS_LABEL, SearchIcon, SectionLabel, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, SendIcon, Sheet, SheetBody, SheetClose, SheetContent, type SheetContentProps, SheetDescription, SheetFooter, SheetHeader, type SheetHeaderProps, type SheetPartProps, type SheetProps, SheetTitle, SheetTrigger, SlidersIcon, SparklesIcon, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, type StatusTone, StopIcon, SyntaxLine, type SyntaxLineProps, TabBadge, type TabBadgeProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TaskIcon, Textarea, type TextareaProps, ToolPathLink, type ToolPathLinkProps, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon, ansiSpans, buildReviewPrompt, collapseLines, fontOf, hashlineBody, impactLight, resultTextLines, selectionTick, toolTone, useMessageItem, useSyntaxLines };
package/dist/index.mjs CHANGED
@@ -4,12 +4,15 @@ import { IconColorContext } from "./icons/IconColorContext.mjs";
4
4
  import { impactLight, selectionTick } from "./lib/haptics.mjs";
5
5
  import { Spinner } from "./components/Spinner.mjs";
6
6
  import { Button } from "./components/Button.mjs";
7
- import { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, CloseIcon, CopyIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon } from "./icons/icons.mjs";
7
+ import { ActivityIcon, AlertIcon, ArrowRightIcon, BranchIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CopyIcon, DownloadIcon, EditIcon, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, ImageIcon, KebabIcon, LightbulbIcon, LockIcon, MessageIcon, MicIcon, PaletteIcon, PlayCircleIcon, PlusIcon, SearchIcon, SendIcon, SlidersIcon, SparklesIcon, StopIcon, TaskIcon, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon } from "./icons/icons.mjs";
8
+ import { CopyButton } from "./components/CopyButton.mjs";
8
9
  import { CodeBlock } from "./components/CodeBlock.mjs";
9
10
  import { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "./components/Dialog.mjs";
10
11
  import { Dot } from "./components/Dot.mjs";
11
12
  import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger } from "./components/DropdownMenu.mjs";
12
13
  import { EmptyState } from "./components/EmptyState.mjs";
14
+ import { SyntaxLine, useSyntaxLines } from "./components/SyntaxLine.mjs";
15
+ import { HashlineLines } from "./components/HashlineLines.mjs";
13
16
  import { Input } from "./components/Input.mjs";
14
17
  import { Label } from "./components/Label.mjs";
15
18
  import { List, ListRow } from "./components/List.mjs";
@@ -23,6 +26,7 @@ import { SegmentedControl } from "./components/SegmentedControl.mjs";
23
26
  import { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./components/Sheet.mjs";
24
27
  import { TabBadge, Tabs, TabsContent, TabsList, TabsTrigger } from "./components/Tabs.mjs";
25
28
  import { Textarea } from "./components/Textarea.mjs";
26
- import { ansiSpans, buildReviewPrompt } from "@agimon-ai/po-web-components/text";
29
+ import { ToolPathLink } from "./components/ToolPathLink.mjs";
30
+ import { ansiSpans, buildReviewPrompt, collapseLines, hashlineBody, resultTextLines } from "@agimon-ai/po-web-components/text";
27
31
 
28
- export { ActivityIcon, AlertIcon, ArrowRightIcon, Badge, BranchIcon, Button, CheckIcon, ChevronDownIcon, ChevronRightIcon, CloseIcon, CodeBlock, CopyIcon, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Dot, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EditIcon, EmptyState, FileIcon, FolderIcon, ForkIcon, GearIcon, HomeIcon, IconColorContext, ImageIcon, Input, KebabIcon, Label, LightbulbIcon, List, ListRow, LockIcon, Markdown, MessageIcon, MessageItem, MessageItemBody, MessageItemGroup, MessageItemHeader, MessageItemStatus, PaletteIcon, Panel, PanelBody, PanelHeader, PlayCircleIcon, PlusIcon, PoNativeProvider, STATUS_EDGE, STATUS_GLYPH, STATUS_LABEL, SearchIcon, SectionLabel, SegmentedControl, SendIcon, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SlidersIcon, SparklesIcon, Spinner, StatusBadge, TabBadge, Tabs, TabsContent, TabsList, TabsTrigger, TaskIcon, Textarea, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon, ansiSpans, buildReviewPrompt, fontOf, impactLight, selectionTick, toolTone, useMessageItem };
32
+ export { ActivityIcon, AlertIcon, ArrowRightIcon, Badge, BranchIcon, Button, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CodeBlock, CopyButton, CopyIcon, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Dot, DownloadIcon, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EditIcon, EmptyState, FileIcon, FolderIcon, ForkIcon, GearIcon, HashlineLines, HomeIcon, IconColorContext, ImageIcon, Input, KebabIcon, Label, LightbulbIcon, List, ListRow, LockIcon, Markdown, MessageIcon, MessageItem, MessageItemBody, MessageItemGroup, MessageItemHeader, MessageItemStatus, MicIcon, PaletteIcon, Panel, PanelBody, PanelHeader, PlayCircleIcon, PlusIcon, PoNativeProvider, STATUS_EDGE, STATUS_GLYPH, STATUS_LABEL, SearchIcon, SectionLabel, SegmentedControl, SendIcon, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SlidersIcon, SparklesIcon, Spinner, StatusBadge, StopIcon, SyntaxLine, TabBadge, Tabs, TabsContent, TabsList, TabsTrigger, TaskIcon, Textarea, ToolPathLink, TrashIcon, UsersIcon, WorkflowIcon, WrenchIcon, ansiSpans, buildReviewPrompt, collapseLines, fontOf, hashlineBody, impactLight, resultTextLines, selectionTick, toolTone, useMessageItem, useSyntaxLines };