@reforma/components 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CopyButton/CopyButton.d.ts.map +1 -1
- package/dist/CopyButton/CopyButton.js +58 -58
- package/dist/CopyButton/CopyButton.js.map +1 -1
- package/dist/List/ListBox.d.ts.map +1 -1
- package/dist/List/ListBox.js +71 -69
- package/dist/List/ListBox.js.map +1 -1
- package/dist/List/ListBox.module.css +1 -1
- package/dist/List/useListHoverHighlight.d.ts.map +1 -1
- package/dist/List/useListHoverHighlight.js +72 -67
- package/dist/List/useListHoverHighlight.js.map +1 -1
- package/dist/chat/Message/streamdown/codeCitation.d.ts.map +1 -1
- package/dist/chat/Message/streamdown/codeCitation.js +7 -7
- package/dist/chat/Message/streamdown/codeCitation.js.map +1 -1
- package/dist/chat/Tool/install-dependencies/InstallDependenciesTool.d.ts.map +1 -1
- package/dist/chat/Tool/install-dependencies/InstallDependenciesTool.js +2 -1
- package/dist/chat/Tool/install-dependencies/InstallDependenciesTool.js.map +1 -1
- package/dist/chat/Tool/mountTool.d.ts +6 -0
- package/dist/chat/Tool/mountTool.d.ts.map +1 -0
- package/dist/chat/Tool/project-env/ProjectEnvTool.d.ts.map +1 -1
- package/dist/chat/Tool/project-env/ProjectEnvTool.js +2 -1
- package/dist/chat/Tool/project-env/ProjectEnvTool.js.map +1 -1
- package/dist/chat/Tool/shell/ToolShell.d.ts.map +1 -1
- package/dist/chat/Tool/shell/ToolShell.js +86 -79
- package/dist/chat/Tool/shell/ToolShell.js.map +1 -1
- package/dist/modals/ConfirmModal.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListHoverHighlight.js","sources":["../../src/List/useListHoverHighlight.ts"],"sourcesContent":["import { useEffect, type RefObject } from 'react';\n\nimport styles from './ListBox.module.css';\n\nconst DEFAULT_ITEM = `.${ styles.item }`;\n\n/** Keep the plate across the few pixels between rows. Empty space is farther than this. */\nconst ROW_GAP = 16;\n\ntype ListTarget = RefObject<HTMLElement | null> | HTMLElement | null;\n\nfunction resolveList(target: ListTarget): HTMLElement | null {\n if (target instanceof HTMLElement) {\n return target;\n }\n\n return target?.current ?? null;\n}\n\n/**\n * Slides one highlight plate across list/menu rows (hover + keyboard), instead of painting each row.\n */\nexport function useListHoverHighlight(\n list: ListTarget,\n enabled: boolean,\n itemSelector: string = DEFAULT_ITEM\n) {\n const listEl = list instanceof HTMLElement ? list : null;\n\n useEffect(() => {\n const root = resolveList(list);\n\n if (!root || !enabled) {\n return;\n }\n\n let followKeyboard = false;\n let current: HTMLElement | null = null;\n let pointerX = 0;\n let pointerY = 0;\n let hasPointer = false;\n\n const rowFrom = (target: EventTarget | null) => {\n if (!(target instanceof Element)) {\n return null;\n }\n\n const row = target.closest<HTMLElement>(itemSelector);\n\n if (!row || !root.contains(row)) {\n return null;\n }\n\n return row;\n };\n\n const blocked = (row: HTMLElement) => (\n row.hasAttribute('data-disabled')\n || row.hasAttribute('data-selected')\n || row.hasAttribute('data-highlighted')\n || row.hasAttribute('data-nested-selected')\n );\n\n const keyboardRow = () => (\n root.querySelector<HTMLElement>(`${ itemSelector }[data-focus-visible]`)\n );\n\n const besideCurrent = (x: number, y: number) => {\n if (!current) {\n return false;\n }\n\n const box = current.getBoundingClientRect();\n\n return x >= box.left && x <= box.right\n && y >= box.top - ROW_GAP && y <= box.bottom + ROW_GAP;\n };\n\n const setGeometry = (row: HTMLElement) => {\n const listRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n\n root.style.setProperty('--reforma-listbox-highlight-top', `${ rowRect.top - listRect.top + root.scrollTop }px`);\n root.style.setProperty('--reforma-listbox-highlight-left', `${ rowRect.left - listRect.left + root.scrollLeft }px`);\n root.style.setProperty('--reforma-listbox-highlight-width', `${ rowRect.width }px`);\n root.style.setProperty('--reforma-listbox-highlight-height', `${ rowRect.height }px`);\n };\n\n const hide = () => {\n current = null;\n root.style.setProperty('--reforma-listbox-highlight-opacity', '0');\n root.removeAttribute('data-highlight-ready');\n root.removeAttribute('data-highlight-danger');\n };\n\n const show = (row: HTMLElement | null) => {\n if (!row || blocked(row)) {\n hide();\n\n return;\n }\n\n const appeared = current == null;\n\n if (appeared) {\n root.removeAttribute('data-highlight-ready');\n }\n\n current = row;\n setGeometry(row);\n root.toggleAttribute('data-highlight-danger', row.classList.contains(styles.itemDanger));\n root.style.setProperty('--reforma-listbox-highlight-opacity', '1');\n\n if (appeared) {\n requestAnimationFrame(() => {\n if (current) {\n root.setAttribute('data-highlight-ready', '');\n }\n });\n }\n };\n\n const followPointer = (target: EventTarget | null, x: number, y: number) => {\n followKeyboard = false;\n const row = rowFrom(target);\n\n if (row) {\n if (row !== current) {\n show(row);\n }\n\n return;\n }\n\n if (!besideCurrent(x, y)) {\n hide();\n }\n };\n\n const onPointerMove = (event: PointerEvent) => {\n pointerX = event.clientX;\n pointerY = event.clientY;\n hasPointer = true;\n followPointer(event.target, event.clientX, event.clientY);\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n pointerX = event.clientX;\n pointerY = event.clientY;\n hasPointer = true;\n followPointer(\n document.elementFromPoint(event.clientX, event.clientY),\n event.clientX,\n event.clientY\n );\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (event.relatedTarget instanceof Node && root.contains(event.relatedTarget)) {\n return;\n }\n\n hasPointer = false;\n\n if (current?.hasAttribute('data-open')) {\n return;\n }\n\n if (followKeyboard) {\n show(keyboardRow());\n\n return;\n }\n\n hide();\n };\n\n const onKeyDown = () => {\n followKeyboard = true;\n requestAnimationFrame(() => {\n if (followKeyboard) {\n show(keyboardRow());\n }\n });\n };\n\n const onScroll = () => {\n root.removeAttribute('data-highlight-ready');\n\n // Virtualized lists recycle the hovered node; re-hit-test instead of following `current`.\n if (hasPointer) {\n const row = rowFrom(document.elementFromPoint(pointerX, pointerY));\n\n if (row) {\n show(row);\n\n return;\n }\n\n if (!besideCurrent(pointerX, pointerY)) {\n hide();\n\n return;\n }\n }\n\n if (current) {\n setGeometry(current);\n }\n };\n\n const onScrollEnd = () => {\n if (current) {\n root.setAttribute('data-highlight-ready', '');\n }\n };\n\n // Selection lands after pointerup. Re-run show so a blocked row drops the plate.\n const rowState = new MutationObserver(() => {\n if (current) {\n show(current);\n }\n });\n\n rowState.observe(root, {\n subtree: true,\n attributes: true,\n attributeFilter: ['data-selected', 'data-disabled', 'data-highlighted', 'data-nested-selected'],\n });\n\n root.addEventListener('pointerenter', onPointerEnter);\n root.addEventListener('pointermove', onPointerMove);\n root.addEventListener('pointerleave', onPointerLeave);\n root.addEventListener('keydown', onKeyDown);\n root.addEventListener('scroll', onScroll);\n root.addEventListener('scrollend', onScrollEnd);\n\n show(root.querySelector<HTMLElement>(`${ itemSelector }:hover`));\n\n return () => {\n rowState.disconnect();\n root.removeEventListener('pointerenter', onPointerEnter);\n root.removeEventListener('pointermove', onPointerMove);\n root.removeEventListener('pointerleave', onPointerLeave);\n root.removeEventListener('keydown', onKeyDown);\n root.removeEventListener('scroll', onScroll);\n root.removeEventListener('scrollend', onScrollEnd);\n hide();\n root.style.removeProperty('--reforma-listbox-highlight-top');\n root.style.removeProperty('--reforma-listbox-highlight-left');\n root.style.removeProperty('--reforma-listbox-highlight-width');\n root.style.removeProperty('--reforma-listbox-highlight-height');\n root.style.removeProperty('--reforma-listbox-highlight-opacity');\n };\n }, [enabled, itemSelector, list, listEl]);\n}\n"],"names":["DEFAULT_ITEM","styles","ROW_GAP","resolveList","target","useListHoverHighlight","list","enabled","itemSelector","listEl","useEffect","root","followKeyboard","current","pointerX","pointerY","hasPointer","rowFrom","row","blocked","keyboardRow","besideCurrent","x","y","box","setGeometry","listRect","rowRect","hide","show","appeared","followPointer","onPointerMove","event","onPointerEnter","onPointerLeave","onKeyDown","onScroll","onScrollEnd","rowState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useListHoverHighlight.js","sources":["../../src/List/useListHoverHighlight.ts"],"sourcesContent":["import { useEffect, type RefObject } from 'react';\n\nimport styles from './ListBox.module.css';\n\nconst DEFAULT_ITEM = `.${ styles.item }`;\n\n/** Keep the plate across the few pixels between rows. Empty space is farther than this. */\nconst ROW_GAP = 16;\nconst SCROLL_IDLE_MS = 150;\n\nfunction scrollPort(node: HTMLElement): HTMLElement {\n let current = node.parentElement;\n\n while (current && current !== document.documentElement) {\n const overflow = getComputedStyle(current).overflowY;\n\n if (overflow === 'auto' || overflow === 'scroll') {\n return current;\n }\n\n current = current.parentElement;\n }\n\n return node;\n}\n\ntype ListTarget = RefObject<HTMLElement | null> | HTMLElement | null;\n\nfunction resolveList(target: ListTarget): HTMLElement | null {\n if (target instanceof HTMLElement) {\n return target;\n }\n\n return target?.current ?? null;\n}\n\n/**\n * Slides one highlight plate across list/menu rows (hover + keyboard), instead of painting each row.\n */\nexport function useListHoverHighlight(\n list: ListTarget,\n enabled: boolean,\n itemSelector: string = DEFAULT_ITEM\n) {\n const listEl = list instanceof HTMLElement ? list : null;\n\n useEffect(() => {\n const root = resolveList(list);\n\n if (!root || !enabled) {\n return;\n }\n\n let followKeyboard = false;\n let scrolling = false;\n let scrollTimer = 0;\n let current: HTMLElement | null = null;\n let pointerX = 0;\n let pointerY = 0;\n let hasPointer = false;\n\n const rowFrom = (target: EventTarget | null) => {\n if (!(target instanceof Element)) {\n return null;\n }\n\n const row = target.closest<HTMLElement>(itemSelector);\n\n if (!row || !root.contains(row)) {\n return null;\n }\n\n return row;\n };\n\n const blocked = (row: HTMLElement) => (\n row.hasAttribute('data-disabled')\n || row.hasAttribute('data-selected')\n || row.hasAttribute('data-highlighted')\n || row.hasAttribute('data-nested-selected')\n );\n\n const keyboardRow = () => (\n root.querySelector<HTMLElement>(`${ itemSelector }[data-focus-visible]`)\n );\n\n const besideCurrent = (x: number, y: number) => {\n if (!current) {\n return false;\n }\n\n const box = current.getBoundingClientRect();\n\n return x >= box.left && x <= box.right\n && y >= box.top - ROW_GAP && y <= box.bottom + ROW_GAP;\n };\n\n const setGeometry = (row: HTMLElement) => {\n const listRect = root.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n\n root.style.setProperty('--reforma-listbox-highlight-top', `${ rowRect.top - listRect.top + root.scrollTop }px`);\n root.style.setProperty('--reforma-listbox-highlight-left', `${ rowRect.left - listRect.left + root.scrollLeft }px`);\n root.style.setProperty('--reforma-listbox-highlight-width', `${ rowRect.width }px`);\n root.style.setProperty('--reforma-listbox-highlight-height', `${ rowRect.height }px`);\n };\n\n const hide = () => {\n current = null;\n root.style.setProperty('--reforma-listbox-highlight-opacity', '0');\n root.removeAttribute('data-highlight-ready');\n root.removeAttribute('data-highlight-danger');\n };\n\n const show = (row: HTMLElement | null) => {\n if (!row || blocked(row)) {\n hide();\n\n return;\n }\n\n const appeared = current == null;\n\n if (appeared) {\n root.removeAttribute('data-highlight-ready');\n }\n\n current = row;\n setGeometry(row);\n root.toggleAttribute('data-highlight-danger', row.classList.contains(styles.itemDanger));\n root.style.setProperty('--reforma-listbox-highlight-opacity', '1');\n\n if (appeared) {\n requestAnimationFrame(() => {\n if (current) {\n root.setAttribute('data-highlight-ready', '');\n }\n });\n }\n };\n\n const followPointer = (target: EventTarget | null, x: number, y: number) => {\n followKeyboard = false;\n const row = rowFrom(target);\n\n if (row) {\n if (row !== current) {\n show(row);\n }\n\n return;\n }\n\n if (!besideCurrent(x, y)) {\n hide();\n }\n };\n\n const onPointerMove = (event: PointerEvent) => {\n pointerX = event.clientX;\n pointerY = event.clientY;\n hasPointer = true;\n\n if (scrolling) {\n return;\n }\n\n followPointer(event.target, event.clientX, event.clientY);\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n pointerX = event.clientX;\n pointerY = event.clientY;\n hasPointer = true;\n\n if (scrolling) {\n return;\n }\n\n followPointer(\n document.elementFromPoint(event.clientX, event.clientY),\n event.clientX,\n event.clientY\n );\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (event.relatedTarget instanceof Node && root.contains(event.relatedTarget)) {\n return;\n }\n\n hasPointer = false;\n\n if (current?.hasAttribute('data-open')) {\n return;\n }\n\n if (followKeyboard) {\n show(keyboardRow());\n\n return;\n }\n\n hide();\n };\n\n const onKeyDown = () => {\n followKeyboard = true;\n requestAnimationFrame(() => {\n if (followKeyboard) {\n show(keyboardRow());\n }\n });\n };\n\n const finishScroll = () => {\n scrolling = false;\n\n if (!hasPointer) {\n return;\n }\n\n show(rowFrom(document.elementFromPoint(pointerX, pointerY)));\n };\n\n const onScroll = () => {\n window.clearTimeout(scrollTimer);\n\n if (!scrolling) {\n scrolling = true;\n hide();\n }\n\n scrollTimer = window.setTimeout(finishScroll, SCROLL_IDLE_MS);\n };\n\n // Selection lands after pointerup. Re-run show so a blocked row drops the plate.\n const rowState = new MutationObserver(() => {\n if (current) {\n show(current);\n }\n });\n\n rowState.observe(root, {\n subtree: true,\n attributes: true,\n attributeFilter: ['data-selected', 'data-disabled', 'data-highlighted', 'data-nested-selected'],\n });\n\n const port = scrollPort(root);\n\n root.addEventListener('pointerenter', onPointerEnter);\n root.addEventListener('pointermove', onPointerMove);\n root.addEventListener('pointerleave', onPointerLeave);\n root.addEventListener('keydown', onKeyDown);\n root.addEventListener('scroll', onScroll, { passive: true });\n\n if (port !== root) {\n port.addEventListener('scroll', onScroll, { passive: true });\n }\n\n show(root.querySelector<HTMLElement>(`${ itemSelector }:hover`));\n\n return () => {\n rowState.disconnect();\n window.clearTimeout(scrollTimer);\n root.removeEventListener('pointerenter', onPointerEnter);\n root.removeEventListener('pointermove', onPointerMove);\n root.removeEventListener('pointerleave', onPointerLeave);\n root.removeEventListener('keydown', onKeyDown);\n root.removeEventListener('scroll', onScroll);\n port.removeEventListener('scroll', onScroll);\n hide();\n root.style.removeProperty('--reforma-listbox-highlight-top');\n root.style.removeProperty('--reforma-listbox-highlight-left');\n root.style.removeProperty('--reforma-listbox-highlight-width');\n root.style.removeProperty('--reforma-listbox-highlight-height');\n root.style.removeProperty('--reforma-listbox-highlight-opacity');\n };\n }, [enabled, itemSelector, list, listEl]);\n}\n"],"names":["DEFAULT_ITEM","styles","ROW_GAP","SCROLL_IDLE_MS","scrollPort","node","current","overflow","resolveList","target","useListHoverHighlight","list","enabled","itemSelector","listEl","useEffect","root","followKeyboard","scrolling","scrollTimer","pointerX","pointerY","hasPointer","rowFrom","row","blocked","keyboardRow","besideCurrent","x","y","box","setGeometry","listRect","rowRect","hide","show","appeared","followPointer","onPointerMove","event","onPointerEnter","onPointerLeave","onKeyDown","finishScroll","onScroll","rowState","port"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeCitation.d.ts","sourceRoot":"","sources":["../../../../src/chat/Message/streamdown/codeCitation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAM7E,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAyBpE;AAOD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"codeCitation.d.ts","sourceRoot":"","sources":["../../../../src/chat/Message/streamdown/codeCitation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAM7E,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAyBpE;AAOD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA4BpD;AAKD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK9E"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { isKnownFileExtension as a } from "@reforma/lib";
|
|
2
2
|
import { isDirectoryPath as o, isWorkspaceRoot as u } from "../../Chip/helpers/chipPath.js";
|
|
3
|
-
function
|
|
3
|
+
function f(e) {
|
|
4
4
|
return e?.match(/language-(.+)/)?.[1];
|
|
5
5
|
}
|
|
6
6
|
function i(e) {
|
|
7
7
|
return e.trim().replace(/^@+/, "");
|
|
8
8
|
}
|
|
9
9
|
function h(e) {
|
|
10
|
-
const n =
|
|
10
|
+
const n = f(e);
|
|
11
11
|
if (!n)
|
|
12
12
|
return {
|
|
13
13
|
kind: "language",
|
|
@@ -22,7 +22,7 @@ function h(e) {
|
|
|
22
22
|
endLine: Number(t[2])
|
|
23
23
|
};
|
|
24
24
|
const r = i(n);
|
|
25
|
-
return
|
|
25
|
+
return c(r) ? {
|
|
26
26
|
kind: "file",
|
|
27
27
|
path: r
|
|
28
28
|
} : {
|
|
@@ -30,12 +30,12 @@ function h(e) {
|
|
|
30
30
|
language: n
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
function
|
|
33
|
+
function s(e) {
|
|
34
34
|
return /[*?[\]{}]/.test(e);
|
|
35
35
|
}
|
|
36
|
-
function
|
|
36
|
+
function c(e) {
|
|
37
37
|
const n = i(e);
|
|
38
|
-
if (!n ||
|
|
38
|
+
if (!n || /\s/.test(n) || s(n))
|
|
39
39
|
return !1;
|
|
40
40
|
if (o(n)) {
|
|
41
41
|
const t = n.replace(/[/\\]+$/, "");
|
|
@@ -50,7 +50,7 @@ function d(e, n) {
|
|
|
50
50
|
}
|
|
51
51
|
export {
|
|
52
52
|
d as cursorFromLineRange,
|
|
53
|
-
|
|
53
|
+
c as isFilePathLike,
|
|
54
54
|
i as normalizeFileReferencePath,
|
|
55
55
|
h as parseCodeFenceInfo
|
|
56
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeCitation.js","sources":["../../../../src/chat/Message/streamdown/codeCitation.ts"],"sourcesContent":["import { isKnownFileExtension } from '@reforma/lib';\n\nimport { isDirectoryPath, isWorkspaceRoot } from '../../Chip/helpers/chipPath';\n\nexport type CodeFenceInfo\n = | { kind: 'language'; language: string }\n | { kind: 'file'; path: string; startLine?: number; endLine?: number };\n\nfunction fenceInfoString(className?: string): string | undefined {\n return className?.match(/language-(.+)/)?.[1];\n}\n\n/** Strip optional `@` prefix from chat file references (`@app/page.tsx`). */\nexport function normalizeFileReferencePath(text: string): string {\n return text.trim().replace(/^@+/, '');\n}\n\nexport function parseCodeFenceInfo(className?: string): CodeFenceInfo {\n const info = fenceInfoString(className);\n\n if (!info) {\n return { kind: 'language', language: 'html' };\n }\n\n const rangeMatch = info.match(/^(\\d+):(\\d+):(.+)$/);\n\n if (rangeMatch) {\n return {\n kind: 'file',\n path: normalizeFileReferencePath(rangeMatch[3]),\n startLine: Number(rangeMatch[1]),\n endLine: Number(rangeMatch[2]),\n };\n }\n\n const path = normalizeFileReferencePath(info);\n\n if (isFilePathLike(path)) {\n return { kind: 'file', path };\n }\n\n return { kind: 'language', language: info };\n}\n\n/** Glob path masks — inline code only, not file Chips. */\nfunction isGlobPattern(text: string): boolean {\n return /[*?[\\]{}]/.test(text);\n}\n\n/** Whether streamdown should render inline/fenced path citations as file Chips. */\nexport function isFilePathLike(text: string): boolean {\n const trimmed = normalizeFileReferencePath(text);\n\n if (!trimmed) {\n return false;\n }\n\n if (isGlobPattern(trimmed)) {\n return false;\n }\n\n if (isDirectoryPath(trimmed)) {\n const stem = trimmed.replace(/[/\\\\]+$/, '');\n\n // `./`, `/`, etc. are workspace roots — keep as inline code, not Chips.\n if (!stem || isWorkspaceRoot(stem)) {\n return false;\n }\n\n return true;\n }\n\n return isKnownFileExtension(trimmed);\n}\n\n/** Monaco/Theia clamp columns past line length to end-of-line when applying selection. */\nconst END_OF_LINE_COLUMN = 2_147_483_647;\n\nexport function cursorFromLineRange(startLine: number, endLine: number): string {\n const start = Math.min(startLine, endLine);\n const end = Math.max(startLine, endLine);\n\n return `${ start }:1-${ end }:${ END_OF_LINE_COLUMN }`;\n}\n"],"names":["fenceInfoString","className","normalizeFileReferencePath","text","parseCodeFenceInfo","info","rangeMatch","path","isFilePathLike","isGlobPattern","trimmed","isDirectoryPath","stem","isWorkspaceRoot","isKnownFileExtension","END_OF_LINE_COLUMN","cursorFromLineRange","startLine","endLine","start","end"],"mappings":";;AAEA,SAASA,EAAgBC,GAAW;AAClC,SAAOA,GAAW,MAAM,eAAe,IAAI,CAAC;AAC9C;AAGO,SAASC,EAA2BC,GAAM;AAC/C,SAAOA,EAAK,KAAA,EAAO,QAAQ,OAAO,EAAE;AACtC;AACO,SAASC,EAAmBH,GAAW;AAC5C,QAAMI,IAAOL,EAAgBC,CAAS;AACtC,MAAI,CAACI;AACH,WAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAGd,QAAMC,IAAaD,EAAK,MAAM,oBAAoB;AAClD,MAAIC;AACF,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAMJ,EAA2BI,EAAW,CAAC,CAAC;AAAA,MAC9C,WAAW,OAAOA,EAAW,CAAC,CAAC;AAAA,MAC/B,SAAS,OAAOA,EAAW,CAAC,CAAC;AAAA,IAAA;AAGjC,QAAMC,IAAOL,EAA2BG,CAAI;AAC5C,SAAIG,EAAeD,CAAI,IACd;AAAA,IACL,MAAM;AAAA,IACN,MAAAA;AAAA,EAAA,IAGG;AAAA,IACL,MAAM;AAAA,IACN,UAAUF;AAAA,EAAA;AAEd;AAGA,SAASI,EAAcN,GAAM;AAC3B,SAAO,YAAY,KAAKA,CAAI;AAC9B;AAGO,SAASK,EAAeL,GAAM;AACnC,QAAMO,IAAUR,EAA2BC,CAAI;
|
|
1
|
+
{"version":3,"file":"codeCitation.js","sources":["../../../../src/chat/Message/streamdown/codeCitation.ts"],"sourcesContent":["import { isKnownFileExtension } from '@reforma/lib';\n\nimport { isDirectoryPath, isWorkspaceRoot } from '../../Chip/helpers/chipPath';\n\nexport type CodeFenceInfo\n = | { kind: 'language'; language: string }\n | { kind: 'file'; path: string; startLine?: number; endLine?: number };\n\nfunction fenceInfoString(className?: string): string | undefined {\n return className?.match(/language-(.+)/)?.[1];\n}\n\n/** Strip optional `@` prefix from chat file references (`@app/page.tsx`). */\nexport function normalizeFileReferencePath(text: string): string {\n return text.trim().replace(/^@+/, '');\n}\n\nexport function parseCodeFenceInfo(className?: string): CodeFenceInfo {\n const info = fenceInfoString(className);\n\n if (!info) {\n return { kind: 'language', language: 'html' };\n }\n\n const rangeMatch = info.match(/^(\\d+):(\\d+):(.+)$/);\n\n if (rangeMatch) {\n return {\n kind: 'file',\n path: normalizeFileReferencePath(rangeMatch[3]),\n startLine: Number(rangeMatch[1]),\n endLine: Number(rangeMatch[2]),\n };\n }\n\n const path = normalizeFileReferencePath(info);\n\n if (isFilePathLike(path)) {\n return { kind: 'file', path };\n }\n\n return { kind: 'language', language: info };\n}\n\n/** Glob path masks — inline code only, not file Chips. */\nfunction isGlobPattern(text: string): boolean {\n return /[*?[\\]{}]/.test(text);\n}\n\n/** Whether streamdown should render inline/fenced path citations as file Chips. */\nexport function isFilePathLike(text: string): boolean {\n const trimmed = normalizeFileReferencePath(text);\n\n if (!trimmed) {\n return false;\n }\n\n // Commands that mention a path (`ls dir/`, `grep x package.json`) are not citations.\n if (/\\s/.test(trimmed)) {\n return false;\n }\n\n if (isGlobPattern(trimmed)) {\n return false;\n }\n\n if (isDirectoryPath(trimmed)) {\n const stem = trimmed.replace(/[/\\\\]+$/, '');\n\n // `./`, `/`, etc. are workspace roots — keep as inline code, not Chips.\n if (!stem || isWorkspaceRoot(stem)) {\n return false;\n }\n\n return true;\n }\n\n return isKnownFileExtension(trimmed);\n}\n\n/** Monaco/Theia clamp columns past line length to end-of-line when applying selection. */\nconst END_OF_LINE_COLUMN = 2_147_483_647;\n\nexport function cursorFromLineRange(startLine: number, endLine: number): string {\n const start = Math.min(startLine, endLine);\n const end = Math.max(startLine, endLine);\n\n return `${ start }:1-${ end }:${ END_OF_LINE_COLUMN }`;\n}\n"],"names":["fenceInfoString","className","normalizeFileReferencePath","text","parseCodeFenceInfo","info","rangeMatch","path","isFilePathLike","isGlobPattern","trimmed","isDirectoryPath","stem","isWorkspaceRoot","isKnownFileExtension","END_OF_LINE_COLUMN","cursorFromLineRange","startLine","endLine","start","end"],"mappings":";;AAEA,SAASA,EAAgBC,GAAW;AAClC,SAAOA,GAAW,MAAM,eAAe,IAAI,CAAC;AAC9C;AAGO,SAASC,EAA2BC,GAAM;AAC/C,SAAOA,EAAK,KAAA,EAAO,QAAQ,OAAO,EAAE;AACtC;AACO,SAASC,EAAmBH,GAAW;AAC5C,QAAMI,IAAOL,EAAgBC,CAAS;AACtC,MAAI,CAACI;AACH,WAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAGd,QAAMC,IAAaD,EAAK,MAAM,oBAAoB;AAClD,MAAIC;AACF,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAMJ,EAA2BI,EAAW,CAAC,CAAC;AAAA,MAC9C,WAAW,OAAOA,EAAW,CAAC,CAAC;AAAA,MAC/B,SAAS,OAAOA,EAAW,CAAC,CAAC;AAAA,IAAA;AAGjC,QAAMC,IAAOL,EAA2BG,CAAI;AAC5C,SAAIG,EAAeD,CAAI,IACd;AAAA,IACL,MAAM;AAAA,IACN,MAAAA;AAAA,EAAA,IAGG;AAAA,IACL,MAAM;AAAA,IACN,UAAUF;AAAA,EAAA;AAEd;AAGA,SAASI,EAAcN,GAAM;AAC3B,SAAO,YAAY,KAAKA,CAAI;AAC9B;AAGO,SAASK,EAAeL,GAAM;AACnC,QAAMO,IAAUR,EAA2BC,CAAI;AAS/C,MARI,CAACO,KAKD,KAAK,KAAKA,CAAO,KAGjBD,EAAcC,CAAO;AACvB,WAAO;AAET,MAAIC,EAAgBD,CAAO,GAAG;AAC5B,UAAME,IAAOF,EAAQ,QAAQ,WAAW,EAAE;AAG1C,WAAI,GAACE,KAAQC,EAAgBD,CAAI;AAAA,EAInC;AACA,SAAOE,EAAqBJ,CAAO;AACrC;AAGA,MAAMK,IAAqB;AACpB,SAASC,EAAoBC,GAAWC,GAAS;AACtD,QAAMC,IAAQ,KAAK,IAAIF,GAAWC,CAAO,GACnCE,IAAM,KAAK,IAAIH,GAAWC,CAAO;AACvC,SAAO,GAAGC,CAAK,MAAMC,CAAG,IAAIL,CAAkB;AAChD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstallDependenciesTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/install-dependencies/InstallDependenciesTool.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyElD,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"InstallDependenciesTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/install-dependencies/InstallDependenciesTool.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyElD,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,sCAwC1D"}
|
|
@@ -39,7 +39,8 @@ function S({
|
|
|
39
39
|
"data-slot": "install-dependencies-tool",
|
|
40
40
|
children: [/* @__PURE__ */ t(b, {
|
|
41
41
|
state: e.state,
|
|
42
|
-
statusDetail: r.tooltip
|
|
42
|
+
statusDetail: r.tooltip,
|
|
43
|
+
failed: n ? !0 : void 0,
|
|
43
44
|
title: l,
|
|
44
45
|
titleInProgress: o.inProgress,
|
|
45
46
|
icon: /* @__PURE__ */ t(u, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstallDependenciesTool.js","sources":["../../../../src/chat/Tool/install-dependencies/InstallDependenciesTool.tsx"],"sourcesContent":["import { Box } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from 'ai';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { getToolFailureRowState, isToolInvocationInProgress } from '../helpers';\nimport { ToolShell, ToolShellFooter, ToolShellHeader } from '../shell';\n\nimport type { InstallDepsToolInput, InstallDepsToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\nconst labels = {\n inProgress: 'Installing dependencies',\n pending: 'Install dependencies',\n background: 'Installing in background',\n success: 'Installed dependencies',\n installFailed: 'Install failed',\n devRestartFailed: 'Dev server restart failed',\n} as const;\n\nfunction packagesFromInput(input: unknown): string[] {\n if (input == null || typeof input !== 'object') {\n return [];\n }\n\n const packages = (input as InstallDepsToolInput).packages;\n\n return Array.isArray(packages)\n ? packages.filter((pkg): pkg is string => typeof pkg === 'string' && pkg.length > 0)\n : [];\n}\n\nfunction outputError(output: unknown): string | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n const error = (output as InstallDepsToolOutput).error;\n\n if (typeof error === 'string' && error.length > 0) {\n return error;\n }\n\n return undefined;\n}\n\nfunction installDependenciesTitle(\n state: string,\n input: unknown,\n output: unknown,\n useFailureLabel: boolean\n): string {\n if (useFailureLabel) {\n return labels.installFailed;\n }\n\n const parsedError = outputError(output);\n\n if (parsedError) {\n const stage = (output as InstallDepsToolOutput).stage;\n\n return stage === 'dev-restart' ? labels.devRestartFailed : labels.installFailed;\n }\n\n if (\n (input != null && typeof input === 'object' && (input as InstallDepsToolInput).background === true)\n || (output != null && typeof output === 'object' && (output as InstallDepsToolOutput).status === 'running')\n ) {\n return labels.background;\n }\n\n if (state === 'output-available') {\n return labels.success;\n }\n\n if (isToolInvocationInProgress(state)) {\n return labels.inProgress;\n }\n\n return labels.pending;\n}\n\n/** InstallDeps: status row, with named packages on a gray line under it. */\nexport function InstallDepsTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'InstallDeps') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const logicalError = part.state === 'output-available' ? outputError(part.output) : undefined;\n const title = installDependenciesTitle(part.state, part.input, part.output, failure.useFailureLabel);\n const packages = packagesFromInput(part.input);\n\n return (\n <ToolShell data-slot=\"install-dependencies-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip
|
|
1
|
+
{"version":3,"file":"InstallDependenciesTool.js","sources":["../../../../src/chat/Tool/install-dependencies/InstallDependenciesTool.tsx"],"sourcesContent":["import { Box } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from 'ai';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { getToolFailureRowState, isToolInvocationInProgress } from '../helpers';\nimport { ToolShell, ToolShellFooter, ToolShellHeader } from '../shell';\n\nimport type { InstallDepsToolInput, InstallDepsToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\nconst labels = {\n inProgress: 'Installing dependencies',\n pending: 'Install dependencies',\n background: 'Installing in background',\n success: 'Installed dependencies',\n installFailed: 'Install failed',\n devRestartFailed: 'Dev server restart failed',\n} as const;\n\nfunction packagesFromInput(input: unknown): string[] {\n if (input == null || typeof input !== 'object') {\n return [];\n }\n\n const packages = (input as InstallDepsToolInput).packages;\n\n return Array.isArray(packages)\n ? packages.filter((pkg): pkg is string => typeof pkg === 'string' && pkg.length > 0)\n : [];\n}\n\nfunction outputError(output: unknown): string | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n const error = (output as InstallDepsToolOutput).error;\n\n if (typeof error === 'string' && error.length > 0) {\n return error;\n }\n\n return undefined;\n}\n\nfunction installDependenciesTitle(\n state: string,\n input: unknown,\n output: unknown,\n useFailureLabel: boolean\n): string {\n if (useFailureLabel) {\n return labels.installFailed;\n }\n\n const parsedError = outputError(output);\n\n if (parsedError) {\n const stage = (output as InstallDepsToolOutput).stage;\n\n return stage === 'dev-restart' ? labels.devRestartFailed : labels.installFailed;\n }\n\n if (\n (input != null && typeof input === 'object' && (input as InstallDepsToolInput).background === true)\n || (output != null && typeof output === 'object' && (output as InstallDepsToolOutput).status === 'running')\n ) {\n return labels.background;\n }\n\n if (state === 'output-available') {\n return labels.success;\n }\n\n if (isToolInvocationInProgress(state)) {\n return labels.inProgress;\n }\n\n return labels.pending;\n}\n\n/** InstallDeps: status row, with named packages on a gray line under it. */\nexport function InstallDepsTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'InstallDeps') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const logicalError = part.state === 'output-available' ? outputError(part.output) : undefined;\n const title = installDependenciesTitle(part.state, part.input, part.output, failure.useFailureLabel);\n const packages = packagesFromInput(part.input);\n\n return (\n <ToolShell data-slot=\"install-dependencies-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n failed={ logicalError ? true : undefined }\n title={ title }\n titleInProgress={ labels.inProgress }\n icon={ <Box aria-hidden /> }\n />\n\n <Show when={ packages.length > 0 }>\n <ToolShellFooter>\n <Text color=\"secondary\" truncate>{ packages.join(', ') }</Text>\n </ToolShellFooter>\n </Show>\n\n <Show when={ logicalError && !failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{logicalError}</Text>\n </ToolShellFooter>\n </Show>\n\n <Show when={ failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n}\n"],"names":["labels","packagesFromInput","input","packages","pkg","outputError","output","error","installDependenciesTitle","state","useFailureLabel","isToolInvocationInProgress","InstallDepsTool","part","isToolUIPart","getToolName","failure","getToolFailureRowState","logicalError","title","ToolShell","_jsx","ToolShellHeader","Box","Show","ToolShellFooter","Text"],"mappings":";;;;;;;AAOA,MAAMA,IAAS;AAAA,EACb,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,eAAe;AAAA,EACf,kBAAkB;AACpB;AACA,SAASC,EAAkBC,GAAO;AAChC,MAAIA,KAAS,QAAQ,OAAOA,KAAU;AACpC,WAAO,CAAA;AAET,QAAMC,IAAWD,EAAM;AACvB,SAAO,MAAM,QAAQC,CAAQ,IAAIA,EAAS,OAAO,CAAAC,MAAO,OAAOA,KAAQ,YAAYA,EAAI,SAAS,CAAC,IAAI,CAAA;AACvG;AACA,SAASC,EAAYC,GAAQ;AAC3B,MAAIA,KAAU,QAAQ,OAAOA,KAAW;AACtC;AAEF,QAAMC,IAAQD,EAAO;AACrB,MAAI,OAAOC,KAAU,YAAYA,EAAM,SAAS;AAC9C,WAAOA;AAGX;AACA,SAASC,EAAyBC,GAAOP,GAAOI,GAAQI,GAAiB;AACvE,SAAIA,IACKV,EAAO,gBAEIK,EAAYC,CAAM,IAEtBA,EAAO,UACJ,gBAAgBN,EAAO,mBAAmBA,EAAO,gBAEhEE,KAAS,QAAQ,OAAOA,KAAU,YAAYA,EAAM,eAAe,MAAQI,KAAU,QAAQ,OAAOA,KAAW,YAAYA,EAAO,WAAW,YACxIN,EAAO,aAEZS,MAAU,qBACLT,EAAO,UAEZW,EAA2BF,CAAK,IAC3BT,EAAO,aAETA,EAAO;AAChB;AAGO,SAASY,EAAgB;AAAA,EAC9B,MAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaD,CAAI,KAAKE,EAAYF,CAAI,MAAM;AAC/C,WAAO;AAET,QAAMG,IAAUC,EAAuBJ,CAAI,GACrCK,IAAeL,EAAK,UAAU,qBAAqBR,EAAYQ,EAAK,MAAM,IAAI,QAC9EM,IAAQX,EAAyBK,EAAK,OAAOA,EAAK,OAAOA,EAAK,QAAQG,EAAQ,eAAe,GAC7Fb,IAAWF,EAAkBY,EAAK,KAAK;AAC7C,2BAA0BO,GAAW;AAAA,IACnC,aAAa;AAAA,IACb,UAAU,CAAcC,gBAAAA,EAAKC,GAAiB;AAAA,MAC5C,OAAOT,EAAK;AAAA,MACZ,cAAcG,EAAQ;AAAA,MACtB,QAAQE,IAAe,KAAO;AAAA,MAC9B,OAAAC;AAAA,MACA,iBAAiBnB,EAAO;AAAA,MACxB,wBAAwBuB,GAAK;AAAA,QAC3B,eAAe;AAAA,MAAA,CAChB;AAAA,IAAA,CACF,GAAgBF,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAMrB,EAAS,SAAS;AAAA,MACxB,4BAA4BsB,GAAiB;AAAA,QAC3C,4BAA4BC,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,UAAU;AAAA,UACV,UAAUvB,EAAS,KAAK,IAAI;AAAA,QAAA,CAC7B;AAAA,MAAA,CACF;AAAA,IAAA,CACF,GAAgBkB,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAMN,KAAgB,CAACF,EAAQ;AAAA,MAC/B,4BAA4BS,GAAiB;AAAA,QAC3C,4BAA4BC,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAUR;AAAA,QAAA,CACX;AAAA,MAAA,CACF;AAAA,IAAA,CACF,GAAgBG,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAMR,EAAQ;AAAA,MACd,4BAA4BS,GAAiB;AAAA,QAC3C,4BAA4BC,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAUV,EAAQ;AAAA,QAAA,CACnB;AAAA,MAAA,CACF;AAAA,IAAA,CACF,CAAC;AAAA,EAAA,CACH;AACH;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mountTool.d.ts","sourceRoot":"","sources":["../../../src/chat/Tool/mountTool.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS;IA2BjC,QAAQ;IACR,OAAO;EASd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectEnvTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/project-env/ProjectEnvTool.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAgJlD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ProjectEnvTool.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/project-env/ProjectEnvTool.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAgJlD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,sCAwCzD"}
|
|
@@ -94,7 +94,8 @@ function w({
|
|
|
94
94
|
"data-slot": "project-env-tool",
|
|
95
95
|
children: [/* @__PURE__ */ i(I, {
|
|
96
96
|
state: t.state,
|
|
97
|
-
statusDetail: n.tooltip
|
|
97
|
+
statusDetail: n.tooltip,
|
|
98
|
+
failed: l ? !0 : void 0,
|
|
98
99
|
title: e,
|
|
99
100
|
titleInProgress: a,
|
|
100
101
|
icon: /* @__PURE__ */ i(c, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectEnvTool.js","sources":["../../../../src/chat/Tool/project-env/ProjectEnvTool.tsx"],"sourcesContent":["import { Terminal } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from 'ai';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { getToolFailureRowState, isToolInvocationInProgress } from '../helpers';\nimport { ToolShell, ToolShellFooter, ToolShellHeader } from '../shell';\n\nimport type { ProjectEnvToolInput, ProjectEnvToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\nfunction asInput(input: unknown): ProjectEnvToolInput | undefined {\n if (input == null || typeof input !== 'object') {\n return undefined;\n }\n\n const action = (input as ProjectEnvToolInput).action;\n\n if (action !== 'list' && action !== 'set' && action !== 'remove') {\n return undefined;\n }\n\n return input as ProjectEnvToolInput;\n}\n\nfunction asOutput(output: unknown): ProjectEnvToolOutput | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n return output as ProjectEnvToolOutput;\n}\n\nfunction outputError(output: ProjectEnvToolOutput | undefined): string | undefined {\n const error = output?.error;\n\n return typeof error === 'string' && error.length > 0 ? error : undefined;\n}\n\nfunction variableKey(\n input: ProjectEnvToolInput | undefined,\n output: ProjectEnvToolOutput | undefined\n): string | undefined {\n const key = output?.key ?? input?.key;\n\n if (typeof key !== 'string') {\n return undefined;\n }\n\n const trimmed = key.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction projectEnvTitles(\n state: string,\n input: ProjectEnvToolInput | undefined,\n output: ProjectEnvToolOutput | undefined,\n useFailureLabel: boolean\n): { title: string; titleInProgress: string } {\n const action = input?.action;\n const key = variableKey(input, output);\n const failed = useFailureLabel || Boolean(outputError(output));\n\n if (action === 'list') {\n if (failed) {\n return {\n title: 'Couldn\\'t list environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (state === 'output-available') {\n const count = output?.variables?.length;\n\n if (count === 0) {\n return {\n title: 'No environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (count === 1) {\n return {\n title: 'Listed 1 environment variable',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (count != null) {\n return {\n title: `Listed ${ count } environment variables`,\n titleInProgress: 'Listing environment variables',\n };\n }\n }\n\n return {\n title: 'List environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (action === 'remove') {\n if (failed) {\n return {\n title: key ? `Couldn't remove ${ key }` : 'Couldn\\'t remove environment variable',\n titleInProgress: key ? `Removing ${ key }` : 'Removing environment variable',\n };\n }\n\n return {\n title: state === 'output-available'\n ? (key ? `Removed ${ key }` : 'Removed environment variable')\n : (key ? `Remove ${ key }` : 'Remove environment variable'),\n titleInProgress: key ? `Removing ${ key }` : 'Removing environment variable',\n };\n }\n\n if (failed) {\n return {\n title: key ? `Couldn't save ${ key }` : 'Couldn\\'t save environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (state === 'output-available' && output?.created) {\n return {\n title: key ? `Added ${ key }` : 'Added environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (state === 'output-available' && output?.updated) {\n return {\n title: key ? `Updated ${ key }` : 'Updated environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (isToolInvocationInProgress(state)) {\n return {\n title: key ? `Set ${ key }` : 'Set environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n return {\n title: key ? `Set ${ key }` : 'Set environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n}\n\n/** ProjectEnv: label-only row for list / set / remove. Never shows values. */\nexport function ProjectEnvTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'ProjectEnv') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const input = asInput(part.input);\n const output = part.state === 'output-available' ? asOutput(part.output) : undefined;\n const logicalError = outputError(output);\n const { title, titleInProgress } = projectEnvTitles(\n part.state,\n input,\n output,\n failure.useFailureLabel\n );\n\n return (\n <ToolShell data-slot=\"project-env-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip
|
|
1
|
+
{"version":3,"file":"ProjectEnvTool.js","sources":["../../../../src/chat/Tool/project-env/ProjectEnvTool.tsx"],"sourcesContent":["import { Terminal } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from 'ai';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { getToolFailureRowState, isToolInvocationInProgress } from '../helpers';\nimport { ToolShell, ToolShellFooter, ToolShellHeader } from '../shell';\n\nimport type { ProjectEnvToolInput, ProjectEnvToolOutput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\nfunction asInput(input: unknown): ProjectEnvToolInput | undefined {\n if (input == null || typeof input !== 'object') {\n return undefined;\n }\n\n const action = (input as ProjectEnvToolInput).action;\n\n if (action !== 'list' && action !== 'set' && action !== 'remove') {\n return undefined;\n }\n\n return input as ProjectEnvToolInput;\n}\n\nfunction asOutput(output: unknown): ProjectEnvToolOutput | undefined {\n if (output == null || typeof output !== 'object') {\n return undefined;\n }\n\n return output as ProjectEnvToolOutput;\n}\n\nfunction outputError(output: ProjectEnvToolOutput | undefined): string | undefined {\n const error = output?.error;\n\n return typeof error === 'string' && error.length > 0 ? error : undefined;\n}\n\nfunction variableKey(\n input: ProjectEnvToolInput | undefined,\n output: ProjectEnvToolOutput | undefined\n): string | undefined {\n const key = output?.key ?? input?.key;\n\n if (typeof key !== 'string') {\n return undefined;\n }\n\n const trimmed = key.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction projectEnvTitles(\n state: string,\n input: ProjectEnvToolInput | undefined,\n output: ProjectEnvToolOutput | undefined,\n useFailureLabel: boolean\n): { title: string; titleInProgress: string } {\n const action = input?.action;\n const key = variableKey(input, output);\n const failed = useFailureLabel || Boolean(outputError(output));\n\n if (action === 'list') {\n if (failed) {\n return {\n title: 'Couldn\\'t list environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (state === 'output-available') {\n const count = output?.variables?.length;\n\n if (count === 0) {\n return {\n title: 'No environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (count === 1) {\n return {\n title: 'Listed 1 environment variable',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (count != null) {\n return {\n title: `Listed ${ count } environment variables`,\n titleInProgress: 'Listing environment variables',\n };\n }\n }\n\n return {\n title: 'List environment variables',\n titleInProgress: 'Listing environment variables',\n };\n }\n\n if (action === 'remove') {\n if (failed) {\n return {\n title: key ? `Couldn't remove ${ key }` : 'Couldn\\'t remove environment variable',\n titleInProgress: key ? `Removing ${ key }` : 'Removing environment variable',\n };\n }\n\n return {\n title: state === 'output-available'\n ? (key ? `Removed ${ key }` : 'Removed environment variable')\n : (key ? `Remove ${ key }` : 'Remove environment variable'),\n titleInProgress: key ? `Removing ${ key }` : 'Removing environment variable',\n };\n }\n\n if (failed) {\n return {\n title: key ? `Couldn't save ${ key }` : 'Couldn\\'t save environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (state === 'output-available' && output?.created) {\n return {\n title: key ? `Added ${ key }` : 'Added environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (state === 'output-available' && output?.updated) {\n return {\n title: key ? `Updated ${ key }` : 'Updated environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n if (isToolInvocationInProgress(state)) {\n return {\n title: key ? `Set ${ key }` : 'Set environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n }\n\n return {\n title: key ? `Set ${ key }` : 'Set environment variable',\n titleInProgress: key ? `Setting ${ key }` : 'Setting environment variable',\n };\n}\n\n/** ProjectEnv: label-only row for list / set / remove. Never shows values. */\nexport function ProjectEnvTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'ProjectEnv') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const input = asInput(part.input);\n const output = part.state === 'output-available' ? asOutput(part.output) : undefined;\n const logicalError = outputError(output);\n const { title, titleInProgress } = projectEnvTitles(\n part.state,\n input,\n output,\n failure.useFailureLabel\n );\n\n return (\n <ToolShell data-slot=\"project-env-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n failed={ logicalError ? true : undefined }\n title={ title }\n titleInProgress={ titleInProgress }\n icon={ <Terminal aria-hidden /> }\n />\n\n <Show when={ logicalError && !failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{logicalError}</Text>\n </ToolShellFooter>\n </Show>\n\n <Show when={ failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n}\n"],"names":["asInput","input","action","asOutput","output","outputError","error","variableKey","key","trimmed","projectEnvTitles","state","useFailureLabel","failed","count","isToolInvocationInProgress","ProjectEnvTool","part","isToolUIPart","getToolName","failure","getToolFailureRowState","logicalError","title","titleInProgress","ToolShell","_jsx","ToolShellHeader","Terminal","Show","ToolShellFooter","Text"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolShell.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/shell/ToolShell.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEH,cAAc,EAId,KAAK,SAAS,EACd,KAAK,GAAG,EACX,MAAM,OAAO,CAAC;AA2Cf,gHAAgH;AAChH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC1D,sHAAsH;IACtH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACtB,WAAmB,EACnB,WAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,cAAc,+BAgChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"ToolShell.d.ts","sourceRoot":"","sources":["../../../../src/chat/Tool/shell/ToolShell.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEH,cAAc,EAId,KAAK,SAAS,EACd,KAAK,GAAG,EACX,MAAM,OAAO,CAAC;AA2Cf,gHAAgH;AAChH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC1D,sHAAsH;IACtH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACtB,WAAmB,EACnB,WAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,cAAc,+BAgChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AA4PD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAS1D;AAED,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAoBnE,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,+BAgBxF;AAED,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAElE,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BAMtF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Text as H } from "@reforma/components/Text";
|
|
2
|
-
import { ChevronDown as
|
|
2
|
+
import { ChevronDown as A } from "@reforma/icons/8";
|
|
3
3
|
import { cn as a, mergeRefs as j } from "@reforma/lib";
|
|
4
|
-
import { useMemo as
|
|
4
|
+
import { useMemo as k, use as I, createContext as U, useRef as $ } from "react";
|
|
5
5
|
import { mergeProps as q } from "react-aria";
|
|
6
6
|
import { OverlayTriggerStateContext as z, Pressable as B } from "react-aria-components";
|
|
7
7
|
import { Collapsible as J, CollapsibleMotionContent as K, useCollapsible as Q, CollapsibleTrigger as V } from "../../../Collapsible/Collapsible.js";
|
|
@@ -10,9 +10,9 @@ import { Show as X } from "../../../Show/Show.js";
|
|
|
10
10
|
import { TOOL_INTERRUPTED_MESSAGE as P } from "../helpers.js";
|
|
11
11
|
import { useToolProgress as Y } from "./toolProgress.js";
|
|
12
12
|
import l from "./ToolShell.module.css.js";
|
|
13
|
-
import { isFailedToolStatus as
|
|
13
|
+
import { isFailedToolStatus as D, ToolShellStatusIcon as L, FailedToolTitleTooltip as Z } from "./ToolShellStatusIcon.js";
|
|
14
14
|
import { jsx as e, jsxs as _, Fragment as ee } from "react/jsx-runtime";
|
|
15
|
-
const
|
|
15
|
+
const E = /* @__PURE__ */ U(null), G = "data-tool-shell-header";
|
|
16
16
|
function te(t, r) {
|
|
17
17
|
if (!(t instanceof Element))
|
|
18
18
|
return !1;
|
|
@@ -25,32 +25,32 @@ function ve({
|
|
|
25
25
|
open: o,
|
|
26
26
|
onOpenChange: n,
|
|
27
27
|
isDisabled: m,
|
|
28
|
-
className:
|
|
29
|
-
children:
|
|
28
|
+
className: d,
|
|
29
|
+
children: u,
|
|
30
30
|
...s
|
|
31
31
|
}) {
|
|
32
|
-
const
|
|
32
|
+
const c = k(() => ({
|
|
33
33
|
collapsible: t
|
|
34
34
|
}), [t]);
|
|
35
|
-
return t ? /* @__PURE__ */ e(
|
|
36
|
-
value:
|
|
35
|
+
return t ? /* @__PURE__ */ e(E, {
|
|
36
|
+
value: c,
|
|
37
37
|
children: /* @__PURE__ */ e(J, {
|
|
38
|
-
className: a(l.root,
|
|
38
|
+
className: a(l.root, d),
|
|
39
39
|
"data-slot": "tool",
|
|
40
40
|
defaultOpen: r,
|
|
41
41
|
open: o,
|
|
42
42
|
onOpenChange: n,
|
|
43
43
|
isDisabled: m,
|
|
44
44
|
...s,
|
|
45
|
-
children:
|
|
45
|
+
children: u
|
|
46
46
|
})
|
|
47
|
-
}) : /* @__PURE__ */ e(
|
|
48
|
-
value:
|
|
47
|
+
}) : /* @__PURE__ */ e(E, {
|
|
48
|
+
value: c,
|
|
49
49
|
children: /* @__PURE__ */ e("div", {
|
|
50
|
-
className: a(l.root,
|
|
50
|
+
className: a(l.root, d),
|
|
51
51
|
"data-slot": "tool",
|
|
52
52
|
...s,
|
|
53
|
-
children:
|
|
53
|
+
children: u
|
|
54
54
|
})
|
|
55
55
|
});
|
|
56
56
|
}
|
|
@@ -60,10 +60,10 @@ function M({
|
|
|
60
60
|
titleInterrupted: o,
|
|
61
61
|
live: n,
|
|
62
62
|
stalled: m,
|
|
63
|
-
shimmer:
|
|
64
|
-
failed:
|
|
63
|
+
shimmer: d,
|
|
64
|
+
failed: u,
|
|
65
65
|
truncate: s,
|
|
66
|
-
statusDetail:
|
|
66
|
+
statusDetail: c
|
|
67
67
|
}) {
|
|
68
68
|
const h = a(l.headerLabel, s && l.headerLabelTruncate, "whitespace-nowrap");
|
|
69
69
|
if (m)
|
|
@@ -76,21 +76,27 @@ function M({
|
|
|
76
76
|
if (!i)
|
|
77
77
|
return null;
|
|
78
78
|
const p = r ?? i;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
if (n && d)
|
|
80
|
+
return /* @__PURE__ */ e(W, {
|
|
81
|
+
as: "span",
|
|
82
|
+
className: h,
|
|
83
|
+
duration: 1,
|
|
84
|
+
children: p
|
|
85
|
+
});
|
|
86
|
+
if (u && !n) {
|
|
87
|
+
const T = /* @__PURE__ */ e(H, {
|
|
87
88
|
decoration: "line-through",
|
|
88
89
|
color: "secondary",
|
|
89
90
|
className: h,
|
|
90
91
|
"aria-label": `${i} failed`,
|
|
91
92
|
children: i
|
|
92
|
-
})
|
|
93
|
-
|
|
93
|
+
});
|
|
94
|
+
return c?.trim() ? /* @__PURE__ */ e(Z, {
|
|
95
|
+
statusDetail: c,
|
|
96
|
+
children: T
|
|
97
|
+
}) : T;
|
|
98
|
+
}
|
|
99
|
+
return /* @__PURE__ */ e(H, {
|
|
94
100
|
className: h,
|
|
95
101
|
children: n ? p : i
|
|
96
102
|
});
|
|
@@ -101,62 +107,62 @@ function oe({
|
|
|
101
107
|
titleInProgress: o,
|
|
102
108
|
titleInterrupted: n,
|
|
103
109
|
icon: m,
|
|
104
|
-
beforeTitle:
|
|
105
|
-
children:
|
|
110
|
+
beforeTitle: d,
|
|
111
|
+
children: u,
|
|
106
112
|
statusDetail: s,
|
|
107
|
-
failed:
|
|
113
|
+
failed: c,
|
|
108
114
|
truncateTitle: h,
|
|
109
115
|
className: i,
|
|
110
116
|
progress: p,
|
|
111
|
-
shimmer:
|
|
112
|
-
onPress:
|
|
113
|
-
disclosure:
|
|
117
|
+
shimmer: T,
|
|
118
|
+
onPress: S,
|
|
119
|
+
disclosure: R,
|
|
114
120
|
ref: y
|
|
115
121
|
}) {
|
|
116
|
-
const
|
|
122
|
+
const b = I(z), x = b?.isOpen === !0, g = S != null || R === !0, {
|
|
117
123
|
live: f,
|
|
118
|
-
stalled:
|
|
119
|
-
} = p,
|
|
124
|
+
stalled: v
|
|
125
|
+
} = p, C = v ? s?.trim() || P : s, w = v ? "output-error" : t, F = c ?? D(w, C), N = /* @__PURE__ */ _(ee, {
|
|
120
126
|
children: [/* @__PURE__ */ e(L, {
|
|
121
127
|
icon: m,
|
|
122
|
-
state:
|
|
123
|
-
statusDetail:
|
|
128
|
+
state: w,
|
|
129
|
+
statusDetail: C,
|
|
124
130
|
className: l.headerIcon
|
|
125
|
-
}),
|
|
131
|
+
}), d, /* @__PURE__ */ e(M, {
|
|
126
132
|
title: r,
|
|
127
133
|
titleInProgress: o,
|
|
128
134
|
titleInterrupted: n,
|
|
129
135
|
live: f,
|
|
130
|
-
stalled:
|
|
131
|
-
shimmer:
|
|
136
|
+
stalled: v,
|
|
137
|
+
shimmer: T !== !1,
|
|
132
138
|
failed: F,
|
|
133
139
|
truncate: h,
|
|
134
|
-
statusDetail:
|
|
135
|
-
}),
|
|
136
|
-
when:
|
|
137
|
-
children: /* @__PURE__ */ e(
|
|
140
|
+
statusDetail: C
|
|
141
|
+
}), u, /* @__PURE__ */ e(X, {
|
|
142
|
+
when: g,
|
|
143
|
+
children: /* @__PURE__ */ e(A, {
|
|
138
144
|
className: a("chevron", "next", l.toolChevron),
|
|
139
|
-
"aria-expanded":
|
|
145
|
+
"aria-expanded": b ? x : void 0,
|
|
140
146
|
"aria-hidden": !0
|
|
141
147
|
})
|
|
142
148
|
})]
|
|
143
149
|
});
|
|
144
|
-
return
|
|
150
|
+
return g ? /* @__PURE__ */ e(B, {
|
|
145
151
|
ref: y,
|
|
146
|
-
...
|
|
147
|
-
onPress:
|
|
152
|
+
...S ? {
|
|
153
|
+
onPress: S
|
|
148
154
|
} : {},
|
|
149
155
|
children: /* @__PURE__ */ e("div", {
|
|
150
156
|
role: "button",
|
|
151
157
|
className: a(l.headerRow, l.headerTrigger, i),
|
|
152
158
|
"aria-busy": f,
|
|
153
|
-
"aria-expanded":
|
|
154
|
-
children:
|
|
159
|
+
"aria-expanded": b ? x : void 0,
|
|
160
|
+
children: N
|
|
155
161
|
})
|
|
156
162
|
}) : /* @__PURE__ */ e("div", {
|
|
157
163
|
className: a(l.headerRow, l.headerNonInteractive, i),
|
|
158
164
|
"aria-busy": f,
|
|
159
|
-
children:
|
|
165
|
+
children: N
|
|
160
166
|
});
|
|
161
167
|
}
|
|
162
168
|
function re({
|
|
@@ -165,31 +171,32 @@ function re({
|
|
|
165
171
|
titleInProgress: o,
|
|
166
172
|
titleInterrupted: n,
|
|
167
173
|
icon: m,
|
|
168
|
-
beforeTitle:
|
|
169
|
-
children:
|
|
174
|
+
beforeTitle: d,
|
|
175
|
+
children: u,
|
|
170
176
|
statusDetail: s,
|
|
171
|
-
failed:
|
|
177
|
+
failed: c,
|
|
172
178
|
truncateTitle: h,
|
|
173
179
|
className: i,
|
|
174
180
|
progress: p,
|
|
175
|
-
shimmer:
|
|
181
|
+
shimmer: T
|
|
176
182
|
}) {
|
|
177
183
|
const {
|
|
178
|
-
state:
|
|
179
|
-
triggerProps:
|
|
184
|
+
state: S,
|
|
185
|
+
triggerProps: R,
|
|
180
186
|
triggerRef: y
|
|
181
|
-
} = Q(),
|
|
182
|
-
live:
|
|
183
|
-
stalled:
|
|
184
|
-
} = p, f =
|
|
187
|
+
} = Q(), b = $(null), {
|
|
188
|
+
live: x,
|
|
189
|
+
stalled: g
|
|
190
|
+
} = p, f = g ? s?.trim() || P : s, v = g ? "output-error" : t, C = c ?? D(v, f), w = R.onPress, F = q(R, {
|
|
185
191
|
[G]: "",
|
|
186
192
|
className: a(l.headerRow, l.headerTrigger, i),
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
"aria-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
// eslint-disable-next-line react-hooks/refs -- mergeRefs composes; it does not read `.current`
|
|
194
|
+
ref: j(y, b),
|
|
195
|
+
"aria-busy": x,
|
|
196
|
+
"aria-expanded": S.isExpanded,
|
|
197
|
+
onPress: (N) => {
|
|
198
|
+
const O = b.current;
|
|
199
|
+
O && te(N.target, O) || w?.(N);
|
|
193
200
|
}
|
|
194
201
|
});
|
|
195
202
|
return /* @__PURE__ */ e(V, {
|
|
@@ -198,29 +205,29 @@ function re({
|
|
|
198
205
|
...F,
|
|
199
206
|
children: [/* @__PURE__ */ e(L, {
|
|
200
207
|
icon: m,
|
|
201
|
-
state:
|
|
208
|
+
state: v,
|
|
202
209
|
statusDetail: f,
|
|
203
210
|
className: l.headerIcon
|
|
204
|
-
}),
|
|
211
|
+
}), d, /* @__PURE__ */ e(M, {
|
|
205
212
|
title: r,
|
|
206
213
|
titleInProgress: o,
|
|
207
214
|
titleInterrupted: n,
|
|
208
|
-
live:
|
|
209
|
-
stalled:
|
|
210
|
-
shimmer:
|
|
211
|
-
failed:
|
|
215
|
+
live: x,
|
|
216
|
+
stalled: g,
|
|
217
|
+
shimmer: T !== !1,
|
|
218
|
+
failed: C,
|
|
212
219
|
truncate: h,
|
|
213
220
|
statusDetail: f
|
|
214
|
-
}),
|
|
221
|
+
}), u, /* @__PURE__ */ e(A, {
|
|
215
222
|
className: a("chevron", "next", l.toolChevron),
|
|
216
|
-
"aria-expanded":
|
|
223
|
+
"aria-expanded": S.isExpanded,
|
|
217
224
|
"aria-hidden": !0
|
|
218
225
|
})]
|
|
219
226
|
})
|
|
220
227
|
});
|
|
221
228
|
}
|
|
222
229
|
function xe(t) {
|
|
223
|
-
const r = I(
|
|
230
|
+
const r = I(E), o = Y(t.state, t.awaitingUser);
|
|
224
231
|
return r?.collapsible ? /* @__PURE__ */ e(re, {
|
|
225
232
|
...t,
|
|
226
233
|
progress: o
|
|
@@ -261,7 +268,7 @@ function Ce({
|
|
|
261
268
|
children: r,
|
|
262
269
|
...o
|
|
263
270
|
}) {
|
|
264
|
-
return I(
|
|
271
|
+
return I(E)?.collapsible ? /* @__PURE__ */ e(ae, {
|
|
265
272
|
className: t,
|
|
266
273
|
...o,
|
|
267
274
|
children: r
|