@lukeashford/aurelius 2.19.0 → 2.21.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.
@@ -269,6 +269,36 @@
269
269
  }
270
270
  }
271
271
 
272
+ @keyframes badge-ping {
273
+ 0% {
274
+ transform: scale(1);
275
+ box-shadow: 0 0 0 0 rgb(var(--gold-rgb) / 0.4);
276
+ }
277
+ 40% {
278
+ transform: scale(1.15);
279
+ box-shadow: 0 0 0 6px rgb(var(--gold-rgb) / 0);
280
+ }
281
+ 100% {
282
+ transform: scale(1);
283
+ box-shadow: 0 0 0 0 rgb(var(--gold-rgb) / 0);
284
+ }
285
+ }
286
+
287
+ @keyframes badge-invert {
288
+ 0% {
289
+ background-color: var(--color-gold);
290
+ color: var(--color-obsidian);
291
+ }
292
+ 40% {
293
+ background-color: var(--color-obsidian);
294
+ color: var(--color-gold);
295
+ }
296
+ 100% {
297
+ background-color: var(--color-gold);
298
+ color: var(--color-obsidian);
299
+ }
300
+ }
301
+
272
302
  /* ===== BASE STYLES (applied via @layer base) ===== */
273
303
  @layer base {
274
304
  html {
package/llms.md CHANGED
@@ -100,15 +100,17 @@ Import from `@lukeashford/aurelius`:
100
100
  |-----------|-------|
101
101
  | Accordion | type, defaultValue, value, onValueChange, value, disabled |
102
102
  | Alert | variant (info, success, warning, error), title |
103
- | ArtifactCard | artifact, onExpand, isLoading |
103
+ | ArtifactCard | artifact, onExpand, loading |
104
+ | ArtifactGroup | node, onClick |
105
+ | ArtifactVariantStack | node, onExpandArtifact, onGroupClick |
104
106
  | AttachmentPreview | attachments, onRemove, removable, maxVisible |
105
- | AudioCard | src, title, subtitle, playing, controls, volume, muted, loop, mediaClassName, contentClassName, playerProps, height |
107
+ | AudioCard | src, title, subtitle, playing, controls, volume, muted, loop, mediaClassName, contentClassName, playerProps, height, loading |
106
108
  | Avatar | src, alt, name, size (xs, sm, md, lg, xl, 2xl), status (online, offline, busy) |
107
109
  | Badge | variant (default, gold, success, error, warning, info) |
108
110
  | BrandIcon | size (sm, md, lg), variant (solid, outline) |
109
111
  | Breadcrumb | separator, current |
110
112
  | Button | variant (primary, important, elevated, outlined, featured, ghost, danger), size (sm, md, lg, xl), loading |
111
- | Card | variant (default, elevated, outlined, ghost, featured), interactive, selected, noPadding, isLoading, title, subtitle, action, align, aspect, position |
113
+ | Card | variant (default, elevated, outlined, ghost, featured), interactive, selected, noPadding, loading, title, subtitle, action, align, aspect, position |
112
114
  | Checkbox | label |
113
115
  | Col | span, offset, order |
114
116
  | ColorSwatch | color, label |
@@ -118,7 +120,7 @@ Import from `@lukeashford/aurelius`:
118
120
  | Drawer | isOpen, onClose, position (left, right, top, bottom), title, size, children, className |
119
121
  | FileChip | name, size, type, status (pending, uploading, complete, error), previewUrl, onRemove, removable, error |
120
122
  | HelperText | error |
121
- | ImageCard | src, alt, title, subtitle, aspectRatio (${number}/${number}), objectFit, overlay, mediaClassName, contentClassName |
123
+ | ImageCard | src, alt, title, subtitle, aspectRatio (${number}/${number}), objectFit, overlay, mediaClassName, contentClassName, loading |
122
124
  | Input | error, leadingIcon, trailingIcon |
123
125
  | InputGroup | children |
124
126
  | Label | required |
@@ -129,12 +131,12 @@ Import from `@lukeashford/aurelius`:
129
131
  | Modal | isOpen, onClose, title, children, className |
130
132
  | Navbar | fixed, bordered, position, active, active |
131
133
  | Pagination | page, totalPages, onPageChange, siblingCount, showEdges |
132
- | PdfCard | src, title, subtitle, height, mediaClassName, contentClassName |
134
+ | PdfCard | src, title, subtitle, height, mediaClassName, contentClassName, loading |
133
135
  | Popover | children, trigger, position (top, bottom, left, right), align (start, center, end), open, onOpenChange, closeOnClickOutside |
134
136
  | Progress | value, max, size (sm, md, lg), variant (default, success, warning, error), showValue, formatValue, indeterminate |
135
137
  | Radio | label |
136
138
  | Row | gutter, gutterX, gutterY, justify (start, center, end, between, around, evenly), align (start, center, end, stretch, baseline) |
137
- | ScriptCard | title, subtitle, elements, maxHeight |
139
+ | ScriptCard | title, subtitle, elements, maxHeight, loading |
138
140
  | SectionHeading | level (h2, h3) |
139
141
  | Select | error, options |
140
142
  | Skeleton | children |
@@ -146,20 +148,22 @@ Import from `@lukeashford/aurelius`:
146
148
  | Switch | checked, defaultChecked, onCheckedChange, label |
147
149
  | Table | responsive, hoverable, selected, sortable, sortDirection |
148
150
  | Tabs | defaultValue, value, onValueChange, value, value, forceMount |
149
- | TextCard | content, title, subtitle, isMarkdown, maxHeight, contentClassName |
151
+ | TextCard | content, title, subtitle, isMarkdown, maxHeight, contentClassName, loading |
150
152
  | Textarea | error |
151
153
  | Toast | children, position (top-right, top-left, bottom-right, bottom-left, top-center, bottom-center), defaultDuration |
152
154
  | Tooltip | content, children, open, side (top, right, bottom, left) |
153
- | VideoCard | src, title, subtitle, aspectRatio (${number}/${number}), playing, controls, light, volume, muted, loop, mediaClassName, contentClassName, playerProps |
154
- | ArtifactsPanel | artifacts, isOpen, onClose, isLoading, width, widthPercent, onResizeStart, artifactCount, onExpand |
155
+ | VideoCard | src, title, subtitle, aspectRatio (${number}/${number}), playing, controls, light, volume, muted, loop, mediaClassName, contentClassName, playerProps, loading |
156
+ | ArtifactsPanel | nodes, artifacts, loading, artifactCount, onExpand |
155
157
  | BranchNavigator | current, total, onPrevious, onNext, size, showIcon |
156
158
  | ChatInput | position (centered, bottom), placeholder, helperText, onSubmit, disabled, animate, isStreaming, onStop, attachments, onAttachmentsChange, showAttachmentButton, acceptedFileTypes |
157
- | ChatInterface | messages, conversationTree, onTreeChange, conversations, onMessageSubmit, onEditMessage, onRetryMessage, onStop, onSelectConversation, onNewChat, isStreaming, isThinking, placeholder, emptyStateHelper, initialSidebarCollapsed, emptyState, showAttachmentButton, enableMessageActions, attachments, onAttachmentsChange, artifacts, isArtifactsPanelOpen, onArtifactsPanelOpenChange, tasks, tasksTitle |
159
+ | ChatInterface | messages, conversationTree, onTreeChange, conversations, onMessageSubmit, onEditMessage, onRetryMessage, onStop, onSelectConversation, onNewChat, isStreaming, isThinking, placeholder, emptyStateHelper, initialSidebarCollapsed, emptyState, showAttachmentButton, enableMessageActions, attachments, onAttachmentsChange, artifacts, artifactNodes, isArtifactsPanelOpen, onArtifactsPanelOpenChange, tasks, tasksTitle |
158
160
  | ChatView | messages, latestUserMessageIndex, isStreaming, isThinking, onScroll |
159
161
  | ConversationSidebar | conversations, isCollapsed, onSelectConversation, onNewChat, onToggleCollapse, width, onResizeStart, onExpand |
160
162
  | MessageActions | variant (user, assistant), content, onEdit, onRetry, isEditing, onEditingChange, editValue |
161
163
  | ThinkingIndicator | isVisible, phraseInterval, phrases |
162
164
  | TodosList | tasks, title |
165
+ | ToolPanelContainer | topContent, bottomContent, width, onResizeStart |
166
+ | ToolSidebar | tools, activeTools, onToggleTool |
163
167
  | CheckSquareIcon | children |
164
168
  | ChevronLeftIcon | children |
165
169
  | ChevronRightIcon | children |
@@ -169,6 +173,7 @@ Import from `@lukeashford/aurelius`:
169
173
  | ExpandIcon | children |
170
174
  | HistoryIcon | children |
171
175
  | LayersIcon | children |
176
+ | MediaIcon | children |
172
177
  | PlusIcon | children |
173
178
  | SquareLoaderIcon | children |
174
179
 
@@ -197,7 +202,26 @@ based on the artifact type.
197
202
  - **Artifact.scriptElements**: * For html artifacts - structured script elements (used by ScriptCard)
198
203
  - **artifact**: * The artifact object to display
199
204
  - **onExpand**: * Callback when the artifact should be expanded/opened
200
- - **isLoading**: * Whether the artifact is still loading
205
+ - **loading**: * Whether the artifact is still loading
206
+
207
+ **ArtifactGroup**
208
+ Renders a GROUP node as a Card with the group label as title. Inside,
209
+ the first child is shown on top with two offset layers behind it
210
+ (always shown as a visual symbol for "group"). A square count badge
211
+ shows the total items.
212
+
213
+ - **node**: * The GROUP node to display
214
+ - **onClick**: * Called when the group is clicked (e.g. to navigate into it)
215
+
216
+ **ArtifactVariantStack**
217
+ Renders a VARIANT_SET node as a Card with the set label as title.
218
+ Children are displayed in a horizontal row inside the card body.
219
+ Children handle their own click behavior (expand for artifacts,
220
+ navigate for groups).
221
+
222
+ - **node**: * The VARIANT_SET node to display
223
+ - **onExpandArtifact**: * Passed through to ArtifactCard children for expand/open behavior
224
+ - **onGroupClick**: * Passed through to ArtifactGroup children for navigation
201
225
 
202
226
  **AttachmentPreview**
203
227
  - **AttachmentItem.id**: * Unique identifier
@@ -312,21 +336,26 @@ A card for displaying text content, supporting Markdown and HTML formatting.
312
336
  - **contentClassName**: * Optional class name for the content container
313
337
 
314
338
  **ArtifactsPanel**
315
- ArtifactsPanel displays rich content artifacts in a slide-in panel.
339
+ ArtifactsPanel displays artifacts in a navigable tree panel.
316
340
 
317
- When collapsed, shows a thin strip with layers icon at top.
318
- When expanded, shows chevron at top-right to collapse.
319
- Click on artifacts to expand them to full screen modal.
341
+ This is a content-only component it fills whatever container it is
342
+ placed in. Opening/closing and resizing are handled by the parent
343
+ ToolPanelContainer and ToolSidebar.
320
344
 
321
- Supports fullWidth artifacts that span all columns in the grid.
345
+ When provided with `nodes`, it renders a tree-aware, navigable panel
346
+ where groups can be entered (breadcrumb navigation) and artifacts
347
+ can be expanded to a full-screen modal.
322
348
 
323
- - **artifacts**: * Array of artifacts to display
324
- - **isOpen**: * Whether the panel is visible
325
- - **onClose**: * Callback to close/collapse the panel
326
- - **isLoading**: * Whether artifacts are still loading (show skeletons)
327
- - **width**: * Current width of the panel as CSS value (e.g., "50vw", "400px").
328
- - **widthPercent**: * Width as percentage of viewport (0-100) for column calculations.
329
- - **onResizeStart**: * Callback to start resizing
349
+ When provided with flat `artifacts`, it renders them in a simple grid.
350
+
351
+ Supports zoom controls (0.25x–1x) in tree mode. Zoom uses CSS
352
+ `transform: scale()` on the content wrapper so the entire layout scales
353
+ uniformly cards, images, gaps, and text all shrink as if the viewer
354
+ is physically moving back from the content.
355
+
356
+ - **nodes**: * Top-level tree nodes to display. When provided, the panel renders a navigable artifact tree instead of a flat list.
357
+ - **artifacts**: * Array of flat artifacts to display (legacy/simple mode). Ignored when `nodes` is provided.
358
+ - **loading**: * Whether artifacts are still loading (show skeletons)
330
359
 
331
360
  **BranchNavigator**
332
361
  BranchNavigator provides a UI for switching between conversation branches.
@@ -369,7 +398,11 @@ ChatInterface is the main orchestrator for a full-featured chat experience.
369
398
  Features:
370
399
  - ConversationSidebar (left) — collapsible list of past conversations
371
400
  - ChatView (center) — main conversation area with smart scrolling
372
- - ArtifactsPanel (right) — controlled via useArtifacts hook
401
+ - Tool panel system (right) — IntelliJ-style tool sidebar with:
402
+ - Top group: Chat History, Artifacts Panel (mutually exclusive)
403
+ - Bottom group: Todo List
404
+ - Vertical split with draggable divider when both groups are active
405
+ - Width-resizable tool content area
373
406
  - ChatInput — position-aware input that centers in empty state
374
407
  - Branching — support for conversation tree with branch navigation
375
408
  - Message Actions — copy, edit, retry
@@ -405,9 +438,10 @@ Artifacts are controlled externally via the useArtifacts hook:
405
438
  - **attachments**: * Current attachments for the chat input (controlled).
406
439
  - **onAttachmentsChange**: * Called when attachments are added or removed in the chat input.
407
440
  - **artifacts**: * Artifacts to display in the side panel. Best managed via the useArtifacts hook and passed here.
408
- - **isArtifactsPanelOpen**: * Whether the artifacts panel is currently open (controlled).
441
+ - **artifactNodes**: * Top-level artifact tree nodes for tree-aware navigation. When provided, the panel renders a navigable tree instead of a flat list.
442
+ - **isArtifactsPanelOpen**: * Whether the artifacts panel is currently open (controlled). When set, maps to the tool panel system — opens the artifacts tool.
409
443
  - **onArtifactsPanelOpenChange**: * Called when the artifacts panel is opened or closed (controlled).
410
- - **tasks**: * Tasks to display in the todos list below the artifacts panel. Shows a list of tasks with status indicators.
444
+ - **tasks**: * Tasks to display in the todos list tool panel. Shows a list of tasks with status indicators.
411
445
  - **tasksTitle**: * Title for the todos list @default "Tasks"
412
446
 
413
447
  **ChatView**
@@ -480,9 +514,43 @@ The component automatically sorts cancelled/failed tasks to the bottom of their
480
514
  - **tasks**: * Array of tasks to display
481
515
  - **title**: * Title for the todos list @default "Tasks"
482
516
 
517
+ **ToolPanelContainer**
518
+ ToolPanelContainer manages the layout of one or two tool panels
519
+ stacked vertically. When both top and bottom slots are filled, a
520
+ height-adjustable divider appears between them.
521
+
522
+ It also renders the width-resize handle on its left edge, identical
523
+ to the previous ArtifactsPanel resize behavior.
524
+
525
+ - **topContent**: * Content for the top tool slot (from the top group). When null, the bottom slot takes full height.
526
+ - **bottomContent**: * Content for the bottom tool slot (from the bottom group). When null, the top slot takes full height.
527
+ - **width**: * Panel width as CSS value (e.g., "50vw")
528
+ - **onResizeStart**: * Callback to start horizontal resizing (width dragger)
529
+
530
+ **ToolSidebar**
531
+ ToolSidebar renders a vertical strip of tool icon buttons on the right
532
+ side of the chat interface. It follows the IntelliJ pattern:
533
+
534
+ - Top-aligned group and bottom-aligned group separated by a divider
535
+ - Tools in the same group are mutually exclusive
536
+ - Clicking an active tool closes it; clicking an inactive tool opens it
537
+ - Constant slim width regardless of tool panel state
538
+
539
+ - **ToolDefinition.id**: * Unique identifier for this tool
540
+ - **ToolDefinition.icon**: * Icon element shown in the sidebar button
541
+ - **ToolDefinition.label**: * Accessible label for the button
542
+ - **ToolDefinition.group**: * Which group the tool belongs to — tools in the same group are mutually exclusive (opening one closes the other).
543
+ - **tools**: * Available tool definitions
544
+ - **activeTools**: * Current state — which tool is open per group
545
+ - **onToggleTool**: * Called when a tool button is clicked (toggle)
546
+
483
547
  **CrossSquareIcon**
484
548
  - **variant**: * Visual variant for different states - 'cancelled': subtle ash coloring - 'failed': error red coloring
485
549
 
550
+ **MediaIcon**
551
+ Media icon — a film frame with play triangle, representing video and media artifacts.
552
+
553
+
486
554
  **SquareLoaderIcon**
487
555
  Square loading spinner with "snake" animation.
488
556
  A golden stroke travels around a square border.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lukeashford/aurelius",
3
- "version": "2.19.0",
3
+ "version": "2.21.0",
4
4
  "description": "Design system for Aurelius applications — A cohesive visual language for creative technologists",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",