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,264 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
PROMPT SUGGESTIONS COMPONENT
|
|
3
|
+
Horizontal row of tappable prompt chips.
|
|
4
|
+
Scrolls with pure-CSS edge fades by default;
|
|
5
|
+
wraps for empty-state hero placements.
|
|
6
|
+
============================================ */
|
|
7
|
+
|
|
8
|
+
.ds-prompt-suggestions {
|
|
9
|
+
display: flex;
|
|
10
|
+
gap: var(--gap-200);
|
|
11
|
+
/* Breathing room so chip focus rings aren't clipped by the scroll box */
|
|
12
|
+
padding-block: var(--padding-050);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* ============================================
|
|
16
|
+
SIZE
|
|
17
|
+
The pill scale itself is Chip's — the row only
|
|
18
|
+
picks which size to ask for. What belongs here
|
|
19
|
+
is the gutter between pills, which opens up a
|
|
20
|
+
step at the larger size.
|
|
21
|
+
============================================ */
|
|
22
|
+
|
|
23
|
+
.ds-prompt-suggestions--default {
|
|
24
|
+
gap: var(--gap-300);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ds-prompt-suggestions--compact {
|
|
28
|
+
/* Base gap applies. */
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* ============================================
|
|
32
|
+
SCROLL — one line, overflow hinted by fades
|
|
33
|
+
============================================ */
|
|
34
|
+
|
|
35
|
+
/* Edge fades — scroll layout only, which is why the layout is named on the
|
|
36
|
+
element rather than inferred: content near either edge fades out, hinting
|
|
37
|
+
there is more to scroll. A CSS mask, not a scroll listener.
|
|
38
|
+
ds-allow(color): mask alpha keywords (black/transparent), not palette colours */
|
|
39
|
+
.ds-prompt-suggestions--scroll {
|
|
40
|
+
overflow-x: auto;
|
|
41
|
+
-webkit-mask-image: linear-gradient(
|
|
42
|
+
to right,
|
|
43
|
+
transparent,
|
|
44
|
+
black var(--gap-500),
|
|
45
|
+
black calc(100% - var(--gap-500)),
|
|
46
|
+
transparent
|
|
47
|
+
);
|
|
48
|
+
mask-image: linear-gradient(
|
|
49
|
+
to right,
|
|
50
|
+
transparent,
|
|
51
|
+
black var(--gap-500),
|
|
52
|
+
black calc(100% - var(--gap-500)),
|
|
53
|
+
transparent
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* ============================================
|
|
58
|
+
WRAP — multi-line hero variant, no fades
|
|
59
|
+
============================================ */
|
|
60
|
+
|
|
61
|
+
.ds-prompt-suggestions--wrap {
|
|
62
|
+
flex-wrap: wrap;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* ============================================
|
|
66
|
+
STACK — one suggestion per line
|
|
67
|
+
For narrow columns, where a wrapped row breaks
|
|
68
|
+
wherever the labels happen to run out of room
|
|
69
|
+
and the ragged right edge reads as an accident.
|
|
70
|
+
Pills still hug their labels: stretching them
|
|
71
|
+
to a shared width would make a set of prompts
|
|
72
|
+
look like a set of buttons.
|
|
73
|
+
============================================ */
|
|
74
|
+
|
|
75
|
+
.ds-prompt-suggestions--stack {
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
align-items: flex-start;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* ============================================
|
|
81
|
+
ITEMS
|
|
82
|
+
============================================ */
|
|
83
|
+
|
|
84
|
+
.ds-prompt-suggestions__item {
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-shrink: 0;
|
|
87
|
+
/* Pills pop in one after another — a small rise-and-settle with the
|
|
88
|
+
spring's overshoot, quiet enough to read as arrival rather than
|
|
89
|
+
performance. `backwards` keeps a delayed pill invisible until its
|
|
90
|
+
turn. The pending placeholders and the chips that replace them are
|
|
91
|
+
both items, so each set lands one-two-three. */
|
|
92
|
+
animation: ds-prompt-suggestions-pop var(--motion-duration-slow) var(--motion-ease-spring)
|
|
93
|
+
backwards;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* A set that has already landed stands still: the host turns the entrance
|
|
97
|
+
off (`entrance={false}`) when it re-shows suggestions the visitor has
|
|
98
|
+
already watched arrive, so a reopened panel does not replay them. */
|
|
99
|
+
.ds-prompt-suggestions--still .ds-prompt-suggestions__item {
|
|
100
|
+
animation: none;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* The stagger: one instant per pill, capped at the fifth so a long
|
|
104
|
+
scrolling row does not keep the far end waiting. */
|
|
105
|
+
.ds-prompt-suggestions__item:nth-child(2) {
|
|
106
|
+
animation-delay: var(--motion-duration-instant);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.ds-prompt-suggestions__item:nth-child(3) {
|
|
110
|
+
animation-delay: calc(var(--motion-duration-instant) * 2);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.ds-prompt-suggestions__item:nth-child(4) {
|
|
114
|
+
animation-delay: calc(var(--motion-duration-instant) * 3);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ds-prompt-suggestions__item:nth-child(n + 5) {
|
|
118
|
+
animation-delay: calc(var(--motion-duration-instant) * 4);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@keyframes ds-prompt-suggestions-pop {
|
|
122
|
+
from {
|
|
123
|
+
opacity: 0;
|
|
124
|
+
transform: translateY(6px) scale(0.97);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
to {
|
|
128
|
+
opacity: 1;
|
|
129
|
+
transform: none;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* ============================================
|
|
134
|
+
CHOSEN — the tap acknowledgment
|
|
135
|
+
The picked chip presses in and springs back
|
|
136
|
+
(the spring's overshoot is the tiny bounce)
|
|
137
|
+
while its siblings dim, so the choice pops
|
|
138
|
+
for the beat before the host acts on it.
|
|
139
|
+
============================================ */
|
|
140
|
+
|
|
141
|
+
.ds-prompt-suggestions__item {
|
|
142
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.ds-prompt-suggestions--choosing
|
|
146
|
+
.ds-prompt-suggestions__item:not(.ds-prompt-suggestions__item--chosen) {
|
|
147
|
+
/* The system's dimmed convention, shared with disabled states. */
|
|
148
|
+
opacity: 0.4;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.ds-prompt-suggestions__item--chosen .ds-chip {
|
|
152
|
+
animation: ds-prompt-suggestions-choose var(--motion-duration-slow) var(--motion-ease-spring);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@keyframes ds-prompt-suggestions-choose {
|
|
156
|
+
0% {
|
|
157
|
+
transform: scale(1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
35% {
|
|
161
|
+
transform: scale(0.94);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* The spring overshoots past 1 on the way back, then settles. */
|
|
165
|
+
100% {
|
|
166
|
+
transform: scale(1);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* ============================================
|
|
171
|
+
PENDING — placeholder pills
|
|
172
|
+
Each placeholder is the chip's real shell —
|
|
173
|
+
its surface, border, padding and height for
|
|
174
|
+
the row's size — holding a text-height shimmer
|
|
175
|
+
bar where the label is "generating" (Skeleton's
|
|
176
|
+
sweep on ThreadPanel's 0.75em bar geometry).
|
|
177
|
+
The shell is what keeps the row's height and
|
|
178
|
+
rhythm exactly what the loaded chips will be.
|
|
179
|
+
============================================ */
|
|
180
|
+
|
|
181
|
+
.ds-prompt-suggestions__skeleton {
|
|
182
|
+
display: flex;
|
|
183
|
+
align-items: center;
|
|
184
|
+
box-sizing: border-box;
|
|
185
|
+
border-radius: var(--radius-pill);
|
|
186
|
+
/* Chip's own surface, so only the label reads as loading. */
|
|
187
|
+
background-color: var(--color-bg-page-primary);
|
|
188
|
+
border: var(--border-025) solid var(--color-bg-container-border);
|
|
189
|
+
|
|
190
|
+
/* Chip's default (32px) geometry — the row's compact size. The height is
|
|
191
|
+
the chip's line box plus its padding and border, stated rather than
|
|
192
|
+
grown from text, since the shell holds a bar instead of a label. */
|
|
193
|
+
padding: var(--padding-150) var(--padding-300);
|
|
194
|
+
height: calc(
|
|
195
|
+
var(--font-paragraph-sm-emphasis-line-height) + 2 * var(--padding-150) + 2 * var(--border-025)
|
|
196
|
+
);
|
|
197
|
+
font-size: var(--font-paragraph-sm-emphasis-size);
|
|
198
|
+
|
|
199
|
+
/* Widths are em-cycled below so the set reads as questions of different
|
|
200
|
+
lengths rather than three identical pills — a drawing choice scaled by
|
|
201
|
+
the font, like ThreadPanel's 0.75em shimmer bar, not a spacing token. */
|
|
202
|
+
width: 13em;
|
|
203
|
+
max-width: 100%;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* Chip's large geometry — the row's default size. */
|
|
207
|
+
.ds-prompt-suggestions--default .ds-prompt-suggestions__skeleton {
|
|
208
|
+
padding: var(--padding-200) var(--padding-500);
|
|
209
|
+
height: calc(
|
|
210
|
+
var(--font-paragraph-emphasis-line-height) + 2 * var(--padding-200) + 2 * var(--border-025)
|
|
211
|
+
);
|
|
212
|
+
font-size: var(--font-paragraph-emphasis-size);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.ds-prompt-suggestions__item:nth-child(3n + 2) .ds-prompt-suggestions__skeleton {
|
|
216
|
+
width: 16em;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.ds-prompt-suggestions__item:nth-child(3n) .ds-prompt-suggestions__skeleton {
|
|
220
|
+
width: 11em;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* The generating "label": a text-height bar filling the shell's content
|
|
224
|
+
box, swept by the shimmer. */
|
|
225
|
+
.ds-prompt-suggestions__skeleton-bar {
|
|
226
|
+
display: block;
|
|
227
|
+
width: 100%;
|
|
228
|
+
height: 0.75em;
|
|
229
|
+
border-radius: var(--radius-pill);
|
|
230
|
+
background-color: var(--color-bg-container-secondary);
|
|
231
|
+
position: relative;
|
|
232
|
+
overflow: hidden;
|
|
233
|
+
/* The trailing end dissolves, as ThreadPanel's naming bar does under its
|
|
234
|
+
title mask — a label mid-write, not a finished block.
|
|
235
|
+
ds-allow(color): mask alpha keywords (black/transparent), not palette colours */
|
|
236
|
+
-webkit-mask-image: linear-gradient(to right, black calc(100% - var(--gap-1000)), transparent);
|
|
237
|
+
mask-image: linear-gradient(to right, black calc(100% - var(--gap-1000)), transparent);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.ds-prompt-suggestions__skeleton-bar::after {
|
|
241
|
+
content: '';
|
|
242
|
+
position: absolute;
|
|
243
|
+
inset: 0;
|
|
244
|
+
background: linear-gradient(
|
|
245
|
+
90deg,
|
|
246
|
+
transparent 0%,
|
|
247
|
+
var(--color-bg-container-primary) 50%,
|
|
248
|
+
transparent 100%
|
|
249
|
+
);
|
|
250
|
+
/* ds-allow(motion): Skeleton's shimmer — the sweep needs a symmetric
|
|
251
|
+
in-out curve no --motion-ease-* token provides; the duration is
|
|
252
|
+
tokenized. */
|
|
253
|
+
animation: ds-prompt-suggestions-shimmer var(--motion-duration-loop-shimmer)
|
|
254
|
+
ease-in-out infinite;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
@keyframes ds-prompt-suggestions-shimmer {
|
|
258
|
+
0% {
|
|
259
|
+
transform: translateX(-100%);
|
|
260
|
+
}
|
|
261
|
+
100% {
|
|
262
|
+
transform: translateX(100%);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** One tappable suggestion in the row. */
|
|
3
|
+
export interface PromptSuggestion {
|
|
4
|
+
/** Stable identifier passed to `onValueChange`. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** The suggestion text shown in the chip. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Optional leading icon — Material Symbol name (string) or custom element (ReactNode). */
|
|
9
|
+
icon?: string | React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
/** Props owned by PromptSuggestions itself — everything else falls through to the root element. */
|
|
12
|
+
type PromptSuggestionsOwnProps = {
|
|
13
|
+
/** The suggestions to render, in order. */
|
|
14
|
+
suggestions: PromptSuggestion[];
|
|
15
|
+
/** Fires with the tapped suggestion's `id`, one acknowledgment beat after the tap — the chosen chip pulses and its siblings dim first, so the choice is seen even when selection unmounts the row. */
|
|
16
|
+
onValueChange?: (id: string) => void;
|
|
17
|
+
/**
|
|
18
|
+
* How the suggestions are arranged. `scroll` is one line that scrolls
|
|
19
|
+
* sideways behind edge fades. `wrap` runs them across as many lines as
|
|
20
|
+
* they need, for empty-state hero placements. `stack` gives each one its
|
|
21
|
+
* own line, for narrow columns where a wrapped row breaks unevenly and
|
|
22
|
+
* the ragged right edge reads as an accident.
|
|
23
|
+
*/
|
|
24
|
+
layout?: 'scroll' | 'wrap' | 'stack';
|
|
25
|
+
/**
|
|
26
|
+
* Legacy alias for `layout="wrap"`; ignored when `layout` is set.
|
|
27
|
+
* @deprecated Use `layout` instead, which also covers `stack`.
|
|
28
|
+
*/
|
|
29
|
+
wrap?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The suggestions are still being generated: shimmer placeholder pills
|
|
32
|
+
* hold their place, matching the current size's chip geometry so nothing
|
|
33
|
+
* shifts when the real chips land. While pending the given `suggestions`
|
|
34
|
+
* are not rendered, the placeholders are hidden from assistive technology,
|
|
35
|
+
* and the row reports `aria-busy` instead.
|
|
36
|
+
*/
|
|
37
|
+
pending?: boolean;
|
|
38
|
+
/** How many placeholder pills the pending state holds space with. */
|
|
39
|
+
pendingCount?: number;
|
|
40
|
+
/**
|
|
41
|
+
* Play the staggered pop-in when the items mount. On by default; a host
|
|
42
|
+
* re-showing a set that has already landed (reopening a panel over the
|
|
43
|
+
* same suggestions) turns it off, so the chips stand where they were
|
|
44
|
+
* instead of arriving twice.
|
|
45
|
+
*/
|
|
46
|
+
entrance?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Row scale. `default` sits at the body-paragraph scale, so a suggestion
|
|
49
|
+
* reads at the same weight as the messages it will become; `compact` is
|
|
50
|
+
* the quieter row for placements alongside a live conversation.
|
|
51
|
+
*/
|
|
52
|
+
size?: 'default' | 'compact';
|
|
53
|
+
/** Accessible name for the list. */
|
|
54
|
+
ariaLabel?: string;
|
|
55
|
+
/** Additional CSS classes */
|
|
56
|
+
className?: string;
|
|
57
|
+
};
|
|
58
|
+
export interface PromptSuggestionsProps extends PromptSuggestionsOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof PromptSuggestionsOwnProps> {
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* PromptSuggestions is a horizontal row of tappable prompts for starting or
|
|
62
|
+
* steering a conversation. Each suggestion renders as a clickable Chip, so
|
|
63
|
+
* one component owns the pill look; the row scrolls horizontally with pure
|
|
64
|
+
* CSS edge fades — no scroll listeners, no measurement — or wraps for
|
|
65
|
+
* empty-state hero placements.
|
|
66
|
+
*/
|
|
67
|
+
export declare const PromptSuggestions: React.ForwardRefExoticComponent<PromptSuggestionsProps & React.RefAttributes<HTMLDivElement>>;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { Chip } from "../Chip/Chip.js";
|
|
5
|
+
import { MOTION_EXIT_SYNC_MS } from "../../tokens/motion.js";
|
|
6
|
+
import "./PromptSuggestions.css";
|
|
7
|
+
const PromptSuggestions = React.forwardRef(
|
|
8
|
+
({
|
|
9
|
+
suggestions,
|
|
10
|
+
onValueChange,
|
|
11
|
+
layout,
|
|
12
|
+
wrap = false,
|
|
13
|
+
pending = false,
|
|
14
|
+
pendingCount = 3,
|
|
15
|
+
entrance = true,
|
|
16
|
+
size = "default",
|
|
17
|
+
ariaLabel = "Suggested prompts",
|
|
18
|
+
className = "",
|
|
19
|
+
...rest
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const baseClass = "ds-prompt-suggestions";
|
|
22
|
+
const [chosenId, setChosenId] = React.useState(null);
|
|
23
|
+
const chooseTimer = React.useRef(null);
|
|
24
|
+
React.useEffect(
|
|
25
|
+
() => () => {
|
|
26
|
+
if (chooseTimer.current) window.clearTimeout(chooseTimer.current);
|
|
27
|
+
},
|
|
28
|
+
[]
|
|
29
|
+
);
|
|
30
|
+
const choose = (id) => {
|
|
31
|
+
if (chosenId || chooseTimer.current) return;
|
|
32
|
+
setChosenId(id);
|
|
33
|
+
chooseTimer.current = window.setTimeout(() => {
|
|
34
|
+
chooseTimer.current = null;
|
|
35
|
+
onValueChange?.(id);
|
|
36
|
+
}, MOTION_EXIT_SYNC_MS);
|
|
37
|
+
};
|
|
38
|
+
const arrangement = layout ?? (wrap ? "wrap" : "scroll");
|
|
39
|
+
const chipSize = size === "compact" ? "default" : "large";
|
|
40
|
+
const classes = [
|
|
41
|
+
baseClass,
|
|
42
|
+
`${baseClass}--${size}`,
|
|
43
|
+
`${baseClass}--${arrangement}`,
|
|
44
|
+
chosenId ? `${baseClass}--choosing` : "",
|
|
45
|
+
entrance ? "" : `${baseClass}--still`,
|
|
46
|
+
className
|
|
47
|
+
].filter(Boolean).join(" ");
|
|
48
|
+
return /* @__PURE__ */ jsx(
|
|
49
|
+
"div",
|
|
50
|
+
{
|
|
51
|
+
...rest,
|
|
52
|
+
ref,
|
|
53
|
+
className: classes,
|
|
54
|
+
role: "list",
|
|
55
|
+
"aria-label": ariaLabel,
|
|
56
|
+
"aria-busy": pending || void 0,
|
|
57
|
+
"data-pending": pending || void 0,
|
|
58
|
+
children: pending ? Array.from({ length: pendingCount }, (_, index) => /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: `${baseClass}__item`, children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__skeleton`, children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__skeleton-bar` }) }) }, index)) : suggestions.map((suggestion) => /* @__PURE__ */ jsx(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
role: "listitem",
|
|
62
|
+
className: `${baseClass}__item${chosenId === suggestion.id ? ` ${baseClass}__item--chosen` : ""}`,
|
|
63
|
+
onAnimationEnd: (event) => {
|
|
64
|
+
if (event.animationName === "ds-prompt-suggestions-choose") {
|
|
65
|
+
setChosenId(null);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
children: /* @__PURE__ */ jsx(
|
|
69
|
+
Chip,
|
|
70
|
+
{
|
|
71
|
+
label: suggestion.label,
|
|
72
|
+
icon: suggestion.icon,
|
|
73
|
+
size: chipSize,
|
|
74
|
+
onClick: () => choose(suggestion.id)
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
},
|
|
78
|
+
suggestion.id
|
|
79
|
+
))
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
PromptSuggestions.displayName = "PromptSuggestions";
|
|
85
|
+
export {
|
|
86
|
+
PromptSuggestions
|
|
87
|
+
};
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
PROSE COMPONENT
|
|
3
|
+
Token-styled typography for rendered markdown
|
|
4
|
+
============================================ */
|
|
5
|
+
|
|
6
|
+
.ds-prose {
|
|
7
|
+
font-family: var(--font-paragraph-family);
|
|
8
|
+
font-size: var(--font-paragraph-size);
|
|
9
|
+
font-weight: var(--font-paragraph-weight);
|
|
10
|
+
line-height: var(--font-paragraph-line-height);
|
|
11
|
+
letter-spacing: var(--font-paragraph-letter-spacing);
|
|
12
|
+
color: var(--color-text-primary);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Block rhythm — every block owns its bottom margin; the edges are
|
|
16
|
+
trimmed so Prose slots into bubbles and cards cleanly */
|
|
17
|
+
.ds-prose p,
|
|
18
|
+
.ds-prose ul,
|
|
19
|
+
.ds-prose ol,
|
|
20
|
+
.ds-prose pre,
|
|
21
|
+
.ds-prose blockquote,
|
|
22
|
+
.ds-prose table,
|
|
23
|
+
.ds-prose hr,
|
|
24
|
+
.ds-prose img {
|
|
25
|
+
margin: 0;
|
|
26
|
+
margin-block-end: var(--gap-400);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ds-prose > :first-child {
|
|
30
|
+
margin-block-start: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.ds-prose > :last-child {
|
|
34
|
+
margin-block-end: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ============================================
|
|
38
|
+
PARAGRAPHS
|
|
39
|
+
============================================ */
|
|
40
|
+
|
|
41
|
+
.ds-prose p {
|
|
42
|
+
font-family: var(--font-paragraph-family);
|
|
43
|
+
font-size: var(--font-paragraph-size);
|
|
44
|
+
font-weight: var(--font-paragraph-weight);
|
|
45
|
+
line-height: var(--font-paragraph-line-height);
|
|
46
|
+
letter-spacing: var(--font-paragraph-letter-spacing);
|
|
47
|
+
color: var(--color-text-primary);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* ============================================
|
|
51
|
+
HEADINGS
|
|
52
|
+
Hierarchy carried by the token scale; the
|
|
53
|
+
weight contrast is encoded in the tokens
|
|
54
|
+
============================================ */
|
|
55
|
+
|
|
56
|
+
.ds-prose h1,
|
|
57
|
+
.ds-prose h2,
|
|
58
|
+
.ds-prose h3,
|
|
59
|
+
.ds-prose h4 {
|
|
60
|
+
margin: 0;
|
|
61
|
+
margin-block-start: var(--gap-500);
|
|
62
|
+
margin-block-end: var(--gap-300);
|
|
63
|
+
color: var(--color-text-primary);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.ds-prose h1 {
|
|
67
|
+
font-family: var(--font-heading-1-family);
|
|
68
|
+
font-size: var(--font-heading-1-size);
|
|
69
|
+
font-weight: var(--font-heading-1-weight);
|
|
70
|
+
line-height: var(--font-heading-1-line-height);
|
|
71
|
+
letter-spacing: var(--font-heading-1-letter-spacing);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ds-prose h2 {
|
|
75
|
+
font-family: var(--font-heading-2-family);
|
|
76
|
+
font-size: var(--font-heading-2-size);
|
|
77
|
+
font-weight: var(--font-heading-2-weight);
|
|
78
|
+
line-height: var(--font-heading-2-line-height);
|
|
79
|
+
letter-spacing: var(--font-heading-2-letter-spacing);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.ds-prose h3 {
|
|
83
|
+
font-family: var(--font-heading-3-family);
|
|
84
|
+
font-size: var(--font-heading-3-size);
|
|
85
|
+
font-weight: var(--font-heading-3-weight);
|
|
86
|
+
line-height: var(--font-heading-3-line-height);
|
|
87
|
+
letter-spacing: var(--font-heading-3-letter-spacing);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ds-prose h4 {
|
|
91
|
+
font-family: var(--font-title-body-family);
|
|
92
|
+
font-size: var(--font-title-body-size);
|
|
93
|
+
font-weight: var(--font-title-body-weight);
|
|
94
|
+
line-height: var(--font-title-body-line-height);
|
|
95
|
+
letter-spacing: var(--font-title-body-letter-spacing);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ============================================
|
|
99
|
+
LISTS
|
|
100
|
+
============================================ */
|
|
101
|
+
|
|
102
|
+
.ds-prose ul,
|
|
103
|
+
.ds-prose ol {
|
|
104
|
+
padding-inline-start: var(--padding-400);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ds-prose li {
|
|
108
|
+
font-family: var(--font-paragraph-family);
|
|
109
|
+
font-size: var(--font-paragraph-size);
|
|
110
|
+
font-weight: var(--font-paragraph-weight);
|
|
111
|
+
line-height: var(--font-paragraph-line-height);
|
|
112
|
+
letter-spacing: var(--font-paragraph-letter-spacing);
|
|
113
|
+
color: var(--color-text-primary);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.ds-prose li + li {
|
|
117
|
+
margin-block-start: var(--gap-100);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Nested lists sit tight under their parent item */
|
|
121
|
+
.ds-prose li > ul,
|
|
122
|
+
.ds-prose li > ol {
|
|
123
|
+
margin-block-start: var(--gap-100);
|
|
124
|
+
margin-block-end: 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* ============================================
|
|
128
|
+
INLINE ELEMENTS
|
|
129
|
+
============================================ */
|
|
130
|
+
|
|
131
|
+
.ds-prose a {
|
|
132
|
+
color: var(--color-action-primary-text-tertiary);
|
|
133
|
+
text-decoration: underline;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.ds-prose strong {
|
|
137
|
+
font-weight: var(--font-paragraph-emphasis-weight);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.ds-prose em {
|
|
141
|
+
font-style: italic;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.ds-prose code {
|
|
145
|
+
font-family: var(--font-family-code);
|
|
146
|
+
font-size: var(--font-paragraph-sm-size);
|
|
147
|
+
background-color: var(--color-bg-container-secondary);
|
|
148
|
+
border-radius: var(--radius-050);
|
|
149
|
+
padding-inline: var(--padding-050);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* ============================================
|
|
153
|
+
CODE BLOCKS
|
|
154
|
+
The plain fallback — CodeBlock is the richer
|
|
155
|
+
choice for standalone code
|
|
156
|
+
============================================ */
|
|
157
|
+
|
|
158
|
+
.ds-prose pre {
|
|
159
|
+
font-family: var(--font-family-code);
|
|
160
|
+
font-size: var(--font-paragraph-sm-size);
|
|
161
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
162
|
+
background-color: var(--color-bg-container-primary);
|
|
163
|
+
border: var(--border-025) solid var(--color-bg-container-border);
|
|
164
|
+
border-radius: var(--radius-300);
|
|
165
|
+
padding: var(--padding-400);
|
|
166
|
+
overflow-x: auto;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.ds-prose pre code {
|
|
170
|
+
background-color: transparent;
|
|
171
|
+
border-radius: 0;
|
|
172
|
+
padding-inline: 0;
|
|
173
|
+
font-size: inherit;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* ============================================
|
|
177
|
+
BLOCKQUOTES
|
|
178
|
+
Mirrors Reasoning's trace rail
|
|
179
|
+
============================================ */
|
|
180
|
+
|
|
181
|
+
.ds-prose blockquote {
|
|
182
|
+
border-inline-start: var(--border-050) solid var(--color-divider);
|
|
183
|
+
padding-inline-start: var(--padding-400);
|
|
184
|
+
color: var(--color-text-secondary);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.ds-prose blockquote p {
|
|
188
|
+
color: var(--color-text-secondary);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* ============================================
|
|
192
|
+
TABLES
|
|
193
|
+
============================================ */
|
|
194
|
+
|
|
195
|
+
/* The table is its own scroll container. Prose styles markup it does not
|
|
196
|
+
render, so it cannot wrap the table in a scrolling div — `display: block`
|
|
197
|
+
makes the table element itself the scroller. The cost is deliberate: the
|
|
198
|
+
table sizes to its content instead of filling the container, because the
|
|
199
|
+
inner anonymous table box a block table generates cannot be stretched.
|
|
200
|
+
A clipped or shattered table is the worse failure. */
|
|
201
|
+
.ds-prose table {
|
|
202
|
+
display: block;
|
|
203
|
+
width: max-content;
|
|
204
|
+
max-width: 100%;
|
|
205
|
+
overflow-x: auto;
|
|
206
|
+
border-collapse: collapse;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.ds-prose th {
|
|
210
|
+
font-family: var(--font-title-body-family);
|
|
211
|
+
font-size: var(--font-paragraph-sm-size);
|
|
212
|
+
font-weight: var(--font-title-body-weight);
|
|
213
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
214
|
+
letter-spacing: var(--font-title-body-letter-spacing);
|
|
215
|
+
background-color: var(--color-bg-container-secondary);
|
|
216
|
+
text-align: start;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Cells never break words, whatever the surrounding context does. An
|
|
220
|
+
ancestor that sets `overflow-wrap: anywhere` (ChatMessage does, so a long
|
|
221
|
+
URL cannot widen a bubble) otherwise inherits in and collapses every
|
|
222
|
+
column's minimum width to one character, which lets auto table layout
|
|
223
|
+
squeeze a heading into "Co / m / pa / ny" rather than let the table reach
|
|
224
|
+
its natural width. Holding the floor is what gives the scroll above
|
|
225
|
+
something to scroll. */
|
|
226
|
+
.ds-prose th,
|
|
227
|
+
.ds-prose td {
|
|
228
|
+
padding: var(--padding-150) var(--padding-300);
|
|
229
|
+
border-block-end: var(--border-025) solid var(--color-divider);
|
|
230
|
+
overflow-wrap: normal;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* ============================================
|
|
234
|
+
RULES AND MEDIA
|
|
235
|
+
============================================ */
|
|
236
|
+
|
|
237
|
+
.ds-prose hr {
|
|
238
|
+
border: none;
|
|
239
|
+
border-block-start: var(--border-025) solid var(--color-divider);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.ds-prose img {
|
|
243
|
+
max-width: 100%;
|
|
244
|
+
border-radius: var(--radius-300);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* ============================================
|
|
248
|
+
SMALL SIZE
|
|
249
|
+
Dense chat contexts — body scale drops to the
|
|
250
|
+
small paragraph tokens; headings keep their tiers
|
|
251
|
+
============================================ */
|
|
252
|
+
|
|
253
|
+
.ds-prose--sm,
|
|
254
|
+
.ds-prose--sm p,
|
|
255
|
+
.ds-prose--sm li {
|
|
256
|
+
font-family: var(--font-paragraph-sm-family);
|
|
257
|
+
font-size: var(--font-paragraph-sm-size);
|
|
258
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
259
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
260
|
+
letter-spacing: var(--font-paragraph-sm-letter-spacing);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.ds-prose--sm strong {
|
|
264
|
+
font-weight: var(--font-paragraph-sm-emphasis-weight);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.ds-prose--sm code {
|
|
268
|
+
font-size: var(--font-paragraph-sm-size);
|
|
269
|
+
}
|