Compare commits

..

2 Commits

Author SHA1 Message Date
jules
1ecef406e2 chore(pkg): add package.json (name/version/peerDeps/exports/sideEffects)
Libs shipped as bare source with no manifest — consumable only via per-app
vite/tsconfig alias surgery, no version contract, no tree-shaking signal.
Add a minimal package.json matching the @crema/content-ui template: entry +
exports map, declared peerDependencies, sideEffects:false. Mechanical, no
code change. Frontend audit 2026-06-20, rank 2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:36:49 +10:00
jules
f897648b5c feat: optional notice slot under composer + fix starter-suggestion crash
Add an optional `notice` prop (React.ReactNode) to AgentDockProps, rendered
as quiet fine-print under the composer. Lets a host app surface a privacy /
data-handling notice next to the input without the dock owning the copy.
Default undefined — no change for apps that don't pass it.

Also fix a latent crash: a "Try saying" starter suggestion called
sendMessage(s) with a single argument, but sendMessage(display, wire)
immediately does wire.trim() — clicking a suggestion threw on undefined.
Pass (s, s) since a suggestion's display and wire text are identical.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 09:51:29 +10:00
2 changed files with 33 additions and 1 deletions

21
package.json Normal file
View File

@@ -0,0 +1,21 @@
{
"name": "@crema/agent-dock-ui",
"version": "0.0.1",
"private": true,
"description": "Agent Dock components for the Crema design system. Builds on @crema/agent-ui.",
"type": "module",
"main": "./src/index.tsx",
"types": "./src/index.tsx",
"exports": {
".": "./src/index.tsx"
},
"files": [
"src"
],
"sideEffects": false,
"peerDependencies": {
"lucide-react": "^1.8.0",
"react": "^19.2.4",
"react-dom": "^19.2.4"
}
}

View File

@@ -113,6 +113,11 @@ export interface AgentDockProps {
hidden?: boolean;
/** localStorage namespace for the open/closed state. */
storageKey?: string;
/** Optional fine-print rendered under the composer — e.g. a privacy /
* data-handling notice. App-supplied content (the dock stays generic);
* omit for no notice. Kept visually quiet so it doesn't compete with the
* input. */
notice?: React.ReactNode;
}
/* ------------------------------------------------------------------ */
@@ -153,6 +158,7 @@ export function AgentDock({
onExpand,
hidden = false,
storageKey = DEFAULT_STORAGE_KEY,
notice,
}: AgentDockProps) {
const [open, setOpen] = useState<boolean>(() => {
if (typeof window === "undefined") return false;
@@ -418,7 +424,7 @@ export function AgentDock({
<li key={s}>
<button
type="button"
onClick={() => void sendMessage(s)}
onClick={() => void sendMessage(s, s)}
disabled={sending}
className="w-full rounded-lg border border-[var(--border)] bg-[var(--chat-assistant-bg)] px-3 py-2 text-left text-sm leading-snug text-[var(--chat-assistant-fg)] transition-colors hover:border-[var(--primary)] disabled:opacity-60"
data-action="assistant-dock-starter"
@@ -504,6 +510,11 @@ export function AgentDock({
)}
</button>
</div>
{notice ? (
<div className="mt-2 px-0.5 text-[11px] leading-snug text-[var(--foreground)]/50">
{notice}
</div>
) : null}
</div>
</div>
</div>