rift-ds 1.0.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 +107 -0
- package/behaviors/focusable.d.ts +26 -0
- package/behaviors/focusable.js +18 -0
- package/behaviors/useFocusScope.d.ts +38 -0
- package/behaviors/useFocusScope.js +82 -0
- package/behaviors/useLayer.d.ts +43 -0
- package/behaviors/useLayer.js +55 -0
- package/behaviors/useMounted.d.ts +7 -0
- package/behaviors/useMounted.js +14 -0
- package/behaviors/useScrollLock.d.ts +55 -0
- package/behaviors/useScrollLock.js +59 -0
- package/bin/rift-ds.mjs +82 -0
- package/charts.d.ts +16 -0
- package/charts.js +24 -0
- package/components/Accordion/Accordion.css +119 -0
- package/components/Accordion/Accordion.d.ts +24 -0
- package/components/Accordion/Accordion.js +76 -0
- package/components/AgentPlan/AgentPlan.css +251 -0
- package/components/AgentPlan/AgentPlan.d.ts +41 -0
- package/components/AgentPlan/AgentPlan.js +100 -0
- package/components/AgentRail/AgentRail.css +282 -0
- package/components/AgentRail/AgentRail.d.ts +72 -0
- package/components/AgentRail/AgentRail.js +101 -0
- package/components/AgentStatus/AgentStatus.css +511 -0
- package/components/AgentStatus/AgentStatus.d.ts +41 -0
- package/components/AgentStatus/AgentStatus.js +86 -0
- package/components/AgentStatus/AgentStatusPatterns.d.ts +17 -0
- package/components/AgentStatus/AgentStatusPatterns.js +20 -0
- package/components/AiButton/AiButton.css +559 -0
- package/components/AiButton/AiButton.d.ts +79 -0
- package/components/AiButton/AiButton.js +183 -0
- package/components/Alert/Alert.css +261 -0
- package/components/Alert/Alert.d.ts +25 -0
- package/components/Alert/Alert.js +53 -0
- package/components/AlertDialog/AlertDialog.css +133 -0
- package/components/AlertDialog/AlertDialog.d.ts +29 -0
- package/components/AlertDialog/AlertDialog.js +98 -0
- package/components/AnchorNav/AnchorNav.css +137 -0
- package/components/AnchorNav/AnchorNav.d.ts +40 -0
- package/components/AnchorNav/AnchorNav.js +135 -0
- package/components/AnimatedNumber/AnimatedNumber.css +31 -0
- package/components/AnimatedNumber/AnimatedNumber.d.ts +36 -0
- package/components/AnimatedNumber/AnimatedNumber.js +55 -0
- package/components/AppLayout/AppLayout.css +52 -0
- package/components/AppLayout/AppLayout.d.ts +33 -0
- package/components/AppLayout/AppLayout.js +47 -0
- package/components/AppSidebar/AppSidebar.css +592 -0
- package/components/AppSidebar/AppSidebar.d.ts +90 -0
- package/components/AppSidebar/AppSidebar.js +295 -0
- package/components/Avatar/Avatar.css +133 -0
- package/components/Avatar/Avatar.d.ts +20 -0
- package/components/Avatar/Avatar.js +58 -0
- package/components/Avatar/demoAvatars.d.ts +18 -0
- package/components/Avatar/demoAvatars.js +16 -0
- package/components/AvatarGroup/AvatarGroup.css +61 -0
- package/components/AvatarGroup/AvatarGroup.d.ts +32 -0
- package/components/AvatarGroup/AvatarGroup.js +31 -0
- package/components/Badge/Badge.css +67 -0
- package/components/Badge/Badge.d.ts +13 -0
- package/components/Badge/Badge.js +15 -0
- package/components/Banner/Banner.css +110 -0
- package/components/Banner/Banner.d.ts +36 -0
- package/components/Banner/Banner.js +59 -0
- package/components/Breadcrumb/Breadcrumb.css +100 -0
- package/components/Breadcrumb/Breadcrumb.d.ts +25 -0
- package/components/Breadcrumb/Breadcrumb.js +40 -0
- package/components/Button/Button.css +473 -0
- package/components/Button/Button.d.ts +73 -0
- package/components/Button/Button.js +91 -0
- package/components/ButtonGroup/ButtonGroup.css +39 -0
- package/components/ButtonGroup/ButtonGroup.d.ts +13 -0
- package/components/ButtonGroup/ButtonGroup.js +30 -0
- package/components/Card/Card.css +190 -0
- package/components/Card/Card.d.ts +48 -0
- package/components/Card/Card.js +113 -0
- package/components/CardStack/CardStack.css +106 -0
- package/components/CardStack/CardStack.d.ts +44 -0
- package/components/CardStack/CardStack.js +140 -0
- package/components/Carousel/Carousel.css +121 -0
- package/components/Carousel/Carousel.d.ts +25 -0
- package/components/Carousel/Carousel.js +160 -0
- package/components/Chart/AreaChart.d.ts +40 -0
- package/components/Chart/AreaChart.js +101 -0
- package/components/Chart/BarChart.d.ts +36 -0
- package/components/Chart/BarChart.js +107 -0
- package/components/Chart/Chart.css +224 -0
- package/components/Chart/ComboChart.d.ts +40 -0
- package/components/Chart/ComboChart.js +142 -0
- package/components/Chart/LineChart.d.ts +36 -0
- package/components/Chart/LineChart.js +91 -0
- package/components/Chart/PieChart.d.ts +36 -0
- package/components/Chart/PieChart.js +93 -0
- package/components/Chart/RadarChart.d.ts +36 -0
- package/components/Chart/RadarChart.js +92 -0
- package/components/Chart/RadialChart.d.ts +43 -0
- package/components/Chart/RadialChart.js +114 -0
- package/components/Chart/ScatterChart.d.ts +38 -0
- package/components/Chart/ScatterChart.js +99 -0
- package/components/Chart/StackedBarChart.d.ts +36 -0
- package/components/Chart/StackedBarChart.js +98 -0
- package/components/Chart/Treemap.d.ts +35 -0
- package/components/Chart/Treemap.js +95 -0
- package/components/Chart/palette.d.ts +1 -0
- package/components/Chart/palette.js +17 -0
- package/components/ChatHeader/ChatHeader.css +35 -0
- package/components/ChatHeader/ChatHeader.d.ts +30 -0
- package/components/ChatHeader/ChatHeader.js +17 -0
- package/components/ChatMarker/ChatMarker.css +61 -0
- package/components/ChatMarker/ChatMarker.d.ts +22 -0
- package/components/ChatMarker/ChatMarker.js +18 -0
- package/components/ChatMessage/ChatMessage.css +326 -0
- package/components/ChatMessage/ChatMessage.d.ts +74 -0
- package/components/ChatMessage/ChatMessage.js +71 -0
- package/components/ChatThread/ChatThread.css +171 -0
- package/components/ChatThread/ChatThread.d.ts +41 -0
- package/components/ChatThread/ChatThread.js +175 -0
- package/components/Checkbox/Checkbox.css +183 -0
- package/components/Checkbox/Checkbox.d.ts +81 -0
- package/components/Checkbox/Checkbox.js +176 -0
- package/components/Chip/Chip.css +231 -0
- package/components/Chip/Chip.d.ts +27 -0
- package/components/Chip/Chip.js +80 -0
- package/components/CircularButton/CircularButton.css +263 -0
- package/components/CircularButton/CircularButton.d.ts +68 -0
- package/components/CircularButton/CircularButton.js +72 -0
- package/components/CodeBlock/CodeBlock.css +189 -0
- package/components/CodeBlock/CodeBlock.d.ts +23 -0
- package/components/CodeBlock/CodeBlock.js +96 -0
- package/components/CodeDiff/CodeDiff.css +175 -0
- package/components/CodeDiff/CodeDiff.d.ts +58 -0
- package/components/CodeDiff/CodeDiff.js +114 -0
- package/components/ColorPicker/ColorPicker.css +278 -0
- package/components/ColorPicker/ColorPicker.d.ts +50 -0
- package/components/ColorPicker/ColorPicker.js +349 -0
- package/components/ColourSwatch/ColourSwatch.css +88 -0
- package/components/ColourSwatch/ColourSwatch.d.ts +34 -0
- package/components/ColourSwatch/ColourSwatch.js +42 -0
- package/components/Combobox/Combobox.css +384 -0
- package/components/Combobox/Combobox.d.ts +93 -0
- package/components/Combobox/Combobox.js +331 -0
- package/components/CommandPalette/CommandPalette.css +342 -0
- package/components/CommandPalette/CommandPalette.d.ts +62 -0
- package/components/CommandPalette/CommandPalette.js +247 -0
- package/components/Composer/Composer.css +427 -0
- package/components/Composer/Composer.d.ts +97 -0
- package/components/Composer/Composer.js +146 -0
- package/components/ContactCard/ContactCard.css +132 -0
- package/components/ContactCard/ContactCard.d.ts +24 -0
- package/components/ContactCard/ContactCard.js +79 -0
- package/components/ContextMenu/ContextMenu.css +258 -0
- package/components/ContextMenu/ContextMenu.d.ts +26 -0
- package/components/ContextMenu/ContextMenu.js +387 -0
- package/components/ContributionGraph/ContributionGraph.css +169 -0
- package/components/ContributionGraph/ContributionGraph.d.ts +34 -0
- package/components/ContributionGraph/ContributionGraph.js +149 -0
- package/components/DataTable/DataTable.css +109 -0
- package/components/DataTable/DataTable.d.ts +81 -0
- package/components/DataTable/DataTable.js +236 -0
- package/components/DateInput/DateInput.css +127 -0
- package/components/DateInput/DateInput.d.ts +44 -0
- package/components/DateInput/DateInput.js +82 -0
- package/components/DatePicker/DatePicker.css +198 -0
- package/components/DatePicker/DatePicker.d.ts +29 -0
- package/components/DatePicker/DatePicker.js +196 -0
- package/components/Dialog/Dialog.css +178 -0
- package/components/Dialog/Dialog.d.ts +39 -0
- package/components/Dialog/Dialog.js +99 -0
- package/components/Divider/Divider.css +100 -0
- package/components/Divider/Divider.d.ts +18 -0
- package/components/Divider/Divider.js +31 -0
- package/components/DocumentChip/DocumentChip.css +190 -0
- package/components/DocumentChip/DocumentChip.d.ts +41 -0
- package/components/DocumentChip/DocumentChip.js +78 -0
- package/components/Drawer/Drawer.css +262 -0
- package/components/Drawer/Drawer.d.ts +41 -0
- package/components/Drawer/Drawer.js +101 -0
- package/components/Dropdown/Dropdown.css +288 -0
- package/components/Dropdown/Dropdown.d.ts +85 -0
- package/components/Dropdown/Dropdown.js +308 -0
- package/components/DropdownMenu/DropdownMenu.css +301 -0
- package/components/DropdownMenu/DropdownMenu.d.ts +42 -0
- package/components/DropdownMenu/DropdownMenu.js +371 -0
- package/components/EmptyState/EmptyState.css +136 -0
- package/components/EmptyState/EmptyState.d.ts +27 -0
- package/components/EmptyState/EmptyState.js +32 -0
- package/components/EntityCard/EntityCard.css +69 -0
- package/components/EntityCard/EntityCard.d.ts +19 -0
- package/components/EntityCard/EntityCard.js +26 -0
- package/components/EventCalendar/EventCalendar.css +363 -0
- package/components/EventCalendar/EventCalendar.d.ts +59 -0
- package/components/EventCalendar/EventCalendar.js +230 -0
- package/components/Field/Field.css +80 -0
- package/components/Field/Field.d.ts +57 -0
- package/components/Field/Field.js +70 -0
- package/components/Field/FieldContext.d.ts +42 -0
- package/components/Field/FieldContext.js +8 -0
- package/components/Figure/Figure.css +71 -0
- package/components/Figure/Figure.d.ts +17 -0
- package/components/Figure/Figure.js +26 -0
- package/components/FileInput/FileInput.css +281 -0
- package/components/FileInput/FileInput.d.ts +54 -0
- package/components/FileInput/FileInput.js +205 -0
- package/components/FilterBar/FilterBar.css +202 -0
- package/components/FilterBar/FilterBar.d.ts +55 -0
- package/components/FilterBar/FilterBar.js +249 -0
- package/components/FunnelChart/FunnelChart.css +17 -0
- package/components/FunnelChart/FunnelChart.d.ts +51 -0
- package/components/FunnelChart/FunnelChart.js +96 -0
- package/components/GanttChart/GanttChart.css +326 -0
- package/components/GanttChart/GanttChart.d.ts +82 -0
- package/components/GanttChart/GanttChart.js +202 -0
- package/components/Gauge/Gauge.css +120 -0
- package/components/Gauge/Gauge.d.ts +64 -0
- package/components/Gauge/Gauge.js +111 -0
- package/components/Globe/Globe.css +155 -0
- package/components/Globe/Globe.d.ts +103 -0
- package/components/Globe/Globe.js +416 -0
- package/components/HoverCard/HoverCard.css +125 -0
- package/components/HoverCard/HoverCard.d.ts +29 -0
- package/components/HoverCard/HoverCard.js +83 -0
- package/components/ImageCompare/ImageCompare.css +112 -0
- package/components/ImageCompare/ImageCompare.d.ts +40 -0
- package/components/ImageCompare/ImageCompare.js +134 -0
- package/components/Input/Input.css +150 -0
- package/components/Input/Input.d.ts +45 -0
- package/components/Input/Input.js +99 -0
- package/components/Instructions/Instructions.css +216 -0
- package/components/Instructions/Instructions.d.ts +29 -0
- package/components/Instructions/Instructions.js +32 -0
- package/components/InterruptCard/InterruptCard.css +164 -0
- package/components/InterruptCard/InterruptCard.d.ts +54 -0
- package/components/InterruptCard/InterruptCard.js +57 -0
- package/components/Kbd/Kbd.css +28 -0
- package/components/Kbd/Kbd.d.ts +19 -0
- package/components/Kbd/Kbd.js +14 -0
- package/components/LegendTile/LegendTile.css +60 -0
- package/components/LegendTile/LegendTile.d.ts +30 -0
- package/components/LegendTile/LegendTile.js +21 -0
- package/components/Lightbox/Lightbox.css +210 -0
- package/components/Lightbox/Lightbox.d.ts +45 -0
- package/components/Lightbox/Lightbox.js +109 -0
- package/components/LinkList/LinkList.css +71 -0
- package/components/LinkList/LinkList.d.ts +24 -0
- package/components/LinkList/LinkList.js +42 -0
- package/components/MapCallout/MapCallout.css +46 -0
- package/components/MapCallout/MapCallout.d.ts +29 -0
- package/components/MapCallout/MapCallout.js +17 -0
- package/components/MapLegend/MapLegend.css +88 -0
- package/components/MapLegend/MapLegend.d.ts +40 -0
- package/components/MapLegend/MapLegend.js +68 -0
- package/components/MessageActions/MessageActions.css +85 -0
- package/components/MessageActions/MessageActions.d.ts +38 -0
- package/components/MessageActions/MessageActions.js +40 -0
- package/components/MessageCard/MessageCard.css +163 -0
- package/components/MessageCard/MessageCard.d.ts +35 -0
- package/components/MessageCard/MessageCard.js +30 -0
- package/components/Meter/Meter.css +98 -0
- package/components/Meter/Meter.d.ts +36 -0
- package/components/Meter/Meter.js +48 -0
- package/components/ModelPicker/ModelPicker.css +243 -0
- package/components/ModelPicker/ModelPicker.d.ts +60 -0
- package/components/ModelPicker/ModelPicker.js +261 -0
- package/components/MotionSwatch/MotionSwatch.css +176 -0
- package/components/MotionSwatch/MotionSwatch.d.ts +25 -0
- package/components/MotionSwatch/MotionSwatch.js +74 -0
- package/components/Nav/Nav.css +51 -0
- package/components/Nav/Nav.d.ts +19 -0
- package/components/Nav/Nav.js +26 -0
- package/components/NavList/NavList.css +155 -0
- package/components/NavList/NavList.d.ts +56 -0
- package/components/NavList/NavList.js +100 -0
- package/components/NotificationCenter/NotificationCenter.css +279 -0
- package/components/NotificationCenter/NotificationCenter.d.ts +72 -0
- package/components/NotificationCenter/NotificationCenter.js +145 -0
- package/components/NumberInput/NumberInput.css +163 -0
- package/components/NumberInput/NumberInput.d.ts +44 -0
- package/components/NumberInput/NumberInput.js +147 -0
- package/components/Pagination/Pagination.css +126 -0
- package/components/Pagination/Pagination.d.ts +22 -0
- package/components/Pagination/Pagination.js +84 -0
- package/components/Panel/Panel.css +26 -0
- package/components/Panel/Panel.d.ts +22 -0
- package/components/Panel/Panel.js +19 -0
- package/components/PinInput/PinInput.css +92 -0
- package/components/PinInput/PinInput.d.ts +46 -0
- package/components/PinInput/PinInput.js +161 -0
- package/components/Popover/Popover.css +118 -0
- package/components/Popover/Popover.d.ts +22 -0
- package/components/Popover/Popover.js +113 -0
- package/components/ProgressBar/ProgressBar.css +60 -0
- package/components/ProgressBar/ProgressBar.d.ts +16 -0
- package/components/ProgressBar/ProgressBar.js +27 -0
- package/components/PromptSuggestions/PromptSuggestions.css +264 -0
- package/components/PromptSuggestions/PromptSuggestions.d.ts +68 -0
- package/components/PromptSuggestions/PromptSuggestions.js +87 -0
- package/components/Prose/Prose.css +269 -0
- package/components/Prose/Prose.d.ts +21 -0
- package/components/Prose/Prose.js +14 -0
- package/components/Quote/Quote.css +78 -0
- package/components/Quote/Quote.d.ts +18 -0
- package/components/Quote/Quote.js +26 -0
- package/components/RadioButton/RadioButton.css +151 -0
- package/components/RadioButton/RadioButton.d.ts +90 -0
- package/components/RadioButton/RadioButton.js +138 -0
- package/components/Rating/Rating.css +74 -0
- package/components/Rating/Rating.d.ts +41 -0
- package/components/Rating/Rating.js +124 -0
- package/components/Reasoning/Reasoning.css +291 -0
- package/components/Reasoning/Reasoning.d.ts +55 -0
- package/components/Reasoning/Reasoning.js +99 -0
- package/components/RichDropdown/RichDropdown.css +239 -0
- package/components/RichDropdown/RichDropdown.d.ts +78 -0
- package/components/RichDropdown/RichDropdown.js +227 -0
- package/components/SectionTitle/SectionTitle.css +45 -0
- package/components/SectionTitle/SectionTitle.d.ts +12 -0
- package/components/SectionTitle/SectionTitle.js +22 -0
- package/components/SegmentedControl/SegmentedControl.css +231 -0
- package/components/SegmentedControl/SegmentedControl.d.ts +44 -0
- package/components/SegmentedControl/SegmentedControl.js +240 -0
- package/components/SelectionCard/SelectionCard.css +255 -0
- package/components/SelectionCard/SelectionCard.d.ts +36 -0
- package/components/SelectionCard/SelectionCard.js +102 -0
- package/components/ShaderField/ShaderField.css +24 -0
- package/components/ShaderField/ShaderField.d.ts +68 -0
- package/components/ShaderField/ShaderField.js +55 -0
- package/components/ShaderField/field.glsl.d.ts +39 -0
- package/components/ShaderField/field.glsl.js +178 -0
- package/components/ShaderField/useShaderField.d.ts +103 -0
- package/components/ShaderField/useShaderField.js +410 -0
- package/components/Skeleton/Skeleton.css +81 -0
- package/components/Skeleton/Skeleton.d.ts +16 -0
- package/components/Skeleton/Skeleton.js +30 -0
- package/components/Slider/Slider.css +104 -0
- package/components/Slider/Slider.d.ts +48 -0
- package/components/Slider/Slider.js +86 -0
- package/components/SourceChip/SourceChip.css +111 -0
- package/components/SourceChip/SourceChip.d.ts +32 -0
- package/components/SourceChip/SourceChip.js +31 -0
- package/components/SourceTrail/SourceTrail.css +209 -0
- package/components/SourceTrail/SourceTrail.d.ts +49 -0
- package/components/SourceTrail/SourceTrail.js +108 -0
- package/components/SpacingSwatch/SpacingSwatch.css +108 -0
- package/components/SpacingSwatch/SpacingSwatch.d.ts +20 -0
- package/components/SpacingSwatch/SpacingSwatch.js +50 -0
- package/components/Sparkline/Sparkline.css +76 -0
- package/components/Sparkline/Sparkline.d.ts +51 -0
- package/components/Sparkline/Sparkline.js +116 -0
- package/components/Spinner/Spinner.css +84 -0
- package/components/Spinner/Spinner.d.ts +14 -0
- package/components/Spinner/Spinner.js +42 -0
- package/components/SplitButton/SplitButton.css +93 -0
- package/components/SplitButton/SplitButton.d.ts +43 -0
- package/components/SplitButton/SplitButton.js +67 -0
- package/components/SplitPane/SplitPane.css +106 -0
- package/components/SplitPane/SplitPane.d.ts +36 -0
- package/components/SplitPane/SplitPane.js +130 -0
- package/components/Stat/Stat.css +121 -0
- package/components/Stat/Stat.d.ts +22 -0
- package/components/Stat/Stat.js +36 -0
- package/components/StatusDot/StatusDot.css +104 -0
- package/components/StatusDot/StatusDot.d.ts +34 -0
- package/components/StatusDot/StatusDot.js +23 -0
- package/components/Stepper/Stepper.css +216 -0
- package/components/Stepper/Stepper.d.ts +41 -0
- package/components/Stepper/Stepper.js +61 -0
- package/components/StreamingText/StreamingText.css +40 -0
- package/components/StreamingText/StreamingText.d.ts +62 -0
- package/components/StreamingText/StreamingText.js +49 -0
- package/components/StreamingText/useStreamReveal.d.ts +70 -0
- package/components/StreamingText/useStreamReveal.js +121 -0
- package/components/Swatch/Swatch.css +52 -0
- package/components/Swatch/Swatch.d.ts +34 -0
- package/components/Swatch/Swatch.js +44 -0
- package/components/Table/Table.css +223 -0
- package/components/Table/Table.d.ts +53 -0
- package/components/Table/Table.js +65 -0
- package/components/Tabs/Tabs.css +140 -0
- package/components/Tabs/Tabs.d.ts +28 -0
- package/components/Tabs/Tabs.js +78 -0
- package/components/TagInput/TagInput.css +169 -0
- package/components/TagInput/TagInput.d.ts +43 -0
- package/components/TagInput/TagInput.js +137 -0
- package/components/Textarea/Textarea.css +109 -0
- package/components/Textarea/Textarea.d.ts +43 -0
- package/components/Textarea/Textarea.js +86 -0
- package/components/ThreadPanel/ThreadPanel.css +862 -0
- package/components/ThreadPanel/ThreadPanel.d.ts +175 -0
- package/components/ThreadPanel/ThreadPanel.js +466 -0
- package/components/ThreadTabs/ThreadTabs.css +252 -0
- package/components/ThreadTabs/ThreadTabs.d.ts +54 -0
- package/components/ThreadTabs/ThreadTabs.js +201 -0
- package/components/TimePicker/TimePicker.css +230 -0
- package/components/TimePicker/TimePicker.d.ts +46 -0
- package/components/TimePicker/TimePicker.js +250 -0
- package/components/Timeline/Timeline.css +366 -0
- package/components/Timeline/Timeline.d.ts +67 -0
- package/components/Timeline/Timeline.js +73 -0
- package/components/Toast/Toast.css +363 -0
- package/components/Toast/Toast.d.ts +63 -0
- package/components/Toast/Toast.js +215 -0
- package/components/ToggleGroup/ToggleGroup.css +110 -0
- package/components/ToggleGroup/ToggleGroup.d.ts +50 -0
- package/components/ToggleGroup/ToggleGroup.js +73 -0
- package/components/ToggleSwitch/ToggleSwitch.css +172 -0
- package/components/ToggleSwitch/ToggleSwitch.d.ts +43 -0
- package/components/ToggleSwitch/ToggleSwitch.js +76 -0
- package/components/ToolCall/ToolCall.css +234 -0
- package/components/ToolCall/ToolCall.d.ts +43 -0
- package/components/ToolCall/ToolCall.js +90 -0
- package/components/Toolbar/Toolbar.css +56 -0
- package/components/Toolbar/Toolbar.d.ts +35 -0
- package/components/Toolbar/Toolbar.js +62 -0
- package/components/Tooltip/Tooltip.css +175 -0
- package/components/Tooltip/Tooltip.d.ts +22 -0
- package/components/Tooltip/Tooltip.js +74 -0
- package/components/TreeView/TreeView.css +119 -0
- package/components/TreeView/TreeView.d.ts +45 -0
- package/components/TreeView/TreeView.js +232 -0
- package/components/TypographySwatch/TypographySwatch.css +81 -0
- package/components/TypographySwatch/TypographySwatch.d.ts +24 -0
- package/components/TypographySwatch/TypographySwatch.js +40 -0
- package/components/UsageCard/UsageCard.css +30 -0
- package/components/UsageCard/UsageCard.d.ts +48 -0
- package/components/UsageCard/UsageCard.js +54 -0
- package/components/Waveform/Waveform.css +97 -0
- package/components/Waveform/Waveform.d.ts +44 -0
- package/components/Waveform/Waveform.js +46 -0
- package/components/WorldMap/WorldMap.css +234 -0
- package/components/WorldMap/WorldMap.d.ts +113 -0
- package/components/WorldMap/WorldMap.js +427 -0
- package/components/WorldMap/land.d.ts +14 -0
- package/components/WorldMap/land.js +4 -0
- package/components/registry.d.ts +79 -0
- package/components/registry.js +13 -0
- package/components/registry.json +1153 -0
- package/components/registry.json.d.ts +1156 -0
- package/components/registry.json.js +11 -0
- package/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.woff2 +0 -0
- package/fonts/material-symbols.css +94 -0
- package/fonts/presets/dm-sans-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/dm-sans-300-700-latin.woff2 +0 -0
- package/fonts/presets/fraunces-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/fraunces-300-700-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-300-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-300-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-400-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-400-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-500-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-500-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-600-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-600-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-700-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-mono-700-latin.woff2 +0 -0
- package/fonts/presets/ibm-plex-sans-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/ibm-plex-sans-300-700-latin.woff2 +0 -0
- package/fonts/presets/inter-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/inter-300-700-latin.woff2 +0 -0
- package/fonts/presets/inter-tight-300-900-latin-ext.woff2 +0 -0
- package/fonts/presets/inter-tight-300-900-latin.woff2 +0 -0
- package/fonts/presets/lora-400-700-latin-ext.woff2 +0 -0
- package/fonts/presets/lora-400-700-latin.woff2 +0 -0
- package/fonts/presets/montserrat-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/montserrat-300-700-latin.woff2 +0 -0
- package/fonts/presets/poppins-300-latin-ext.woff2 +0 -0
- package/fonts/presets/poppins-300-latin.woff2 +0 -0
- package/fonts/presets/poppins-400-latin-ext.woff2 +0 -0
- package/fonts/presets/poppins-400-latin.woff2 +0 -0
- package/fonts/presets/poppins-500-latin-ext.woff2 +0 -0
- package/fonts/presets/poppins-500-latin.woff2 +0 -0
- package/fonts/presets/poppins-600-latin-ext.woff2 +0 -0
- package/fonts/presets/poppins-600-latin.woff2 +0 -0
- package/fonts/presets/poppins-700-latin-ext.woff2 +0 -0
- package/fonts/presets/poppins-700-latin.woff2 +0 -0
- package/fonts/presets/source-sans-3-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/source-sans-3-300-700-latin.woff2 +0 -0
- package/fonts/presets/space-grotesk-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/space-grotesk-300-700-latin.woff2 +0 -0
- package/fonts/presets/work-sans-300-700-latin-ext.woff2 +0 -0
- package/fonts/presets/work-sans-300-700-latin.woff2 +0 -0
- package/index.d.ts +132 -0
- package/index.js +277 -0
- package/package.json +87 -0
- package/tokens/motion.d.ts +44 -0
- package/tokens/motion.js +32 -0
- package/tokens/presets/contrast.css +316 -0
- package/tokens/presets/coral.css +356 -0
- package/tokens/presets/forest.css +334 -0
- package/tokens/presets/gold.css +303 -0
- package/tokens/presets/mono.css +286 -0
- package/tokens/presets/pink.css +349 -0
- package/tokens/presets/presets.css +17 -0
- package/tokens/presets/terminal.css +378 -0
- package/tokens/presets/violet.css +314 -0
- package/tokens/presets/warm.css +320 -0
- package/tokens/presets/zest.css +359 -0
- package/tokens/registry.d.ts +22 -0
- package/tokens/registry.js +14 -0
- package/tokens/registry.json +276 -0
- package/tokens/registry.json.d.ts +279 -0
- package/tokens/registry.json.js +8 -0
- package/tokens/tokens-dark.css +186 -0
- package/tokens/tokens-light.css +276 -0
- package/tokens/tokens-motion.css +72 -0
- package/tokens/tokens-primitives.css +213 -0
- package/tokens/tokens-typography.css +210 -0
- package/tokens/tokens.css +11 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { useState } from "react";
|
|
4
|
+
import "./Rating.css";
|
|
5
|
+
import "../../fonts/material-symbols.css";
|
|
6
|
+
const Rating = React.forwardRef(
|
|
7
|
+
({
|
|
8
|
+
value,
|
|
9
|
+
defaultValue = 0,
|
|
10
|
+
max = 5,
|
|
11
|
+
onValueChange,
|
|
12
|
+
readOnly = false,
|
|
13
|
+
disabled = false,
|
|
14
|
+
allowClear = false,
|
|
15
|
+
icon = "star",
|
|
16
|
+
size = "default",
|
|
17
|
+
label = "Rating",
|
|
18
|
+
className = "",
|
|
19
|
+
...rest
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
22
|
+
const [hoverValue, setHoverValue] = useState(0);
|
|
23
|
+
const baseClass = "ds-rating";
|
|
24
|
+
const currentValue = value ?? internalValue;
|
|
25
|
+
const displayValue = !readOnly && !disabled && hoverValue > 0 ? hoverValue : currentValue;
|
|
26
|
+
const classes = [
|
|
27
|
+
baseClass,
|
|
28
|
+
`${baseClass}--${size}`,
|
|
29
|
+
readOnly ? `${baseClass}--read-only` : "",
|
|
30
|
+
disabled ? `${baseClass}--disabled` : "",
|
|
31
|
+
className
|
|
32
|
+
].filter(Boolean).join(" ");
|
|
33
|
+
const setValue = (next) => {
|
|
34
|
+
const resolved = allowClear && next === currentValue ? 0 : next;
|
|
35
|
+
if (value === void 0) setInternalValue(resolved);
|
|
36
|
+
onValueChange?.(resolved);
|
|
37
|
+
};
|
|
38
|
+
const handleKeyDown = (event) => {
|
|
39
|
+
let next = null;
|
|
40
|
+
switch (event.key) {
|
|
41
|
+
case "ArrowRight":
|
|
42
|
+
case "ArrowUp":
|
|
43
|
+
next = Math.min(max, currentValue + 1);
|
|
44
|
+
break;
|
|
45
|
+
case "ArrowLeft":
|
|
46
|
+
case "ArrowDown":
|
|
47
|
+
next = Math.max(1, currentValue - 1);
|
|
48
|
+
break;
|
|
49
|
+
case "Home":
|
|
50
|
+
next = 1;
|
|
51
|
+
break;
|
|
52
|
+
case "End":
|
|
53
|
+
next = max;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
if (next !== null) {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
if (value === void 0) setInternalValue(next);
|
|
59
|
+
onValueChange?.(next);
|
|
60
|
+
const steps2 = event.currentTarget.querySelectorAll('[role="radio"]');
|
|
61
|
+
steps2[next - 1]?.focus();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const steps = Array.from({ length: max }, (_, i) => i + 1);
|
|
65
|
+
if (readOnly) {
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
...rest,
|
|
70
|
+
ref,
|
|
71
|
+
className: classes,
|
|
72
|
+
role: "img",
|
|
73
|
+
"aria-label": rest["aria-label"] ?? `${label}: ${currentValue} out of ${max}`,
|
|
74
|
+
children: steps.map((step) => /* @__PURE__ */ jsx(
|
|
75
|
+
"span",
|
|
76
|
+
{
|
|
77
|
+
className: `${baseClass}__step ${step <= displayValue ? `${baseClass}__step--filled` : ""}`,
|
|
78
|
+
"aria-hidden": "true",
|
|
79
|
+
children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__icon${typeof icon === "string" ? " material-symbols-rounded" : ""}`, children: icon })
|
|
80
|
+
},
|
|
81
|
+
step
|
|
82
|
+
))
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
return /* @__PURE__ */ jsx(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
...rest,
|
|
90
|
+
ref,
|
|
91
|
+
className: classes,
|
|
92
|
+
role: "radiogroup",
|
|
93
|
+
"aria-label": rest["aria-label"] ?? label,
|
|
94
|
+
"aria-disabled": disabled || void 0,
|
|
95
|
+
onKeyDown: disabled ? void 0 : handleKeyDown,
|
|
96
|
+
onMouseLeave: () => setHoverValue(0),
|
|
97
|
+
children: steps.map((step) => {
|
|
98
|
+
const checked = step === currentValue;
|
|
99
|
+
const tabStop = checked || currentValue === 0 && step === 1;
|
|
100
|
+
return /* @__PURE__ */ jsx(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "button",
|
|
104
|
+
role: "radio",
|
|
105
|
+
"aria-checked": checked,
|
|
106
|
+
"aria-label": label ? `${label}: ${step} out of ${max}` : `${step} out of ${max}`,
|
|
107
|
+
tabIndex: tabStop ? 0 : -1,
|
|
108
|
+
disabled,
|
|
109
|
+
className: `${baseClass}__step ${step <= displayValue ? `${baseClass}__step--filled` : ""}`,
|
|
110
|
+
onClick: () => setValue(step),
|
|
111
|
+
onMouseEnter: () => setHoverValue(step),
|
|
112
|
+
children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__icon${typeof icon === "string" ? " material-symbols-rounded" : ""}`, "aria-hidden": "true", children: icon })
|
|
113
|
+
},
|
|
114
|
+
step
|
|
115
|
+
);
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
Rating.displayName = "Rating";
|
|
122
|
+
export {
|
|
123
|
+
Rating
|
|
124
|
+
};
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
REASONING COMPONENT
|
|
3
|
+
A model's thinking, disclosed behind a
|
|
4
|
+
one-line summary. Quiet by construction: the
|
|
5
|
+
trace is secondary text on a rail, never
|
|
6
|
+
competing with the answer beside it.
|
|
7
|
+
============================================ */
|
|
8
|
+
|
|
9
|
+
.ds-reasoning {
|
|
10
|
+
/* Where an AgentStatus summary's label starts: matrix plus its gap.
|
|
11
|
+
The rail geometry and the handoff slide both derive from it. */
|
|
12
|
+
--ds-reasoning-align: calc(var(--icon-size-600) + var(--gap-300));
|
|
13
|
+
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
width: 100%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* ============================================
|
|
20
|
+
TRIGGER
|
|
21
|
+
============================================ */
|
|
22
|
+
|
|
23
|
+
.ds-reasoning__trigger {
|
|
24
|
+
display: inline-flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
gap: var(--gap-200);
|
|
27
|
+
align-self: flex-start;
|
|
28
|
+
padding: var(--padding-100) var(--padding-150);
|
|
29
|
+
margin-left: calc(var(--padding-150) * -1);
|
|
30
|
+
background: none;
|
|
31
|
+
border: none;
|
|
32
|
+
border-radius: var(--radius-200);
|
|
33
|
+
color: var(--color-text-secondary);
|
|
34
|
+
font-family: var(--font-paragraph-family);
|
|
35
|
+
font-size: var(--font-paragraph-size);
|
|
36
|
+
font-weight: var(--font-paragraph-weight);
|
|
37
|
+
line-height: var(--font-paragraph-line-height);
|
|
38
|
+
letter-spacing: var(--font-paragraph-letter-spacing);
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
transition: color var(--motion-duration-fast) var(--motion-ease-standard);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.ds-reasoning__trigger:hover {
|
|
44
|
+
color: var(--color-text-primary);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Summary-only: the same line, minus every affordance that would promise a
|
|
48
|
+
panel behind it. Not a button, so there is nothing to focus or press. */
|
|
49
|
+
.ds-reasoning__trigger--static {
|
|
50
|
+
cursor: default;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ds-reasoning__trigger--static:hover {
|
|
54
|
+
color: var(--color-text-secondary);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ds-reasoning__trigger:focus-visible {
|
|
58
|
+
outline: 2px solid var(--color-action-primary-bg);
|
|
59
|
+
outline-offset: -2px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Closed the chevron points at the collapsed trace; open it points down the
|
|
63
|
+
way the panel expands. The glyph itself points down, so closed is the
|
|
64
|
+
rotated state — and the quarter turn to open runs clockwise, following
|
|
65
|
+
the panel as it opens. */
|
|
66
|
+
.ds-reasoning__chevron {
|
|
67
|
+
--icon-size: var(--icon-size-500);
|
|
68
|
+
|
|
69
|
+
flex: none;
|
|
70
|
+
transform: rotate(-90deg);
|
|
71
|
+
transition: transform var(--motion-duration-slow) var(--motion-ease-standard);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ds-reasoning--open .ds-reasoning__chevron {
|
|
75
|
+
transform: rotate(0deg);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* ============================================
|
|
79
|
+
SUMMARY
|
|
80
|
+
While the trace streams, a sweep walks the
|
|
81
|
+
summary left to right — the same gradient
|
|
82
|
+
AgentStatus uses (primary base, tertiary
|
|
83
|
+
band, same stops), so "the model is working"
|
|
84
|
+
looks the same wherever it appears.
|
|
85
|
+
============================================ */
|
|
86
|
+
|
|
87
|
+
.ds-reasoning__summary {
|
|
88
|
+
position: relative;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* The live→done handoff. The departing node summary (an AgentStatus)
|
|
93
|
+
overlays the incoming text, fading out in place, while the text summary
|
|
94
|
+
slides left from where its label sat into the flush position. The
|
|
95
|
+
modifier comes off once the animation ends, so nothing stays composited. */
|
|
96
|
+
.ds-reasoning__summary--entering {
|
|
97
|
+
animation: ds-reasoning-summary-in var(--motion-duration-slow) var(--motion-ease-entrance) both;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.ds-reasoning__summary-leaving {
|
|
101
|
+
position: absolute;
|
|
102
|
+
left: 0;
|
|
103
|
+
top: 50%;
|
|
104
|
+
transform: translateY(-50%);
|
|
105
|
+
white-space: nowrap;
|
|
106
|
+
animation: ds-reasoning-summary-out var(--motion-duration-slow) var(--motion-ease-standard) both;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@keyframes ds-reasoning-summary-in {
|
|
110
|
+
from {
|
|
111
|
+
opacity: 0;
|
|
112
|
+
transform: translateX(var(--ds-reasoning-align));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@keyframes ds-reasoning-summary-out {
|
|
117
|
+
to {
|
|
118
|
+
opacity: 0;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* A node summary (an AgentStatus) owns its own appearance — the text
|
|
123
|
+
shimmer below never applies to it. Inline-flex keeps the span exactly
|
|
124
|
+
the node's height: left inline, the node sits on the text baseline and
|
|
125
|
+
the leftover descender space pushes it off the chevron's centreline. */
|
|
126
|
+
.ds-reasoning__summary--node {
|
|
127
|
+
display: inline-flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* The band travels dim → bright → dim, and stays narrow, matching
|
|
132
|
+
AgentStatus's sweep stop for stop: the two sit in the same conversation,
|
|
133
|
+
so a shimmer that read differently here would look like a second effect
|
|
134
|
+
rather than the same one. */
|
|
135
|
+
.ds-reasoning--streaming .ds-reasoning__summary:not(.ds-reasoning__summary--node) {
|
|
136
|
+
background-image: linear-gradient(
|
|
137
|
+
100deg,
|
|
138
|
+
var(--color-text-tertiary) 44%,
|
|
139
|
+
var(--color-text-primary) 50%,
|
|
140
|
+
var(--color-text-tertiary) 56%
|
|
141
|
+
);
|
|
142
|
+
background-size: 250% 100%;
|
|
143
|
+
background-clip: text;
|
|
144
|
+
-webkit-background-clip: text;
|
|
145
|
+
color: transparent;
|
|
146
|
+
animation: ds-reasoning-shimmer var(--motion-duration-loop-shimmer)
|
|
147
|
+
var(--motion-ease-linear) infinite;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@keyframes ds-reasoning-shimmer {
|
|
151
|
+
from {
|
|
152
|
+
background-position-x: 100%;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
to {
|
|
156
|
+
background-position-x: 0%;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* ============================================
|
|
161
|
+
PANEL
|
|
162
|
+
============================================ */
|
|
163
|
+
|
|
164
|
+
.ds-reasoning__panel {
|
|
165
|
+
display: grid;
|
|
166
|
+
grid-template-rows: 0fr;
|
|
167
|
+
visibility: hidden;
|
|
168
|
+
transition:
|
|
169
|
+
grid-template-rows var(--motion-duration-slow) var(--motion-ease-standard),
|
|
170
|
+
visibility var(--motion-duration-slow) var(--motion-ease-standard);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.ds-reasoning--open .ds-reasoning__panel {
|
|
174
|
+
grid-template-rows: 1fr;
|
|
175
|
+
visibility: visible;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.ds-reasoning__content {
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
min-height: 0;
|
|
181
|
+
transition: padding-block var(--motion-duration-slow) var(--motion-ease-standard);
|
|
182
|
+
/* The rail and trace align to an AgentStatus summary's geometry: the
|
|
183
|
+
rail runs down the centre of the matrix (half an icon step, corrected
|
|
184
|
+
by half the rail's own width) and the trace text starts exactly where
|
|
185
|
+
the status label's first letter starts (matrix + its gap). A plain
|
|
186
|
+
text summary shares the same geometry, so swapping a live status for
|
|
187
|
+
the thought-for line never shifts the trace. */
|
|
188
|
+
margin-left: calc(var(--icon-size-600) / 2 - var(--border-050) / 2);
|
|
189
|
+
padding-left: calc(var(--icon-size-600) / 2 + var(--gap-300) - var(--border-050) / 2);
|
|
190
|
+
/* The rail dissolves at its foot — the Timeline's end-of-line treatment.
|
|
191
|
+
A border can't carry a gradient, so the border only reserves the
|
|
192
|
+
geometry (transparent, same width) and the stripe is painted under it:
|
|
193
|
+
a border-box background sized to the border's own column. */
|
|
194
|
+
border-left: var(--border-050) solid transparent;
|
|
195
|
+
background:
|
|
196
|
+
linear-gradient(
|
|
197
|
+
to bottom,
|
|
198
|
+
var(--color-divider) calc(100% - var(--gap-500) * 2),
|
|
199
|
+
var(--color-bg-container-primary-transparent)
|
|
200
|
+
)
|
|
201
|
+
left top / var(--border-050) 100% no-repeat border-box;
|
|
202
|
+
color: var(--color-text-secondary);
|
|
203
|
+
font-family: var(--font-paragraph-family);
|
|
204
|
+
font-size: var(--font-paragraph-size);
|
|
205
|
+
font-weight: var(--font-paragraph-weight);
|
|
206
|
+
line-height: var(--font-paragraph-line-height);
|
|
207
|
+
letter-spacing: var(--font-paragraph-letter-spacing);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* With the trigger's own bottom padding, the panel opens one --gap-500
|
|
211
|
+
below the summary row — the same step a --gap-500 trace list uses
|
|
212
|
+
between nodes, so the first node isn't tighter than the rest. */
|
|
213
|
+
.ds-reasoning--open .ds-reasoning__content {
|
|
214
|
+
padding-block: var(--padding-400);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.ds-reasoning__content > :first-child {
|
|
218
|
+
margin-top: 0;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.ds-reasoning__content > :last-child {
|
|
222
|
+
margin-bottom: 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* ============================================
|
|
226
|
+
TRACE NODES
|
|
227
|
+
Inside Reasoning, a list is the trace's node
|
|
228
|
+
list: one thinking step per item, no bullets
|
|
229
|
+
(the rail is the marker), on the same
|
|
230
|
+
--gap-500 beat the panel opens with. New
|
|
231
|
+
nodes rise in as the trace builds.
|
|
232
|
+
============================================ */
|
|
233
|
+
|
|
234
|
+
.ds-reasoning__content ul,
|
|
235
|
+
.ds-reasoning__content ol {
|
|
236
|
+
list-style: none;
|
|
237
|
+
margin: 0;
|
|
238
|
+
padding: 0;
|
|
239
|
+
display: flex;
|
|
240
|
+
flex-direction: column;
|
|
241
|
+
gap: var(--gap-500);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.ds-reasoning__content li {
|
|
245
|
+
animation: ds-reasoning-node-in var(--motion-duration-slow) var(--motion-ease-entrance);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
@keyframes ds-reasoning-node-in {
|
|
249
|
+
from {
|
|
250
|
+
opacity: 0;
|
|
251
|
+
transform: translateY(6px);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* ============================================
|
|
256
|
+
SIZES
|
|
257
|
+
The scale pairs with ChatMessage: default
|
|
258
|
+
matches default message text, compact
|
|
259
|
+
matches compact message text.
|
|
260
|
+
============================================ */
|
|
261
|
+
|
|
262
|
+
.ds-reasoning--compact .ds-reasoning__trigger,
|
|
263
|
+
.ds-reasoning--compact .ds-reasoning__content {
|
|
264
|
+
font-family: var(--font-paragraph-sm-family);
|
|
265
|
+
font-size: var(--font-paragraph-sm-size);
|
|
266
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
267
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
268
|
+
letter-spacing: var(--font-paragraph-sm-letter-spacing);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/* Compact pairs with a compact AgentStatus: sm matrix, sm gap. */
|
|
272
|
+
.ds-reasoning--compact {
|
|
273
|
+
--ds-reasoning-align: calc(var(--icon-size-500) + var(--gap-200));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.ds-reasoning--compact .ds-reasoning__content {
|
|
277
|
+
margin-left: calc(var(--icon-size-500) / 2 - var(--border-050) / 2);
|
|
278
|
+
padding-left: calc(var(--icon-size-500) / 2 + var(--gap-200) - var(--border-050) / 2);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* ============================================
|
|
282
|
+
REDUCED MOTION
|
|
283
|
+
============================================ */
|
|
284
|
+
|
|
285
|
+
@media (prefers-reduced-motion: reduce) {
|
|
286
|
+
.ds-reasoning--streaming .ds-reasoning__summary:not(.ds-reasoning__summary--node) {
|
|
287
|
+
background-image: none;
|
|
288
|
+
color: var(--color-text-tertiary);
|
|
289
|
+
animation: none;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Props owned by Reasoning itself — everything else falls through to the root element. */
|
|
3
|
+
type ReasoningOwnProps = {
|
|
4
|
+
/** The model is still producing the trace. Opens the panel and shimmers the summary. */
|
|
5
|
+
streaming?: boolean;
|
|
6
|
+
/** Seconds spent reasoning, shown in the summary once complete. */
|
|
7
|
+
duration?: number;
|
|
8
|
+
/** Override the summary line. By default it reports the streaming state and the duration. */
|
|
9
|
+
label?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Replace the summary text with custom content — typically an AgentStatus,
|
|
12
|
+
* pairing the live indicator with the trace disclosure. The node owns its
|
|
13
|
+
* own appearance and announcement, so Reasoning's shimmer and live region
|
|
14
|
+
* stand down.
|
|
15
|
+
*/
|
|
16
|
+
summary?: React.ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* Render the summary line alone, with no chevron, no trigger, and no
|
|
19
|
+
* panel — for a model that reports what it is doing but produces no trace
|
|
20
|
+
* to read. A disclosure that opens onto nothing is a promise the component
|
|
21
|
+
* cannot keep, so it stops being one.
|
|
22
|
+
*/
|
|
23
|
+
summaryOnly?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Text scale, paired with ChatMessage's sizes: `default` matches default
|
|
26
|
+
* message text, `compact` matches compact message text.
|
|
27
|
+
*/
|
|
28
|
+
size?: 'default' | 'compact';
|
|
29
|
+
/** Open state for controlled use. Pair with `onOpenChange`. */
|
|
30
|
+
open?: boolean;
|
|
31
|
+
/** Open state for uncontrolled use. Defaults to open while `streaming`. */
|
|
32
|
+
defaultOpen?: boolean;
|
|
33
|
+
/** Fires whenever the panel opens or closes, from a click or from the stream ending. */
|
|
34
|
+
onOpenChange?: (open: boolean) => void;
|
|
35
|
+
/** Additional CSS classes */
|
|
36
|
+
className?: string;
|
|
37
|
+
/** The reasoning trace. */
|
|
38
|
+
children?: React.ReactNode;
|
|
39
|
+
};
|
|
40
|
+
export interface ReasoningProps extends ReasoningOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof ReasoningOwnProps> {
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reasoning discloses a model's thinking without letting it dominate the
|
|
44
|
+
* response: open while the trace streams in, collapsed to a one-line summary
|
|
45
|
+
* once it finishes.
|
|
46
|
+
*
|
|
47
|
+
* The auto-collapse yields to the reader — once someone has toggled the panel
|
|
48
|
+
* themselves, the stream ending no longer closes it.
|
|
49
|
+
*
|
|
50
|
+
* Only the summary line is a live region. A trace announced token by token
|
|
51
|
+
* floods a screen reader, so the body is ordinary expandable content and the
|
|
52
|
+
* announcement covers the boundaries: thinking, then thought for so long.
|
|
53
|
+
*/
|
|
54
|
+
export declare const Reasoning: React.ForwardRefExoticComponent<ReasoningProps & React.RefAttributes<HTMLDivElement>>;
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useId, useState, useRef, useEffect, useCallback } from "react";
|
|
4
|
+
import "./Reasoning.css";
|
|
5
|
+
import "../../fonts/material-symbols.css";
|
|
6
|
+
const Reasoning = React.forwardRef(
|
|
7
|
+
({
|
|
8
|
+
streaming = false,
|
|
9
|
+
duration,
|
|
10
|
+
label,
|
|
11
|
+
summary,
|
|
12
|
+
summaryOnly = false,
|
|
13
|
+
size = "default",
|
|
14
|
+
open,
|
|
15
|
+
defaultOpen,
|
|
16
|
+
onOpenChange,
|
|
17
|
+
className = "",
|
|
18
|
+
children,
|
|
19
|
+
...rest
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const baseClass = "ds-reasoning";
|
|
22
|
+
const id = useId();
|
|
23
|
+
const panelId = `${id}-panel`;
|
|
24
|
+
const triggerId = `${id}-trigger`;
|
|
25
|
+
const isControlled = open !== void 0;
|
|
26
|
+
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen ?? streaming);
|
|
27
|
+
const isOpen = isControlled ? open : uncontrolledOpen;
|
|
28
|
+
const [leaving, setLeaving] = useState(null);
|
|
29
|
+
const prevSummary = useRef(summary);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (prevSummary.current != null && summary == null) {
|
|
32
|
+
setLeaving(prevSummary.current);
|
|
33
|
+
}
|
|
34
|
+
prevSummary.current = summary;
|
|
35
|
+
}, [summary]);
|
|
36
|
+
const readerDecided = useRef(false);
|
|
37
|
+
const wasStreaming = useRef(streaming);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (streaming === wasStreaming.current) return;
|
|
40
|
+
wasStreaming.current = streaming;
|
|
41
|
+
if (readerDecided.current) return;
|
|
42
|
+
if (!isControlled) setUncontrolledOpen(streaming);
|
|
43
|
+
onOpenChange?.(streaming);
|
|
44
|
+
}, [streaming, isControlled, onOpenChange]);
|
|
45
|
+
const toggle = useCallback(() => {
|
|
46
|
+
readerDecided.current = true;
|
|
47
|
+
const next = !isOpen;
|
|
48
|
+
if (!isControlled) setUncontrolledOpen(next);
|
|
49
|
+
onOpenChange?.(next);
|
|
50
|
+
}, [isOpen, isControlled, onOpenChange]);
|
|
51
|
+
const summaryText = label ?? (streaming ? "Thinking" : duration !== void 0 ? `Thought for ${duration}s` : "Thought process");
|
|
52
|
+
const classes = [
|
|
53
|
+
baseClass,
|
|
54
|
+
`${baseClass}--${size}`,
|
|
55
|
+
isOpen ? `${baseClass}--open` : "",
|
|
56
|
+
streaming ? `${baseClass}--streaming` : "",
|
|
57
|
+
className
|
|
58
|
+
].filter(Boolean).join(" ");
|
|
59
|
+
const summaryLine = /* @__PURE__ */ jsxs(
|
|
60
|
+
"span",
|
|
61
|
+
{
|
|
62
|
+
className: `${baseClass}__summary${summary ? ` ${baseClass}__summary--node` : ""}${leaving != null && summary == null ? ` ${baseClass}__summary--entering` : ""}`,
|
|
63
|
+
role: summary ? void 0 : "status",
|
|
64
|
+
onAnimationEnd: (e) => {
|
|
65
|
+
if (e.target === e.currentTarget) setLeaving(null);
|
|
66
|
+
},
|
|
67
|
+
children: [
|
|
68
|
+
leaving != null && summary == null && /* @__PURE__ */ jsx("span", { className: `${baseClass}__summary-leaving`, "aria-hidden": "true", children: leaving }),
|
|
69
|
+
summary ?? summaryText
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
if (summaryOnly) {
|
|
74
|
+
return /* @__PURE__ */ jsx("div", { ...rest, ref, className: classes, children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__trigger ${baseClass}__trigger--static`, children: summaryLine }) });
|
|
75
|
+
}
|
|
76
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
|
|
77
|
+
/* @__PURE__ */ jsxs(
|
|
78
|
+
"button",
|
|
79
|
+
{
|
|
80
|
+
type: "button",
|
|
81
|
+
id: triggerId,
|
|
82
|
+
className: `${baseClass}__trigger`,
|
|
83
|
+
"aria-expanded": isOpen,
|
|
84
|
+
"aria-controls": panelId,
|
|
85
|
+
onClick: toggle,
|
|
86
|
+
children: [
|
|
87
|
+
summaryLine,
|
|
88
|
+
/* @__PURE__ */ jsx("span", { className: `${baseClass}__chevron material-symbols-rounded`, "aria-hidden": "true", children: "expand_more" })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
/* @__PURE__ */ jsx("div", { className: `${baseClass}__panel`, id: panelId, role: "region", "aria-labelledby": triggerId, children: /* @__PURE__ */ jsx("div", { className: `${baseClass}__content`, children }) })
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
Reasoning.displayName = "Reasoning";
|
|
97
|
+
export {
|
|
98
|
+
Reasoning
|
|
99
|
+
};
|