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,88 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
MAP LEGEND COMPONENT
|
|
3
|
+
The corner block of a map: name, one line on
|
|
4
|
+
what it shows, and the key to its markers.
|
|
5
|
+
============================================ */
|
|
6
|
+
|
|
7
|
+
/* Base */
|
|
8
|
+
|
|
9
|
+
.ds-map-legend {
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
gap: var(--gap-100);
|
|
13
|
+
max-width: 32ch;
|
|
14
|
+
font-family: var(--font-family-code);
|
|
15
|
+
color: var(--color-text-primary);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Parts */
|
|
19
|
+
|
|
20
|
+
.ds-map-legend__title {
|
|
21
|
+
font-family: var(--font-family-primary);
|
|
22
|
+
font-size: var(--font-title-body-size);
|
|
23
|
+
font-weight: var(--font-title-body-weight);
|
|
24
|
+
line-height: var(--font-title-body-line-height);
|
|
25
|
+
letter-spacing: var(--font-title-body-letter-spacing);
|
|
26
|
+
color: var(--color-text-primary);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ds-map-legend__description {
|
|
30
|
+
font-size: var(--font-caption-size);
|
|
31
|
+
font-weight: var(--font-caption-weight);
|
|
32
|
+
line-height: var(--font-caption-line-height);
|
|
33
|
+
color: var(--color-text-secondary);
|
|
34
|
+
margin: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Key */
|
|
38
|
+
|
|
39
|
+
.ds-map-legend__key {
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-direction: column;
|
|
42
|
+
gap: var(--gap-050);
|
|
43
|
+
margin: 0;
|
|
44
|
+
margin-top: var(--gap-100);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.ds-map-legend__row {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: var(--gap-200);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ds-map-legend__glyph {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
flex-shrink: 0;
|
|
58
|
+
color: var(--color-text-secondary);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ds-map-legend__glyph svg {
|
|
62
|
+
display: block;
|
|
63
|
+
overflow: visible;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.ds-map-legend__glyph path,
|
|
67
|
+
.ds-map-legend__glyph rect {
|
|
68
|
+
fill: none;
|
|
69
|
+
stroke: currentColor;
|
|
70
|
+
stroke-width: 1.5;
|
|
71
|
+
stroke-linecap: round;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ds-map-legend__arc-stop-start {
|
|
75
|
+
stop-color: var(--color-chart-series-7);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ds-map-legend__arc-stop-end {
|
|
79
|
+
stop-color: var(--color-chart-series-5);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.ds-map-legend__label {
|
|
83
|
+
font-size: var(--font-caption-size);
|
|
84
|
+
font-weight: var(--font-caption-weight);
|
|
85
|
+
line-height: var(--font-caption-line-height);
|
|
86
|
+
color: var(--color-text-secondary);
|
|
87
|
+
margin: 0;
|
|
88
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** One row of the key. */
|
|
3
|
+
export interface MapLegendItem {
|
|
4
|
+
/**
|
|
5
|
+
* The marker the row explains. `point` and `anchor` draw Globe's cross and
|
|
6
|
+
* square; `arc` draws a short stroke of the arc gradient; a `line` is a flat
|
|
7
|
+
* rule in `color`; any React node renders as given.
|
|
8
|
+
*/
|
|
9
|
+
glyph: 'point' | 'anchor' | 'arc' | 'line' | React.ReactNode;
|
|
10
|
+
/** What the marker means. */
|
|
11
|
+
label: React.ReactNode;
|
|
12
|
+
/** Colour for the `line` glyph (and the `arc` glyph, replacing its gradient). Any CSS colour. */
|
|
13
|
+
color?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Props owned by MapLegend itself — everything else falls through to the root `<div>`. */
|
|
16
|
+
type MapLegendOwnProps = {
|
|
17
|
+
/**
|
|
18
|
+
* The map's name, set above the key. Intentionally shadows the native
|
|
19
|
+
* `title` tooltip attribute, which MapLegend does not expose.
|
|
20
|
+
*/
|
|
21
|
+
title?: string;
|
|
22
|
+
/** One or two lines saying what the map shows. */
|
|
23
|
+
description?: React.ReactNode;
|
|
24
|
+
/** The key itself: one row per marker kind. */
|
|
25
|
+
items?: MapLegendItem[];
|
|
26
|
+
/** Additional CSS classes */
|
|
27
|
+
className?: string;
|
|
28
|
+
};
|
|
29
|
+
export interface MapLegendProps extends MapLegendOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof MapLegendOwnProps | 'children'> {
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* MapLegend — the block in the corner of a map: its name, a line on what it
|
|
33
|
+
* shows, and the key to its markers. The built-in glyphs are drawn on the
|
|
34
|
+
* same geometry Globe draws its markers with; WorldMap's dot and outlined
|
|
35
|
+
* square are its own, so a flat-map key passes its glyphs as React nodes.
|
|
36
|
+
* Pure markup, no hooks, so it renders from a Server Component; the key is
|
|
37
|
+
* a `<dl>`, glyph as term and meaning as description.
|
|
38
|
+
*/
|
|
39
|
+
export declare const MapLegend: React.ForwardRefExoticComponent<MapLegendProps & React.RefAttributes<HTMLDivElement>>;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./MapLegend.css";
|
|
4
|
+
const GLYPH_SIZE = 12;
|
|
5
|
+
const half = GLYPH_SIZE / 2;
|
|
6
|
+
const mark = 3.5;
|
|
7
|
+
const builtInGlyph = (item, gradientId) => {
|
|
8
|
+
switch (item.glyph) {
|
|
9
|
+
case "point":
|
|
10
|
+
return /* @__PURE__ */ jsx("path", { d: `M${half - mark} ${half}H${half + mark}M${half} ${half - mark}V${half + mark}` });
|
|
11
|
+
case "anchor":
|
|
12
|
+
return /* @__PURE__ */ jsx("rect", { x: half - mark, y: half - mark, width: mark * 2, height: mark * 2 });
|
|
13
|
+
case "arc":
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
"path",
|
|
16
|
+
{
|
|
17
|
+
d: `M1 ${GLYPH_SIZE - 2}Q${half} -${half} ${GLYPH_SIZE - 1} ${GLYPH_SIZE - 2}`,
|
|
18
|
+
style: { stroke: item.color ?? `url(#${gradientId})` }
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
case "line":
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"path",
|
|
24
|
+
{
|
|
25
|
+
d: `M1 ${half}H${GLYPH_SIZE - 1}`,
|
|
26
|
+
style: item.color ? { stroke: item.color } : void 0
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
default:
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const isBuiltIn = (glyph) => glyph === "point" || glyph === "anchor" || glyph === "arc" || glyph === "line";
|
|
34
|
+
const MapLegend = React.forwardRef(
|
|
35
|
+
({ title, description, items = [], className = "", ...rest }, ref) => {
|
|
36
|
+
const baseClass = "ds-map-legend";
|
|
37
|
+
const gradientId = React.useId();
|
|
38
|
+
const classes = [baseClass, className].filter(Boolean).join(" ");
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
|
|
40
|
+
title && /* @__PURE__ */ jsx("span", { className: `${baseClass}__title`, children: title }),
|
|
41
|
+
description && /* @__PURE__ */ jsx("p", { className: `${baseClass}__description`, children: description }),
|
|
42
|
+
items.length > 0 && /* @__PURE__ */ jsx("dl", { className: `${baseClass}__key`, children: items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: `${baseClass}__row`, children: [
|
|
43
|
+
/* @__PURE__ */ jsx("dt", { className: `${baseClass}__glyph`, "aria-hidden": "true", children: isBuiltIn(item.glyph) ? /* @__PURE__ */ jsxs(
|
|
44
|
+
"svg",
|
|
45
|
+
{
|
|
46
|
+
viewBox: `0 0 ${GLYPH_SIZE} ${GLYPH_SIZE}`,
|
|
47
|
+
width: GLYPH_SIZE,
|
|
48
|
+
height: GLYPH_SIZE,
|
|
49
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
50
|
+
focusable: "false",
|
|
51
|
+
children: [
|
|
52
|
+
item.glyph === "arc" && !item.color && /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: `${gradientId}-${i}`, x1: "0", y1: "0", x2: "1", y2: "0", children: [
|
|
53
|
+
/* @__PURE__ */ jsx("stop", { offset: "0", className: `${baseClass}__arc-stop-start` }),
|
|
54
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", className: `${baseClass}__arc-stop-end` })
|
|
55
|
+
] }) }),
|
|
56
|
+
builtInGlyph(item, `${gradientId}-${i}`)
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
) : item.glyph }),
|
|
60
|
+
/* @__PURE__ */ jsx("dd", { className: `${baseClass}__label`, children: item.label })
|
|
61
|
+
] }, i)) })
|
|
62
|
+
] });
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
MapLegend.displayName = "MapLegend";
|
|
66
|
+
export {
|
|
67
|
+
MapLegend
|
|
68
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
MESSAGE ACTIONS COMPONENT
|
|
3
|
+
The icon-button row under a chat message:
|
|
4
|
+
copy, retry, feedback. Ghost buttons — no
|
|
5
|
+
border, no resting background — so the row
|
|
6
|
+
stays quiet until pointed at.
|
|
7
|
+
|
|
8
|
+
Stateless beyond hover: copy feedback is the
|
|
9
|
+
consumer swapping an item's icon, never a
|
|
10
|
+
timer inside the row.
|
|
11
|
+
============================================ */
|
|
12
|
+
|
|
13
|
+
.ds-message-actions {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: var(--gap-050);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* ============================================
|
|
20
|
+
BUTTON
|
|
21
|
+
Ghost: transparent at rest, the passive
|
|
22
|
+
action ramp on hover and for the active item.
|
|
23
|
+
============================================ */
|
|
24
|
+
|
|
25
|
+
.ds-message-actions__button {
|
|
26
|
+
display: inline-flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
padding: var(--padding-100);
|
|
30
|
+
border: none;
|
|
31
|
+
border-radius: var(--radius-200);
|
|
32
|
+
background-color: transparent;
|
|
33
|
+
color: var(--color-icon-primary);
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
transition:
|
|
36
|
+
background-color var(--motion-duration-fast) var(--motion-ease-standard),
|
|
37
|
+
color var(--motion-duration-fast) var(--motion-ease-standard);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ds-message-actions__button .material-symbols-rounded {
|
|
41
|
+
--icon-size: var(--icon-size-500);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ds-message-actions__button:hover:not(:disabled) {
|
|
45
|
+
background-color: var(--color-action-passive-bg-hover);
|
|
46
|
+
color: var(--color-text-primary);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* ============================================
|
|
50
|
+
ACTIVE
|
|
51
|
+
The selected item, e.g. the chosen feedback
|
|
52
|
+
thumb — held on the pressed step of the ramp.
|
|
53
|
+
============================================ */
|
|
54
|
+
|
|
55
|
+
.ds-message-actions__button--active {
|
|
56
|
+
background-color: var(--color-action-passive-bg-active);
|
|
57
|
+
color: var(--color-text-primary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ============================================
|
|
61
|
+
FOCUS
|
|
62
|
+
============================================ */
|
|
63
|
+
|
|
64
|
+
.ds-message-actions__button:focus-visible {
|
|
65
|
+
outline: 2px solid var(--color-action-primary-bg);
|
|
66
|
+
outline-offset: -2px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* ============================================
|
|
70
|
+
DISABLED
|
|
71
|
+
============================================ */
|
|
72
|
+
|
|
73
|
+
.ds-message-actions__button:disabled {
|
|
74
|
+
opacity: 0.4;
|
|
75
|
+
cursor: not-allowed;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Icons take the colour of the text around them. Explicit, not just
|
|
79
|
+
inherited by default: a consumer stylesheet that sets a colour on
|
|
80
|
+
.material-symbols-rounded itself (a common global default) would
|
|
81
|
+
otherwise override inheritance and detach the icon from the state
|
|
82
|
+
colours this component sets on its parents. */
|
|
83
|
+
.ds-message-actions .material-symbols-rounded {
|
|
84
|
+
color: inherit;
|
|
85
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** One action in the row: a stable id, a glyph, and an accessible name. */
|
|
3
|
+
export interface MessageAction {
|
|
4
|
+
/** Stable identifier passed to `onActionClick`. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Button glyph — Material Symbol name (string) or custom element (ReactNode). */
|
|
7
|
+
icon: string | React.ReactNode;
|
|
8
|
+
/** Accessible name, also shown as the tooltip. */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Marks the action as selected, e.g. the chosen feedback thumb. */
|
|
11
|
+
active?: boolean;
|
|
12
|
+
/** Disables just this action. */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Props owned by MessageActions itself — everything else falls through to the root element. */
|
|
16
|
+
type MessageActionsOwnProps = {
|
|
17
|
+
/** The actions, rendered left to right. */
|
|
18
|
+
items: MessageAction[];
|
|
19
|
+
/** Fires with the pressed action's id. */
|
|
20
|
+
onActionClick?: (id: string) => void;
|
|
21
|
+
/** Wrap each button in a Tooltip showing its label. The label stays as `aria-label` either way. */
|
|
22
|
+
showTooltips?: boolean;
|
|
23
|
+
/** Additional CSS classes */
|
|
24
|
+
className?: string;
|
|
25
|
+
};
|
|
26
|
+
export interface MessageActionsProps extends MessageActionsOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof MessageActionsOwnProps> {
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* MessageActions is the icon-button row for message-level actions: copy,
|
|
30
|
+
* retry, feedback. It slots into ChatMessage's `actions` prop, which reveals
|
|
31
|
+
* it on hover and keyboard focus.
|
|
32
|
+
*
|
|
33
|
+
* The row is stateless beyond hover — copy feedback is the consumer swapping
|
|
34
|
+
* an item's `icon` (content_copy → check) and flipping it back, so the row
|
|
35
|
+
* never owns a timer or a clipboard call.
|
|
36
|
+
*/
|
|
37
|
+
export declare const MessageActions: React.ForwardRefExoticComponent<MessageActionsProps & React.RefAttributes<HTMLDivElement>>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Tooltip } from "../Tooltip/Tooltip.js";
|
|
4
|
+
import "./MessageActions.css";
|
|
5
|
+
import "../../fonts/material-symbols.css";
|
|
6
|
+
const MessageActions = React.forwardRef(
|
|
7
|
+
({ items, onActionClick, showTooltips = true, className = "", ...rest }, ref) => {
|
|
8
|
+
const baseClass = "ds-message-actions";
|
|
9
|
+
const classes = [baseClass, className].filter(Boolean).join(" ");
|
|
10
|
+
return /* @__PURE__ */ jsx("div", { ...rest, ref, className: classes, children: items.map((item) => {
|
|
11
|
+
const button = /* @__PURE__ */ jsx(
|
|
12
|
+
"button",
|
|
13
|
+
{
|
|
14
|
+
type: "button",
|
|
15
|
+
className: [
|
|
16
|
+
`${baseClass}__button`,
|
|
17
|
+
item.active ? `${baseClass}__button--active` : ""
|
|
18
|
+
].filter(Boolean).join(" "),
|
|
19
|
+
"aria-label": item.label,
|
|
20
|
+
"aria-pressed": item.active !== void 0 ? item.active : void 0,
|
|
21
|
+
disabled: item.disabled,
|
|
22
|
+
onClick: () => onActionClick?.(item.id),
|
|
23
|
+
children: /* @__PURE__ */ jsx(
|
|
24
|
+
"span",
|
|
25
|
+
{
|
|
26
|
+
className: typeof item.icon === "string" ? "material-symbols-rounded" : void 0,
|
|
27
|
+
"aria-hidden": "true",
|
|
28
|
+
children: item.icon
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
return showTooltips ? /* @__PURE__ */ jsx(Tooltip, { content: item.label, children: button }, item.id) : /* @__PURE__ */ jsx(React.Fragment, { children: button }, item.id);
|
|
34
|
+
}) });
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
MessageActions.displayName = "MessageActions";
|
|
38
|
+
export {
|
|
39
|
+
MessageActions
|
|
40
|
+
};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
MESSAGE CARD COMPONENT
|
|
3
|
+
Structured rich content inside a chat turn:
|
|
4
|
+
media on top, a title/meta/description body,
|
|
5
|
+
and an actions footer.
|
|
6
|
+
|
|
7
|
+
Not the navigation Card — this is content
|
|
8
|
+
furniture inside a conversation, sized by the
|
|
9
|
+
bubble or turn that holds it. It shares Card's
|
|
10
|
+
cover geometry and the chat bubbles' 24px
|
|
11
|
+
shell, so cards read the same across surfaces.
|
|
12
|
+
============================================ */
|
|
13
|
+
|
|
14
|
+
.ds-message-card {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
width: 100%;
|
|
18
|
+
max-width: var(--ds-message-card-max-width, 100%);
|
|
19
|
+
background-color: var(--color-bg-container-primary);
|
|
20
|
+
border: var(--border-025) solid var(--color-bg-container-border);
|
|
21
|
+
border-radius: var(--radius-600);
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* ============================================
|
|
26
|
+
MEDIA
|
|
27
|
+
Inset, not full bleed: 12px of card around a
|
|
28
|
+
12px-radius slot keeps the corners concentric
|
|
29
|
+
with the card's 24px shell — the exact
|
|
30
|
+
geometry of Card's case-study cover, and the
|
|
31
|
+
same rule the Composer follows.
|
|
32
|
+
============================================ */
|
|
33
|
+
|
|
34
|
+
.ds-message-card__media {
|
|
35
|
+
display: block;
|
|
36
|
+
margin: var(--padding-300) var(--padding-300) 0;
|
|
37
|
+
border-radius: var(--radius-300);
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
/* The slot carries its own surface, so drawn media — a chart, an SVG —
|
|
40
|
+
reads as the same image-shaped panel a photo would. The page tone, not
|
|
41
|
+
the container ramp: lightest in light mode, darkest in dark, so the
|
|
42
|
+
slot recedes behind the drawing instead of tinting it. */
|
|
43
|
+
background-color: var(--color-bg-page-primary);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.ds-message-card__media img {
|
|
47
|
+
display: block;
|
|
48
|
+
width: 100%;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* A Chart in the slot sheds its own panel chrome — the card is already the
|
|
52
|
+
panel, and the slot's page tone is the brightest surface in light mode and
|
|
53
|
+
the darkest in dark, so the drawing keeps maximum contrast against its
|
|
54
|
+
ground instead of sitting on a second container tone. */
|
|
55
|
+
.ds-message-card__media .ds-chart {
|
|
56
|
+
background-color: transparent;
|
|
57
|
+
border: none;
|
|
58
|
+
border-radius: 0;
|
|
59
|
+
padding: var(--padding-200) var(--padding-200) 0 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ============================================
|
|
63
|
+
BODY
|
|
64
|
+
The vertical rhythm is deliberately even: the
|
|
65
|
+
media-to-body distance (--padding-400) equals
|
|
66
|
+
the body-to-actions distance (--padding-200 on
|
|
67
|
+
each side of the seam), so the copy sits
|
|
68
|
+
centred between the image and the CTA row.
|
|
69
|
+
============================================ */
|
|
70
|
+
|
|
71
|
+
.ds-message-card__body {
|
|
72
|
+
display: flex;
|
|
73
|
+
flex-direction: column;
|
|
74
|
+
gap: var(--gap-200);
|
|
75
|
+
padding: var(--padding-400) var(--padding-500) var(--padding-200);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Without an actions footer the body closes the card, so it takes the full
|
|
79
|
+
bottom padding back. */
|
|
80
|
+
.ds-message-card__body:last-child {
|
|
81
|
+
padding-bottom: var(--padding-400);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Title and meta form one unit, tucked closer together than the body's
|
|
85
|
+
stack gap so the meta reads as the title's subline. */
|
|
86
|
+
.ds-message-card__header {
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
gap: var(--gap-100);
|
|
90
|
+
min-width: 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.ds-message-card__title-row {
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
gap: var(--gap-100);
|
|
97
|
+
min-width: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.ds-message-card__icon {
|
|
101
|
+
display: inline-flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
flex: none;
|
|
104
|
+
color: var(--color-icon-primary);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ds-message-card__icon .material-symbols-rounded {
|
|
108
|
+
--icon-size: var(--icon-size-500);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.ds-message-card__title {
|
|
112
|
+
min-width: 0;
|
|
113
|
+
font-family: var(--font-heading-3-family);
|
|
114
|
+
font-size: var(--font-heading-3-size);
|
|
115
|
+
font-weight: var(--font-heading-3-weight);
|
|
116
|
+
line-height: var(--font-heading-3-line-height);
|
|
117
|
+
letter-spacing: var(--font-heading-3-letter-spacing);
|
|
118
|
+
color: var(--color-text-primary);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.ds-message-card__meta {
|
|
122
|
+
font-family: var(--font-paragraph-sm-family);
|
|
123
|
+
font-size: var(--font-paragraph-sm-size);
|
|
124
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
125
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
126
|
+
letter-spacing: var(--font-paragraph-sm-letter-spacing);
|
|
127
|
+
color: var(--color-text-tertiary);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.ds-message-card__description {
|
|
131
|
+
margin: 0;
|
|
132
|
+
font-family: var(--font-paragraph-sm-family);
|
|
133
|
+
font-size: var(--font-paragraph-sm-size);
|
|
134
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
135
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
136
|
+
letter-spacing: var(--font-paragraph-sm-letter-spacing);
|
|
137
|
+
color: var(--color-text-secondary);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* ============================================
|
|
141
|
+
ACTIONS
|
|
142
|
+
Mirrors ToolCall's actions footer exactly, so
|
|
143
|
+
approvals on a tool call and link actions on
|
|
144
|
+
a card read as the same row. Whitespace alone
|
|
145
|
+
separates it from the body — no rule.
|
|
146
|
+
============================================ */
|
|
147
|
+
|
|
148
|
+
.ds-message-card__actions {
|
|
149
|
+
display: flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
justify-content: flex-start;
|
|
152
|
+
gap: var(--gap-200);
|
|
153
|
+
padding: var(--padding-200) var(--padding-500) var(--padding-400);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Icons take the colour of the text around them. Explicit, not just
|
|
157
|
+
inherited by default: a consumer stylesheet that sets a colour on
|
|
158
|
+
.material-symbols-rounded itself (a common global default) would
|
|
159
|
+
otherwise override inheritance and detach the icon from the state
|
|
160
|
+
colours this component sets on its parents. */
|
|
161
|
+
.ds-message-card .material-symbols-rounded {
|
|
162
|
+
color: inherit;
|
|
163
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Props owned by MessageCard itself — everything else falls through to the root element. */
|
|
3
|
+
type MessageCardOwnProps = {
|
|
4
|
+
/** Card heading. */
|
|
5
|
+
title?: string;
|
|
6
|
+
/** One or two lines under the title. */
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Top media slot — an image or chart, inset from the card edges with its own rounded corners. */
|
|
9
|
+
media?: React.ReactNode;
|
|
10
|
+
/** Small leading icon beside the title — a Material Symbol name, or any custom element. */
|
|
11
|
+
icon?: string | React.ReactNode;
|
|
12
|
+
/** Free-text metadata line, e.g. a domain or date, so callers keep their own formatting. */
|
|
13
|
+
meta?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Action row rendered in a footer outside the body — small secondary or
|
|
16
|
+
* tertiary Buttons, mirroring ToolCall's actions footer.
|
|
17
|
+
*/
|
|
18
|
+
actions?: React.ReactNode;
|
|
19
|
+
/** Additional CSS classes */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Body content between the description and the footer — rich content, a Prose block, a DocumentChip row. */
|
|
22
|
+
children?: React.ReactNode;
|
|
23
|
+
};
|
|
24
|
+
export interface MessageCardProps extends MessageCardOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof MessageCardOwnProps> {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* MessageCard is a structured rich-content card embedded in a chat message:
|
|
28
|
+
* media, title, body, and an actions row, for link previews, search results,
|
|
29
|
+
* and booking-style rich responses inside an assistant turn or bubble.
|
|
30
|
+
*
|
|
31
|
+
* It is not the navigation Card — this is content furniture inside a
|
|
32
|
+
* conversation, sized by the bubble or turn that holds it.
|
|
33
|
+
*/
|
|
34
|
+
export declare const MessageCard: React.ForwardRefExoticComponent<MessageCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./MessageCard.css";
|
|
4
|
+
import "../../fonts/material-symbols.css";
|
|
5
|
+
const MessageCard = React.forwardRef(
|
|
6
|
+
({ title, description, media, icon, meta, actions, className = "", children, ...rest }, ref) => {
|
|
7
|
+
const baseClass = "ds-message-card";
|
|
8
|
+
const classes = [baseClass, className].filter(Boolean).join(" ");
|
|
9
|
+
const hasBody = Boolean(title || icon || meta || description || children);
|
|
10
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
|
|
11
|
+
media && /* @__PURE__ */ jsx("div", { className: `${baseClass}__media`, children: media }),
|
|
12
|
+
hasBody && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__body`, children: [
|
|
13
|
+
(title || icon || meta) && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__header`, children: [
|
|
14
|
+
(title || icon) && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__title-row`, children: [
|
|
15
|
+
icon && /* @__PURE__ */ jsx("span", { className: `${baseClass}__icon`, "aria-hidden": "true", children: typeof icon === "string" ? /* @__PURE__ */ jsx("span", { className: "material-symbols-rounded", children: icon }) : icon }),
|
|
16
|
+
title && /* @__PURE__ */ jsx("span", { className: `${baseClass}__title`, children: title })
|
|
17
|
+
] }),
|
|
18
|
+
meta && /* @__PURE__ */ jsx("span", { className: `${baseClass}__meta`, children: meta })
|
|
19
|
+
] }),
|
|
20
|
+
description && /* @__PURE__ */ jsx("p", { className: `${baseClass}__description`, children: description }),
|
|
21
|
+
children
|
|
22
|
+
] }),
|
|
23
|
+
actions && /* @__PURE__ */ jsx("div", { className: `${baseClass}__actions`, children: actions })
|
|
24
|
+
] });
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
MessageCard.displayName = "MessageCard";
|
|
28
|
+
export {
|
|
29
|
+
MessageCard
|
|
30
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
METER COMPONENT
|
|
3
|
+
Level indicator for a known quantity
|
|
4
|
+
============================================ */
|
|
5
|
+
|
|
6
|
+
.ds-meter {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: var(--gap-100);
|
|
10
|
+
width: 100%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* ============================================
|
|
14
|
+
HEADER
|
|
15
|
+
============================================ */
|
|
16
|
+
|
|
17
|
+
.ds-meter__header {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: baseline;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
gap: var(--gap-400);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ds-meter__label {
|
|
25
|
+
font-family: var(--font-paragraph-sm-emphasis-family);
|
|
26
|
+
font-size: var(--font-paragraph-sm-emphasis-size);
|
|
27
|
+
font-weight: var(--font-paragraph-sm-emphasis-weight);
|
|
28
|
+
line-height: var(--font-paragraph-sm-emphasis-line-height);
|
|
29
|
+
color: var(--color-text-primary);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ds-meter__value {
|
|
33
|
+
font-family: var(--font-paragraph-sm-family);
|
|
34
|
+
font-size: var(--font-paragraph-sm-size);
|
|
35
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
36
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
37
|
+
color: var(--color-text-secondary);
|
|
38
|
+
font-variant-numeric: tabular-nums;
|
|
39
|
+
margin-left: auto;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* ============================================
|
|
43
|
+
TRACK + FILL
|
|
44
|
+
============================================ */
|
|
45
|
+
|
|
46
|
+
.ds-meter__track {
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: 8px;
|
|
49
|
+
border-radius: var(--radius-pill);
|
|
50
|
+
background-color: var(--color-bg-container-tertiary);
|
|
51
|
+
overflow: hidden;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.ds-meter--compact .ds-meter__track {
|
|
55
|
+
height: 4px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ds-meter__fill {
|
|
59
|
+
height: 100%;
|
|
60
|
+
border-radius: var(--radius-pill);
|
|
61
|
+
transition: width var(--motion-duration-base) var(--motion-ease-standard);
|
|
62
|
+
/* Grows to the current level on mount — the single keyframe animates to
|
|
63
|
+
the inline width, and the duration token collapses under reduced motion. */
|
|
64
|
+
animation: ds-meter-grow var(--motion-duration-slower) var(--motion-ease-emphasized);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@keyframes ds-meter-grow {
|
|
68
|
+
from {
|
|
69
|
+
width: 0;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* ============================================
|
|
74
|
+
STATUS VARIANTS
|
|
75
|
+
The strong border-weight status colour, not
|
|
76
|
+
the tinted bg — the fill is a thin ribbon
|
|
77
|
+
and needs the full-strength hue to read.
|
|
78
|
+
============================================ */
|
|
79
|
+
|
|
80
|
+
.ds-meter--info .ds-meter__fill {
|
|
81
|
+
background-color: var(--color-status-info-border);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ds-meter--positive .ds-meter__fill {
|
|
85
|
+
background-color: var(--color-status-positive-border);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.ds-meter--warning .ds-meter__fill {
|
|
89
|
+
background-color: var(--color-status-warning-border);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ds-meter--error .ds-meter__fill {
|
|
93
|
+
background-color: var(--color-status-error-border);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ds-meter--neutral .ds-meter__fill {
|
|
97
|
+
background-color: var(--color-status-neutral-border);
|
|
98
|
+
}
|