@ciridae/ui 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/components/agentic/agent-card.d.ts +28 -0
- package/dist/components/agentic/agent-card.js +27 -0
- package/dist/components/agentic/agent-composer.d.ts +44 -0
- package/dist/components/agentic/agent-composer.js +104 -0
- package/dist/components/agentic/agent-context.d.ts +28 -0
- package/dist/components/agentic/agent-context.js +102 -0
- package/dist/components/agentic/agent-plan.d.ts +27 -0
- package/dist/components/agentic/agent-plan.js +43 -0
- package/dist/components/agentic/agent-queue.d.ts +46 -0
- package/dist/components/agentic/agent-queue.js +53 -0
- package/dist/components/agentic/agent-task.d.ts +16 -0
- package/dist/components/agentic/agent-task.js +20 -0
- package/dist/components/agentic/approval-request.d.ts +24 -0
- package/dist/components/agentic/approval-request.js +57 -0
- package/dist/components/agentic/artifact.d.ts +24 -0
- package/dist/components/agentic/artifact.js +72 -0
- package/dist/components/agentic/attachments.d.ts +124 -0
- package/dist/components/agentic/attachments.js +595 -0
- package/dist/components/agentic/audio-player.d.ts +16 -0
- package/dist/components/agentic/audio-player.js +21 -0
- package/dist/components/agentic/canvas.d.ts +10 -0
- package/dist/components/agentic/canvas.js +22 -0
- package/dist/components/agentic/clipboard.d.ts +2 -0
- package/dist/components/agentic/clipboard.js +12 -0
- package/dist/components/agentic/code-block.d.ts +43 -0
- package/dist/components/agentic/code-block.js +92 -0
- package/dist/components/agentic/commit.d.ts +57 -0
- package/dist/components/agentic/commit.js +85 -0
- package/dist/components/agentic/connection.d.ts +3 -0
- package/dist/components/agentic/connection.js +8 -0
- package/dist/components/agentic/controls.d.ts +6 -0
- package/dist/components/agentic/controls.js +7 -0
- package/dist/components/agentic/conversation.d.ts +25 -0
- package/dist/components/agentic/conversation.js +56 -0
- package/dist/components/agentic/edge.d.ts +8 -0
- package/dist/components/agentic/edge.js +65 -0
- package/dist/components/agentic/effort-selector.d.ts +43 -0
- package/dist/components/agentic/effort-selector.js +47 -0
- package/dist/components/agentic/environment-variables.d.ts +32 -0
- package/dist/components/agentic/environment-variables.js +66 -0
- package/dist/components/agentic/file-tree.d.ts +24 -0
- package/dist/components/agentic/file-tree.js +56 -0
- package/dist/components/agentic/image.d.ts +9 -0
- package/dist/components/agentic/image.js +11 -0
- package/dist/components/agentic/inline-citation.d.ts +40 -0
- package/dist/components/agentic/inline-citation.js +111 -0
- package/dist/components/agentic/jsx-preview.d.ts +19 -0
- package/dist/components/agentic/jsx-preview.js +34 -0
- package/dist/components/agentic/message-branch.d.ts +20 -0
- package/dist/components/agentic/message-branch.js +83 -0
- package/dist/components/agentic/message-response.css +265 -0
- package/dist/components/agentic/message-response.css.d.ts +2 -0
- package/dist/components/agentic/message.d.ts +27 -0
- package/dist/components/agentic/message.js +57 -0
- package/dist/components/agentic/mic-selector.d.ts +58 -0
- package/dist/components/agentic/mic-selector.js +173 -0
- package/dist/components/agentic/model-selector.d.ts +39 -0
- package/dist/components/agentic/model-selector.js +47 -0
- package/dist/components/agentic/node.d.ts +26 -0
- package/dist/components/agentic/node.js +29 -0
- package/dist/components/agentic/open-in-chat.d.ts +9 -0
- package/dist/components/agentic/open-in-chat.js +8 -0
- package/dist/components/agentic/package-info.d.ts +30 -0
- package/dist/components/agentic/package-info.js +44 -0
- package/dist/components/agentic/panel.d.ts +6 -0
- package/dist/components/agentic/panel.js +7 -0
- package/dist/components/agentic/persona.d.ts +16 -0
- package/dist/components/agentic/persona.js +116 -0
- package/dist/components/agentic/prompt-input-action-menu.d.ts +16 -0
- package/dist/components/agentic/prompt-input-action-menu.js +22 -0
- package/dist/components/agentic/prompt-input-command.d.ts +18 -0
- package/dist/components/agentic/prompt-input-command.js +25 -0
- package/dist/components/agentic/prompt-input-hover-card.d.ts +10 -0
- package/dist/components/agentic/prompt-input-hover-card.js +13 -0
- package/dist/components/agentic/prompt-input-select.d.ts +14 -0
- package/dist/components/agentic/prompt-input-select.js +19 -0
- package/dist/components/agentic/prompt-input-tabs.d.ts +17 -0
- package/dist/components/agentic/prompt-input-tabs.js +45 -0
- package/dist/components/agentic/prompt-input.d.ts +79 -0
- package/dist/components/agentic/prompt-input.js +206 -0
- package/dist/components/agentic/reasoning.d.ts +21 -0
- package/dist/components/agentic/reasoning.js +106 -0
- package/dist/components/agentic/run-checkpoint.d.ts +13 -0
- package/dist/components/agentic/run-checkpoint.js +19 -0
- package/dist/components/agentic/run-trace.d.ts +30 -0
- package/dist/components/agentic/run-trace.js +56 -0
- package/dist/components/agentic/sandbox.d.ts +24 -0
- package/dist/components/agentic/sandbox.js +33 -0
- package/dist/components/agentic/schema-display.d.ts +39 -0
- package/dist/components/agentic/schema-display.js +56 -0
- package/dist/components/agentic/shimmer.d.ts +11 -0
- package/dist/components/agentic/shimmer.js +16 -0
- package/dist/components/agentic/snippet.d.ts +18 -0
- package/dist/components/agentic/snippet.js +35 -0
- package/dist/components/agentic/sources.d.ts +16 -0
- package/dist/components/agentic/sources.js +17 -0
- package/dist/components/agentic/speech-input.d.ts +24 -0
- package/dist/components/agentic/speech-input.js +30 -0
- package/dist/components/agentic/stack-trace.d.ts +27 -0
- package/dist/components/agentic/stack-trace.js +76 -0
- package/dist/components/agentic/suggestion.d.ts +12 -0
- package/dist/components/agentic/suggestion.js +15 -0
- package/dist/components/agentic/terminal.d.ts +24 -0
- package/dist/components/agentic/terminal.js +47 -0
- package/dist/components/agentic/test-results.d.ts +51 -0
- package/dist/components/agentic/test-results.js +83 -0
- package/dist/components/agentic/theme.d.ts +5 -0
- package/dist/components/agentic/theme.js +31 -0
- package/dist/components/agentic/tool.d.ts +25 -0
- package/dist/components/agentic/tool.js +73 -0
- package/dist/components/agentic/toolbar.d.ts +6 -0
- package/dist/components/agentic/toolbar.js +7 -0
- package/dist/components/agentic/transcription.d.ts +20 -0
- package/dist/components/agentic/transcription.js +32 -0
- package/dist/components/agentic/types.d.ts +172 -0
- package/dist/components/agentic/types.js +1 -0
- package/dist/components/agentic/use-controllable-state.d.ts +6 -0
- package/dist/components/agentic/use-controllable-state.js +13 -0
- package/dist/components/agentic/voice-selector.d.ts +69 -0
- package/dist/components/agentic/voice-selector.js +122 -0
- package/dist/components/agentic/web-preview.d.ts +25 -0
- package/dist/components/agentic/web-preview.js +33 -0
- package/dist/components/ui/accordion.d.ts +7 -0
- package/dist/components/ui/accordion.js +17 -0
- package/dist/components/ui/alert-dialog.d.ts +22 -0
- package/dist/components/ui/alert-dialog.js +51 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.js +24 -0
- package/dist/components/ui/aspect-ratio.d.ts +3 -0
- package/dist/components/ui/aspect-ratio.js +7 -0
- package/dist/components/ui/avatar.d.ts +11 -0
- package/dist/components/ui/avatar.js +22 -0
- package/dist/components/ui/badge-variants.d.ts +100 -0
- package/dist/components/ui/badge-variants.js +140 -0
- package/dist/components/ui/badge.d.ts +6 -0
- package/dist/components/ui/badge.js +9 -0
- package/dist/components/ui/breadcrumb.d.ts +11 -0
- package/dist/components/ui/breadcrumb.js +27 -0
- package/dist/components/ui/button-group-variants.d.ts +6 -0
- package/dist/components/ui/button-group-variants.js +13 -0
- package/dist/components/ui/button-group.d.ts +8 -0
- package/dist/components/ui/button-group.js +16 -0
- package/dist/components/ui/button-variants.d.ts +133 -0
- package/dist/components/ui/button-variants.js +170 -0
- package/dist/components/ui/button.d.ts +8 -0
- package/dist/components/ui/button.js +67 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.js +99 -0
- package/dist/components/ui/card.d.ts +14 -0
- package/dist/components/ui/card.js +28 -0
- package/dist/components/ui/carousel.d.ts +19 -0
- package/dist/components/ui/carousel.js +104 -0
- package/dist/components/ui/chart-context.d.ts +33 -0
- package/dist/components/ui/chart-context.js +36 -0
- package/dist/components/ui/chart-panel.d.ts +11 -0
- package/dist/components/ui/chart-panel.js +6 -0
- package/dist/components/ui/chart-tooltip.d.ts +13 -0
- package/dist/components/ui/chart-tooltip.js +84 -0
- package/dist/components/ui/chart.d.ts +23 -0
- package/dist/components/ui/chart.js +52 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/checkbox.js +9 -0
- package/dist/components/ui/collapsible.d.ts +5 -0
- package/dist/components/ui/collapsible.js +12 -0
- package/dist/components/ui/combobox-anchor.d.ts +3 -0
- package/dist/components/ui/combobox-anchor.js +5 -0
- package/dist/components/ui/combobox.d.ts +23 -0
- package/dist/components/ui/combobox.js +54 -0
- package/dist/components/ui/command.d.ts +19 -0
- package/dist/components/ui/command.js +38 -0
- package/dist/components/ui/context-menu.d.ts +30 -0
- package/dist/components/ui/context-menu.js +63 -0
- package/dist/components/ui/data-table.d.ts +17 -0
- package/dist/components/ui/data-table.js +26 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +48 -0
- package/dist/components/ui/direction-context.d.ts +3 -0
- package/dist/components/ui/direction-context.js +3 -0
- package/dist/components/ui/direction.d.ts +6 -0
- package/dist/components/ui/direction.js +7 -0
- package/dist/components/ui/drawer.d.ts +18 -0
- package/dist/components/ui/drawer.js +47 -0
- package/dist/components/ui/dropdown-menu.d.ts +30 -0
- package/dist/components/ui/dropdown-menu.js +63 -0
- package/dist/components/ui/empty.d.ts +11 -0
- package/dist/components/ui/empty.js +33 -0
- package/dist/components/ui/expandable-data-table.d.ts +24 -0
- package/dist/components/ui/expandable-data-table.js +62 -0
- package/dist/components/ui/field.d.ts +26 -0
- package/dist/components/ui/field.js +74 -0
- package/dist/components/ui/file-upload-field-parts.d.ts +21 -0
- package/dist/components/ui/file-upload-field-parts.js +55 -0
- package/dist/components/ui/file-upload-field.d.ts +15 -0
- package/dist/components/ui/file-upload-field.js +85 -0
- package/dist/components/ui/form-context.d.ts +23 -0
- package/dist/components/ui/form-context.js +35 -0
- package/dist/components/ui/form.d.ts +12 -0
- package/dist/components/ui/form.js +38 -0
- package/dist/components/ui/hover-card.d.ts +10 -0
- package/dist/components/ui/hover-card.js +22 -0
- package/dist/components/ui/input-group.d.ts +16 -0
- package/dist/components/ui/input-group.js +62 -0
- package/dist/components/ui/input-otp.d.ts +11 -0
- package/dist/components/ui/input-otp.js +21 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/input.js +6 -0
- package/dist/components/ui/item.d.ts +23 -0
- package/dist/components/ui/item.js +66 -0
- package/dist/components/ui/kbd.d.ts +3 -0
- package/dist/components/ui/kbd.js +9 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.js +7 -0
- package/dist/components/ui/loading-state.d.ts +27 -0
- package/dist/components/ui/loading-state.js +44 -0
- package/dist/components/ui/menubar.d.ts +30 -0
- package/dist/components/ui/menubar.js +63 -0
- package/dist/components/ui/metrics-strip.d.ts +7 -0
- package/dist/components/ui/metrics-strip.js +18 -0
- package/dist/components/ui/native-select.d.ts +7 -0
- package/dist/components/ui/native-select.js +13 -0
- package/dist/components/ui/navigation-menu-variants.d.ts +2 -0
- package/dist/components/ui/navigation-menu-variants.js +3 -0
- package/dist/components/ui/navigation-menu.d.ts +13 -0
- package/dist/components/ui/navigation-menu.js +30 -0
- package/dist/components/ui/page-header.d.ts +19 -0
- package/dist/components/ui/page-header.js +36 -0
- package/dist/components/ui/pagination.d.ts +13 -0
- package/dist/components/ui/pagination.js +29 -0
- package/dist/components/ui/popover.d.ts +14 -0
- package/dist/components/ui/popover.js +34 -0
- package/dist/components/ui/progress.d.ts +4 -0
- package/dist/components/ui/progress.js +8 -0
- package/dist/components/ui/property-list.d.ts +6 -0
- package/dist/components/ui/property-list.js +15 -0
- package/dist/components/ui/radio-group.d.ts +5 -0
- package/dist/components/ui/radio-group.js +11 -0
- package/dist/components/ui/registry-docs-api.d.ts +11 -0
- package/dist/components/ui/registry-docs-api.js +9 -0
- package/dist/components/ui/registry-docs-code.d.ts +19 -0
- package/dist/components/ui/registry-docs-code.js +78 -0
- package/dist/components/ui/registry-docs-showcase.d.ts +11 -0
- package/dist/components/ui/registry-docs-showcase.js +27 -0
- package/dist/components/ui/registry-docs.d.ts +27 -0
- package/dist/components/ui/registry-docs.js +32 -0
- package/dist/components/ui/resizable.d.ts +7 -0
- package/dist/components/ui/resizable.js +15 -0
- package/dist/components/ui/scroll-area.d.ts +7 -0
- package/dist/components/ui/scroll-area.js +10 -0
- package/dist/components/ui/select.d.ts +15 -0
- package/dist/components/ui/select.js +38 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.js +7 -0
- package/dist/components/ui/sheet.d.ts +21 -0
- package/dist/components/ui/sheet.js +62 -0
- package/dist/components/ui/sidebar/context.d.ts +21 -0
- package/dist/components/ui/sidebar/context.js +15 -0
- package/dist/components/ui/sidebar/group.d.ts +10 -0
- package/dist/components/ui/sidebar/group.js +18 -0
- package/dist/components/ui/sidebar/layout.d.ts +17 -0
- package/dist/components/ui/sidebar/layout.js +73 -0
- package/dist/components/ui/sidebar/menu.d.ts +30 -0
- package/dist/components/ui/sidebar/menu.js +64 -0
- package/dist/components/ui/sidebar/provider.d.ts +7 -0
- package/dist/components/ui/sidebar/provider.js +53 -0
- package/dist/components/ui/sidebar/rail.d.ts +3 -0
- package/dist/components/ui/sidebar/rail.js +12 -0
- package/dist/components/ui/sidebar/trigger.d.ts +4 -0
- package/dist/components/ui/sidebar/trigger.js +16 -0
- package/dist/components/ui/sidebar-account-menu-theme.d.ts +7 -0
- package/dist/components/ui/sidebar-account-menu-theme.js +32 -0
- package/dist/components/ui/sidebar-account-menu.d.ts +14 -0
- package/dist/components/ui/sidebar-account-menu.js +51 -0
- package/dist/components/ui/sidebar.d.ts +7 -0
- package/dist/components/ui/sidebar.js +7 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/skeleton.js +15 -0
- package/dist/components/ui/slider.d.ts +4 -0
- package/dist/components/ui/slider.js +9 -0
- package/dist/components/ui/sonner.d.ts +3 -0
- package/dist/components/ui/sonner.js +33 -0
- package/dist/components/ui/spinner.d.ts +2 -0
- package/dist/components/ui/spinner.js +16 -0
- package/dist/components/ui/switch.d.ts +6 -0
- package/dist/components/ui/switch.js +7 -0
- package/dist/components/ui/table.d.ts +10 -0
- package/dist/components/ui/table.js +28 -0
- package/dist/components/ui/tabs-variants.d.ts +6 -0
- package/dist/components/ui/tabs-variants.js +13 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.js +17 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.js +6 -0
- package/dist/components/ui/toggle-group.d.ts +9 -0
- package/dist/components/ui/toggle-group.js +24 -0
- package/dist/components/ui/toggle-variants.d.ts +7 -0
- package/dist/components/ui/toggle-variants.js +19 -0
- package/dist/components/ui/toggle.d.ts +5 -0
- package/dist/components/ui/toggle.js +9 -0
- package/dist/components/ui/tooltip.d.ts +11 -0
- package/dist/components/ui/tooltip.js +25 -0
- package/dist/components/ui/workflow-timeline.d.ts +20 -0
- package/dist/components/ui/workflow-timeline.js +92 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.js +15 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +8 -0
- package/dist/styled-system/css/conditions.mjs +36 -0
- package/dist/styled-system/css/css.mjs +45 -0
- package/dist/styled-system/css/cva.mjs +87 -0
- package/dist/styled-system/css/cx.mjs +15 -0
- package/dist/styled-system/css/index.mjs +4 -0
- package/dist/styled-system/css/sva.mjs +46 -0
- package/dist/styled-system/helpers.mjs +316 -0
- package/dist/styled-system/patterns/aspect-ratio.mjs +38 -0
- package/dist/styled-system/patterns/bleed.mjs +24 -0
- package/dist/styled-system/patterns/box.mjs +15 -0
- package/dist/styled-system/patterns/center.mjs +21 -0
- package/dist/styled-system/patterns/circle.mjs +25 -0
- package/dist/styled-system/patterns/container.mjs +21 -0
- package/dist/styled-system/patterns/cq.mjs +21 -0
- package/dist/styled-system/patterns/divider.mjs +25 -0
- package/dist/styled-system/patterns/flex.mjs +26 -0
- package/dist/styled-system/patterns/float.mjs +52 -0
- package/dist/styled-system/patterns/grid-item.mjs +25 -0
- package/dist/styled-system/patterns/grid.mjs +27 -0
- package/dist/styled-system/patterns/hstack.mjs +24 -0
- package/dist/styled-system/patterns/index.mjs +20 -0
- package/dist/styled-system/patterns/link-overlay.mjs +24 -0
- package/dist/styled-system/patterns/spacer.mjs +25 -0
- package/dist/styled-system/patterns/square.mjs +24 -0
- package/dist/styled-system/patterns/stack.mjs +24 -0
- package/dist/styled-system/patterns/visually-hidden.mjs +18 -0
- package/dist/styled-system/patterns/vstack.mjs +24 -0
- package/dist/styled-system/patterns/wrap.mjs +25 -0
- package/dist/styled-system/styles.css +1089 -0
- package/dist/styled-system/styles.css.d.ts +2 -0
- package/dist/styled-system/tokens/index.mjs +2304 -0
- package/package.json +688 -0
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @ciridae/ui
|
|
2
|
+
|
|
3
|
+
Ciridae UI package output from https://ciridae-ui.ciridae.app.
|
|
4
|
+
|
|
5
|
+
Install from the hosted tarball:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@ciridae/ui": "https://ciridae-ui.ciridae.app/npm/ciridae-ui-0.2.0.tgz"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The shadcn registry remains available at https://ciridae-ui.ciridae.app/r/{name}.json.
|
|
16
|
+
|
|
17
|
+
Theme overrides should target the standard semantic variables after importing the package CSS:
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
@import "@ciridae/ui/styles.css";
|
|
21
|
+
|
|
22
|
+
:root {
|
|
23
|
+
--primary: oklch(0.42 0.08 245);
|
|
24
|
+
--primary-foreground: oklch(0.99 0 0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.dark {
|
|
28
|
+
--primary: oklch(0.78 0.07 245);
|
|
29
|
+
--primary-foreground: oklch(0.12 0.002 260);
|
|
30
|
+
}
|
|
31
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { Accordion, AccordionItem } from "@ciridae/ui/accordion";
|
|
3
|
+
type AgentProps = React.ComponentProps<"div">;
|
|
4
|
+
type AgentHeaderProps = React.ComponentProps<"div"> & {
|
|
5
|
+
status?: string;
|
|
6
|
+
};
|
|
7
|
+
type AgentContentProps = React.ComponentProps<"div">;
|
|
8
|
+
type AgentInstructionsProps = React.ComponentProps<"div">;
|
|
9
|
+
type AgentToolsProps = Omit<React.ComponentProps<typeof Accordion>, "collapsible" | "defaultValue" | "onValueChange" | "type" | "value"> & {
|
|
10
|
+
defaultValue?: string;
|
|
11
|
+
onValueChange?: (value: string) => void;
|
|
12
|
+
value?: string;
|
|
13
|
+
};
|
|
14
|
+
type AgentToolProps = Omit<React.ComponentProps<typeof AccordionItem>, "value"> & {
|
|
15
|
+
description?: string;
|
|
16
|
+
name: string;
|
|
17
|
+
value?: string;
|
|
18
|
+
};
|
|
19
|
+
type AgentOutputProps = React.ComponentProps<"div">;
|
|
20
|
+
declare function Agent({ className, ...props }: AgentProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function AgentHeader({ children, className, status, ...props }: AgentHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare function AgentContent({ className, ...props }: AgentContentProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
declare function AgentInstructions({ className, ...props }: AgentInstructionsProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare function AgentTools(props: AgentToolsProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
declare function AgentTool({ children, description, name, value, ...props }: AgentToolProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare function AgentOutput({ className, ...props }: AgentOutputProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export { Agent, AgentContent, AgentHeader, AgentInstructions, AgentOutput, AgentTool, AgentTools };
|
|
28
|
+
export type { AgentContentProps, AgentHeaderProps, AgentInstructionsProps, AgentOutputProps, AgentProps, AgentToolProps, AgentToolsProps, };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BotIcon } from "lucide-react";
|
|
3
|
+
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@ciridae/ui/accordion";
|
|
4
|
+
import { Badge } from "@ciridae/ui/badge";
|
|
5
|
+
import { cn } from "@ciridae/ui/utils";
|
|
6
|
+
function Agent({ className, ...props }) {
|
|
7
|
+
return (_jsx("div", { "data-slot": "agent", className: cn("grid gap-3 rounded-lg border bg-card p-4", className), ...props }));
|
|
8
|
+
}
|
|
9
|
+
function AgentHeader({ children, className, status, ...props }) {
|
|
10
|
+
return (_jsxs("div", { "data-slot": "agent-header", className: cn("flex min-w-0 items-start justify-between gap-3", className), ...props, children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(BotIcon, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground" }), _jsx("div", { className: "min-w-0", children: children })] }), status ? _jsx(Badge, { variant: "outline", children: status }) : null] }));
|
|
11
|
+
}
|
|
12
|
+
function AgentContent({ className, ...props }) {
|
|
13
|
+
return _jsx("div", { "data-slot": "agent-content", className: cn("grid gap-3", className), ...props });
|
|
14
|
+
}
|
|
15
|
+
function AgentInstructions({ className, ...props }) {
|
|
16
|
+
return (_jsx("div", { "data-slot": "agent-instructions", className: cn("rounded-md bg-muted/40 p-3 text-sm text-muted-foreground", className), ...props }));
|
|
17
|
+
}
|
|
18
|
+
function AgentTools(props) {
|
|
19
|
+
return _jsx(Accordion, { "data-slot": "agent-tools", type: "single", collapsible: true, ...props });
|
|
20
|
+
}
|
|
21
|
+
function AgentTool({ children, description, name, value, ...props }) {
|
|
22
|
+
return (_jsxs(AccordionItem, { "data-slot": "agent-tool", value: value ?? name, ...props, children: [_jsx(AccordionTrigger, { children: name }), _jsxs(AccordionContent, { children: [description ? _jsx("p", { className: "mb-2 text-sm text-muted-foreground", children: description }) : null, children] })] }));
|
|
23
|
+
}
|
|
24
|
+
function AgentOutput({ className, ...props }) {
|
|
25
|
+
return (_jsx("div", { "data-slot": "agent-output", className: cn("rounded-md border bg-muted/30 p-3 text-sm", className), ...props }));
|
|
26
|
+
}
|
|
27
|
+
export { Agent, AgentContent, AgentHeader, AgentInstructions, AgentOutput, AgentTool, AgentTools };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type AgenticAttachment, type AttachmentError } from "@ciridae/ui/attachments";
|
|
3
|
+
import { type EffortSelectorValue } from "@ciridae/ui/effort-selector";
|
|
4
|
+
import { type PromptInputDensity, type PromptInputMessage, type PromptInputSurface } from "@ciridae/ui/prompt-input";
|
|
5
|
+
import type { AgenticChatStatus } from "@ciridae/ui/types";
|
|
6
|
+
type AgentComposerModel = {
|
|
7
|
+
description?: string;
|
|
8
|
+
group?: string;
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
provider: string;
|
|
12
|
+
shortcut?: string;
|
|
13
|
+
src?: string;
|
|
14
|
+
};
|
|
15
|
+
type AgentComposerProps = Omit<React.ComponentProps<"div">, "onSubmit"> & {
|
|
16
|
+
accept?: string;
|
|
17
|
+
attachments?: AgenticAttachment[];
|
|
18
|
+
defaultAttachments?: AgenticAttachment[];
|
|
19
|
+
defaultValue?: string;
|
|
20
|
+
density?: PromptInputDensity;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
effort: EffortSelectorValue;
|
|
23
|
+
focusHint?: React.ReactNode;
|
|
24
|
+
globalDrop?: boolean;
|
|
25
|
+
maxAttachmentSizeMb?: number;
|
|
26
|
+
maxAttachments?: number;
|
|
27
|
+
model: string;
|
|
28
|
+
models: AgentComposerModel[];
|
|
29
|
+
multiple?: boolean;
|
|
30
|
+
onAttachmentError?: (error: AttachmentError) => void;
|
|
31
|
+
onAttachmentsChange?: (attachments: AgenticAttachment[]) => void;
|
|
32
|
+
onEffortChange: (value: EffortSelectorValue) => void;
|
|
33
|
+
onModelChange: (modelId: string) => void;
|
|
34
|
+
onStop?: () => void;
|
|
35
|
+
onSubmit?: (message: PromptInputMessage) => void | Promise<void>;
|
|
36
|
+
onValueChange?: (value: string) => void;
|
|
37
|
+
placeholder?: string;
|
|
38
|
+
status?: AgenticChatStatus;
|
|
39
|
+
surface?: PromptInputSurface;
|
|
40
|
+
value?: string;
|
|
41
|
+
};
|
|
42
|
+
declare function AgentComposer({ accept, attachments, className, defaultAttachments, defaultValue, density, disabled, effort, focusHint, globalDrop, maxAttachmentSizeMb, maxAttachments, model, models, multiple, onAttachmentError, onAttachmentsChange, onEffortChange, onModelChange, onStop, onSubmit, onValueChange, placeholder, status, surface, value, ...props }: AgentComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export { AgentComposer };
|
|
44
|
+
export type { AgentComposerModel, AgentComposerProps };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable complexity, max-lines, max-lines-per-function, react/jsx-max-depth */
|
|
3
|
+
import { CheckIcon, ChevronsUpDownIcon } from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { AttachmentList, useAttachments, } from "@ciridae/ui/attachments";
|
|
6
|
+
import { EffortSelector } from "@ciridae/ui/effort-selector";
|
|
7
|
+
import { ModelSelector, ModelSelectorContent, ModelSelectorEmpty, ModelSelectorGroup, ModelSelectorInput, ModelSelectorItem, ModelSelectorList, ModelSelectorLogo, ModelSelectorName, ModelSelectorShortcut, ModelSelectorTrigger, } from "@ciridae/ui/model-selector";
|
|
8
|
+
import { PromptInput, PromptInputActionAddAttachments, PromptInputBody, PromptInputDropOverlay, PromptInputFocusHint, PromptInputProvider, PromptInputSubmit, PromptInputTextarea, PromptInputTools, } from "@ciridae/ui/prompt-input";
|
|
9
|
+
import { Button } from "@ciridae/ui/button";
|
|
10
|
+
import { cn } from "@ciridae/ui/utils";
|
|
11
|
+
function AgentComposer({ accept, attachments, className, defaultAttachments, defaultValue, density = "comfortable", disabled, effort, focusHint, globalDrop, maxAttachmentSizeMb = 25, maxAttachments = 4, model, models, multiple = true, onAttachmentError, onAttachmentsChange, onEffortChange, onModelChange, onStop, onSubmit, onValueChange, placeholder = "Ask anything", status = "idle", surface = "glass", value, ...props }) {
|
|
12
|
+
const containerRef = React.useRef(null);
|
|
13
|
+
const [localValue, setLocalValue] = React.useState(defaultValue ?? "");
|
|
14
|
+
const resolvedValue = value ?? localValue;
|
|
15
|
+
const [isDragOver, dropHandlers] = useAgentComposerDropOverlay();
|
|
16
|
+
const selectedModel = getSelectedModel(models, model);
|
|
17
|
+
const hasText = Boolean(resolvedValue.trim());
|
|
18
|
+
const isRunning = status === "submitted" || status === "streaming";
|
|
19
|
+
useComposerFocusShortcut(containerRef);
|
|
20
|
+
return (_jsx("div", { ref: containerRef, className: cn("w-full", className), ...props, children: _jsx(PromptInputProvider, { accept: accept, attachments: attachments, defaultAttachments: defaultAttachments, maxAttachmentSizeMb: maxAttachmentSizeMb, maxAttachments: maxAttachments, multiple: multiple, onAttachmentError: onAttachmentError, onAttachmentsChange: onAttachmentsChange, onValueChange: (nextValue) => {
|
|
21
|
+
if (value === undefined)
|
|
22
|
+
setLocalValue(nextValue);
|
|
23
|
+
onValueChange?.(nextValue);
|
|
24
|
+
}, value: resolvedValue, children: _jsxs(PromptInput, { density: density, disabled: disabled, globalDrop: globalDrop, maxAttachments: maxAttachments, onSubmit: onSubmit, status: status, surface: surface, ...dropHandlers, children: [_jsxs(PromptInputBody, { children: [_jsx(AgentComposerPromptArea, { focusHint: focusHint, hasText: hasText, density: density, placeholder: placeholder }), _jsxs(PromptInputTools, { children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [_jsx(AgentComposerModelSelector, { disabled: disabled || isRunning, model: selectedModel, models: models, onModelChange: onModelChange }), _jsx(EffortSelector, { disabled: disabled || isRunning, value: effort, onValueChange: onEffortChange })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(PromptInputActionAddAttachments, { disabled: disabled || isRunning, tooltip: "Add files" }), _jsx(PromptInputSubmit, { disabled: disabled, onStop: onStop, status: status })] })] })] }), _jsx(PromptInputDropOverlay, { visible: isDragOver })] }) }) }));
|
|
25
|
+
}
|
|
26
|
+
function AgentComposerPromptArea({ focusHint, hasText, density, placeholder, }) {
|
|
27
|
+
const attachments = useAttachments();
|
|
28
|
+
const [attachmentOffset, setAttachmentOffset] = React.useState(0);
|
|
29
|
+
const attachmentRef = React.useRef(null);
|
|
30
|
+
const hasAttachments = attachments.files.length > 0;
|
|
31
|
+
React.useLayoutEffect(() => {
|
|
32
|
+
const node = attachmentRef.current;
|
|
33
|
+
if (!node || !hasAttachments) {
|
|
34
|
+
setAttachmentOffset(0);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const update = () => setAttachmentOffset(node.offsetWidth + 8);
|
|
38
|
+
update();
|
|
39
|
+
const observer = new ResizeObserver(update);
|
|
40
|
+
observer.observe(node);
|
|
41
|
+
return () => observer.disconnect();
|
|
42
|
+
}, [hasAttachments]);
|
|
43
|
+
return (_jsxs("div", { className: cn("relative px-3", density === "comfortable" ? "min-h-20 py-3" : "min-h-9 py-2"), children: [hasAttachments ? (_jsx(AttachmentList, { ref: attachmentRef, className: cn("absolute left-3 z-10 max-w-[min(18rem,calc(100%-7rem))] flex-nowrap overflow-hidden", density === "comfortable" ? "top-[0.8125rem]" : "top-[0.5625rem]", "[&_[data-slot=attachment]]:h-[1.375rem] [&_[data-slot=attachment]]:max-w-full [&_[data-slot=attachment]]:gap-1 [&_[data-slot=attachment]]:rounded-[0.25rem] [&_[data-slot=attachment]]:px-1 [&_[data-slot=attachment]]:pr-1.5", "[&_[data-slot=attachment-info]]:gap-0 [&_[data-slot=attachment-info]>span]:text-[0.75rem] [&_[data-slot=attachment-info]>span]:leading-none", "[&_[data-slot=attachment-preview]]:size-4 [&_[data-slot=attachment-status]]:size-3.5") })) : null, _jsx(PromptInputTextarea, { placeholder: hasAttachments ? "" : placeholder, style: attachmentOffset ? { textIndent: attachmentOffset } : undefined, className: cn("!w-full !px-0 !py-0 pr-32 text-base leading-relaxed md:text-sm", density === "comfortable" ? "!min-h-20" : "!min-h-6") }), _jsx(PromptInputFocusHint, { visible: !hasAttachments && !hasText, children: focusHint })] }));
|
|
44
|
+
}
|
|
45
|
+
function AgentComposerModelSelector({ disabled, model, models, onModelChange, }) {
|
|
46
|
+
return (_jsxs(ModelSelector, { children: [_jsx(ModelSelectorTrigger, { asChild: true, children: _jsxs(Button, { className: "h-7 max-w-44 justify-start gap-1.5 rounded-md px-1.5 text-xs", disabled: disabled, type: "button", variant: "ghost", children: [_jsx(ModelSelectorLogo, { provider: model.provider, src: model.src }), _jsx(ModelSelectorName, { className: "max-w-32 flex-none", children: model.label }), _jsx(ChevronsUpDownIcon, { className: "size-3.5 shrink-0 text-muted-foreground" })] }) }), _jsxs(ModelSelectorContent, { title: "Select model", children: [_jsx(ModelSelectorInput, { placeholder: "Search models..." }), _jsxs(ModelSelectorList, { children: [_jsx(ModelSelectorEmpty, { children: "No models found." }), groupModels(models).map(([group, groupModels]) => (_jsx(ModelSelectorGroup, { heading: group, children: groupModels.map((option) => (_jsxs(ModelSelectorItem, { value: `${option.label} ${option.id} ${option.provider}`, onSelect: () => onModelChange(option.id), children: [_jsx(ModelSelectorLogo, { className: "size-8 rounded-md p-1", provider: option.provider, src: option.src }), _jsxs(ModelSelectorName, { children: [_jsx("span", { className: "block truncate", children: option.label }), option.description ? (_jsx("span", { className: "block truncate text-xs text-muted-foreground", children: option.description })) : null] }), option.shortcut ? (_jsx(ModelSelectorShortcut, { children: option.shortcut })) : null, model.id === option.id ? _jsx(CheckIcon, {}) : null] }, option.id))) }, group)))] })] })] }));
|
|
47
|
+
}
|
|
48
|
+
function useComposerFocusShortcut(containerRef) {
|
|
49
|
+
React.useEffect(() => {
|
|
50
|
+
const handleKeyDown = (event) => {
|
|
51
|
+
if (!(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== "l")
|
|
52
|
+
return;
|
|
53
|
+
const textarea = containerRef.current?.querySelector('[data-slot="prompt-input-textarea"]');
|
|
54
|
+
if (!textarea)
|
|
55
|
+
return;
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
textarea.focus();
|
|
58
|
+
};
|
|
59
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
60
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
61
|
+
}, [containerRef]);
|
|
62
|
+
}
|
|
63
|
+
function useAgentComposerDropOverlay() {
|
|
64
|
+
const [dragDepth, setDragDepth] = React.useState(0);
|
|
65
|
+
const isDragOver = dragDepth > 0;
|
|
66
|
+
const handleDragEnter = React.useCallback((event) => {
|
|
67
|
+
if (!event.dataTransfer.types.includes("Files"))
|
|
68
|
+
return;
|
|
69
|
+
setDragDepth((depth) => depth + 1);
|
|
70
|
+
}, []);
|
|
71
|
+
const handleDragLeave = React.useCallback((event) => {
|
|
72
|
+
if (!event.dataTransfer.types.includes("Files"))
|
|
73
|
+
return;
|
|
74
|
+
setDragDepth((depth) => Math.max(0, depth - 1));
|
|
75
|
+
}, []);
|
|
76
|
+
const handleDrop = React.useCallback(() => setDragDepth(0), []);
|
|
77
|
+
const handleDragEnd = React.useCallback(() => setDragDepth(0), []);
|
|
78
|
+
return [
|
|
79
|
+
isDragOver,
|
|
80
|
+
{
|
|
81
|
+
onDragEnd: handleDragEnd,
|
|
82
|
+
onDragEnter: handleDragEnter,
|
|
83
|
+
onDragLeave: handleDragLeave,
|
|
84
|
+
onDrop: handleDrop,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
function getSelectedModel(models, modelId) {
|
|
89
|
+
return models.find((model) => model.id === modelId) ?? models[0] ?? fallbackModel;
|
|
90
|
+
}
|
|
91
|
+
function groupModels(models) {
|
|
92
|
+
const groups = new Map();
|
|
93
|
+
for (const model of models) {
|
|
94
|
+
const group = model.group ?? "Models";
|
|
95
|
+
groups.set(group, [...(groups.get(group) ?? []), model]);
|
|
96
|
+
}
|
|
97
|
+
return Array.from(groups.entries());
|
|
98
|
+
}
|
|
99
|
+
const fallbackModel = {
|
|
100
|
+
id: "model",
|
|
101
|
+
label: "Model",
|
|
102
|
+
provider: "openai",
|
|
103
|
+
};
|
|
104
|
+
export { AgentComposer };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { AgenticContextUsage } from "@ciridae/ui/types";
|
|
3
|
+
import { Button } from "@ciridae/ui/button";
|
|
4
|
+
import { HoverCard, HoverCardContent } from "@ciridae/ui/hover-card";
|
|
5
|
+
type AgentContextProps = React.ComponentProps<typeof HoverCard> & AgenticContextUsage;
|
|
6
|
+
type AgentContextTriggerProps = React.ComponentProps<typeof Button>;
|
|
7
|
+
type AgentContextContentProps = React.ComponentProps<typeof HoverCardContent>;
|
|
8
|
+
type AgentContextContentHeaderProps = React.ComponentProps<"div">;
|
|
9
|
+
type AgentContextContentBodyProps = React.ComponentProps<"div">;
|
|
10
|
+
type AgentContextContentFooterProps = React.ComponentProps<"div">;
|
|
11
|
+
type AgentContextUsageRowProps = React.ComponentProps<"div"> & {
|
|
12
|
+
costText?: string;
|
|
13
|
+
label: string;
|
|
14
|
+
tokens?: number;
|
|
15
|
+
};
|
|
16
|
+
declare function AgentContext({ cacheCostText, cachedInputTokens, children, inputCostText, inputTokens, maxTokens, outputCostText, outputTokens, reasoningCostText, reasoningTokens, totalCostText, usedTokens, ...props }: AgentContextProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function AgentContextTrigger({ children, ...props }: AgentContextTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare function AgentContextContent({ className, ...props }: AgentContextContentProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function AgentContextContentHeader({ children, className, ...props }: AgentContextContentHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function AgentContextContentBody({ className, ...props }: AgentContextContentBodyProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function AgentContextContentFooter({ children, className, ...props }: AgentContextContentFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare function AgentContextUsageRow({ className, costText, label, tokens, ...props }: AgentContextUsageRowProps): import("react/jsx-runtime").JSX.Element | null;
|
|
23
|
+
declare function AgentContextInputUsage(props: Omit<AgentContextUsageRowProps, "label" | "tokens">): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare function AgentContextOutputUsage(props: Omit<AgentContextUsageRowProps, "label" | "tokens">): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
declare function AgentContextReasoningUsage(props: Omit<AgentContextUsageRowProps, "label" | "tokens">): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare function AgentContextCacheUsage(props: Omit<AgentContextUsageRowProps, "label" | "tokens">): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export { AgentContext, AgentContextCacheUsage, AgentContextContent, AgentContextContentBody, AgentContextContentFooter, AgentContextContentHeader, AgentContextInputUsage, AgentContextOutputUsage, AgentContextReasoningUsage, AgentContextTrigger, AgentContextUsageRow, };
|
|
28
|
+
export type { AgentContextContentBodyProps, AgentContextContentFooterProps, AgentContextContentHeaderProps, AgentContextContentProps, AgentContextProps, AgentContextTriggerProps, AgentContextUsageRowProps, };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo } from "react";
|
|
3
|
+
import { Button } from "@ciridae/ui/button";
|
|
4
|
+
import { HoverCard, HoverCardContent, HoverCardTrigger } from "@ciridae/ui/hover-card";
|
|
5
|
+
import { Progress } from "@ciridae/ui/progress";
|
|
6
|
+
import { cn } from "@ciridae/ui/utils";
|
|
7
|
+
const PERCENT_MAX = 100;
|
|
8
|
+
const AgentContextContext = createContext(null);
|
|
9
|
+
function useAgentContext() {
|
|
10
|
+
const context = useContext(AgentContextContext);
|
|
11
|
+
if (!context)
|
|
12
|
+
throw new Error("AgentContext components must be used within AgentContext");
|
|
13
|
+
return context;
|
|
14
|
+
}
|
|
15
|
+
function AgentContext({ cacheCostText, cachedInputTokens, children, inputCostText, inputTokens, maxTokens, outputCostText, outputTokens, reasoningCostText, reasoningTokens, totalCostText, usedTokens, ...props }) {
|
|
16
|
+
const { closeDelay = 0, openDelay = 0, ...hoverCardProps } = props;
|
|
17
|
+
const contextValue = useMemo(() => ({
|
|
18
|
+
cacheCostText,
|
|
19
|
+
cachedInputTokens,
|
|
20
|
+
inputCostText,
|
|
21
|
+
inputTokens,
|
|
22
|
+
maxTokens,
|
|
23
|
+
outputCostText,
|
|
24
|
+
outputTokens,
|
|
25
|
+
reasoningCostText,
|
|
26
|
+
reasoningTokens,
|
|
27
|
+
totalCostText,
|
|
28
|
+
usedTokens,
|
|
29
|
+
}), [
|
|
30
|
+
cacheCostText,
|
|
31
|
+
cachedInputTokens,
|
|
32
|
+
inputCostText,
|
|
33
|
+
inputTokens,
|
|
34
|
+
maxTokens,
|
|
35
|
+
outputCostText,
|
|
36
|
+
outputTokens,
|
|
37
|
+
reasoningCostText,
|
|
38
|
+
reasoningTokens,
|
|
39
|
+
totalCostText,
|
|
40
|
+
usedTokens,
|
|
41
|
+
]);
|
|
42
|
+
return (_jsx(AgentContextContext.Provider, { value: contextValue, children: _jsx(HoverCard, { closeDelay: closeDelay, openDelay: openDelay, ...hoverCardProps, children: children }) }));
|
|
43
|
+
}
|
|
44
|
+
function AgentContextTrigger({ children, ...props }) {
|
|
45
|
+
const { maxTokens, usedTokens } = useAgentContext();
|
|
46
|
+
const usedPercent = getUsagePercent(usedTokens, maxTokens);
|
|
47
|
+
return (_jsx(HoverCardTrigger, { asChild: true, children: children ? (_jsx(Button, { "data-slot": "agent-context-trigger", type: "button", variant: "ghost", ...props, asChild: true, children: children })) : (_jsxs(Button, { "data-slot": "agent-context-trigger", type: "button", variant: "ghost", ...props, children: [_jsx("span", { className: "font-medium text-muted-foreground", children: formatPercent(usedPercent) }), _jsx(AgentContextIcon, { usedPercent: usedPercent })] })) }));
|
|
48
|
+
}
|
|
49
|
+
function AgentContextIcon({ usedPercent }) {
|
|
50
|
+
const radius = 10;
|
|
51
|
+
const circumference = 2 * Math.PI * radius;
|
|
52
|
+
const dashOffset = circumference * (1 - usedPercent);
|
|
53
|
+
return (_jsxs("svg", { "aria-label": "Context usage", className: "size-5", role: "img", viewBox: "0 0 24 24", children: [_jsx("circle", { cx: "12", cy: "12", fill: "none", opacity: "0.25", r: radius, stroke: "currentColor", strokeWidth: "2" }), _jsx("circle", { cx: "12", cy: "12", fill: "none", opacity: "0.75", r: radius, stroke: "currentColor", strokeDasharray: `${circumference} ${circumference}`, strokeDashoffset: dashOffset, strokeLinecap: "round", strokeWidth: "2", style: { transform: "rotate(-90deg)", transformOrigin: "center" } })] }));
|
|
54
|
+
}
|
|
55
|
+
function AgentContextContent({ className, ...props }) {
|
|
56
|
+
return (_jsx(HoverCardContent, { "data-slot": "agent-context-content", className: cn("w-72 divide-y overflow-hidden p-0", className), ...props }));
|
|
57
|
+
}
|
|
58
|
+
function AgentContextContentHeader({ children, className, ...props }) {
|
|
59
|
+
const { maxTokens, usedTokens } = useAgentContext();
|
|
60
|
+
const usedPercent = getUsagePercent(usedTokens, maxTokens);
|
|
61
|
+
return (_jsx("div", { "data-slot": "agent-context-content-header", className: cn("grid gap-2 p-3", className), ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-3 text-xs", children: [_jsx("span", { children: formatPercent(usedPercent) }), _jsxs("span", { className: "font-mono text-muted-foreground", children: [formatCompact(usedTokens), " / ", formatCompact(maxTokens)] })] }), _jsx(Progress, { value: usedPercent * PERCENT_MAX })] })) }));
|
|
62
|
+
}
|
|
63
|
+
function AgentContextContentBody({ className, ...props }) {
|
|
64
|
+
return (_jsx("div", { "data-slot": "agent-context-content-body", className: cn("grid gap-2 p-3", className), ...props }));
|
|
65
|
+
}
|
|
66
|
+
function AgentContextContentFooter({ children, className, ...props }) {
|
|
67
|
+
const { totalCostText } = useAgentContext();
|
|
68
|
+
return (_jsx("div", { "data-slot": "agent-context-content-footer", className: cn("flex items-center justify-between gap-3 bg-secondary p-3 text-xs", className), ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "Total cost" }), _jsx("span", { children: totalCostText ?? "Provided by host" })] })) }));
|
|
69
|
+
}
|
|
70
|
+
function AgentContextUsageRow({ className, costText, label, tokens, ...props }) {
|
|
71
|
+
if (tokens === undefined)
|
|
72
|
+
return null;
|
|
73
|
+
return (_jsxs("div", { "data-slot": "agent-context-usage-row", className: cn("flex items-center justify-between gap-3 text-xs", className), ...props, children: [_jsx("span", { className: "text-muted-foreground", children: label }), _jsxs("span", { className: "font-mono", children: [formatCompact(tokens), costText ? _jsx("span", { className: "ml-2 font-sans text-muted-foreground", children: costText }) : null] })] }));
|
|
74
|
+
}
|
|
75
|
+
function AgentContextInputUsage(props) {
|
|
76
|
+
const { inputCostText, inputTokens } = useAgentContext();
|
|
77
|
+
return (_jsx(AgentContextUsageRow, { costText: inputCostText, label: "Input", tokens: inputTokens, ...props }));
|
|
78
|
+
}
|
|
79
|
+
function AgentContextOutputUsage(props) {
|
|
80
|
+
const { outputCostText, outputTokens } = useAgentContext();
|
|
81
|
+
return (_jsx(AgentContextUsageRow, { costText: outputCostText, label: "Output", tokens: outputTokens, ...props }));
|
|
82
|
+
}
|
|
83
|
+
function AgentContextReasoningUsage(props) {
|
|
84
|
+
const { reasoningCostText, reasoningTokens } = useAgentContext();
|
|
85
|
+
return (_jsx(AgentContextUsageRow, { costText: reasoningCostText, label: "Reasoning", tokens: reasoningTokens, ...props }));
|
|
86
|
+
}
|
|
87
|
+
function AgentContextCacheUsage(props) {
|
|
88
|
+
const { cacheCostText, cachedInputTokens } = useAgentContext();
|
|
89
|
+
return (_jsx(AgentContextUsageRow, { costText: cacheCostText, label: "Cache", tokens: cachedInputTokens, ...props }));
|
|
90
|
+
}
|
|
91
|
+
function getUsagePercent(usedTokens, maxTokens) {
|
|
92
|
+
if (maxTokens <= 0)
|
|
93
|
+
return 0;
|
|
94
|
+
return Math.min(1, Math.max(0, usedTokens / maxTokens));
|
|
95
|
+
}
|
|
96
|
+
function formatPercent(value) {
|
|
97
|
+
return new Intl.NumberFormat("en-US", { maximumFractionDigits: 1, style: "percent" }).format(value);
|
|
98
|
+
}
|
|
99
|
+
function formatCompact(value) {
|
|
100
|
+
return new Intl.NumberFormat("en-US", { notation: "compact" }).format(value);
|
|
101
|
+
}
|
|
102
|
+
export { AgentContext, AgentContextCacheUsage, AgentContextContent, AgentContextContentBody, AgentContextContentFooter, AgentContextContentHeader, AgentContextInputUsage, AgentContextOutputUsage, AgentContextReasoningUsage, AgentContextTrigger, AgentContextUsageRow, };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@ciridae/ui/card";
|
|
3
|
+
import { Collapsible, CollapsibleTrigger } from "@ciridae/ui/collapsible";
|
|
4
|
+
type AgentPlanProps = React.ComponentProps<typeof Collapsible> & {
|
|
5
|
+
isStreaming?: boolean;
|
|
6
|
+
};
|
|
7
|
+
type AgentPlanHeaderProps = React.ComponentProps<typeof CardHeader>;
|
|
8
|
+
type AgentPlanTitleProps = Omit<React.ComponentProps<typeof CardTitle>, "children"> & {
|
|
9
|
+
children: string;
|
|
10
|
+
};
|
|
11
|
+
type AgentPlanDescriptionProps = Omit<React.ComponentProps<typeof CardDescription>, "children"> & {
|
|
12
|
+
children: string;
|
|
13
|
+
};
|
|
14
|
+
type AgentPlanActionProps = React.ComponentProps<typeof CardAction>;
|
|
15
|
+
type AgentPlanContentProps = React.ComponentProps<typeof CardContent>;
|
|
16
|
+
type AgentPlanFooterProps = React.ComponentProps<typeof CardFooter>;
|
|
17
|
+
type AgentPlanTriggerProps = React.ComponentProps<typeof CollapsibleTrigger>;
|
|
18
|
+
declare function AgentPlan({ children, className, isStreaming, ...props }: AgentPlanProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function AgentPlanHeader({ className, ...props }: AgentPlanHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function AgentPlanTitle({ children, className, ...props }: AgentPlanTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function AgentPlanDescription({ children, className, ...props }: AgentPlanDescriptionProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare function AgentPlanAction(props: AgentPlanActionProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
declare function AgentPlanContent(props: AgentPlanContentProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
declare function AgentPlanFooter(props: AgentPlanFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
declare function AgentPlanTrigger({ className, type, ...props }: AgentPlanTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export { AgentPlan, AgentPlanAction, AgentPlanContent, AgentPlanDescription, AgentPlanFooter, AgentPlanHeader, AgentPlanTitle, AgentPlanTrigger, };
|
|
27
|
+
export type { AgentPlanActionProps, AgentPlanContentProps, AgentPlanDescriptionProps, AgentPlanFooterProps, AgentPlanHeaderProps, AgentPlanProps, AgentPlanTitleProps, AgentPlanTriggerProps, };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronsUpDownIcon } from "lucide-react";
|
|
3
|
+
import { createContext, useContext, useMemo } from "react";
|
|
4
|
+
import { Shimmer } from "@ciridae/ui/shimmer";
|
|
5
|
+
import { Button } from "@ciridae/ui/button";
|
|
6
|
+
import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@ciridae/ui/card";
|
|
7
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@ciridae/ui/collapsible";
|
|
8
|
+
import { cn } from "@ciridae/ui/utils";
|
|
9
|
+
const AgentPlanContext = createContext(null);
|
|
10
|
+
function useAgentPlan() {
|
|
11
|
+
const context = useContext(AgentPlanContext);
|
|
12
|
+
if (!context)
|
|
13
|
+
throw new Error("AgentPlan components must be used within AgentPlan");
|
|
14
|
+
return context;
|
|
15
|
+
}
|
|
16
|
+
function AgentPlan({ children, className, isStreaming = false, ...props }) {
|
|
17
|
+
const contextValue = useMemo(() => ({ isStreaming }), [isStreaming]);
|
|
18
|
+
return (_jsx(AgentPlanContext.Provider, { value: contextValue, children: _jsx(Collapsible, { "data-slot": "agent-plan", className: "w-full min-w-0", ...props, children: _jsx(Card, { className: cn("w-full min-w-0 shadow-none", className), children: children }) }) }));
|
|
19
|
+
}
|
|
20
|
+
function AgentPlanHeader({ className, ...props }) {
|
|
21
|
+
return (_jsx(CardHeader, { "data-slot": "agent-plan-header", className: cn("relative block min-w-0 space-y-2 pr-[calc(var(--spacing)*11)]", className), ...props }));
|
|
22
|
+
}
|
|
23
|
+
function AgentPlanTitle({ children, className, ...props }) {
|
|
24
|
+
const { isStreaming } = useAgentPlan();
|
|
25
|
+
return (_jsx(CardTitle, { "data-slot": "agent-plan-title", className: cn("min-w-0 text-pretty", className), ...props, children: isStreaming ? _jsx(Shimmer, { children: children }) : children }));
|
|
26
|
+
}
|
|
27
|
+
function AgentPlanDescription({ children, className, ...props }) {
|
|
28
|
+
const { isStreaming } = useAgentPlan();
|
|
29
|
+
return (_jsx(CardDescription, { "data-slot": "agent-plan-description", className: cn("text-balance", className), ...props, children: isStreaming ? _jsx(Shimmer, { children: children }) : children }));
|
|
30
|
+
}
|
|
31
|
+
function AgentPlanAction(props) {
|
|
32
|
+
return (_jsx(CardAction, { "data-slot": "agent-plan-action", ...props, className: cn("absolute top-0 right-(--panel-padding)", props.className) }));
|
|
33
|
+
}
|
|
34
|
+
function AgentPlanContent(props) {
|
|
35
|
+
return (_jsx(CollapsibleContent, { asChild: true, children: _jsx(CardContent, { "data-slot": "agent-plan-content", ...props }) }));
|
|
36
|
+
}
|
|
37
|
+
function AgentPlanFooter(props) {
|
|
38
|
+
return _jsx(CardFooter, { "data-slot": "agent-plan-footer", ...props });
|
|
39
|
+
}
|
|
40
|
+
function AgentPlanTrigger({ className, type = "button", ...props }) {
|
|
41
|
+
return (_jsx(CollapsibleTrigger, { asChild: true, children: _jsxs(Button, { "data-slot": "agent-plan-trigger", className: cn("size-8", className), size: "icon", variant: "ghost", ...props, type: type, children: [_jsx(ChevronsUpDownIcon, { "aria-hidden": "true", className: "size-4" }), _jsx("span", { className: "sr-only", children: "Toggle plan" })] }) }));
|
|
42
|
+
}
|
|
43
|
+
export { AgentPlan, AgentPlanAction, AgentPlanContent, AgentPlanDescription, AgentPlanFooter, AgentPlanHeader, AgentPlanTitle, AgentPlanTrigger, };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { Button } from "@ciridae/ui/button";
|
|
3
|
+
import { Collapsible, CollapsibleContent } from "@ciridae/ui/collapsible";
|
|
4
|
+
import { ScrollArea } from "@ciridae/ui/scroll-area";
|
|
5
|
+
type AgentQueueProps = React.ComponentProps<"div">;
|
|
6
|
+
type AgentQueueSectionProps = React.ComponentProps<typeof Collapsible>;
|
|
7
|
+
type AgentQueueSectionTriggerProps = React.ComponentProps<"button">;
|
|
8
|
+
type AgentQueueSectionLabelProps = React.ComponentProps<"span"> & {
|
|
9
|
+
count?: number;
|
|
10
|
+
icon?: React.ReactNode;
|
|
11
|
+
label: string;
|
|
12
|
+
};
|
|
13
|
+
type AgentQueueSectionContentProps = React.ComponentProps<typeof CollapsibleContent>;
|
|
14
|
+
type AgentQueueListProps = React.ComponentProps<typeof ScrollArea>;
|
|
15
|
+
type AgentQueueItemProps = React.ComponentProps<"li">;
|
|
16
|
+
type AgentQueueItemIndicatorProps = React.ComponentProps<"span"> & {
|
|
17
|
+
completed?: boolean;
|
|
18
|
+
};
|
|
19
|
+
type AgentQueueItemContentProps = React.ComponentProps<"span"> & {
|
|
20
|
+
completed?: boolean;
|
|
21
|
+
};
|
|
22
|
+
type AgentQueueItemDescriptionProps = React.ComponentProps<"div"> & {
|
|
23
|
+
completed?: boolean;
|
|
24
|
+
};
|
|
25
|
+
type AgentQueueItemActionsProps = React.ComponentProps<"div">;
|
|
26
|
+
type AgentQueueItemActionProps = Omit<React.ComponentProps<typeof Button>, "size" | "variant">;
|
|
27
|
+
type AgentQueueItemAttachmentProps = React.ComponentProps<"div">;
|
|
28
|
+
type AgentQueueItemImageProps = React.ComponentProps<"img">;
|
|
29
|
+
type AgentQueueItemFileProps = React.ComponentProps<"span">;
|
|
30
|
+
declare function AgentQueue({ className, ...props }: AgentQueueProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
declare function AgentQueueSection({ className, defaultOpen, ...props }: AgentQueueSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
declare function AgentQueueSectionTrigger({ children, className, ...props }: AgentQueueSectionTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
declare function AgentQueueSectionLabel({ className, count, icon, label, ...props }: AgentQueueSectionLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
declare function AgentQueueSectionContent({ className, ...props }: AgentQueueSectionContentProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
declare function AgentQueueList({ children, className, ...props }: AgentQueueListProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
declare function AgentQueueItem({ className, ...props }: AgentQueueItemProps): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
declare function AgentQueueItemIndicator({ className, completed, ...props }: AgentQueueItemIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
declare function AgentQueueItemContent({ className, completed, ...props }: AgentQueueItemContentProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
declare function AgentQueueItemDescription({ className, completed, ...props }: AgentQueueItemDescriptionProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare function AgentQueueItemActions({ className, ...props }: AgentQueueItemActionsProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
declare function AgentQueueItemAction({ className, type, ...props }: AgentQueueItemActionProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
declare function AgentQueueItemAttachment({ className, ...props }: AgentQueueItemAttachmentProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
declare function AgentQueueItemImage({ alt, className, height, width, ...props }: AgentQueueItemImageProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
declare function AgentQueueItemFile({ children, className, ...props }: AgentQueueItemFileProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export { AgentQueue, AgentQueueItem, AgentQueueItemAction, AgentQueueItemActions, AgentQueueItemAttachment, AgentQueueItemContent, AgentQueueItemDescription, AgentQueueItemFile, AgentQueueItemImage, AgentQueueItemIndicator, AgentQueueList, AgentQueueSection, AgentQueueSectionContent, AgentQueueSectionLabel, AgentQueueSectionTrigger, };
|
|
46
|
+
export type { AgentQueueItemActionProps, AgentQueueItemActionsProps, AgentQueueItemAttachmentProps, AgentQueueItemContentProps, AgentQueueItemDescriptionProps, AgentQueueItemFileProps, AgentQueueItemImageProps, AgentQueueItemIndicatorProps, AgentQueueItemProps, AgentQueueListProps, AgentQueueProps, AgentQueueSectionContentProps, AgentQueueSectionLabelProps, AgentQueueSectionProps, AgentQueueSectionTriggerProps, };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CheckIcon, ChevronDownIcon, CircleIcon, PaperclipIcon } from "lucide-react";
|
|
3
|
+
import { Button } from "@ciridae/ui/button";
|
|
4
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@ciridae/ui/collapsible";
|
|
5
|
+
import { ScrollArea } from "@ciridae/ui/scroll-area";
|
|
6
|
+
import { cn } from "@ciridae/ui/utils";
|
|
7
|
+
function AgentQueue({ className, ...props }) {
|
|
8
|
+
return (_jsx("div", { "data-slot": "agent-queue", className: cn("grid gap-2 rounded-lg border bg-card p-2 text-card-foreground", className), ...props }));
|
|
9
|
+
}
|
|
10
|
+
function AgentQueueSection({ className, defaultOpen = true, ...props }) {
|
|
11
|
+
return _jsx(Collapsible, { className: className, defaultOpen: defaultOpen, ...props });
|
|
12
|
+
}
|
|
13
|
+
function AgentQueueSectionTrigger({ children, className, ...props }) {
|
|
14
|
+
return (_jsx(CollapsibleTrigger, { asChild: true, children: _jsx("button", { "data-slot": "agent-queue-section-trigger", className: cn("group flex w-full items-center justify-between rounded-md bg-muted/45 px-3 py-2 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring focus-visible:outline-none", className), type: "button", ...props, children: children }) }));
|
|
15
|
+
}
|
|
16
|
+
function AgentQueueSectionLabel({ className, count, icon, label, ...props }) {
|
|
17
|
+
return (_jsxs("span", { "data-slot": "agent-queue-section-label", className: cn("flex items-center gap-2", className), ...props, children: [_jsx(ChevronDownIcon, { className: "size-4 transition-transform group-data-[state=closed]:-rotate-90" }), icon, _jsxs("span", { children: [count === undefined ? null : `${count} `, label] })] }));
|
|
18
|
+
}
|
|
19
|
+
function AgentQueueSectionContent({ className, ...props }) {
|
|
20
|
+
return (_jsx(CollapsibleContent, { "data-slot": "agent-queue-section-content", className: className, ...props }));
|
|
21
|
+
}
|
|
22
|
+
function AgentQueueList({ children, className, ...props }) {
|
|
23
|
+
return (_jsx(ScrollArea, { "data-slot": "agent-queue-list", className: cn("mt-2 max-h-48", className), ...props, children: _jsx("ul", { className: "grid gap-1 pr-3", children: children }) }));
|
|
24
|
+
}
|
|
25
|
+
function AgentQueueItem({ className, ...props }) {
|
|
26
|
+
return (_jsx("li", { "data-slot": "agent-queue-item", className: cn("group grid gap-1 rounded-md px-2 py-1.5 text-sm transition-colors hover:bg-muted/60", className), ...props }));
|
|
27
|
+
}
|
|
28
|
+
function AgentQueueItemIndicator({ className, completed = false, ...props }) {
|
|
29
|
+
const Icon = completed ? CheckIcon : CircleIcon;
|
|
30
|
+
return (_jsx("span", { "data-slot": "agent-queue-item-indicator", className: cn("mt-0.5 text-muted-foreground", className), ...props, children: _jsx(Icon, { "aria-hidden": "true", className: "size-3.5" }) }));
|
|
31
|
+
}
|
|
32
|
+
function AgentQueueItemContent({ className, completed = false, ...props }) {
|
|
33
|
+
return (_jsx("span", { "data-slot": "agent-queue-item-content", className: cn("min-w-0 flex-1 truncate", completed ? "text-muted-foreground line-through" : "text-foreground", className), ...props }));
|
|
34
|
+
}
|
|
35
|
+
function AgentQueueItemDescription({ className, completed = false, ...props }) {
|
|
36
|
+
return (_jsx("div", { "data-slot": "agent-queue-item-description", className: cn("ml-6 text-xs", completed ? "text-muted-foreground/60 line-through" : "text-muted-foreground", className), ...props }));
|
|
37
|
+
}
|
|
38
|
+
function AgentQueueItemActions({ className, ...props }) {
|
|
39
|
+
return (_jsx("div", { "data-slot": "agent-queue-item-actions", className: cn("flex gap-1", className), ...props }));
|
|
40
|
+
}
|
|
41
|
+
function AgentQueueItemAction({ className, type = "button", ...props }) {
|
|
42
|
+
return (_jsx(Button, { className: cn("size-7 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100", className), size: "icon-sm", type: type, variant: "ghost", ...props }));
|
|
43
|
+
}
|
|
44
|
+
function AgentQueueItemAttachment({ className, ...props }) {
|
|
45
|
+
return (_jsx("div", { "data-slot": "agent-queue-item-attachment", className: cn("ml-6 flex flex-wrap gap-2", className), ...props }));
|
|
46
|
+
}
|
|
47
|
+
function AgentQueueItemImage({ alt = "", className, height = 32, width = 32, ...props }) {
|
|
48
|
+
return (_jsx("img", { alt: alt, className: cn("size-8 rounded border object-cover", className), height: height, width: width, ...props }));
|
|
49
|
+
}
|
|
50
|
+
function AgentQueueItemFile({ children, className, ...props }) {
|
|
51
|
+
return (_jsxs("span", { className: cn("inline-flex max-w-32 items-center gap-1 rounded border bg-muted px-2 py-1 text-xs", className), ...props, children: [_jsx(PaperclipIcon, { "aria-hidden": "true", className: "size-3 shrink-0" }), _jsx("span", { className: "truncate", children: children })] }));
|
|
52
|
+
}
|
|
53
|
+
export { AgentQueue, AgentQueueItem, AgentQueueItemAction, AgentQueueItemActions, AgentQueueItemAttachment, AgentQueueItemContent, AgentQueueItemDescription, AgentQueueItemFile, AgentQueueItemImage, AgentQueueItemIndicator, AgentQueueList, AgentQueueSection, AgentQueueSectionContent, AgentQueueSectionLabel, AgentQueueSectionTrigger, };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@ciridae/ui/collapsible";
|
|
3
|
+
type AgentTaskProps = React.ComponentProps<typeof Collapsible>;
|
|
4
|
+
type AgentTaskTriggerProps = React.ComponentProps<typeof CollapsibleTrigger> & {
|
|
5
|
+
title: string;
|
|
6
|
+
};
|
|
7
|
+
type AgentTaskContentProps = React.ComponentProps<typeof CollapsibleContent>;
|
|
8
|
+
type AgentTaskItemProps = React.ComponentProps<"div">;
|
|
9
|
+
type AgentTaskItemFileProps = React.ComponentProps<"div">;
|
|
10
|
+
declare function AgentTask({ className, defaultOpen, ...props }: AgentTaskProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare function AgentTaskTrigger({ children, className, title, ...props }: AgentTaskTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare function AgentTaskContent({ children, className, ...props }: AgentTaskContentProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare function AgentTaskItem({ className, ...props }: AgentTaskItemProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare function AgentTaskItemFile({ children, className, ...props }: AgentTaskItemFileProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export { AgentTask, AgentTaskContent, AgentTaskItem, AgentTaskItemFile, AgentTaskTrigger };
|
|
16
|
+
export type { AgentTaskContentProps, AgentTaskItemFileProps, AgentTaskItemProps, AgentTaskProps, AgentTaskTriggerProps, };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDownIcon, FileTextIcon, SearchIcon } from "lucide-react";
|
|
3
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@ciridae/ui/collapsible";
|
|
4
|
+
import { cn } from "@ciridae/ui/utils";
|
|
5
|
+
function AgentTask({ className, defaultOpen = true, ...props }) {
|
|
6
|
+
return (_jsx(Collapsible, { "data-slot": "agent-task", className: cn("rounded-md", className), defaultOpen: defaultOpen, ...props }));
|
|
7
|
+
}
|
|
8
|
+
function AgentTaskTrigger({ children, className, title, ...props }) {
|
|
9
|
+
return (_jsx(CollapsibleTrigger, { "data-slot": "agent-task-trigger", className: cn("group flex w-full items-center gap-2 rounded-md py-1 text-left text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring focus-visible:outline-none", className), ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsx(SearchIcon, { "aria-hidden": "true", className: "size-4 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: title }), _jsx(ChevronDownIcon, { "aria-hidden": "true", className: "size-4 shrink-0 transition-transform group-data-[state=open]:rotate-180" })] })) }));
|
|
10
|
+
}
|
|
11
|
+
function AgentTaskContent({ children, className, ...props }) {
|
|
12
|
+
return (_jsx(CollapsibleContent, { "data-slot": "agent-task-content", className: cn("mt-2 border-l-2 border-border pl-4", className), ...props, children: _jsx("div", { className: "grid gap-2", children: children }) }));
|
|
13
|
+
}
|
|
14
|
+
function AgentTaskItem({ className, ...props }) {
|
|
15
|
+
return (_jsx("div", { "data-slot": "agent-task-item", className: cn("text-sm text-muted-foreground", className), ...props }));
|
|
16
|
+
}
|
|
17
|
+
function AgentTaskItemFile({ children, className, ...props }) {
|
|
18
|
+
return (_jsxs("div", { "data-slot": "agent-task-item-file", className: cn("inline-flex max-w-full items-center gap-1 rounded-md border bg-secondary px-2 py-0.5 text-xs text-secondary-foreground", className), ...props, children: [_jsx(FileTextIcon, { "aria-hidden": "true", className: "size-3 shrink-0 text-muted-foreground" }), _jsx("span", { className: "truncate", children: children })] }));
|
|
19
|
+
}
|
|
20
|
+
export { AgentTask, AgentTaskContent, AgentTaskItem, AgentTaskItemFile, AgentTaskTrigger };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { AgenticApproval, AgenticToolState } from "@ciridae/ui/types";
|
|
3
|
+
import { Button } from "@ciridae/ui/button";
|
|
4
|
+
type ApprovalRequestProps = React.ComponentProps<"div"> & {
|
|
5
|
+
approval?: AgenticApproval;
|
|
6
|
+
state: AgenticToolState;
|
|
7
|
+
};
|
|
8
|
+
type ApprovalRequestTitleProps = React.ComponentProps<"div">;
|
|
9
|
+
type ApprovalRequestDescriptionProps = React.ComponentProps<"div">;
|
|
10
|
+
type ApprovalRequestActionsProps = React.ComponentProps<"div">;
|
|
11
|
+
type ApprovalRequestActionProps = React.ComponentProps<typeof Button>;
|
|
12
|
+
type ApprovalRequestStateProps = {
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
};
|
|
15
|
+
declare function ApprovalRequest({ approval, className, state, ...props }: ApprovalRequestProps): import("react/jsx-runtime").JSX.Element | null;
|
|
16
|
+
declare function ApprovalRequestTitle({ className, ...props }: ApprovalRequestTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function ApprovalRequestDescription({ className, ...props }: ApprovalRequestDescriptionProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare function ApprovalRequestPending({ children }: ApprovalRequestStateProps): React.ReactNode;
|
|
19
|
+
declare function ApprovalRequestAccepted({ children }: ApprovalRequestStateProps): React.ReactNode;
|
|
20
|
+
declare function ApprovalRequestRejected({ children }: ApprovalRequestStateProps): React.ReactNode;
|
|
21
|
+
declare function ApprovalRequestActions({ className, ...props }: ApprovalRequestActionsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
22
|
+
declare function ApprovalRequestAction({ className, size, type, ...props }: ApprovalRequestActionProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export { ApprovalRequest, ApprovalRequestAccepted, ApprovalRequestAction, ApprovalRequestActions, ApprovalRequestDescription, ApprovalRequestPending, ApprovalRequestRejected, ApprovalRequestTitle, };
|
|
24
|
+
export type { ApprovalRequestActionProps, ApprovalRequestActionsProps, ApprovalRequestDescriptionProps, ApprovalRequestProps, ApprovalRequestTitleProps, };
|