@50arms/ui 0.0.0-stage → 35.1.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/LICENSE +21 -0
- package/README.md +193 -2
- package/dist/components/Accordion.js +68 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AgentWorkingSpinner.js +46 -0
- package/dist/components/AgentWorkingSpinner.js.map +1 -0
- package/dist/components/AppShell.js +228 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/Attention.js +130 -0
- package/dist/components/Attention.js.map +1 -0
- package/dist/components/Avatar.js +99 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +143 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Board.js +292 -0
- package/dist/components/Board.js.map +1 -0
- package/dist/components/Button.js +327 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Callout.js +106 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.js +140 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Choice.js +361 -0
- package/dist/components/Choice.js.map +1 -0
- package/dist/components/CodeEditor.js +384 -0
- package/dist/components/CodeEditor.js.map +1 -0
- package/dist/components/ColorPicker.js +174 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/Combobox.js +212 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/CommandPalette.js +163 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ConcentricRing.js +60 -0
- package/dist/components/ConcentricRing.js.map +1 -0
- package/dist/components/ConnectionCard.js +98 -0
- package/dist/components/ConnectionCard.js.map +1 -0
- package/dist/components/ContextItemRow.js +49 -0
- package/dist/components/ContextItemRow.js.map +1 -0
- package/dist/components/CopyValue.js +57 -0
- package/dist/components/CopyValue.js.map +1 -0
- package/dist/components/CountBadge.js +26 -0
- package/dist/components/CountBadge.js.map +1 -0
- package/dist/components/DateCalendar.js +156 -0
- package/dist/components/DateCalendar.js.map +1 -0
- package/dist/components/DateField.js +166 -0
- package/dist/components/DateField.js.map +1 -0
- package/dist/components/DatePicker.js +56 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DateTimeText.js +19 -0
- package/dist/components/DateTimeText.js.map +1 -0
- package/dist/components/DescriptionList.js +25 -0
- package/dist/components/DescriptionList.js.map +1 -0
- package/dist/components/Dialog.js +332 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DragDrop.js +395 -0
- package/dist/components/DragDrop.js.map +1 -0
- package/dist/components/Drawer.js +100 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EditGutter.js +110 -0
- package/dist/components/EditGutter.js.map +1 -0
- package/dist/components/EmojiPicker.js +174 -0
- package/dist/components/EmojiPicker.js.map +1 -0
- package/dist/components/ErrorBoundary.js +47 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Field.js +115 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FileUpload.js +128 -0
- package/dist/components/FileUpload.js.map +1 -0
- package/dist/components/FilterMenu.js +256 -0
- package/dist/components/FilterMenu.js.map +1 -0
- package/dist/components/GatesSection.js +79 -0
- package/dist/components/GatesSection.js.map +1 -0
- package/dist/components/Icon.js +50 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/IconButton.js +59 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/IconStack.js +69 -0
- package/dist/components/IconStack.js.map +1 -0
- package/dist/components/ImageUploadField.js +146 -0
- package/dist/components/ImageUploadField.js.map +1 -0
- package/dist/components/InlineEdit.js +432 -0
- package/dist/components/InlineEdit.js.map +1 -0
- package/dist/components/InlineMarkdownEdit.js +184 -0
- package/dist/components/InlineMarkdownEdit.js.map +1 -0
- package/dist/components/Input.js +156 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LegalDocument.js +155 -0
- package/dist/components/LegalDocument.js.map +1 -0
- package/dist/components/LineDiff.js +95 -0
- package/dist/components/LineDiff.js.map +1 -0
- package/dist/components/ListHeader.js +72 -0
- package/dist/components/ListHeader.js.map +1 -0
- package/dist/components/Loading.js +111 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/Markdown.js +28 -0
- package/dist/components/Markdown.js.map +1 -0
- package/dist/components/MarkdownEditor.js +467 -0
- package/dist/components/MarkdownEditor.js.map +1 -0
- package/dist/components/Menu.js +185 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Navigation.js +87 -0
- package/dist/components/Navigation.js.map +1 -0
- package/dist/components/NumberInput.js +119 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/OTPInput.js +71 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/OrderedEntityManager.js +170 -0
- package/dist/components/OrderedEntityManager.js.map +1 -0
- package/dist/components/PagedWindowList.js +74 -0
- package/dist/components/PagedWindowList.js.map +1 -0
- package/dist/components/PaginationBar.js +95 -0
- package/dist/components/PaginationBar.js.map +1 -0
- package/dist/components/Panel.js +396 -0
- package/dist/components/Panel.js.map +1 -0
- package/dist/components/PasswordInput.js +32 -0
- package/dist/components/PasswordInput.js.map +1 -0
- package/dist/components/PasswordRequirements.js +25 -0
- package/dist/components/PasswordRequirements.js.map +1 -0
- package/dist/components/PatchDiff.js +96 -0
- package/dist/components/PatchDiff.js.map +1 -0
- package/dist/components/PendingVeil.js +18 -0
- package/dist/components/PendingVeil.js.map +1 -0
- package/dist/components/Popover.js +214 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.js +419 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/RatingScale.js +89 -0
- package/dist/components/RatingScale.js.map +1 -0
- package/dist/components/ReadMore.js +232 -0
- package/dist/components/ReadMore.js.map +1 -0
- package/dist/components/RecordCard.js +202 -0
- package/dist/components/RecordCard.js.map +1 -0
- package/dist/components/RelativeTime.js +29 -0
- package/dist/components/RelativeTime.js.map +1 -0
- package/dist/components/SandboxedFrame.js +135 -0
- package/dist/components/SandboxedFrame.js.map +1 -0
- package/dist/components/SearchInput.js +38 -0
- package/dist/components/SearchInput.js.map +1 -0
- package/dist/components/SecretField.js +228 -0
- package/dist/components/SecretField.js.map +1 -0
- package/dist/components/SectionNav.js +42 -0
- package/dist/components/SectionNav.js.map +1 -0
- package/dist/components/Select.js +172 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SequenceDiagram.js +109 -0
- package/dist/components/SequenceDiagram.js.map +1 -0
- package/dist/components/SettingRow.js +124 -0
- package/dist/components/SettingRow.js.map +1 -0
- package/dist/components/SignOffRings.js +36 -0
- package/dist/components/SignOffRings.js.map +1 -0
- package/dist/components/Slider.js +353 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/SolutionChoice.js +89 -0
- package/dist/components/SolutionChoice.js.map +1 -0
- package/dist/components/SortMenu.js +75 -0
- package/dist/components/SortMenu.js.map +1 -0
- package/dist/components/Spinner.js +42 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Stat.js +148 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/StatusSelect.js +119 -0
- package/dist/components/StatusSelect.js.map +1 -0
- package/dist/components/Surface.js +210 -0
- package/dist/components/Surface.js.map +1 -0
- package/dist/components/Table.js +300 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +288 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/ThemeMenu.js +198 -0
- package/dist/components/ThemeMenu.js.map +1 -0
- package/dist/components/Toast.js +217 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toggle.js +147 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/ToggleMatrix.js +157 -0
- package/dist/components/ToggleMatrix.js.map +1 -0
- package/dist/components/Tree.js +125 -0
- package/dist/components/Tree.js.map +1 -0
- package/dist/components/TriStateSwitch.js +111 -0
- package/dist/components/TriStateSwitch.js.map +1 -0
- package/dist/components/VideoPlayer.js +64 -0
- package/dist/components/VideoPlayer.js.map +1 -0
- package/dist/components/auth/AcceptInvitationCard.js +110 -0
- package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
- package/dist/components/auth/AuthLayout.js +18 -0
- package/dist/components/auth/AuthLayout.js.map +1 -0
- package/dist/components/auth/ForgotPasswordForm.js +44 -0
- package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
- package/dist/components/auth/LoginForm.js +76 -0
- package/dist/components/auth/LoginForm.js.map +1 -0
- package/dist/components/auth/ResetPasswordForm.js +69 -0
- package/dist/components/auth/ResetPasswordForm.js.map +1 -0
- package/dist/components/auth/SignInProviders.js +45 -0
- package/dist/components/auth/SignInProviders.js.map +1 -0
- package/dist/components/auth/SignupCard.js +204 -0
- package/dist/components/auth/SignupCard.js.map +1 -0
- package/dist/components/auth/TermsAcceptance.js +43 -0
- package/dist/components/auth/TermsAcceptance.js.map +1 -0
- package/dist/components/board/context.js +32 -0
- package/dist/components/board/context.js.map +1 -0
- package/dist/components/board/recipe.js +94 -0
- package/dist/components/board/recipe.js.map +1 -0
- package/dist/components/calendar/CalendarMonth.js +299 -0
- package/dist/components/calendar/CalendarMonth.js.map +1 -0
- package/dist/components/calendar/CalendarTimeGrid.js +430 -0
- package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
- package/dist/components/calendar/EventActions.js +101 -0
- package/dist/components/calendar/EventActions.js.map +1 -0
- package/dist/components/calendar/format.js +73 -0
- package/dist/components/calendar/format.js.map +1 -0
- package/dist/components/calendar/palette.js +31 -0
- package/dist/components/calendar/palette.js.map +1 -0
- package/dist/components/calendar/use-calendar-drag.js +149 -0
- package/dist/components/calendar/use-calendar-drag.js.map +1 -0
- package/dist/components/calendar/use-event-keyboard.js +87 -0
- package/dist/components/calendar/use-event-keyboard.js.map +1 -0
- package/dist/components/calendar/use-grid-navigation.js +79 -0
- package/dist/components/calendar/use-grid-navigation.js.map +1 -0
- package/dist/components/calendar/use-now.js +27 -0
- package/dist/components/calendar/use-now.js.map +1 -0
- package/dist/components/card-face/AcRingGlyph.js +39 -0
- package/dist/components/card-face/AcRingGlyph.js.map +1 -0
- package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
- package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
- package/dist/components/card-face/CardFace.js +109 -0
- package/dist/components/card-face/CardFace.js.map +1 -0
- package/dist/components/card-face/CardTypeBadge.js +17 -0
- package/dist/components/card-face/CardTypeBadge.js.map +1 -0
- package/dist/components/card-face/EffortBadge.js +11 -0
- package/dist/components/card-face/EffortBadge.js.map +1 -0
- package/dist/components/card-face/GateRingGlyph.js +31 -0
- package/dist/components/card-face/GateRingGlyph.js.map +1 -0
- package/dist/components/card-face/OverflowRow.js +70 -0
- package/dist/components/card-face/OverflowRow.js.map +1 -0
- package/dist/components/card-face/TapTip.js +32 -0
- package/dist/components/card-face/TapTip.js.map +1 -0
- package/dist/components/card-face/hit-area.js +6 -0
- package/dist/components/card-face/hit-area.js.map +1 -0
- package/dist/components/card-face/vocabulary.js +102 -0
- package/dist/components/card-face/vocabulary.js.map +1 -0
- package/dist/components/chart/BarList.js +78 -0
- package/dist/components/chart/BarList.js.map +1 -0
- package/dist/components/chart/LineChart.js +310 -0
- package/dist/components/chart/LineChart.js.map +1 -0
- package/dist/components/chart/ShareBar.js +141 -0
- package/dist/components/chart/ShareBar.js.map +1 -0
- package/dist/components/chart/TimeSeriesChart.js +305 -0
- package/dist/components/chart/TimeSeriesChart.js.map +1 -0
- package/dist/components/chart/label-metrics.js +17 -0
- package/dist/components/chart/label-metrics.js.map +1 -0
- package/dist/components/chart/line-chart-axis.js +38 -0
- package/dist/components/chart/line-chart-axis.js.map +1 -0
- package/dist/components/chart/line-chart-scale.js +132 -0
- package/dist/components/chart/line-chart-scale.js.map +1 -0
- package/dist/components/chart/line-series-style.js +22 -0
- package/dist/components/chart/line-series-style.js.map +1 -0
- package/dist/components/chart/share-bar-labels.js +14 -0
- package/dist/components/chart/share-bar-labels.js.map +1 -0
- package/dist/components/chart/shared.js +157 -0
- package/dist/components/chart/shared.js.map +1 -0
- package/dist/components/chart/time-series-scale.js +51 -0
- package/dist/components/chart/time-series-scale.js.map +1 -0
- package/dist/components/chat/Attachment.js +316 -0
- package/dist/components/chat/Attachment.js.map +1 -0
- package/dist/components/chat/Chat.js +171 -0
- package/dist/components/chat/Chat.js.map +1 -0
- package/dist/components/chat/Composer.js +274 -0
- package/dist/components/chat/Composer.js.map +1 -0
- package/dist/components/chat/ContextMeter.js +202 -0
- package/dist/components/chat/ContextMeter.js.map +1 -0
- package/dist/components/chat/EffortControl.js +116 -0
- package/dist/components/chat/EffortControl.js.map +1 -0
- package/dist/components/chat/FileCover.js +78 -0
- package/dist/components/chat/FileCover.js.map +1 -0
- package/dist/components/chat/Message.js +356 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/chat/MessageScroller.js +104 -0
- package/dist/components/chat/MessageScroller.js.map +1 -0
- package/dist/components/chat/ModelSelector.js +156 -0
- package/dist/components/chat/ModelSelector.js.map +1 -0
- package/dist/components/chat/StreamingMarkdown.js +42 -0
- package/dist/components/chat/StreamingMarkdown.js.map +1 -0
- package/dist/components/chat/download-file.js +9 -0
- package/dist/components/chat/download-file.js.map +1 -0
- package/dist/components/chat/file-icon.js +39 -0
- package/dist/components/chat/file-icon.js.map +1 -0
- package/dist/components/checklist/StatusChecklist.js +103 -0
- package/dist/components/checklist/StatusChecklist.js.map +1 -0
- package/dist/components/checklist/tally.js +29 -0
- package/dist/components/checklist/tally.js.map +1 -0
- package/dist/components/code-editor/context.js +13 -0
- package/dist/components/code-editor/context.js.map +1 -0
- package/dist/components/code-editor/editing.js +93 -0
- package/dist/components/code-editor/editing.js.map +1 -0
- package/dist/components/code-editor/highlight.js +27 -0
- package/dist/components/code-editor/highlight.js.map +1 -0
- package/dist/components/code-editor/recipe.js +75 -0
- package/dist/components/code-editor/recipe.js.map +1 -0
- package/dist/components/date-timeline/DateTimeline.js +358 -0
- package/dist/components/date-timeline/DateTimeline.js.map +1 -0
- package/dist/components/date-timeline/TimelineRow.js +100 -0
- package/dist/components/date-timeline/TimelineRow.js.map +1 -0
- package/dist/components/date-timeline/useBarDrag.js +44 -0
- package/dist/components/date-timeline/useBarDrag.js.map +1 -0
- package/dist/components/date-timeline/useMarkerDrag.js +40 -0
- package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
- package/dist/components/date-timeline/useTimelineZoom.js +44 -0
- package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
- package/dist/components/drag-drop/context.js +37 -0
- package/dist/components/drag-drop/context.js.map +1 -0
- package/dist/components/drag-drop/recipe.js +270 -0
- package/dist/components/drag-drop/recipe.js.map +1 -0
- package/dist/components/drag-drop/shift.js +157 -0
- package/dist/components/drag-drop/shift.js.map +1 -0
- package/dist/components/edit/activation.js +10 -0
- package/dist/components/edit/activation.js.map +1 -0
- package/dist/components/edit/outcome.js +47 -0
- package/dist/components/edit/outcome.js.map +1 -0
- package/dist/components/edit/use-edit-session.js +146 -0
- package/dist/components/edit/use-edit-session.js.map +1 -0
- package/dist/components/file-viewer/FileViewer.js +97 -0
- package/dist/components/file-viewer/FileViewer.js.map +1 -0
- package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
- package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
- package/dist/components/file-viewer/ViewerControls.js +122 -0
- package/dist/components/file-viewer/ViewerControls.js.map +1 -0
- package/dist/components/file-viewer/ViewerRail.js +57 -0
- package/dist/components/file-viewer/ViewerRail.js.map +1 -0
- package/dist/components/file-viewer/ViewerStage.js +112 -0
- package/dist/components/file-viewer/ViewerStage.js.map +1 -0
- package/dist/components/file-viewer/frames.js +37 -0
- package/dist/components/file-viewer/frames.js.map +1 -0
- package/dist/components/file-viewer/use-frame-cursor.js +32 -0
- package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-keys.js +50 -0
- package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
- package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
- package/dist/components/focus-web/FocusWeb.js +322 -0
- package/dist/components/focus-web/FocusWeb.js.map +1 -0
- package/dist/components/focus-web/layout.js +34 -0
- package/dist/components/focus-web/layout.js.map +1 -0
- package/dist/components/graph-explorer/GraphExplorer.js +441 -0
- package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
- package/dist/components/graph-explorer/camera-math.js +102 -0
- package/dist/components/graph-explorer/camera-math.js.map +1 -0
- package/dist/components/graph-explorer/tree-layout.js +103 -0
- package/dist/components/graph-explorer/tree-layout.js.map +1 -0
- package/dist/components/graph-explorer/use-camera.js +82 -0
- package/dist/components/graph-explorer/use-camera.js.map +1 -0
- package/dist/components/graph-explorer/viewport-gesture.js +107 -0
- package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
- package/dist/components/kanban/KanbanBoard.js +219 -0
- package/dist/components/kanban/KanbanBoard.js.map +1 -0
- package/dist/components/kanban/recipe.js +144 -0
- package/dist/components/kanban/recipe.js.map +1 -0
- package/dist/components/markdown/Affordances.js +398 -0
- package/dist/components/markdown/Affordances.js.map +1 -0
- package/dist/components/markdown/AttachmentStrip.js +128 -0
- package/dist/components/markdown/AttachmentStrip.js.map +1 -0
- package/dist/components/markdown/ImageUpload.js +45 -0
- package/dist/components/markdown/ImageUpload.js.map +1 -0
- package/dist/components/media-error.js +7 -0
- package/dist/components/media-error.js.map +1 -0
- package/dist/components/nav-sections.js +61 -0
- package/dist/components/nav-sections.js.map +1 -0
- package/dist/components/node-canvas/NodeCanvas.js +384 -0
- package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
- package/dist/components/node-canvas/layout.js +237 -0
- package/dist/components/node-canvas/layout.js.map +1 -0
- package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
- package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
- package/dist/components/openapi/OpenApiViewer.js +137 -0
- package/dist/components/openapi/OpenApiViewer.js.map +1 -0
- package/dist/components/openapi/OperationCard.js +145 -0
- package/dist/components/openapi/OperationCard.js.map +1 -0
- package/dist/components/openapi/SchemaView.js +68 -0
- package/dist/components/openapi/SchemaView.js.map +1 -0
- package/dist/components/openapi/resolve.js +102 -0
- package/dist/components/openapi/resolve.js.map +1 -0
- package/dist/components/openapi/types.js +5 -0
- package/dist/components/openapi/types.js.map +1 -0
- package/dist/components/overlay-shell.js +29 -0
- package/dist/components/overlay-shell.js.map +1 -0
- package/dist/components/overlay-stack.js +27 -0
- package/dist/components/overlay-stack.js.map +1 -0
- package/dist/components/paged-window/PageBlock.js +50 -0
- package/dist/components/paged-window/PageBlock.js.map +1 -0
- package/dist/components/provenance/ConfidenceBar.js +60 -0
- package/dist/components/provenance/ConfidenceBar.js.map +1 -0
- package/dist/components/provenance/ConfidenceMeter.js +36 -0
- package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
- package/dist/components/provenance/ConfidenceReadout.js +31 -0
- package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
- package/dist/components/provenance/ProvenanceBadge.js +44 -0
- package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
- package/dist/components/provenance/ProvenanceDetail.js +114 -0
- package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
- package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
- package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
- package/dist/components/provenance/absence.js +31 -0
- package/dist/components/provenance/absence.js.map +1 -0
- package/dist/components/provenance/types.js +30 -0
- package/dist/components/provenance/types.js.map +1 -0
- package/dist/components/rbac/AccessRequestPanel.js +153 -0
- package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
- package/dist/components/rbac/AccountMenu.js +118 -0
- package/dist/components/rbac/AccountMenu.js.map +1 -0
- package/dist/components/rbac/AgentKeysList.js +20 -0
- package/dist/components/rbac/AgentKeysList.js.map +1 -0
- package/dist/components/rbac/ApiKeysPanel.js +172 -0
- package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
- package/dist/components/rbac/ApiKeysTable.js +167 -0
- package/dist/components/rbac/ApiKeysTable.js.map +1 -0
- package/dist/components/rbac/Brand.js +13 -0
- package/dist/components/rbac/Brand.js.map +1 -0
- package/dist/components/rbac/Can.js +18 -0
- package/dist/components/rbac/Can.js.map +1 -0
- package/dist/components/rbac/ChangePasswordForm.js +73 -0
- package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
- package/dist/components/rbac/DangerZone.js +27 -0
- package/dist/components/rbac/DangerZone.js.map +1 -0
- package/dist/components/rbac/DevToolsPopover.js +140 -0
- package/dist/components/rbac/DevToolsPopover.js.map +1 -0
- package/dist/components/rbac/EndedLine.js +24 -0
- package/dist/components/rbac/EndedLine.js.map +1 -0
- package/dist/components/rbac/InvitationsList.js +148 -0
- package/dist/components/rbac/InvitationsList.js.map +1 -0
- package/dist/components/rbac/InviteMembersDialog.js +97 -0
- package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
- package/dist/components/rbac/MembersPanel.js +138 -0
- package/dist/components/rbac/MembersPanel.js.map +1 -0
- package/dist/components/rbac/PermissionRequestPanel.js +141 -0
- package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
- package/dist/components/rbac/ProfileForm.js +86 -0
- package/dist/components/rbac/ProfileForm.js.map +1 -0
- package/dist/components/rbac/ProfilePage.js +58 -0
- package/dist/components/rbac/ProfilePage.js.map +1 -0
- package/dist/components/rbac/RBACProvider.js +82 -0
- package/dist/components/rbac/RBACProvider.js.map +1 -0
- package/dist/components/rbac/RoleEditorDialog.js +90 -0
- package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
- package/dist/components/rbac/RoleKeyPicker.js +77 -0
- package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
- package/dist/components/rbac/RolePermissionMatrix.js +37 -0
- package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
- package/dist/components/rbac/RolesPermissionsPage.js +142 -0
- package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
- package/dist/components/rbac/SessionsList.js +146 -0
- package/dist/components/rbac/SessionsList.js.map +1 -0
- package/dist/components/rbac/TeamSettingsForm.js +69 -0
- package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
- package/dist/components/rbac/TeamSwitcher.js +66 -0
- package/dist/components/rbac/TeamSwitcher.js.map +1 -0
- package/dist/components/rbac/approvalPanelParts.js +130 -0
- package/dist/components/rbac/approvalPanelParts.js.map +1 -0
- package/dist/components/rbac/permissionSections.js +8 -0
- package/dist/components/rbac/permissionSections.js.map +1 -0
- package/dist/components/rbac/stagedForm.js +42 -0
- package/dist/components/rbac/stagedForm.js.map +1 -0
- package/dist/components/rbac/useStagedImage.js +21 -0
- package/dist/components/rbac/useStagedImage.js.map +1 -0
- package/dist/components/roadmap/PhaseManager.js +48 -0
- package/dist/components/roadmap/PhaseManager.js.map +1 -0
- package/dist/components/roadmap/RoadmapItemCard.js +96 -0
- package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
- package/dist/components/roadmap/RoadmapPage.js +34 -0
- package/dist/components/roadmap/RoadmapPage.js.map +1 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
- package/dist/components/roadmap/TrackManager.js +58 -0
- package/dist/components/roadmap/TrackManager.js.map +1 -0
- package/dist/components/roadmap/UseCaseCard.js +93 -0
- package/dist/components/roadmap/UseCaseCard.js.map +1 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
- package/dist/components/roadmap/chip-tones.js +9 -0
- package/dist/components/roadmap/chip-tones.js.map +1 -0
- package/dist/components/roadmap/derive.js +28 -0
- package/dist/components/roadmap/derive.js.map +1 -0
- package/dist/components/stepper/Stepper.js +276 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/stepper/derive.js +53 -0
- package/dist/components/stepper/derive.js.map +1 -0
- package/dist/confidence.css +222 -0
- package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
- package/dist/fonts/figtree-0.woff2 +0 -0
- package/dist/fonts/figtree-1.woff2 +0 -0
- package/dist/fonts/figtree-2.woff2 +0 -0
- package/dist/fonts/figtree-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
- package/dist/fonts.css +187 -0
- package/dist/icons/data.js +233 -0
- package/dist/icons/data.js.map +1 -0
- package/dist/index.js +942 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/attention.js +75 -0
- package/dist/lib/attention.js.map +1 -0
- package/dist/lib/board/anchor.js +14 -0
- package/dist/lib/board/anchor.js.map +1 -0
- package/dist/lib/board/model.js +41 -0
- package/dist/lib/board/model.js.map +1 -0
- package/dist/lib/board/move.js +161 -0
- package/dist/lib/board/move.js.map +1 -0
- package/dist/lib/board/position.js +11 -0
- package/dist/lib/board/position.js.map +1 -0
- package/dist/lib/board/rejection.js +22 -0
- package/dist/lib/board/rejection.js.map +1 -0
- package/dist/lib/board/use-board.js +43 -0
- package/dist/lib/board/use-board.js.map +1 -0
- package/dist/lib/calendar/band-packer.js +44 -0
- package/dist/lib/calendar/band-packer.js.map +1 -0
- package/dist/lib/calendar/drag.js +74 -0
- package/dist/lib/calendar/drag.js.map +1 -0
- package/dist/lib/calendar/lane-packer.js +67 -0
- package/dist/lib/calendar/lane-packer.js.map +1 -0
- package/dist/lib/calendar/segments.js +82 -0
- package/dist/lib/calendar/segments.js.map +1 -0
- package/dist/lib/calendar/types.js +7 -0
- package/dist/lib/calendar/types.js.map +1 -0
- package/dist/lib/chart-palette.js +27 -0
- package/dist/lib/chart-palette.js.map +1 -0
- package/dist/lib/clipboard.js +30 -0
- package/dist/lib/clipboard.js.map +1 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.js +24 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/component-guidance.js +297 -0
- package/dist/lib/component-guidance.js.map +1 -0
- package/dist/lib/confidence.js +22 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/date-timeline/scale.js +197 -0
- package/dist/lib/date-timeline/scale.js.map +1 -0
- package/dist/lib/design-frame/document.js +44 -0
- package/dist/lib/design-frame/document.js.map +1 -0
- package/dist/lib/design-frame/mini-app-script.js +107 -0
- package/dist/lib/design-frame/mini-app-script.js.map +1 -0
- package/dist/lib/design-frame/mini-app.js +12 -0
- package/dist/lib/design-frame/mini-app.js.map +1 -0
- package/dist/lib/design-frame/protocol.js +46 -0
- package/dist/lib/design-frame/protocol.js.map +1 -0
- package/dist/lib/dev-warn.js +17 -0
- package/dist/lib/dev-warn.js.map +1 -0
- package/dist/lib/dnd/announce.js +120 -0
- package/dist/lib/dnd/announce.js.map +1 -0
- package/dist/lib/dnd/autoscroll.js +123 -0
- package/dist/lib/dnd/autoscroll.js.map +1 -0
- package/dist/lib/dnd/cross-drop.js +11 -0
- package/dist/lib/dnd/cross-drop.js.map +1 -0
- package/dist/lib/dnd/geometry.js +99 -0
- package/dist/lib/dnd/geometry.js.map +1 -0
- package/dist/lib/dnd/sensors/gesture.js +86 -0
- package/dist/lib/dnd/sensors/gesture.js.map +1 -0
- package/dist/lib/dnd/sensors/keyboard.js +47 -0
- package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
- package/dist/lib/dnd/sensors/pointer.js +32 -0
- package/dist/lib/dnd/sensors/pointer.js.map +1 -0
- package/dist/lib/dnd/session.js +256 -0
- package/dist/lib/dnd/session.js.map +1 -0
- package/dist/lib/dnd/use-drag.js +90 -0
- package/dist/lib/dnd/use-drag.js.map +1 -0
- package/dist/lib/dom/scroll-ancestor.js +18 -0
- package/dist/lib/dom/scroll-ancestor.js.map +1 -0
- package/dist/lib/format.js +23 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/group-in-order.js +13 -0
- package/dist/lib/group-in-order.js.map +1 -0
- package/dist/lib/header-fold.js +11 -0
- package/dist/lib/header-fold.js.map +1 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
- package/dist/lib/i18n/areas/board.js +35 -0
- package/dist/lib/i18n/areas/board.js.map +1 -0
- package/dist/lib/i18n/areas/card-face.js +10 -0
- package/dist/lib/i18n/areas/card-face.js.map +1 -0
- package/dist/lib/i18n/areas/chat-chart.js +118 -0
- package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
- package/dist/lib/i18n/areas/code-editor.js +24 -0
- package/dist/lib/i18n/areas/code-editor.js.map +1 -0
- package/dist/lib/i18n/areas/date-timeline.js +21 -0
- package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
- package/dist/lib/i18n/areas/dates.js +71 -0
- package/dist/lib/i18n/areas/dates.js.map +1 -0
- package/dist/lib/i18n/areas/docs-views.js +183 -0
- package/dist/lib/i18n/areas/docs-views.js.map +1 -0
- package/dist/lib/i18n/areas/feedback.js +75 -0
- package/dist/lib/i18n/areas/feedback.js.map +1 -0
- package/dist/lib/i18n/areas/formats.js +24 -0
- package/dist/lib/i18n/areas/formats.js.map +1 -0
- package/dist/lib/i18n/areas/forms.js +110 -0
- package/dist/lib/i18n/areas/forms.js.map +1 -0
- package/dist/lib/i18n/areas/keys.js +25 -0
- package/dist/lib/i18n/areas/keys.js.map +1 -0
- package/dist/lib/i18n/areas/markdown.js +136 -0
- package/dist/lib/i18n/areas/markdown.js.map +1 -0
- package/dist/lib/i18n/areas/move-rejected.js +14 -0
- package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
- package/dist/lib/i18n/areas/navigation.js +104 -0
- package/dist/lib/i18n/areas/navigation.js.map +1 -0
- package/dist/lib/i18n/areas/rbac.js +331 -0
- package/dist/lib/i18n/areas/rbac.js.map +1 -0
- package/dist/lib/i18n/emphasis.js +6 -0
- package/dist/lib/i18n/emphasis.js.map +1 -0
- package/dist/lib/i18n/number-format.js +9 -0
- package/dist/lib/i18n/number-format.js.map +1 -0
- package/dist/lib/i18n/plural.js +9 -0
- package/dist/lib/i18n/plural.js.map +1 -0
- package/dist/lib/i18n/provider.js +27 -0
- package/dist/lib/i18n/provider.js.map +1 -0
- package/dist/lib/i18n/strings.js +38 -0
- package/dist/lib/i18n/strings.js.map +1 -0
- package/dist/lib/icons.js +17 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/interactive-target.js +9 -0
- package/dist/lib/interactive-target.js.map +1 -0
- package/dist/lib/intl-cache.js +69 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/legal-document.js +37 -0
- package/dist/lib/legal-document.js.map +1 -0
- package/dist/lib/line-diff-model.js +51 -0
- package/dist/lib/line-diff-model.js.map +1 -0
- package/dist/lib/markdown/attachments.js +71 -0
- package/dist/lib/markdown/attachments.js.map +1 -0
- package/dist/lib/markdown/caret-map.js +153 -0
- package/dist/lib/markdown/caret-map.js.map +1 -0
- package/dist/lib/markdown/caret.js +35 -0
- package/dist/lib/markdown/caret.js.map +1 -0
- package/dist/lib/markdown/commands.js +443 -0
- package/dist/lib/markdown/commands.js.map +1 -0
- package/dist/lib/markdown/convert.js +153 -0
- package/dist/lib/markdown/convert.js.map +1 -0
- package/dist/lib/markdown/dom.js +89 -0
- package/dist/lib/markdown/dom.js.map +1 -0
- package/dist/lib/markdown/edit.js +92 -0
- package/dist/lib/markdown/edit.js.map +1 -0
- package/dist/lib/markdown/history.js +79 -0
- package/dist/lib/markdown/history.js.map +1 -0
- package/dist/lib/markdown/hotkeys.js +63 -0
- package/dist/lib/markdown/hotkeys.js.map +1 -0
- package/dist/lib/markdown/image-pipeline.js +236 -0
- package/dist/lib/markdown/image-pipeline.js.map +1 -0
- package/dist/lib/markdown/images.js +85 -0
- package/dist/lib/markdown/images.js.map +1 -0
- package/dist/lib/markdown/input.js +210 -0
- package/dist/lib/markdown/input.js.map +1 -0
- package/dist/lib/markdown/keys.js +37 -0
- package/dist/lib/markdown/keys.js.map +1 -0
- package/dist/lib/markdown/paste.js +180 -0
- package/dist/lib/markdown/paste.js.map +1 -0
- package/dist/lib/markdown/position.js +111 -0
- package/dist/lib/markdown/position.js.map +1 -0
- package/dist/lib/markdown/project.js +108 -0
- package/dist/lib/markdown/project.js.map +1 -0
- package/dist/lib/markdown/reconcile.js +127 -0
- package/dist/lib/markdown/reconcile.js.map +1 -0
- package/dist/lib/markdown/surface.js +373 -0
- package/dist/lib/markdown/surface.js.map +1 -0
- package/dist/lib/motion.js +22 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/pad.js +7 -0
- package/dist/lib/pad.js.map +1 -0
- package/dist/lib/paged-window/layout.js +15 -0
- package/dist/lib/paged-window/layout.js.map +1 -0
- package/dist/lib/paged-window/list-owner.js +21 -0
- package/dist/lib/paged-window/list-owner.js.map +1 -0
- package/dist/lib/paged-window/records-binding.js +239 -0
- package/dist/lib/paged-window/records-binding.js.map +1 -0
- package/dist/lib/paged-window/store.js +562 -0
- package/dist/lib/paged-window/store.js.map +1 -0
- package/dist/lib/paged-window/use-measured-pitch.js +38 -0
- package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
- package/dist/lib/paged-window/use-page-visibility.js +36 -0
- package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
- package/dist/lib/paged-window/use-paged-window.js +43 -0
- package/dist/lib/paged-window/use-paged-window.js.map +1 -0
- package/dist/lib/paged-window/use-scroll-root.js +12 -0
- package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
- package/dist/lib/persist.js +84 -0
- package/dist/lib/persist.js.map +1 -0
- package/dist/lib/preference-values.js +13 -0
- package/dist/lib/preference-values.js.map +1 -0
- package/dist/lib/preferences.js +86 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/reads/hooks.js +156 -0
- package/dist/lib/reads/hooks.js.map +1 -0
- package/dist/lib/reads/optimistic.js +169 -0
- package/dist/lib/reads/optimistic.js.map +1 -0
- package/dist/lib/reads/refetch.js +108 -0
- package/dist/lib/reads/refetch.js.map +1 -0
- package/dist/lib/reads/slots.js +215 -0
- package/dist/lib/reads/slots.js.map +1 -0
- package/dist/lib/realtime/hooks.js +40 -0
- package/dist/lib/realtime/hooks.js.map +1 -0
- package/dist/lib/realtime/provider.js +25 -0
- package/dist/lib/realtime/provider.js.map +1 -0
- package/dist/lib/realtime/registry.js +472 -0
- package/dist/lib/realtime/registry.js.map +1 -0
- package/dist/lib/records/define-record-type.js +33 -0
- package/dist/lib/records/define-record-type.js.map +1 -0
- package/dist/lib/records/hooks.js +39 -0
- package/dist/lib/records/hooks.js.map +1 -0
- package/dist/lib/records/store.js +572 -0
- package/dist/lib/records/store.js.map +1 -0
- package/dist/lib/records/wire.js +58 -0
- package/dist/lib/records/wire.js.map +1 -0
- package/dist/lib/reduced-motion-help.js +19 -0
- package/dist/lib/reduced-motion-help.js.map +1 -0
- package/dist/lib/scroll-caret.js +18 -0
- package/dist/lib/scroll-caret.js.map +1 -0
- package/dist/lib/sim/createSimStore.js +54 -0
- package/dist/lib/sim/createSimStore.js.map +1 -0
- package/dist/lib/sim/latency.js +28 -0
- package/dist/lib/sim/latency.js.map +1 -0
- package/dist/lib/sim/registry.js +13 -0
- package/dist/lib/sim/registry.js.map +1 -0
- package/dist/lib/sim/settings.js +41 -0
- package/dist/lib/sim/settings.js.map +1 -0
- package/dist/lib/submit-shortcut.js +25 -0
- package/dist/lib/submit-shortcut.js.map +1 -0
- package/dist/lib/syntax/index.js +33 -0
- package/dist/lib/syntax/index.js.map +1 -0
- package/dist/lib/syntax/languages/bash.js +77 -0
- package/dist/lib/syntax/languages/bash.js.map +1 -0
- package/dist/lib/syntax/languages/css.js +81 -0
- package/dist/lib/syntax/languages/css.js.map +1 -0
- package/dist/lib/syntax/languages/html.js +91 -0
- package/dist/lib/syntax/languages/html.js.map +1 -0
- package/dist/lib/syntax/languages/index.js +49 -0
- package/dist/lib/syntax/languages/index.js.map +1 -0
- package/dist/lib/syntax/languages/javascript.js +133 -0
- package/dist/lib/syntax/languages/javascript.js.map +1 -0
- package/dist/lib/syntax/languages/json.js +45 -0
- package/dist/lib/syntax/languages/json.js.map +1 -0
- package/dist/lib/syntax/languages/mongodb.js +24 -0
- package/dist/lib/syntax/languages/mongodb.js.map +1 -0
- package/dist/lib/syntax/languages/plain.js +10 -0
- package/dist/lib/syntax/languages/plain.js.map +1 -0
- package/dist/lib/syntax/languages/sql.js +113 -0
- package/dist/lib/syntax/languages/sql.js.map +1 -0
- package/dist/lib/syntax/languages/vue.js +31 -0
- package/dist/lib/syntax/languages/vue.js.map +1 -0
- package/dist/lib/syntax/languages/yaml.js +55 -0
- package/dist/lib/syntax/languages/yaml.js.map +1 -0
- package/dist/lib/syntax/markdown/grammar.js +52 -0
- package/dist/lib/syntax/markdown/grammar.js.map +1 -0
- package/dist/lib/syntax/markdown/inline.js +477 -0
- package/dist/lib/syntax/markdown/inline.js.map +1 -0
- package/dist/lib/syntax/markdown/parse.js +464 -0
- package/dist/lib/syntax/markdown/parse.js.map +1 -0
- package/dist/lib/syntax/markdown/refs.js +94 -0
- package/dist/lib/syntax/markdown/refs.js.map +1 -0
- package/dist/lib/syntax/markdown/render.js +230 -0
- package/dist/lib/syntax/markdown/render.js.map +1 -0
- package/dist/lib/syntax/markdown/spans.js +40 -0
- package/dist/lib/syntax/markdown/spans.js.map +1 -0
- package/dist/lib/syntax/registry.js +55 -0
- package/dist/lib/syntax/registry.js.map +1 -0
- package/dist/lib/syntax/tokenize.js +96 -0
- package/dist/lib/syntax/tokenize.js.map +1 -0
- package/dist/lib/time/instant.js +7 -0
- package/dist/lib/time/instant.js.map +1 -0
- package/dist/lib/time/plain.js +83 -0
- package/dist/lib/time/plain.js.map +1 -0
- package/dist/lib/time/relativeAge.js +20 -0
- package/dist/lib/time/relativeAge.js.map +1 -0
- package/dist/lib/time/relativeClock.js +59 -0
- package/dist/lib/time/relativeClock.js.map +1 -0
- package/dist/lib/time/types.js +23 -0
- package/dist/lib/time/types.js.map +1 -0
- package/dist/lib/time/zone.js +148 -0
- package/dist/lib/time/zone.js.map +1 -0
- package/dist/lib/use-controllable.js +16 -0
- package/dist/lib/use-controllable.js.map +1 -0
- package/dist/lib/use-fill-height.js +49 -0
- package/dist/lib/use-fill-height.js.map +1 -0
- package/dist/lib/use-hydrated.js +14 -0
- package/dist/lib/use-hydrated.js.map +1 -0
- package/dist/lib/use-media-query.js +30 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
- package/dist/lib/use-release-snap-drag.js +29 -0
- package/dist/lib/use-release-snap-drag.js.map +1 -0
- package/dist/lib/use-roving-options.js +18 -0
- package/dist/lib/use-roving-options.js.map +1 -0
- package/dist/lib/values/absent.js +5 -0
- package/dist/lib/values/absent.js.map +1 -0
- package/dist/lib/values/boolean.js +13 -0
- package/dist/lib/values/boolean.js.map +1 -0
- package/dist/lib/values/currency.js +23 -0
- package/dist/lib/values/currency.js.map +1 -0
- package/dist/lib/values/date.js +35 -0
- package/dist/lib/values/date.js.map +1 -0
- package/dist/lib/values/datetime.js +54 -0
- package/dist/lib/values/datetime.js.map +1 -0
- package/dist/lib/values/locale-date.js +60 -0
- package/dist/lib/values/locale-date.js.map +1 -0
- package/dist/lib/values/number.js +16 -0
- package/dist/lib/values/number.js.map +1 -0
- package/dist/pure.js +379 -0
- package/dist/pure.js.map +1 -0
- package/dist/styles.css +190 -0
- package/dist/theme.css +360 -0
- package/dist/types/components/Accordion.d.ts +15 -0
- package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
- package/dist/types/components/AppShell.d.ts +164 -0
- package/dist/types/components/Attention.d.ts +87 -0
- package/dist/types/components/Avatar.d.ts +154 -0
- package/dist/types/components/Badge.d.ts +131 -0
- package/dist/types/components/Board.d.ts +239 -0
- package/dist/types/components/Button.d.ts +208 -0
- package/dist/types/components/Callout.d.ts +163 -0
- package/dist/types/components/Card.d.ts +219 -0
- package/dist/types/components/Choice.d.ts +127 -0
- package/dist/types/components/CodeEditor.d.ts +86 -0
- package/dist/types/components/ColorPicker.d.ts +14 -0
- package/dist/types/components/Combobox.d.ts +43 -0
- package/dist/types/components/CommandPalette.d.ts +35 -0
- package/dist/types/components/ConcentricRing.d.ts +61 -0
- package/dist/types/components/ConnectionCard.d.ts +64 -0
- package/dist/types/components/ContextItemRow.d.ts +35 -0
- package/dist/types/components/CopyValue.d.ts +14 -0
- package/dist/types/components/CountBadge.d.ts +14 -0
- package/dist/types/components/DateCalendar.d.ts +30 -0
- package/dist/types/components/DateField.d.ts +29 -0
- package/dist/types/components/DatePicker.d.ts +20 -0
- package/dist/types/components/DateTimeText.d.ts +9 -0
- package/dist/types/components/DescriptionList.d.ts +40 -0
- package/dist/types/components/Dialog.d.ts +269 -0
- package/dist/types/components/DragDrop.d.ts +196 -0
- package/dist/types/components/Drawer.d.ts +163 -0
- package/dist/types/components/EditGutter.d.ts +44 -0
- package/dist/types/components/EmojiPicker.d.ts +30 -0
- package/dist/types/components/ErrorBoundary.d.ts +43 -0
- package/dist/types/components/Field.d.ts +37 -0
- package/dist/types/components/FileUpload.d.ts +22 -0
- package/dist/types/components/FilterMenu.d.ts +120 -0
- package/dist/types/components/GatesSection.d.ts +79 -0
- package/dist/types/components/Icon.d.ts +40 -0
- package/dist/types/components/IconButton.d.ts +69 -0
- package/dist/types/components/IconStack.d.ts +28 -0
- package/dist/types/components/ImageUploadField.d.ts +38 -0
- package/dist/types/components/InlineEdit.d.ts +183 -0
- package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
- package/dist/types/components/Input.d.ts +128 -0
- package/dist/types/components/LegalDocument.d.ts +23 -0
- package/dist/types/components/LineDiff.d.ts +53 -0
- package/dist/types/components/ListHeader.d.ts +45 -0
- package/dist/types/components/Loading.d.ts +131 -0
- package/dist/types/components/Markdown.d.ts +35 -0
- package/dist/types/components/MarkdownEditor.d.ts +129 -0
- package/dist/types/components/Menu.d.ts +157 -0
- package/dist/types/components/Navigation.d.ts +67 -0
- package/dist/types/components/NumberInput.d.ts +177 -0
- package/dist/types/components/OTPInput.d.ts +13 -0
- package/dist/types/components/OrderedEntityManager.d.ts +64 -0
- package/dist/types/components/PagedWindowList.d.ts +23 -0
- package/dist/types/components/PaginationBar.d.ts +31 -0
- package/dist/types/components/Panel.d.ts +94 -0
- package/dist/types/components/PasswordInput.d.ts +7 -0
- package/dist/types/components/PasswordRequirements.d.ts +11 -0
- package/dist/types/components/PatchDiff.d.ts +38 -0
- package/dist/types/components/PendingVeil.d.ts +8 -0
- package/dist/types/components/Popover.d.ts +231 -0
- package/dist/types/components/Progress.d.ts +580 -0
- package/dist/types/components/RatingScale.d.ts +30 -0
- package/dist/types/components/ReadMore.d.ts +26 -0
- package/dist/types/components/RecordCard.d.ts +413 -0
- package/dist/types/components/RelativeTime.d.ts +17 -0
- package/dist/types/components/SandboxedFrame.d.ts +37 -0
- package/dist/types/components/SearchInput.d.ts +6 -0
- package/dist/types/components/SecretField.d.ts +90 -0
- package/dist/types/components/SectionNav.d.ts +15 -0
- package/dist/types/components/Select.d.ts +53 -0
- package/dist/types/components/SequenceDiagram.d.ts +15 -0
- package/dist/types/components/SettingRow.d.ts +144 -0
- package/dist/types/components/SignOffRings.d.ts +29 -0
- package/dist/types/components/Slider.d.ts +255 -0
- package/dist/types/components/SolutionChoice.d.ts +49 -0
- package/dist/types/components/SortMenu.d.ts +45 -0
- package/dist/types/components/Spinner.d.ts +29 -0
- package/dist/types/components/Stat.d.ts +136 -0
- package/dist/types/components/StatusSelect.d.ts +93 -0
- package/dist/types/components/Surface.d.ts +145 -0
- package/dist/types/components/Table.d.ts +164 -0
- package/dist/types/components/Tabs.d.ts +142 -0
- package/dist/types/components/ThemeMenu.d.ts +56 -0
- package/dist/types/components/Toast.d.ts +63 -0
- package/dist/types/components/Toggle.d.ts +168 -0
- package/dist/types/components/ToggleMatrix.d.ts +51 -0
- package/dist/types/components/Tree.d.ts +20 -0
- package/dist/types/components/TriStateSwitch.d.ts +63 -0
- package/dist/types/components/VideoPlayer.d.ts +26 -0
- package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
- package/dist/types/components/auth/AuthLayout.d.ts +12 -0
- package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
- package/dist/types/components/auth/LoginForm.d.ts +13 -0
- package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
- package/dist/types/components/auth/SignInProviders.d.ts +56 -0
- package/dist/types/components/auth/SignupCard.d.ts +62 -0
- package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
- package/dist/types/components/auth/index.d.ts +8 -0
- package/dist/types/components/board/context.d.ts +65 -0
- package/dist/types/components/board/recipe.d.ts +97 -0
- package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
- package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
- package/dist/types/components/calendar/EventActions.d.ts +16 -0
- package/dist/types/components/calendar/format.d.ts +42 -0
- package/dist/types/components/calendar/palette.d.ts +17 -0
- package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
- package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
- package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
- package/dist/types/components/calendar/use-now.d.ts +20 -0
- package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
- package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
- package/dist/types/components/card-face/CardFace.d.ts +106 -0
- package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
- package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
- package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
- package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
- package/dist/types/components/card-face/TapTip.d.ts +15 -0
- package/dist/types/components/card-face/hit-area.d.ts +20 -0
- package/dist/types/components/card-face/vocabulary.d.ts +83 -0
- package/dist/types/components/chart/BarList.d.ts +27 -0
- package/dist/types/components/chart/LineChart.d.ts +64 -0
- package/dist/types/components/chart/ShareBar.d.ts +26 -0
- package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
- package/dist/types/components/chart/label-metrics.d.ts +9 -0
- package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
- package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
- package/dist/types/components/chart/line-series-style.d.ts +14 -0
- package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
- package/dist/types/components/chart/shared.d.ts +122 -0
- package/dist/types/components/chart/time-series-scale.d.ts +29 -0
- package/dist/types/components/chat/Attachment.d.ts +125 -0
- package/dist/types/components/chat/Chat.d.ts +60 -0
- package/dist/types/components/chat/Composer.d.ts +62 -0
- package/dist/types/components/chat/ContextMeter.d.ts +45 -0
- package/dist/types/components/chat/EffortControl.d.ts +23 -0
- package/dist/types/components/chat/FileCover.d.ts +14 -0
- package/dist/types/components/chat/Message.d.ts +66 -0
- package/dist/types/components/chat/MessageScroller.d.ts +18 -0
- package/dist/types/components/chat/ModelSelector.d.ts +44 -0
- package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
- package/dist/types/components/chat/download-file.d.ts +7 -0
- package/dist/types/components/chat/file-icon.d.ts +29 -0
- package/dist/types/components/chat/types.d.ts +165 -0
- package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
- package/dist/types/components/checklist/index.d.ts +3 -0
- package/dist/types/components/checklist/tally.d.ts +19 -0
- package/dist/types/components/checklist/types.d.ts +28 -0
- package/dist/types/components/code-editor/context.d.ts +32 -0
- package/dist/types/components/code-editor/editing.d.ts +39 -0
- package/dist/types/components/code-editor/highlight.d.ts +20 -0
- package/dist/types/components/code-editor/recipe.d.ts +109 -0
- package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
- package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
- package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
- package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
- package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
- package/dist/types/components/drag-drop/context.d.ts +85 -0
- package/dist/types/components/drag-drop/recipe.d.ts +163 -0
- package/dist/types/components/drag-drop/shift.d.ts +153 -0
- package/dist/types/components/edit/activation.d.ts +21 -0
- package/dist/types/components/edit/outcome.d.ts +29 -0
- package/dist/types/components/edit/use-edit-session.d.ts +77 -0
- package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
- package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
- package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
- package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
- package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
- package/dist/types/components/file-viewer/frames.d.ts +28 -0
- package/dist/types/components/file-viewer/index.d.ts +3 -0
- package/dist/types/components/file-viewer/types.d.ts +70 -0
- package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
- package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
- package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
- package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
- package/dist/types/components/focus-web/index.d.ts +4 -0
- package/dist/types/components/focus-web/layout.d.ts +55 -0
- package/dist/types/components/focus-web/types.d.ts +131 -0
- package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
- package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
- package/dist/types/components/graph-explorer/index.d.ts +5 -0
- package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
- package/dist/types/components/graph-explorer/types.d.ts +62 -0
- package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
- package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
- package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
- package/dist/types/components/kanban/recipe.d.ts +73 -0
- package/dist/types/components/kanban/types.d.ts +55 -0
- package/dist/types/components/markdown/Affordances.d.ts +105 -0
- package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
- package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
- package/dist/types/components/media-error.d.ts +11 -0
- package/dist/types/components/nav-sections.d.ts +10 -0
- package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
- package/dist/types/components/node-canvas/index.d.ts +3 -0
- package/dist/types/components/node-canvas/layout.d.ts +29 -0
- package/dist/types/components/node-canvas/types.d.ts +207 -0
- package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
- package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
- package/dist/types/components/openapi/OperationCard.d.ts +33 -0
- package/dist/types/components/openapi/SchemaView.d.ts +14 -0
- package/dist/types/components/openapi/index.d.ts +6 -0
- package/dist/types/components/openapi/resolve.d.ts +72 -0
- package/dist/types/components/openapi/types.d.ts +128 -0
- package/dist/types/components/overlay-shell.d.ts +48 -0
- package/dist/types/components/overlay-stack.d.ts +18 -0
- package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
- package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
- package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
- package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
- package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
- package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
- package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
- package/dist/types/components/provenance/absence.d.ts +37 -0
- package/dist/types/components/provenance/index.d.ts +7 -0
- package/dist/types/components/provenance/types.d.ts +137 -0
- package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
- package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
- package/dist/types/components/rbac/AgentKeysList.d.ts +20 -0
- package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
- package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -0
- package/dist/types/components/rbac/Brand.d.ts +8 -0
- package/dist/types/components/rbac/Can.d.ts +19 -0
- package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
- package/dist/types/components/rbac/DangerZone.d.ts +8 -0
- package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
- package/dist/types/components/rbac/EndedLine.d.ts +21 -0
- package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
- package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
- package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
- package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
- package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
- package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
- package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
- package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
- package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
- package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
- package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
- package/dist/types/components/rbac/SessionsList.d.ts +35 -0
- package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
- package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
- package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
- package/dist/types/components/rbac/index.d.ts +25 -0
- package/dist/types/components/rbac/permissionSections.d.ts +8 -0
- package/dist/types/components/rbac/stagedForm.d.ts +25 -0
- package/dist/types/components/rbac/types.d.ts +65 -0
- package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
- package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
- package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
- package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
- package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
- package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
- package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
- package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
- package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
- package/dist/types/components/roadmap/derive.d.ts +39 -0
- package/dist/types/components/roadmap/index.d.ts +10 -0
- package/dist/types/components/roadmap/types.d.ts +86 -0
- package/dist/types/components/stepper/Stepper.d.ts +79 -0
- package/dist/types/components/stepper/derive.d.ts +49 -0
- package/dist/types/components/stepper/index.d.ts +3 -0
- package/dist/types/components/stepper/types.d.ts +118 -0
- package/dist/types/icons/data.d.ts +2054 -0
- package/dist/types/index.d.ts +209 -0
- package/dist/types/lib/attention.d.ts +62 -0
- package/dist/types/lib/board/anchor.d.ts +69 -0
- package/dist/types/lib/board/index.d.ts +17 -0
- package/dist/types/lib/board/model.d.ts +43 -0
- package/dist/types/lib/board/move.d.ts +181 -0
- package/dist/types/lib/board/position.d.ts +22 -0
- package/dist/types/lib/board/rejection.d.ts +8 -0
- package/dist/types/lib/board/types.d.ts +294 -0
- package/dist/types/lib/board/use-board.d.ts +47 -0
- package/dist/types/lib/calendar/band-packer.d.ts +53 -0
- package/dist/types/lib/calendar/drag.d.ts +125 -0
- package/dist/types/lib/calendar/index.d.ts +4 -0
- package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
- package/dist/types/lib/calendar/segments.d.ts +91 -0
- package/dist/types/lib/calendar/types.d.ts +166 -0
- package/dist/types/lib/chart-palette.d.ts +14 -0
- package/dist/types/lib/clipboard.d.ts +12 -0
- package/dist/types/lib/cn.d.ts +7 -0
- package/dist/types/lib/color.d.ts +14 -0
- package/dist/types/lib/component-guidance.d.ts +15 -0
- package/dist/types/lib/confidence.d.ts +28 -0
- package/dist/types/lib/date-timeline/scale.d.ts +143 -0
- package/dist/types/lib/design-frame/document.d.ts +39 -0
- package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
- package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
- package/dist/types/lib/design-frame/protocol.d.ts +78 -0
- package/dist/types/lib/dev-warn.d.ts +10 -0
- package/dist/types/lib/dnd/announce.d.ts +124 -0
- package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
- package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
- package/dist/types/lib/dnd/geometry.d.ts +126 -0
- package/dist/types/lib/dnd/index.d.ts +17 -0
- package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
- package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
- package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
- package/dist/types/lib/dnd/session.d.ts +124 -0
- package/dist/types/lib/dnd/types.d.ts +226 -0
- package/dist/types/lib/dnd/use-drag.d.ts +82 -0
- package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
- package/dist/types/lib/format.d.ts +33 -0
- package/dist/types/lib/group-in-order.d.ts +13 -0
- package/dist/types/lib/header-fold.d.ts +10 -0
- package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
- package/dist/types/lib/i18n/areas/board.d.ts +51 -0
- package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
- package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
- package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
- package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
- package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
- package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
- package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
- package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
- package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
- package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
- package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
- package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
- package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
- package/dist/types/lib/i18n/areas/rbac.d.ts +633 -0
- package/dist/types/lib/i18n/emphasis.d.ts +3 -0
- package/dist/types/lib/i18n/index.d.ts +10 -0
- package/dist/types/lib/i18n/number-format.d.ts +5 -0
- package/dist/types/lib/i18n/plural.d.ts +7 -0
- package/dist/types/lib/i18n/provider.d.ts +16 -0
- package/dist/types/lib/i18n/strings.d.ts +18 -0
- package/dist/types/lib/icons.d.ts +22 -0
- package/dist/types/lib/interactive-target.d.ts +3 -0
- package/dist/types/lib/intl-cache.d.ts +31 -0
- package/dist/types/lib/legal-document.d.ts +82 -0
- package/dist/types/lib/line-diff-model.d.ts +39 -0
- package/dist/types/lib/markdown/attachments.d.ts +50 -0
- package/dist/types/lib/markdown/caret-map.d.ts +69 -0
- package/dist/types/lib/markdown/caret.d.ts +6 -0
- package/dist/types/lib/markdown/commands.d.ts +186 -0
- package/dist/types/lib/markdown/convert.d.ts +99 -0
- package/dist/types/lib/markdown/dom.d.ts +30 -0
- package/dist/types/lib/markdown/edit.d.ts +16 -0
- package/dist/types/lib/markdown/history.d.ts +59 -0
- package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
- package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
- package/dist/types/lib/markdown/images.d.ts +138 -0
- package/dist/types/lib/markdown/input.d.ts +38 -0
- package/dist/types/lib/markdown/keys.d.ts +34 -0
- package/dist/types/lib/markdown/paste.d.ts +9 -0
- package/dist/types/lib/markdown/position.d.ts +43 -0
- package/dist/types/lib/markdown/project.d.ts +88 -0
- package/dist/types/lib/markdown/reconcile.d.ts +63 -0
- package/dist/types/lib/markdown/surface.d.ts +236 -0
- package/dist/types/lib/motion.d.ts +30 -0
- package/dist/types/lib/pad.d.ts +6 -0
- package/dist/types/lib/paged-window/index.d.ts +2 -0
- package/dist/types/lib/paged-window/layout.d.ts +21 -0
- package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
- package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
- package/dist/types/lib/paged-window/store.d.ts +307 -0
- package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
- package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
- package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
- package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
- package/dist/types/lib/persist.d.ts +57 -0
- package/dist/types/lib/preference-values.d.ts +72 -0
- package/dist/types/lib/preferences.d.ts +26 -0
- package/dist/types/lib/reads/hooks.d.ts +49 -0
- package/dist/types/lib/reads/index.d.ts +5 -0
- package/dist/types/lib/reads/optimistic.d.ts +119 -0
- package/dist/types/lib/reads/refetch.d.ts +83 -0
- package/dist/types/lib/reads/slots.d.ts +137 -0
- package/dist/types/lib/reads/types.d.ts +155 -0
- package/dist/types/lib/realtime/hooks.d.ts +38 -0
- package/dist/types/lib/realtime/index.d.ts +4 -0
- package/dist/types/lib/realtime/provider.d.ts +38 -0
- package/dist/types/lib/realtime/registry.d.ts +225 -0
- package/dist/types/lib/realtime/types.d.ts +242 -0
- package/dist/types/lib/records/define-record-type.d.ts +29 -0
- package/dist/types/lib/records/hooks.d.ts +46 -0
- package/dist/types/lib/records/index.d.ts +5 -0
- package/dist/types/lib/records/store.d.ts +289 -0
- package/dist/types/lib/records/types.d.ts +195 -0
- package/dist/types/lib/records/wire.d.ts +96 -0
- package/dist/types/lib/reduced-motion-help.d.ts +23 -0
- package/dist/types/lib/scroll-caret.d.ts +6 -0
- package/dist/types/lib/sim/createSimStore.d.ts +18 -0
- package/dist/types/lib/sim/index.d.ts +5 -0
- package/dist/types/lib/sim/latency.d.ts +10 -0
- package/dist/types/lib/sim/registry.d.ts +14 -0
- package/dist/types/lib/sim/settings.d.ts +11 -0
- package/dist/types/lib/sim/types.d.ts +3 -0
- package/dist/types/lib/submit-shortcut.d.ts +24 -0
- package/dist/types/lib/syntax/index.d.ts +16 -0
- package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
- package/dist/types/lib/syntax/languages/css.d.ts +1 -0
- package/dist/types/lib/syntax/languages/html.d.ts +17 -0
- package/dist/types/lib/syntax/languages/index.d.ts +33 -0
- package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
- package/dist/types/lib/syntax/languages/json.d.ts +1 -0
- package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
- package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
- package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
- package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
- package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
- package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
- package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
- package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
- package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
- package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
- package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
- package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
- package/dist/types/lib/syntax/registry.d.ts +37 -0
- package/dist/types/lib/syntax/tokenize.d.ts +17 -0
- package/dist/types/lib/syntax/types.d.ts +119 -0
- package/dist/types/lib/time/index.d.ts +4 -0
- package/dist/types/lib/time/instant.d.ts +2 -0
- package/dist/types/lib/time/plain.d.ts +61 -0
- package/dist/types/lib/time/relativeAge.d.ts +18 -0
- package/dist/types/lib/time/relativeClock.d.ts +8 -0
- package/dist/types/lib/time/types.d.ts +87 -0
- package/dist/types/lib/time/zone.d.ts +106 -0
- package/dist/types/lib/use-controllable.d.ts +14 -0
- package/dist/types/lib/use-fill-height.d.ts +26 -0
- package/dist/types/lib/use-hydrated.d.ts +8 -0
- package/dist/types/lib/use-media-query.d.ts +29 -0
- package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
- package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
- package/dist/types/lib/use-roving-options.d.ts +10 -0
- package/dist/types/lib/values/absent.d.ts +7 -0
- package/dist/types/lib/values/boolean.d.ts +29 -0
- package/dist/types/lib/values/currency.d.ts +22 -0
- package/dist/types/lib/values/date.d.ts +30 -0
- package/dist/types/lib/values/datetime.d.ts +48 -0
- package/dist/types/lib/values/index.d.ts +5 -0
- package/dist/types/lib/values/locale-date.d.ts +34 -0
- package/dist/types/lib/values/number.d.ts +27 -0
- package/dist/types/pure.d.ts +48 -0
- package/package.json +136 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Message.js","sources":["../../../src/components/chat/Message.tsx"],"sourcesContent":["import { useState, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { copyText as copyToClipboard } from \"../../lib/clipboard\";\nimport { Icon } from \"../Icon\";\nimport { Avatar } from \"../Avatar\";\nimport { Tooltip } from \"../Popover\";\nimport { Collapsible } from \"../Surface\";\nimport { RelativeTime } from \"../RelativeTime\";\nimport { CodeBlock } from \"../Markdown\";\nimport { StreamingMarkdown } from \"./StreamingMarkdown\";\nimport { Attachment, AttachmentList } from \"./Attachment\";\nimport { ChatStatus } from \"./ContextMeter\";\nimport type {\n ChatComponents,\n ChatFile,\n ChatMessage,\n MessagePart,\n PartRenderers,\n RenderContext,\n ToolPart,\n ToolStatus,\n} from \"./types\";\n\n/* ============================================================================\n MESSAGE\n One turn, rendered from its parts.\n\n ROLE DECIDES SHAPE, NOT JUST COLOUR. A user turn is a bounded bubble because\n it is a discrete thing someone said and its edges are meaningful. An\n assistant turn is full-width unbubbled prose because it is long, structured,\n and frequently contains code, tables and controls — putting that inside a\n rounded box makes every code block fight the container it sits in. Chat UIs\n that bubble both ends look symmetrical and read worse.\n ========================================================================= */\n\nconst TOOL_ICONS: Record<ToolStatus, { icon: \"loader-circle\" | \"check\" | \"circle-x\"; className: string }> = {\n running: { icon: \"loader-circle\", className: \"animate-spin text-accent-text\" },\n success: { icon: \"check\", className: \"text-success\" },\n error: { icon: \"circle-x\", className: \"text-danger\" },\n};\n\nexport interface ToolCallProps {\n part: ToolPart;\n defaultOpen?: boolean;\n className?: string;\n}\n\n/**\n * A tool invocation, collapsed to one line.\n *\n * COLLAPSED BY DEFAULT because the transcript is a conversation and not a log:\n * twenty lines of output between two sentences buries both of them. The summary\n * carries enough to decide whether opening it is worth doing, which is the only\n * decision anyone makes about a tool call they did not have to authorise.\n */\nexport function ToolCall({ part, defaultOpen = false, className }: ToolCallProps) {\n const strings = useUiStrings().chat.message;\n const status = TOOL_ICONS[part.status];\n const { added, removed } = part.stats ?? {};\n\n const header = (\n <span className=\"flex w-full items-center gap-2 text-left\">\n <Icon name={status.icon} size=\"xs\" className={cn(\"shrink-0\", status.className)} />\n <span className=\"min-w-0 flex-1 truncate text-xs text-secondary\">\n {part.status === \"running\" ? <ChatStatus>{part.summary}</ChatStatus> : part.summary}\n </span>\n {added !== undefined && added > 0 && (\n <span className=\"shrink-0 font-mono text-2xs text-success\">+{added}</span>\n )}\n {removed !== undefined && removed > 0 && (\n <span className=\"shrink-0 font-mono text-2xs text-danger\">−{removed}</span>\n )}\n {part.detail !== undefined && (\n <Icon\n name=\"chevron-right\"\n size=\"xs\"\n className=\"shrink-0 text-tertiary transition-[var(--tx-colors),transform,translate,scale,rotate] duration-(--dur-fast) group-data-panel-open/collapsible:rotate-90\"\n />\n )}\n </span>\n );\n\n if (part.detail === undefined) {\n return (\n <div\n className={cn(\n \"my-1 flex items-center rounded-md border border-border-subtle bg-surface-raised px-2.5 py-1.5\",\n className,\n )}\n >\n {header}\n </div>\n );\n }\n\n return (\n <Collapsible\n defaultOpen={defaultOpen}\n className={cn(\"my-1\", className)}\n chevron={false}\n /* `dx-ground-raised`: the row paints its own resting surface, so its\n hover lift is measured from that rather than from the transcript. */\n triggerClassName=\"dx-ground-raised w-full self-stretch border border-border-subtle bg-surface-raised px-2.5 py-1.5 text-left hover:border-border hover:bg-surface-hover focus-visible:ring-2 focus-visible:ring-focus-ring\"\n trigger={header}\n >\n {/* Same reason as the code block: it scrolls sideways, so it has to be\n reachable without a pointer. */}\n <div\n tabIndex={0}\n role=\"region\"\n aria-label={strings.toolOutput(part.name)}\n className=\"mt-1 overflow-x-auto rounded-md border border-border-subtle bg-surface-inset px-3 py-2 font-mono text-2xs whitespace-pre text-secondary outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset\"\n >\n {part.detail}\n </div>\n </Collapsible>\n );\n}\n\n/**\n * Model reasoning, hidden until asked for.\n *\n * Shown collapsed even while streaming — the label shimmers so it is obviously\n * live, but the text does not push the answer down the page as it grows. An\n * expanding reasoning block moves the thing the reader is waiting for.\n */\nfunction Reasoning({ text, label, streaming }: { text: string; label?: string; streaming?: boolean }) {\n const strings = useUiStrings().chat.message;\n return (\n <Collapsible\n className=\"my-1.5\"\n chevron={false}\n triggerClassName=\"gap-1.5 px-1.5 py-1 text-2xs text-tertiary hover:text-secondary focus-visible:ring-2 focus-visible:ring-focus-ring\"\n trigger={\n <>\n <Icon name=\"brain\" size=\"xs\" />\n {streaming ? (\n <ChatStatus>{label ?? strings.thinking}</ChatStatus>\n ) : (\n <span>{label ?? strings.thought}</span>\n )}\n <Icon\n name=\"chevron-right\"\n size=\"xs\"\n className=\"transition-[var(--tx-colors),transform,translate,scale,rotate] duration-(--dur-fast) group-data-panel-open/collapsible:rotate-90\"\n />\n </>\n }\n >\n <div className=\"mt-1 border-l-2 border-border-subtle pl-3 text-xs whitespace-pre-wrap text-tertiary\">\n {text}\n </div>\n </Collapsible>\n );\n}\n\n/** A part nothing can draw. Loud and visible — never dropped, never thrown. */\nfunction UnrenderablePart({ reason, name }: { reason: string; name: string }) {\n const strings = useUiStrings().chat.message;\n return (\n <div\n role=\"note\"\n className=\"my-1 flex items-start gap-2 rounded-md border border-dashed border-warning-border bg-warning-subtle px-2.5 py-2 text-2xs text-warning-text\"\n >\n <Icon name=\"triangle-alert\" size=\"xs\" className=\"mt-px shrink-0\" />\n <span>\n <strong className=\"font-semibold\">{strings.unrenderable}</strong> {reason}{\" \"}\n <code className=\"font-mono\">{name}</code>\n </span>\n </div>\n );\n}\n\nexport interface MessagePartViewProps<TApp = unknown> {\n part: MessagePart;\n context: RenderContext<TApp>;\n renderers?: PartRenderers<TApp>;\n components?: ChatComponents<TApp>;\n onPreviewFile?: (file: ChatFile) => void;\n onDownloadFile?: (file: ChatFile) => void;\n}\n\nexport function MessagePartView<TApp>({\n part,\n context,\n renderers,\n components,\n onPreviewFile,\n onDownloadFile,\n}: MessagePartViewProps<TApp>) {\n const strings = useUiStrings().chat.message;\n switch (part.type) {\n case \"text\":\n return renderers?.text ? (\n <>{renderers.text(part, context)}</>\n ) : (\n <StreamingMarkdown>{part.text}</StreamingMarkdown>\n );\n\n case \"code\":\n return renderers?.code ? (\n <>{renderers.code(part, context)}</>\n ) : (\n <CodeBlock code={part.code} language={part.language} filename={part.filename} />\n );\n\n case \"reasoning\":\n return renderers?.reasoning ? (\n <>{renderers.reasoning(part, context)}</>\n ) : (\n <Reasoning text={part.text} label={part.label} streaming={part.streaming} />\n );\n\n case \"tool\":\n return renderers?.tool ? <>{renderers.tool(part, context)}</> : <ToolCall part={part} />;\n\n case \"file\":\n return renderers?.file ? (\n <>{renderers.file(part, context)}</>\n ) : (\n <div className=\"my-1.5\">\n <Attachment\n file={part.file}\n layout=\"row\"\n onPreview={onPreviewFile}\n onDownload={onDownloadFile}\n />\n </div>\n );\n\n case \"component\": {\n const render = components?.[part.component];\n if (!render) {\n return (\n <UnrenderablePart\n reason={strings.unregisteredComponent}\n name={part.component}\n />\n );\n }\n return <>{render(part.props ?? {}, context)}</>;\n }\n\n default: {\n /* Exhaustiveness is checked by the compiler; this branch exists for data\n that arrived at RUNTIME from a server or a stored transcript, which the\n type system never saw. */\n const unknown = part as { type?: string };\n return <UnrenderablePart reason={strings.unknownPart} name={String(unknown.type)} />;\n }\n }\n}\n\nexport interface MessageAction {\n id: string;\n icon: Parameters<typeof Icon>[0][\"name\"];\n label: string;\n onClick: (message: ChatMessage) => void;\n /** Latches on — a cast feedback vote, a saved message. */\n active?: boolean;\n}\n\nexport interface MessageProps<TApp = unknown> {\n message: ChatMessage;\n renderers?: PartRenderers<TApp>;\n components?: ChatComponents<TApp>;\n appContext?: TApp;\n /** Buttons in the meta bar on the avatar and name line, after copy. Assistant turns only, unless `on` says otherwise. */\n actions?: MessageAction[];\n /**\n * DXUI-19: the message's state (a person's Sent / Seen / Responded checks, a sending spinner), drawn in the\n * meta bar after the time and copy. The library draws no state of its own; the caller owns what it means and\n * supplies its accessible label. Always visible, never faded with the copy button.\n */\n state?: ReactNode;\n /**\n * DXUI-24: plain gray text for the meta bar (a size, a count), drawn directly after the time, before copy and\n * `actions`, and never faded. Only a value that renders counts, as `state`. The caller owns what it says.\n */\n meta?: ReactNode;\n /** Hides the avatar and name and tightens the spacing — for consecutive turns from the same author. The header line stays for the meta bar, on the author's side (left for an agent, right for a person). */\n grouped?: boolean;\n showAvatar?: boolean;\n /** DX-5275: draws the author's avatar beside a `user` turn too (right edge), so a two-sided conversation of named people shows who spoke on both sides. */\n showUserAvatar?: boolean;\n showTimestamp?: boolean;\n /** DX-5275: the time, the copy button and `actions` in the meta bar stay fully visible instead of fading in on hover, for a transcript whose age is part of the record. */\n persistentToolbar?: boolean;\n onPreviewFile?: (file: ChatFile) => void;\n onDownloadFile?: (file: ChatFile) => void;\n className?: string;\n ref?: Ref<HTMLElement>;\n}\n\nexport function Message<TApp = unknown>({\n message,\n renderers,\n components,\n appContext,\n actions,\n state,\n meta,\n grouped = false,\n showAvatar = true,\n showUserAvatar = false,\n showTimestamp = false,\n persistentToolbar = false,\n onPreviewFile,\n onDownloadFile,\n className,\n ref,\n}: MessageProps<TApp>) {\n const strings = useUiStrings().chat.message;\n const user = message.role === \"user\";\n const system = message.role === \"system\";\n\n const context: RenderContext<TApp> = {\n message,\n streaming: message.streaming ?? false,\n app: appContext as TApp,\n };\n\n const body = (\n <>\n {message.attachments && message.attachments.length > 0 && (\n <AttachmentList\n files={message.attachments}\n layout={user ? \"tile\" : \"row\"}\n onPreview={onPreviewFile}\n onDownload={onDownloadFile}\n className=\"mb-2\"\n />\n )}\n {message.parts.map((part, index) => (\n <MessagePartView\n key={index}\n part={part}\n context={context}\n renderers={renderers}\n components={components}\n onPreviewFile={onPreviewFile}\n onDownloadFile={onDownloadFile}\n />\n ))}\n {message.error && (\n <p className=\"mt-1.5 flex items-start gap-1.5 text-xs text-danger-text\">\n <Icon name=\"circle-alert\" size=\"xs\" className=\"mt-px shrink-0\" />\n {message.error}\n </p>\n )}\n {/* A caret while the turn is still arriving. Placed after the parts so it\n trails the text rather than sitting in a fixed corner — the eye\n follows it and knows where the next word lands. */}\n {message.streaming && message.parts.length > 0 && (\n <span\n aria-hidden\n className=\"ml-0.5 inline-block h-3.5 w-[2px] translate-y-0.5 animate-pulse rounded-full bg-accent align-baseline\"\n />\n )}\n </>\n );\n\n if (system) {\n return (\n <div\n role=\"note\"\n className={cn(\n \"mx-auto my-1 flex max-w-prose items-center gap-2 rounded-md border border-border-subtle bg-surface-raised px-3 py-1.5 text-2xs text-tertiary\",\n className,\n )}\n >\n <Icon name=\"info\" size=\"xs\" className=\"shrink-0\" />\n <div className=\"min-w-0 flex-1\">{body}</div>\n </div>\n );\n }\n\n const copyText = message.parts\n .map((part) => (part.type === \"text\" ? part.text : part.type === \"code\" ? part.code : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n /* A person's avatar is `showUserAvatar` alone, every other role's is `showAvatar`. */\n const showMessageAvatar = !grouped && (user ? showUserAvatar : showAvatar);\n const name = grouped ? undefined : message.author?.name;\n const metaBar = {\n message,\n time: showTimestamp ? message.createdAt : undefined,\n copyText,\n actions,\n state,\n meta,\n persistent: persistentToolbar,\n };\n /* DXUI-19: ONE rule. The header line holds the avatar (if any), the name (if any) and the meta bar (if any), and is\n drawn whenever any of them will render once the turn is finished, and always while it streams: a streaming turn\n holds the line (its hidden bar's height reserved) whatever it holds so far, so the body never jumps DOWN mid-read\n (the copy text, and with it the bar, only appears when the first text arrives). A finished turn with nothing in\n its bar drops the empty line once, after it is done: the body moves up, never down. The body never shares its row\n with the meta bar, so it stays full width. With neither avatar nor name (a grouped turn) the bar is the line's\n only content and sits on the author's side: left for an agent, right for a person (a person's line is\n `flex-row-reverse`), so an agent's time never reads as the person's. */\n const hasHeader = showMessageAvatar || Boolean(name) || Boolean(message.streaming) || metaBarWhenFinished(metaBar);\n\n /* No avatar column, so the body fills the width it is given. A person's turn mirrors the header line (avatar at\n the right edge), so a person's bubble ends where their avatar does. `items-center` centres the avatar and the\n name on each other; `min-h-6` / the coarse-pointer `min-h-11` are the bar's height (24px buttons, 44px on touch),\n so the line does not change height when a streaming turn (no bar yet) finishes. */\n return (\n <article\n ref={ref}\n data-message={message.id}\n data-role={message.role}\n className={cn(\"group/message flex w-full flex-col\", grouped ? \"mt-1\" : \"mt-5 first:mt-0\", className)}\n >\n {hasHeader && (\n <header\n className={cn(\n \"flex min-h-6 min-w-0 items-center gap-2 [@media(pointer:coarse)]:min-h-11\",\n grouped ? \"mb-0.5\" : \"mb-1.5\",\n user && \"flex-row-reverse\",\n )}\n >\n {showMessageAvatar && (\n <Avatar\n size=\"sm\"\n name={message.author?.name ?? strings.assistant}\n src={message.author?.avatarUrl}\n fallback={message.author?.icon ? <Icon name={message.author.icon} size=\"sm\" /> : undefined}\n />\n )}\n {name && <span className=\"min-w-0 truncate text-xs font-semibold text-secondary\">{name}</span>}\n <MessageMetaBar {...metaBar} />\n </header>\n )}\n\n <div className={cn(\"flex min-w-0\", user && \"justify-end\")}>\n {/* `flex-1` for a non-user turn: the body is a flex item, and without it a `w-full` child (tool call, table,\n code block) would shrink to its widest sibling instead of spanning the row. */}\n <div\n className={cn(\n \"min-w-0 max-w-full\",\n user ? \"rounded-2xl rounded-tr-md bg-accent-subtle px-3.5 py-2.5 text-sm text-primary\" : \"flex-1\",\n )}\n >\n {body}\n </div>\n </div>\n </article>\n );\n}\n\n/** How long the copy button shows \"Copied\" before it goes back to \"Copy\". */\nconst COPIED_RESET_MS = 1600;\n\n/** What `MessageMetaBar` is given, and what decides whether it draws anything. */\ninterface MessageMetaBarProps {\n message: ChatMessage;\n /** The age to show, when the caller asked for one. */\n time?: ChatMessage[\"createdAt\"];\n copyText: string;\n actions?: MessageAction[];\n state?: ReactNode;\n /** DXUI-24: the `meta` prop. */\n meta?: ReactNode;\n persistent: boolean;\n}\n\n/** DXUI-19: a `state` or `meta` counts only as a value that renders, so `cond && <Mark />` (false) draws no empty slot. */\nconst rendersNode = (state: ReactNode) => state !== null && state !== undefined && typeof state !== \"boolean\";\n\n/** Whether there is anything to put in the time, copy and `actions` group once the turn is finished. */\nconst toolbarHasContent = ({ time, copyText, actions }: MessageMetaBarProps) =>\n Boolean(time) || copyText.length > 0 || (actions?.length ?? 0) > 0;\n\n/** The group is absent while the turn streams. */\nconst toolbarRenders = (props: MessageMetaBarProps) => !props.message.streaming && toolbarHasContent(props);\n\nconst metaBarRenders = (props: MessageMetaBarProps) => toolbarRenders(props) || rendersNode(props.state) || rendersNode(props.meta);\n\n/** What the bar will hold once the turn is finished: decides whether the header line exists, so streaming never changes it. */\nconst metaBarWhenFinished = (props: MessageMetaBarProps) => toolbarHasContent(props) || rendersNode(props.state) || rendersNode(props.meta);\n\n/**\n * The bar of a message, on the header line, in this order: the time, the caller's `meta`, copy, `actions`, the\n * caller's `state`.\n *\n * It carries no chrome of its own (no background, ring or border), so nothing is left visible while the toolbar is\n * faded out. Time, copy and `actions` reveal by OPACITY ONLY, never height, margin or display: a layout change under\n * the pointer is the jitter SG-953 removed. A `(hover: hover)` gate keeps a touch device (no hover to reveal from)\n * at full opacity; a mouse fades until it hovers or focuses in. They are hidden while the turn streams. The `meta`\n * and the `state` never fade.\n */\nfunction MessageMetaBar(props: MessageMetaBarProps) {\n const { message, time, copyText, actions, state, meta, persistent } = props;\n const user = message.role === \"user\";\n const strings = useUiStrings().chat.message;\n const [copied, setCopied] = useState(false);\n const hasToolbar = toolbarRenders(props);\n if (!metaBarRenders(props)) return null;\n /* DXUI-24: the time and the copy group fade separately, so the never-fading `meta` can sit between them. */\n const fade = cn(\n \"flex items-center gap-0.5\",\n user && \"flex-row-reverse\",\n \"opacity-100 transition-[var(--tx-colors),opacity] duration-(--dur-fast)\",\n !persistent && [\n \"[@media(hover:hover)]:opacity-0\",\n \"[@media(hover:hover)]:group-hover/message:opacity-100\",\n \"[@media(hover:hover)]:group-focus-within/message:opacity-100\",\n ],\n );\n\n return (\n <div data-testid=\"message-meta\" className={cn(\"flex shrink-0 items-center gap-0.5 text-2xs text-tertiary\", user && \"flex-row-reverse\")}>\n {hasToolbar && time && (\n <div data-testid=\"message-time\" className={fade}>\n <RelativeTime at={time} className=\"px-1\" />\n </div>\n )}\n {rendersNode(meta) && (\n <span data-testid=\"message-meta-text\" className=\"inline-flex shrink-0 items-center px-1\">\n {meta}\n </span>\n )}\n {hasToolbar && (copyText.length > 0 || (actions?.length ?? 0) > 0) && (\n <div data-testid=\"message-toolbar\" className={fade}>\n {copyText.length > 0 && (\n <MessageActionButton\n action={{\n id: \"copy\",\n icon: copied ? \"check\" : \"copy\",\n label: copied ? strings.copied : strings.copy,\n onClick: () => {\n copyToClipboard(copyText).then(\n () => {\n setCopied(true);\n window.setTimeout(() => setCopied(false), COPIED_RESET_MS);\n },\n () => undefined,\n );\n },\n }}\n message={message}\n />\n )}\n {actions?.map((action) => (\n <MessageActionButton key={action.id} action={action} message={message} />\n ))}\n </div>\n )}\n {rendersNode(state) && (\n <span data-testid=\"message-state\" className=\"inline-flex shrink-0 items-center\">\n {state}\n </span>\n )}\n </div>\n );\n}\n\nfunction MessageActionButton({\n action,\n message,\n}: {\n action: MessageAction;\n message: ChatMessage;\n}) {\n return (\n <Tooltip content={action.label}>\n <button\n type=\"button\"\n onClick={() => action.onClick(message)}\n aria-label={action.label}\n aria-pressed={action.active}\n className={cn(\n \"dx-tap grid size-6 shrink-0 cursor-pointer place-items-center rounded-md outline-none\",\n \"transition-colors duration-(--dur-fast)\",\n \"hover:bg-surface-hover focus-visible:ring-2 focus-visible:ring-focus-ring\",\n action.active ? \"text-accent-text\" : \"text-tertiary hover:text-primary\",\n )}\n >\n <Icon name={action.icon} size=\"xs\" />\n </button>\n </Tooltip>\n );\n}\n\n"],"names":["TOOL_ICONS","ToolCall","part","defaultOpen","className","strings","useUiStrings","status","added","removed","header","jsxs","jsx","Icon","cn","ChatStatus","Collapsible","Reasoning","text","label","streaming","Fragment","UnrenderablePart","reason","name","MessagePartView","context","renderers","components","onPreviewFile","onDownloadFile","StreamingMarkdown","CodeBlock","Attachment","render","unknown","Message","message","appContext","actions","state","meta","grouped","showAvatar","showUserAvatar","showTimestamp","persistentToolbar","ref","user","system","body","AttachmentList","index","copyText","showMessageAvatar","metaBar","hasHeader","metaBarWhenFinished","Avatar","MessageMetaBar","COPIED_RESET_MS","rendersNode","toolbarHasContent","time","toolbarRenders","props","metaBarRenders","persistent","copied","setCopied","useState","hasToolbar","fade","RelativeTime","MessageActionButton","copyToClipboard","action","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsxs as g, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as u, useState as f, useCallback as d, useLayoutEffect as L, useEffect as M } from "react";
|
|
3
|
+
import { cn as x } from "../../lib/cn.js";
|
|
4
|
+
import { Icon as O } from "../Icon.js";
|
|
5
|
+
import { useUiStrings as R } from "../../lib/i18n/provider.js";
|
|
6
|
+
const h = 1;
|
|
7
|
+
function _({
|
|
8
|
+
children: w,
|
|
9
|
+
threshold: m = 64,
|
|
10
|
+
jumpLabel: y,
|
|
11
|
+
fade: b = !0,
|
|
12
|
+
anchor: r = "bottom",
|
|
13
|
+
className: T,
|
|
14
|
+
ref: l
|
|
15
|
+
}) {
|
|
16
|
+
const H = R().chat.messageScroller, t = u(null), v = u(null), c = u(r === "bottom"), [N, p] = f(!1), [E, S] = f(!1), [j, B] = f(!1), s = d(() => {
|
|
17
|
+
const e = t.current;
|
|
18
|
+
e && (S(e.scrollTop > h), B(e.scrollHeight - e.scrollTop - e.clientHeight > h));
|
|
19
|
+
}, []), z = d((e = "smooth") => {
|
|
20
|
+
const o = t.current;
|
|
21
|
+
o && (o.scrollTo({ top: o.scrollHeight, behavior: e }), c.current = !0, p(!1));
|
|
22
|
+
}, []), I = d(() => {
|
|
23
|
+
const e = t.current;
|
|
24
|
+
if (!e) return;
|
|
25
|
+
const n = e.scrollHeight - e.scrollTop - e.clientHeight <= m;
|
|
26
|
+
c.current = r === "bottom" && n, p(r === "bottom" && !n), s();
|
|
27
|
+
}, [m, r, s]);
|
|
28
|
+
return L(() => {
|
|
29
|
+
const e = t.current;
|
|
30
|
+
e && (e.scrollTop = r === "bottom" ? e.scrollHeight : 0), s();
|
|
31
|
+
}, [r, s]), M(() => {
|
|
32
|
+
const e = v.current, o = t.current;
|
|
33
|
+
if (!e || typeof ResizeObserver > "u") return;
|
|
34
|
+
const n = new ResizeObserver(() => {
|
|
35
|
+
if (c.current) {
|
|
36
|
+
const a = t.current;
|
|
37
|
+
a && (a.scrollTop = a.scrollHeight);
|
|
38
|
+
}
|
|
39
|
+
s();
|
|
40
|
+
});
|
|
41
|
+
return n.observe(e), o && n.observe(o), () => n.disconnect();
|
|
42
|
+
}, [s]), /* @__PURE__ */ g("div", { className: "relative flex min-h-0 flex-1 flex-col", children: [
|
|
43
|
+
/* @__PURE__ */ i(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
ref: (e) => {
|
|
47
|
+
t.current = e, typeof l == "function" ? l(e) : l && (l.current = e);
|
|
48
|
+
},
|
|
49
|
+
onScroll: I,
|
|
50
|
+
tabIndex: 0,
|
|
51
|
+
role: "log",
|
|
52
|
+
"aria-live": "polite",
|
|
53
|
+
"aria-relevant": "additions text",
|
|
54
|
+
className: x(
|
|
55
|
+
"min-h-0 flex-1 overflow-y-auto overscroll-contain outline-none",
|
|
56
|
+
"focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset",
|
|
57
|
+
T
|
|
58
|
+
),
|
|
59
|
+
children: /* @__PURE__ */ i("div", { ref: v, children: w })
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
b && E && /* @__PURE__ */ i(
|
|
63
|
+
"div",
|
|
64
|
+
{
|
|
65
|
+
"aria-hidden": !0,
|
|
66
|
+
"data-scroll-shadow": "top",
|
|
67
|
+
className: "pointer-events-none absolute inset-x-0 top-0 h-6 bg-linear-to-b from-canvas to-transparent"
|
|
68
|
+
}
|
|
69
|
+
),
|
|
70
|
+
b && j && /* @__PURE__ */ i(
|
|
71
|
+
"div",
|
|
72
|
+
{
|
|
73
|
+
"aria-hidden": !0,
|
|
74
|
+
"data-scroll-shadow": "bottom",
|
|
75
|
+
className: "pointer-events-none absolute inset-x-0 bottom-0 h-6 bg-linear-to-t from-canvas to-transparent"
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
N && /* @__PURE__ */ g(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: () => z(),
|
|
83
|
+
className: x(
|
|
84
|
+
"dx-tap absolute bottom-3 left-1/2 flex -translate-x-1/2 cursor-pointer items-center justify-center gap-1.5",
|
|
85
|
+
/* `dx-ground-overlay`: this pill paints itself on the overlay
|
|
86
|
+
surface, which on dark sits ABOVE the neutral hover fill — so
|
|
87
|
+
without the scope its hover reads as a darkening, not a lift. */
|
|
88
|
+
"dx-ground-overlay animate-rise-in rounded-full border border-border bg-surface-overlay px-3 py-1.5",
|
|
89
|
+
"text-2xs font-medium text-secondary shadow-md outline-none",
|
|
90
|
+
"transition-colors duration-(--dur-fast) hover:bg-surface-hover hover:text-primary",
|
|
91
|
+
"focus-visible:ring-2 focus-visible:ring-focus-ring"
|
|
92
|
+
),
|
|
93
|
+
children: [
|
|
94
|
+
/* @__PURE__ */ i(O, { name: "arrow-down", size: "xs" }),
|
|
95
|
+
y ?? H.jumpToLatest
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
_ as MessageScroller
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=MessageScroller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageScroller.js","sources":["../../../src/components/chat/MessageScroller.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { Icon } from \"../Icon\";\n\n/* ============================================================================\n MESSAGE SCROLLER\n The scroll container for a conversation. It owns scrolling behaviour and\n nothing else — no messages, no transport, no state.\n\n STICK TO BOTTOM, BUT YIELD. New content pins the view to the newest message,\n UNLESS the reader has scrolled up — at which point the view stays exactly\n where they put it and a button offers to return. Auto-scrolling someone who\n is reading history is the single most hated behaviour in this class of UI,\n and it is what happens when \"scroll on new content\" is implemented without\n the second half.\n\n RESIZE OBSERVER, NOT A CONTENT DEPENDENCY. A streaming message grows without\n any new element being added and without firing a scroll event, so watching\n the children changes nothing. Watching the content's SIZE catches every\n growth: appended tokens, an expanded tool call, an image that just decoded.\n ========================================================================= */\n\n/* DX-5438: scrollTop is fractional on a scaled display, so a view resting at an edge can read a fraction of a pixel off it; within this distance counts as at the edge. */\nconst EDGE_EPSILON_PX = 1;\n\nexport interface MessageScrollerProps {\n children: ReactNode;\n /** Distance from the bottom, in px, still counted as \"at the bottom\". */\n threshold?: number;\n /** Label for the return-to-newest button. @default the built-in \"Jump to latest\" */\n jumpLabel?: string;\n /** Fades content at an edge only while more content lies past it (DX-5438): the top fade once scrolled down, the bottom fade while there is more below. */\n fade?: boolean;\n /**\n * Where the newest content is (DX-5438). `bottom` (default) is a chat: the view starts at, and follows, the bottom, with a return button once the reader\n * scrolls up. `top` is a newest-first list: the view starts at the top and never moves by itself. Set once per mount: to change it, remount the scroller (a `key`).\n */\n anchor?: \"bottom\" | \"top\";\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function MessageScroller({\n children,\n threshold = 64,\n jumpLabel,\n fade = true,\n anchor = \"bottom\",\n className,\n ref,\n}: MessageScrollerProps) {\n const strings = useUiStrings().chat.messageScroller;\n const viewport = useRef<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const pinned = useRef(anchor === \"bottom\");\n const [detached, setDetached] = useState(false);\n const [moreAbove, setMoreAbove] = useState(false);\n const [moreBelow, setMoreBelow] = useState(false);\n\n /* DX-5438: the edge fades follow what is really scrollable, re-read on scroll and on any size change. */\n const measureEdges = useCallback(() => {\n const node = viewport.current;\n if (!node) return;\n setMoreAbove(node.scrollTop > EDGE_EPSILON_PX);\n setMoreBelow(node.scrollHeight - node.scrollTop - node.clientHeight > EDGE_EPSILON_PX);\n }, []);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n const node = viewport.current;\n if (!node) return;\n node.scrollTo({ top: node.scrollHeight, behavior });\n pinned.current = true;\n setDetached(false);\n }, []);\n\n const onScroll = useCallback(() => {\n const node = viewport.current;\n if (!node) return;\n const distance = node.scrollHeight - node.scrollTop - node.clientHeight;\n const atBottom = distance <= threshold;\n pinned.current = anchor === \"bottom\" && atBottom;\n setDetached(anchor === \"bottom\" && !atBottom);\n measureEdges();\n }, [threshold, anchor, measureEdges]);\n\n /* Start at the newest end with no animation — the bottom for a chat, the top for a newest-first list (`anchor`). A thread that opens\n at the wrong end and then slides is a thread that shows you the wrong end first. */\n useLayoutEffect(() => {\n const node = viewport.current;\n if (node) node.scrollTop = anchor === \"bottom\" ? node.scrollHeight : 0;\n measureEdges();\n }, [anchor, measureEdges]);\n\n useEffect(() => {\n const node = content.current;\n const frame = viewport.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(() => {\n if (pinned.current) {\n /* `auto`, not `smooth`: during streaming this fires many times a\n second, and queued smooth scrolls fight each other into a visible\n stutter. Smooth is right for the deliberate jump, not for tracking. */\n const viewportNode = viewport.current;\n if (viewportNode) viewportNode.scrollTop = viewportNode.scrollHeight;\n }\n measureEdges();\n });\n observer.observe(node);\n if (frame) observer.observe(frame);\n return () => observer.disconnect();\n }, [measureEdges]);\n\n return (\n <div className=\"relative flex min-h-0 flex-1 flex-col\">\n <div\n ref={(node) => {\n viewport.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n onScroll={onScroll}\n tabIndex={0}\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto overscroll-contain outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset\",\n className,\n )}\n >\n <div ref={content}>{children}</div>\n </div>\n\n {fade && moreAbove && (\n <div\n aria-hidden\n data-scroll-shadow=\"top\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-6 bg-linear-to-b from-canvas to-transparent\"\n />\n )}\n {fade && moreBelow && (\n <div\n aria-hidden\n data-scroll-shadow=\"bottom\"\n className=\"pointer-events-none absolute inset-x-0 bottom-0 h-6 bg-linear-to-t from-canvas to-transparent\"\n />\n )}\n\n {/* Only rendered when detached, so it cannot be tabbed to while it is\n invisible — the failure mode of animating opacity on a live button. */}\n {detached && (\n <button\n type=\"button\"\n onClick={() => scrollToBottom()}\n className={cn(\n \"dx-tap absolute bottom-3 left-1/2 flex -translate-x-1/2 cursor-pointer items-center justify-center gap-1.5\",\n /* `dx-ground-overlay`: this pill paints itself on the overlay\n surface, which on dark sits ABOVE the neutral hover fill — so\n without the scope its hover reads as a darkening, not a lift. */\n \"dx-ground-overlay animate-rise-in rounded-full border border-border bg-surface-overlay px-3 py-1.5\",\n \"text-2xs font-medium text-secondary shadow-md outline-none\",\n \"transition-colors duration-(--dur-fast) hover:bg-surface-hover hover:text-primary\",\n \"focus-visible:ring-2 focus-visible:ring-focus-ring\",\n )}\n >\n <Icon name=\"arrow-down\" size=\"xs\" />\n {jumpLabel ?? strings.jumpToLatest}\n </button>\n )}\n </div>\n );\n}\n"],"names":["EDGE_EPSILON_PX","MessageScroller","children","threshold","jumpLabel","fade","anchor","className","ref","strings","useUiStrings","viewport","useRef","content","pinned","detached","setDetached","useState","moreAbove","setMoreAbove","moreBelow","setMoreBelow","measureEdges","useCallback","node","scrollToBottom","behavior","onScroll","atBottom","useLayoutEffect","useEffect","frame","observer","viewportNode","jsxs","jsx","cn","Icon"],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsxs as s, jsx as t, Fragment as w } from "react/jsx-runtime";
|
|
2
|
+
import { useState as C, useEffect as v } from "react";
|
|
3
|
+
import { cn as x } from "../../lib/cn.js";
|
|
4
|
+
import { Icon as p } from "../Icon.js";
|
|
5
|
+
import { Menu as E, MenuGroup as M, MenuItem as u, MenuSeparator as I } from "../Menu.js";
|
|
6
|
+
import { Switch as L } from "../Choice.js";
|
|
7
|
+
import { useUiStrings as j } from "../../lib/i18n/provider.js";
|
|
8
|
+
function H({
|
|
9
|
+
models: r,
|
|
10
|
+
value: a,
|
|
11
|
+
onValueChange: c,
|
|
12
|
+
options: i,
|
|
13
|
+
numericShortcuts: o = !0,
|
|
14
|
+
side: z = "top",
|
|
15
|
+
align: D = "start",
|
|
16
|
+
disabled: b = !1,
|
|
17
|
+
className: K
|
|
18
|
+
}) {
|
|
19
|
+
const d = j().chat.modelSelector, [l, g] = C(!1), [O, y] = C(!1), m = r.filter((e) => !e.secondary), k = r.filter((e) => e.secondary), N = r.find((e) => e.id === a);
|
|
20
|
+
return v(() => {
|
|
21
|
+
if (!l || !o) return;
|
|
22
|
+
const e = (n) => {
|
|
23
|
+
if (n.metaKey || n.ctrlKey || n.altKey) return;
|
|
24
|
+
const f = Number(n.key) - 1, h = m[f];
|
|
25
|
+
!Number.isInteger(f) || f < 0 || !h || h.disabled || (n.preventDefault(), c(h.id), g(!1));
|
|
26
|
+
};
|
|
27
|
+
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
28
|
+
}, [l, o, m, c]), v(() => {
|
|
29
|
+
l || y(!1);
|
|
30
|
+
}, [l]), /* @__PURE__ */ s(
|
|
31
|
+
E,
|
|
32
|
+
{
|
|
33
|
+
open: l,
|
|
34
|
+
onOpenChange: g,
|
|
35
|
+
side: z,
|
|
36
|
+
align: D,
|
|
37
|
+
className: x("min-w-60", K),
|
|
38
|
+
trigger: /* @__PURE__ */ s(
|
|
39
|
+
"button",
|
|
40
|
+
{
|
|
41
|
+
type: "button",
|
|
42
|
+
disabled: b,
|
|
43
|
+
"aria-label": d.triggerLabel(N?.name ?? a),
|
|
44
|
+
className: x(
|
|
45
|
+
/* `whitespace-nowrap` because a model NAME is one token even when it
|
|
46
|
+
contains a space: squeezed into a narrow composer, "Opus 5" broke
|
|
47
|
+
across two lines and made the whole toolbar row twice as tall. A
|
|
48
|
+
name that does not fit should shorten the row's other content, or
|
|
49
|
+
overflow — never wrap mid-name. */
|
|
50
|
+
"dx-tap inline-flex shrink-0 cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-md px-2 py-1 text-xs font-medium",
|
|
51
|
+
"text-secondary transition-colors duration-(--dur-fast)",
|
|
52
|
+
"hover:bg-surface-hover hover:text-primary",
|
|
53
|
+
"outline-none focus-visible:ring-2 focus-visible:ring-focus-ring",
|
|
54
|
+
b && "pointer-events-none opacity-50"
|
|
55
|
+
),
|
|
56
|
+
children: [
|
|
57
|
+
N?.name ?? a,
|
|
58
|
+
/* @__PURE__ */ t(p, { name: "chevrons-up-down", size: "xs", className: "text-tertiary" })
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ t(M, { label: d.models, children: m.map((e, n) => /* @__PURE__ */ t(
|
|
64
|
+
S,
|
|
65
|
+
{
|
|
66
|
+
model: e,
|
|
67
|
+
selected: e.id === a,
|
|
68
|
+
shortcut: o && n < 9 ? String(n + 1) : void 0,
|
|
69
|
+
onSelect: () => c(e.id)
|
|
70
|
+
},
|
|
71
|
+
e.id
|
|
72
|
+
)) }),
|
|
73
|
+
k.length > 0 && /* @__PURE__ */ t(w, { children: O ? /* @__PURE__ */ t(M, { label: d.moreModels, children: k.map((e) => /* @__PURE__ */ t(
|
|
74
|
+
S,
|
|
75
|
+
{
|
|
76
|
+
model: e,
|
|
77
|
+
selected: e.id === a,
|
|
78
|
+
onSelect: () => c(e.id)
|
|
79
|
+
},
|
|
80
|
+
e.id
|
|
81
|
+
)) }) : /* @__PURE__ */ s(
|
|
82
|
+
u,
|
|
83
|
+
{
|
|
84
|
+
closeOnClick: !1,
|
|
85
|
+
onClick: (e) => {
|
|
86
|
+
e.preventDefault(), y(!0);
|
|
87
|
+
},
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ t("span", { className: "flex-1", children: d.moreModels }),
|
|
90
|
+
/* @__PURE__ */ t(p, { name: "chevron-right", size: "xs", className: "text-tertiary" })
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
) }),
|
|
94
|
+
i && i.length > 0 && /* @__PURE__ */ s(w, { children: [
|
|
95
|
+
/* @__PURE__ */ t(I, {}),
|
|
96
|
+
i.map((e) => /* @__PURE__ */ s(
|
|
97
|
+
u,
|
|
98
|
+
{
|
|
99
|
+
closeOnClick: !1,
|
|
100
|
+
disabled: e.disabled,
|
|
101
|
+
onClick: (n) => {
|
|
102
|
+
n.preventDefault(), e.onCheckedChange(!e.checked);
|
|
103
|
+
},
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ s("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
106
|
+
/* @__PURE__ */ t("span", { className: "truncate", children: e.label }),
|
|
107
|
+
e.description && /* @__PURE__ */ t("span", { className: "truncate text-2xs text-tertiary", children: e.description })
|
|
108
|
+
] }),
|
|
109
|
+
/* @__PURE__ */ t(
|
|
110
|
+
L,
|
|
111
|
+
{
|
|
112
|
+
checked: e.checked,
|
|
113
|
+
onCheckedChange: e.onCheckedChange,
|
|
114
|
+
disabled: e.disabled,
|
|
115
|
+
size: "sm",
|
|
116
|
+
"aria-label": typeof e.label == "string" ? e.label : e.id
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
e.id
|
|
122
|
+
))
|
|
123
|
+
] })
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
function S({
|
|
129
|
+
model: r,
|
|
130
|
+
selected: a,
|
|
131
|
+
shortcut: c,
|
|
132
|
+
onSelect: i
|
|
133
|
+
}) {
|
|
134
|
+
return /* @__PURE__ */ s(u, { disabled: r.disabled, selected: a, onClick: i, children: [
|
|
135
|
+
/* @__PURE__ */ t(
|
|
136
|
+
p,
|
|
137
|
+
{
|
|
138
|
+
name: "check",
|
|
139
|
+
size: "xs",
|
|
140
|
+
className: x("shrink-0 text-control-text", !a && "invisible")
|
|
141
|
+
}
|
|
142
|
+
),
|
|
143
|
+
/* @__PURE__ */ s("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
144
|
+
/* @__PURE__ */ s("span", { className: "flex items-center gap-1.5", children: [
|
|
145
|
+
/* @__PURE__ */ t("span", { className: "truncate", children: r.name }),
|
|
146
|
+
r.badge && /* @__PURE__ */ t("span", { className: "rounded-sm bg-accent-subtle px-1 py-px text-2xs font-semibold text-accent-text", children: r.badge })
|
|
147
|
+
] }),
|
|
148
|
+
r.description && /* @__PURE__ */ t("span", { className: "truncate text-2xs text-tertiary", children: r.description })
|
|
149
|
+
] }),
|
|
150
|
+
c && /* @__PURE__ */ t("kbd", { className: "font-mono text-2xs text-tertiary", children: c })
|
|
151
|
+
] });
|
|
152
|
+
}
|
|
153
|
+
export {
|
|
154
|
+
H as ModelSelector
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=ModelSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelSelector.js","sources":["../../../src/components/chat/ModelSelector.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { Icon } from \"../Icon\";\nimport { Menu, MenuGroup, MenuItem, MenuSeparator } from \"../Menu\";\nimport { Switch } from \"../Choice\";\n\n/* ============================================================================\n MODEL SELECTOR\n Which model answers, plus whatever per-model switches ride alongside it.\n\n A MENU, NOT A SELECT. A native select would be smaller code and worse: these\n entries carry a description, a badge and a positional shortcut, and a select\n can hold exactly one string per option. The list is also short and\n consequential — the kind of choice that deserves to be read, not scrolled.\n ========================================================================= */\n\nexport interface ChatModel {\n id: string;\n name: string;\n /** One line under the name — what this model is FOR. */\n description?: string;\n /** \"New\", \"Fastest\", a context size — anything that fits in a chip. */\n badge?: ReactNode;\n disabled?: boolean;\n /**\n * Keeps the model out of the main list until \"More models\" is opened.\n *\n * The primary list should be short enough to read at a glance; everything\n * an experienced user occasionally reaches for lives one click deeper. A\n * flat list of fifteen models makes the three that matter harder to find.\n */\n secondary?: boolean;\n}\n\nexport interface ModelSelectorProps {\n models: ChatModel[];\n value: string;\n onValueChange: (id: string) => void;\n /** Extra switches under a separator — fast mode, thinking, whatever applies. */\n options?: Array<{\n id: string;\n label: ReactNode;\n description?: ReactNode;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n disabled?: boolean;\n }>;\n /**\n * Number keys pick from the primary list while the menu is open.\n *\n * Only while OPEN — a bare digit is a legitimate character everywhere else,\n * and a chat's composer is the last place to steal one.\n */\n numericShortcuts?: boolean;\n side?: \"top\" | \"bottom\";\n align?: \"start\" | \"center\" | \"end\";\n disabled?: boolean;\n className?: string;\n}\n\nexport function ModelSelector({\n models,\n value,\n onValueChange,\n options,\n numericShortcuts = true,\n side = \"top\",\n align = \"start\",\n disabled = false,\n className,\n}: ModelSelectorProps) {\n const strings = useUiStrings().chat.modelSelector;\n const [open, setOpen] = useState(false);\n const [showAll, setShowAll] = useState(false);\n\n const primary = models.filter((model) => !model.secondary);\n const secondary = models.filter((model) => model.secondary);\n const current = models.find((model) => model.id === value);\n\n useEffect(() => {\n if (!open || !numericShortcuts) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey || event.altKey) return;\n const index = Number(event.key) - 1;\n const model = primary[index];\n if (!Number.isInteger(index) || index < 0 || !model || model.disabled) return;\n event.preventDefault();\n onValueChange(model.id);\n setOpen(false);\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, numericShortcuts, primary, onValueChange]);\n\n /* Collapse the extra models when the menu closes. Leaving it expanded means\n the next open shows a different list than the one before it, which makes\n the shortcut positions move under people who had learned them. */\n useEffect(() => {\n if (!open) setShowAll(false);\n }, [open]);\n\n return (\n <Menu\n open={open}\n onOpenChange={setOpen}\n side={side}\n align={align}\n className={cn(\"min-w-60\", className)}\n trigger={\n <button\n type=\"button\"\n disabled={disabled}\n aria-label={strings.triggerLabel(current?.name ?? value)}\n className={cn(\n /* `whitespace-nowrap` because a model NAME is one token even when it\n contains a space: squeezed into a narrow composer, \"Opus 5\" broke\n across two lines and made the whole toolbar row twice as tall. A\n name that does not fit should shorten the row's other content, or\n overflow — never wrap mid-name. */\n \"dx-tap inline-flex shrink-0 cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-md px-2 py-1 text-xs font-medium\",\n \"text-secondary transition-colors duration-(--dur-fast)\",\n \"hover:bg-surface-hover hover:text-primary\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-focus-ring\",\n disabled && \"pointer-events-none opacity-50\",\n )}\n >\n {current?.name ?? value}\n <Icon name=\"chevrons-up-down\" size=\"xs\" className=\"text-tertiary\" />\n </button>\n }\n >\n <MenuGroup label={strings.models}>\n {primary.map((model, index) => (\n <ModelRow\n key={model.id}\n model={model}\n selected={model.id === value}\n shortcut={numericShortcuts && index < 9 ? String(index + 1) : undefined}\n onSelect={() => onValueChange(model.id)}\n />\n ))}\n </MenuGroup>\n\n {secondary.length > 0 && (\n <>\n {showAll ? (\n <MenuGroup label={strings.moreModels}>\n {secondary.map((model) => (\n <ModelRow\n key={model.id}\n model={model}\n selected={model.id === value}\n onSelect={() => onValueChange(model.id)}\n />\n ))}\n </MenuGroup>\n ) : (\n <MenuItem\n closeOnClick={false}\n onClick={(event) => {\n event.preventDefault();\n setShowAll(true);\n }}\n >\n <span className=\"flex-1\">{strings.moreModels}</span>\n <Icon name=\"chevron-right\" size=\"xs\" className=\"text-tertiary\" />\n </MenuItem>\n )}\n </>\n )}\n\n {options && options.length > 0 && (\n <>\n <MenuSeparator />\n {options.map((option) => (\n <MenuItem\n key={option.id}\n closeOnClick={false}\n disabled={option.disabled}\n onClick={(event) => {\n /* The row toggles, and the switch inside it is the indicator.\n Without this the only hit target is a 44px control in a\n 240px row, which reads as broken every time you miss. */\n event.preventDefault();\n option.onCheckedChange(!option.checked);\n }}\n >\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{option.label}</span>\n {option.description && (\n <span className=\"truncate text-2xs text-tertiary\">{option.description}</span>\n )}\n </span>\n <Switch\n checked={option.checked}\n onCheckedChange={option.onCheckedChange}\n disabled={option.disabled}\n size=\"sm\"\n aria-label={typeof option.label === \"string\" ? option.label : option.id}\n />\n </MenuItem>\n ))}\n </>\n )}\n </Menu>\n );\n}\n\nfunction ModelRow({\n model,\n selected,\n shortcut,\n onSelect,\n}: {\n model: ChatModel;\n selected: boolean;\n shortcut?: string;\n onSelect: () => void;\n}) {\n return (\n <MenuItem disabled={model.disabled} selected={selected} onClick={onSelect}>\n {/* The tick occupies its slot whether or not it is drawn, so selecting a\n different model does not shift every name sideways. */}\n <Icon\n name=\"check\"\n size=\"xs\"\n className={cn(\"shrink-0 text-control-text\", !selected && \"invisible\")}\n />\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-center gap-1.5\">\n <span className=\"truncate\">{model.name}</span>\n {model.badge && (\n <span className=\"rounded-sm bg-accent-subtle px-1 py-px text-2xs font-semibold text-accent-text\">\n {model.badge}\n </span>\n )}\n </span>\n {model.description && (\n <span className=\"truncate text-2xs text-tertiary\">{model.description}</span>\n )}\n </span>\n {shortcut && <kbd className=\"font-mono text-2xs text-tertiary\">{shortcut}</kbd>}\n </MenuItem>\n );\n}\n"],"names":["ModelSelector","models","value","onValueChange","options","numericShortcuts","side","align","disabled","className","strings","useUiStrings","open","setOpen","useState","showAll","setShowAll","primary","model","secondary","current","useEffect","onKeyDown","event","index","jsxs","Menu","cn","Icon","jsx","MenuGroup","ModelRow","Fragment","MenuItem","MenuSeparator","option","Switch","selected","shortcut","onSelect"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as h } from "react/jsx-runtime";
|
|
2
|
+
import { memo as m, useMemo as g } from "react";
|
|
3
|
+
import { Markdown as f } from "../Markdown.js";
|
|
4
|
+
import { RE_FENCE as i } from "../../lib/syntax/markdown/parse.js";
|
|
5
|
+
function p(c) {
|
|
6
|
+
let n = c;
|
|
7
|
+
(n.match(/`/g) ?? []).length % 2 === 1 && (n += "`"), (n.match(/\*\*/g) ?? []).length % 2 === 1 && (n += "**");
|
|
8
|
+
const o = (n.match(/\[/g) ?? []).length - (n.match(/\]/g) ?? []).length;
|
|
9
|
+
return o > 0 && (n += "]".repeat(o)), n;
|
|
10
|
+
}
|
|
11
|
+
function u(c) {
|
|
12
|
+
const n = c.split(`
|
|
13
|
+
`), e = [];
|
|
14
|
+
let t = 0;
|
|
15
|
+
for (; t < n.length; ) {
|
|
16
|
+
const o = i.exec(n[t]);
|
|
17
|
+
if (!o) {
|
|
18
|
+
const a = t;
|
|
19
|
+
for (; t < n.length && !i.test(n[t]); ) t++;
|
|
20
|
+
e.push(p(n.slice(a, t).join(`
|
|
21
|
+
`)));
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const s = o[2][0] === "~" ? "~" : "`", l = new RegExp(`^ {0,3}${s}{${o[2].length},}[ \\t]*$`), r = t;
|
|
25
|
+
for (t++; t < n.length && !l.test(n[t]); ) t++;
|
|
26
|
+
t < n.length && t++, e.push(n.slice(r, t).join(`
|
|
27
|
+
`));
|
|
28
|
+
}
|
|
29
|
+
return e.join(`
|
|
30
|
+
`);
|
|
31
|
+
}
|
|
32
|
+
const M = m(function({
|
|
33
|
+
children: n,
|
|
34
|
+
...e
|
|
35
|
+
}) {
|
|
36
|
+
const t = g(() => u(n), [n]);
|
|
37
|
+
return /* @__PURE__ */ h(f, { ...e, children: t });
|
|
38
|
+
});
|
|
39
|
+
export {
|
|
40
|
+
M as StreamingMarkdown
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=StreamingMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamingMarkdown.js","sources":["../../../src/components/chat/StreamingMarkdown.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { Markdown, type MarkdownProps } from \"../Markdown\";\nimport { RE_FENCE } from \"../../lib/syntax/markdown\";\n\n/* ============================================================================\n STREAMING MARKDOWN\n Prose that is still arriving, rendered through the SAME parser and renderer\n as every other markdown string in this package — this file adds exactly one\n thing on top of `Markdown`: closing what is open before the parse happens.\n\n THE PROBLEM THIS SOLVES. A response arrives token by token, so at any instant\n the text is sliced mid-syntax: an opened `**` with no partner, a code fence\n with no closing fence, a link with no closing bracket. The canonical parser\n treats an unmatched delimiter as literal text on purpose (`inline.ts`: \"an\n unmatched `*` renders as an asterisk rather than italicising the rest\") —\n correct for a finished document, but it means a streaming one flickers for\n its entire length and only settles once the closer lands.\n\n AN UNCLOSED FENCE NEEDS NO HELP HERE: the canonical parser already marks it\n `open: true` at end-of-input (`parse.ts`'s `readFence`), which is what lets\n `Markdown`'s default code renderer suppress the copy button on a block that\n is still filling. The only gap left is INLINE markers — backtick spans,\n `**`/`*` emphasis, `[...]` links — which this module closes by appending\n the missing partner before handing the text to the real parser.\n\n THE BALANCE NEVER TOUCHES FENCED CODE. `2**3` inside a fenced Python\n snippet is not an unterminated bold marker, and closing spurious markers\n there would corrupt real code. So the source is split on fence boundaries\n first, using `RE_FENCE` from `lib/syntax/markdown` — the canonical parser's\n own fence pattern, imported rather than copied so the two can never drift —\n and only the non-fence stretches are balanced.\n\n ONLY EVER APPENDS CLOSERS. It never rewrites what the model wrote. The\n worst case is that a marker the model intended as a literal asterisk\n renders as emphasis for the few hundred milliseconds before the real text\n arrives and the count comes out even.\n ========================================================================= */\n\n/**\n * Balance inline markers so a half-typed emphasis renders as emphasis.\n *\n * Only ever APPENDS closers. See the module doc for why this is safe even\n * against text the model did not intend as markdown.\n */\nfunction balanceInline(text: string): string {\n let balanced = text;\n\n const backticks = (balanced.match(/`/g) ?? []).length;\n if (backticks % 2 === 1) balanced += \"`\";\n\n const bold = (balanced.match(/\\*\\*/g) ?? []).length;\n if (bold % 2 === 1) balanced += \"**\";\n\n /* Single `*` counted only where it is not part of `**`. An unmatched one is\n far more often a bullet or a literal than an open emphasis, so it is left\n alone — closing it would italicise the rest of the paragraph. */\n const links = (balanced.match(/\\[/g) ?? []).length - (balanced.match(/\\]/g) ?? []).length;\n if (links > 0) balanced += \"]\".repeat(links);\n\n return balanced;\n}\n\n/**\n * Splits `source` on fence boundaries and balances only the non-fence runs,\n * leaving every fenced code run — closed or still streaming — byte-identical.\n */\nfunction balanceStreamingMarkdown(source: string): string {\n const lines = source.split(\"\\n\");\n const out: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const open = RE_FENCE.exec(lines[i]);\n if (!open) {\n const start = i;\n while (i < lines.length && !RE_FENCE.test(lines[i])) i++;\n out.push(balanceInline(lines.slice(start, i).join(\"\\n\")));\n continue;\n }\n\n /* The closer must be the same character and at least as long — a run of\n `~` inside a ``` block (or vice versa) stays content, matching the real\n parser's own closer rule. `RE_FENCE`'s groups are (leading spaces,\n fence run, rest-of-line) — group 2 is the fence run. */\n const fenceChar = open[2][0] === \"~\" ? \"~\" : \"`\";\n const closer = new RegExp(`^ {0,3}${fenceChar}{${open[2].length},}[ \\\\t]*$`);\n const start = i;\n i++;\n while (i < lines.length && !closer.test(lines[i])) i++;\n if (i < lines.length) i++; // include the closing fence line itself\n out.push(lines.slice(start, i).join(\"\\n\"));\n }\n\n return out.join(\"\\n\");\n}\n\nexport interface StreamingMarkdownProps extends Omit<MarkdownProps, \"children\"> {\n children: string;\n}\n\n/**\n * Blocks are memoised individually by `MarkdownNodes`' own reconciliation —\n * see `Markdown`. What THIS wrapper adds is memoising the balance pass itself,\n * so a re-render that does not change `children` (a sibling state update\n * elsewhere in the message list) never re-scans the text.\n */\nexport const StreamingMarkdown = memo(function StreamingMarkdown({\n children,\n ...rest\n}: StreamingMarkdownProps) {\n const balanced = useMemo(() => balanceStreamingMarkdown(children), [children]);\n return <Markdown {...rest}>{balanced}</Markdown>;\n});\n"],"names":["balanceInline","text","balanced","links","balanceStreamingMarkdown","source","lines","out","i","open","RE_FENCE","start","fenceChar","closer","StreamingMarkdown","memo","children","rest","useMemo","jsx","Markdown"],"mappings":";;;;AA4CA,SAASA,EAAcC,GAAsB;AAC3C,MAAIC,IAAWD;AAGf,GADmBC,EAAS,MAAM,IAAI,KAAK,CAAA,GAAI,SAC/B,MAAM,MAAGA,KAAY,OAEvBA,EAAS,MAAM,OAAO,KAAK,CAAA,GAAI,SAClC,MAAM,MAAGA,KAAY;AAKhC,QAAMC,KAASD,EAAS,MAAM,KAAK,KAAK,CAAA,GAAI,UAAUA,EAAS,MAAM,KAAK,KAAK,CAAA,GAAI;AACnF,SAAIC,IAAQ,MAAGD,KAAY,IAAI,OAAOC,CAAK,IAEpCD;AACT;AAMA,SAASE,EAAyBC,GAAwB;AACxD,QAAMC,IAAQD,EAAO,MAAM;AAAA,CAAI,GACzBE,IAAgB,CAAA;AACtB,MAAIC,IAAI;AAER,SAAOA,IAAIF,EAAM,UAAQ;AACvB,UAAMG,IAAOC,EAAS,KAAKJ,EAAME,CAAC,CAAC;AACnC,QAAI,CAACC,GAAM;AACT,YAAME,IAAQH;AACd,aAAOA,IAAIF,EAAM,UAAU,CAACI,EAAS,KAAKJ,EAAME,CAAC,CAAC,IAAG,CAAAA;AACrD,MAAAD,EAAI,KAAKP,EAAcM,EAAM,MAAMK,GAAOH,CAAC,EAAE,KAAK;AAAA,CAAI,CAAC,CAAC;AACxD;AAAA,IACF;AAMA,UAAMI,IAAYH,EAAK,CAAC,EAAE,CAAC,MAAM,MAAM,MAAM,KACvCI,IAAS,IAAI,OAAO,UAAUD,CAAS,IAAIH,EAAK,CAAC,EAAE,MAAM,YAAY,GACrEE,IAAQH;AAEd,SADAA,KACOA,IAAIF,EAAM,UAAU,CAACO,EAAO,KAAKP,EAAME,CAAC,CAAC,IAAG,CAAAA;AACnD,IAAIA,IAAIF,EAAM,UAAQE,KACtBD,EAAI,KAAKD,EAAM,MAAMK,GAAOH,CAAC,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,EAC3C;AAEA,SAAOD,EAAI,KAAK;AAAA,CAAI;AACtB;AAYO,MAAMO,IAAoBC,EAAK,SAA2B;AAAA,EAC/D,UAAAC;AAAA,EACA,GAAGC;AACL,GAA2B;AACzB,QAAMf,IAAWgB,EAAQ,MAAMd,EAAyBY,CAAQ,GAAG,CAACA,CAAQ,CAAC;AAC7E,SAAO,gBAAAG,EAACC,GAAA,EAAU,GAAGH,GAAO,UAAAf,GAAS;AACvC,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download-file.js","sources":["../../../src/components/chat/download-file.ts"],"sourcesContent":["import type { ChatFile } from \"./types\";\n\n/**\n * Saves a file through the browser: a throwaway anchor pointing at its `url`, named by its own file name when it has\n * one (a stored PDF's `name` is a reference like \"PDF 2\", its `fileName` is what it is called on disk). A file with\n * no `url` has nothing to fetch and does nothing.\n */\nexport function downloadChatFile(file: ChatFile): void {\n if (!file.url) return;\n const link = document.createElement(\"a\");\n link.href = file.url;\n link.download = file.fileName ?? file.name;\n link.click();\n}\n"],"names":["downloadChatFile","file","link"],"mappings":"AAOO,SAASA,EAAiBC,GAAsB;AACrD,MAAI,CAACA,EAAK,IAAK;AACf,QAAMC,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAOD,EAAK,KACjBC,EAAK,WAAWD,EAAK,YAAYA,EAAK,MACtCC,EAAK,MAAA;AACP;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const n = {
|
|
2
|
+
image: "image",
|
|
3
|
+
video: "circle-play",
|
|
4
|
+
audio: "volume-2",
|
|
5
|
+
code: "code",
|
|
6
|
+
text: "file-text",
|
|
7
|
+
archive: "folder",
|
|
8
|
+
table: "table",
|
|
9
|
+
file: "file"
|
|
10
|
+
}, r = [
|
|
11
|
+
[/^image\//, "image"],
|
|
12
|
+
[/^video\//, "video"],
|
|
13
|
+
[/^audio\//, "audio"],
|
|
14
|
+
[/^text\/(html|css|javascript)|application\/(json|xml|.*javascript)/, "code"],
|
|
15
|
+
[/^text\//, "text"],
|
|
16
|
+
[/pdf/, "text"],
|
|
17
|
+
[/zip|tar|gzip|compressed/, "archive"],
|
|
18
|
+
[/csv|sheet|excel/, "table"]
|
|
19
|
+
], a = ["png", "jpg", "jpeg", "gif", "webp", "svg", "avif"], d = ["mp4", "webm", "mov", "m4v", "ogv"], p = ["ts", "tsx", "js", "jsx", "py", "rs", "go", "json", "sh", "css"], m = ["md", "txt", "rtf", "pdf", "doc", "docx", "ppt", "pptx"], l = ["csv", "xlsx", "xls"];
|
|
20
|
+
function o(e) {
|
|
21
|
+
const s = e.mimeType ?? "", i = r.find(([c]) => c.test(s));
|
|
22
|
+
if (i) return i[1];
|
|
23
|
+
const t = (e.fileName ?? e.name).split(".").pop()?.toLowerCase() ?? "";
|
|
24
|
+
return a.includes(t) ? "image" : d.includes(t) ? "video" : p.includes(t) ? "code" : m.includes(t) ? "text" : l.includes(t) ? "table" : "file";
|
|
25
|
+
}
|
|
26
|
+
function f(e) {
|
|
27
|
+
const s = e.mimeType ?? "", i = (e.fileName ?? e.name).split(".").pop()?.toLowerCase() ?? "";
|
|
28
|
+
return /pdf/.test(s) || i === "pdf" ? "pdf" : o(e);
|
|
29
|
+
}
|
|
30
|
+
const u = (e) => n[e], x = (e) => n[o(e)], v = (e) => o(e) === "image", E = (e) => o(e) === "video";
|
|
31
|
+
export {
|
|
32
|
+
x as fileIconFor,
|
|
33
|
+
u as fileKindIcon,
|
|
34
|
+
o as fileKindOf,
|
|
35
|
+
v as isImageFile,
|
|
36
|
+
E as isVideoFile,
|
|
37
|
+
f as referenceKindOf
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=file-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-icon.js","sources":["../../../src/components/chat/file-icon.ts"],"sourcesContent":["import type { IconName } from \"../Icon\";\nimport type { ChatFile } from \"./types\";\n\n/* ============================================================================\n FILE KIND → ICON\n The one table that says what a file looks like when it has no picture.\n\n EXPORTED (DX-3982) because three components need the answer — the tile, the\n cover and the video player's fallback — and a consumer building its own file\n row needs the same one. A copy of this table in an application is a table\n that drifts the first time a kind is added here.\n ========================================================================= */\n\n/** What a file is, before anyone decides what it looks like. */\nexport type FileKind = \"image\" | \"video\" | \"audio\" | \"code\" | \"text\" | \"archive\" | \"table\" | \"file\";\n\nconst KIND_ICONS: Record<FileKind, IconName> = {\n image: \"image\",\n video: \"circle-play\",\n audio: \"volume-2\",\n code: \"code\",\n text: \"file-text\",\n archive: \"folder\",\n table: \"table\",\n file: \"file\",\n};\n\nconst MIME_KINDS: Array<[RegExp, FileKind]> = [\n [/^image\\//, \"image\"],\n [/^video\\//, \"video\"],\n [/^audio\\//, \"audio\"],\n [/^text\\/(html|css|javascript)|application\\/(json|xml|.*javascript)/, \"code\"],\n [/^text\\//, \"text\"],\n [/pdf/, \"text\"],\n [/zip|tar|gzip|compressed/, \"archive\"],\n [/csv|sheet|excel/, \"table\"],\n];\n\n// I18N-ALLOW: image file extensions, matched against a file name to pick an icon\nconst IMAGE_EXTENSIONS = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"avif\"];\n/* DX-3982: files from Slack and Trello arrive as `application/octet-stream`, so\n the extension is the ONLY signal that a file is a video — the same signal\n images already had. */\n// I18N-ALLOW: video file extensions, matched against a file name to pick an icon\nconst VIDEO_EXTENSIONS = [\"mp4\", \"webm\", \"mov\", \"m4v\", \"ogv\"];\n// I18N-ALLOW: source-code file extensions, matched against a file name to pick an icon\nconst CODE_EXTENSIONS = [\"ts\", \"tsx\", \"js\", \"jsx\", \"py\", \"rs\", \"go\", \"json\", \"sh\", \"css\"];\n// I18N-ALLOW: document file extensions, matched against a file name to pick an icon\nconst TEXT_EXTENSIONS = [\"md\", \"txt\", \"rtf\", \"pdf\", \"doc\", \"docx\", \"ppt\", \"pptx\"];\n// I18N-ALLOW: spreadsheet file extensions, matched against a file name to pick an icon\nconst TABLE_EXTENSIONS = [\"csv\", \"xlsx\", \"xls\"];\n\n/** `fileName` is the file's own name when `name` is a label that is not (a markdown reference such as \"PDF 2\"): the extension is read from it. */\nexport type FileIdentity = Pick<ChatFile, \"name\" | \"mimeType\" | \"fileName\">;\n\n/**\n * What a file is, from its mime type and, when that says nothing, its\n * extension.\n *\n * No mime type is normal — a file dragged from some sources arrives without\n * one, and chat integrations send `application/octet-stream` for everything.\n * The extension is the next best signal, and guessing from it beats a generic\n * icon for the formats people actually attach.\n */\nexport function fileKindOf(file: FileIdentity): FileKind {\n const mime = file.mimeType ?? \"\";\n const match = MIME_KINDS.find(([pattern]) => pattern.test(mime));\n if (match) return match[1];\n const extension = (file.fileName ?? file.name).split(\".\").pop()?.toLowerCase() ?? \"\";\n if (IMAGE_EXTENSIONS.includes(extension)) return \"image\";\n if (VIDEO_EXTENSIONS.includes(extension)) return \"video\";\n if (CODE_EXTENSIONS.includes(extension)) return \"code\";\n if (TEXT_EXTENSIONS.includes(extension)) return \"text\";\n if (TABLE_EXTENSIONS.includes(extension)) return \"table\";\n return \"file\";\n}\n\n/** What a file is called in a reference: a `FileKind`, with a PDF its own word (DXUI-74). */\nexport type ReferenceKind = FileKind | \"pdf\";\n\n/**\n * The kind a markdown reference to a file is named after (\"Image 1\", \"PDF 2\"). A PDF is a document to the\n * icon table but is its own word in a reference; every other file is its `fileKindOf`.\n */\nexport function referenceKindOf(file: FileIdentity): ReferenceKind {\n const mime = file.mimeType ?? \"\";\n const extension = (file.fileName ?? file.name).split(\".\").pop()?.toLowerCase() ?? \"\";\n if (/pdf/.test(mime) || extension === \"pdf\") return \"pdf\";\n return fileKindOf(file);\n}\n\n/** The icon a kind of file wears when it has no picture. */\nexport const fileKindIcon = (kind: FileKind): IconName => KIND_ICONS[kind];\n\n/** The icon for a file. */\nexport const fileIconFor = (file: FileIdentity): IconName => KIND_ICONS[fileKindOf(file)];\n\nexport const isImageFile = (file: FileIdentity): boolean => fileKindOf(file) === \"image\";\nexport const isVideoFile = (file: FileIdentity): boolean => fileKindOf(file) === \"video\";\n"],"names":["KIND_ICONS","MIME_KINDS","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","CODE_EXTENSIONS","TEXT_EXTENSIONS","TABLE_EXTENSIONS","fileKindOf","file","mime","match","pattern","extension","referenceKindOf","fileKindIcon","kind","fileIconFor","isImageFile","isVideoFile"],"mappings":"AAgBA,MAAMA,IAAyC;AAAA,EAC7C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR,GAEMC,IAAwC;AAAA,EAC5C,CAAC,YAAY,OAAO;AAAA,EACpB,CAAC,YAAY,OAAO;AAAA,EACpB,CAAC,YAAY,OAAO;AAAA,EACpB,CAAC,qEAAqE,MAAM;AAAA,EAC5E,CAAC,WAAW,MAAM;AAAA,EAClB,CAAC,OAAO,MAAM;AAAA,EACd,CAAC,2BAA2B,SAAS;AAAA,EACrC,CAAC,mBAAmB,OAAO;AAC7B,GAGMC,IAAmB,CAAC,OAAO,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM,GAKtEC,IAAmB,CAAC,OAAO,QAAQ,OAAO,OAAO,KAAK,GAEtDC,IAAkB,CAAC,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,MAAM,QAAQ,MAAM,KAAK,GAElFC,IAAkB,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,GAE1EC,IAAmB,CAAC,OAAO,QAAQ,KAAK;AAcvC,SAASC,EAAWC,GAA8B;AACvD,QAAMC,IAAOD,EAAK,YAAY,IACxBE,IAAQT,EAAW,KAAK,CAAC,CAACU,CAAO,MAAMA,EAAQ,KAAKF,CAAI,CAAC;AAC/D,MAAIC,EAAO,QAAOA,EAAM,CAAC;AACzB,QAAME,KAAaJ,EAAK,YAAYA,EAAK,MAAM,MAAM,GAAG,EAAE,OAAO,YAAA,KAAiB;AAClF,SAAIN,EAAiB,SAASU,CAAS,IAAU,UAC7CT,EAAiB,SAASS,CAAS,IAAU,UAC7CR,EAAgB,SAASQ,CAAS,IAAU,SAC5CP,EAAgB,SAASO,CAAS,IAAU,SAC5CN,EAAiB,SAASM,CAAS,IAAU,UAC1C;AACT;AASO,SAASC,EAAgBL,GAAmC;AACjE,QAAMC,IAAOD,EAAK,YAAY,IACxBI,KAAaJ,EAAK,YAAYA,EAAK,MAAM,MAAM,GAAG,EAAE,OAAO,YAAA,KAAiB;AAClF,SAAI,MAAM,KAAKC,CAAI,KAAKG,MAAc,QAAc,QAC7CL,EAAWC,CAAI;AACxB;AAGO,MAAMM,IAAe,CAACC,MAA6Bf,EAAWe,CAAI,GAG5DC,IAAc,CAACR,MAAiCR,EAAWO,EAAWC,CAAI,CAAC,GAE3ES,IAAc,CAACT,MAAgCD,EAAWC,CAAI,MAAM,SACpEU,IAAc,CAACV,MAAgCD,EAAWC,CAAI,MAAM;"}
|