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,592 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
APP SIDEBAR — collapsible navigation
|
|
3
|
+
Collapsed: 64px icon-only rail
|
|
4
|
+
Expanded: 280px with labels, accordion, profile
|
|
5
|
+
============================================ */
|
|
6
|
+
|
|
7
|
+
/* ============================================
|
|
8
|
+
WRAPPER
|
|
9
|
+
============================================ */
|
|
10
|
+
.ds-app-sidebar {
|
|
11
|
+
position: fixed;
|
|
12
|
+
top: 0;
|
|
13
|
+
left: 0;
|
|
14
|
+
z-index: 100;
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
height: 100vh;
|
|
19
|
+
width: 64px;
|
|
20
|
+
padding: var(--padding-500) 0;
|
|
21
|
+
background-color: var(--color-bg-page-primary);
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
transition: width var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ds-app-sidebar--expanded {
|
|
27
|
+
width: 280px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* ============================================
|
|
31
|
+
FLOATING VARIANT — the rail as a glass card
|
|
32
|
+
inset from the viewport edges (the same
|
|
33
|
+
recipe as the site chat panel)
|
|
34
|
+
============================================ */
|
|
35
|
+
.ds-app-sidebar--floating {
|
|
36
|
+
top: var(--ds-sidebar-float-inset, 20px);
|
|
37
|
+
left: var(--ds-sidebar-float-inset, 20px);
|
|
38
|
+
height: calc(100dvh - var(--ds-sidebar-float-inset, 20px) * 2);
|
|
39
|
+
background-color: var(--color-bg-glass);
|
|
40
|
+
border: var(--border-025) solid var(--color-bg-container-border);
|
|
41
|
+
border-radius: var(--radius-600);
|
|
42
|
+
box-shadow: var(--shadow-floating);
|
|
43
|
+
/* The glass token is deliberately translucent; this blur is what keeps
|
|
44
|
+
content behind the rail readable through it. */
|
|
45
|
+
backdrop-filter: blur(24px);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* ============================================
|
|
49
|
+
TOP SECTION — logo + nav
|
|
50
|
+
============================================ */
|
|
51
|
+
.ds-app-sidebar__top {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: var(--gap-1000);
|
|
55
|
+
overflow-y: auto;
|
|
56
|
+
overflow-x: hidden;
|
|
57
|
+
flex: 1;
|
|
58
|
+
min-height: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ============================================
|
|
62
|
+
LOGO ROW
|
|
63
|
+
============================================ */
|
|
64
|
+
.ds-app-sidebar__logo {
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: space-between;
|
|
68
|
+
height: 24px;
|
|
69
|
+
padding: 0 var(--padding-500);
|
|
70
|
+
flex-shrink: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Expand/collapse choreography, here and on every row below: the rail's
|
|
74
|
+
clipping width and the text's opacity fade carry the whole transition.
|
|
75
|
+
Inner layout stays constant - text keeps its natural width with
|
|
76
|
+
min-width: 0 so it truncates under the sweeping rail instead of holding
|
|
77
|
+
rows at full width (width: 0 to auto cannot interpolate, and a gap that
|
|
78
|
+
snaps mid-glide reads as a bounce). */
|
|
79
|
+
.ds-app-sidebar__logo-inner {
|
|
80
|
+
display: flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
gap: var(--gap-500);
|
|
83
|
+
min-width: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.ds-app-sidebar__logo-icon {
|
|
87
|
+
width: 24px;
|
|
88
|
+
height: 24px;
|
|
89
|
+
flex-shrink: 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ds-app-sidebar__logo-text {
|
|
93
|
+
font-family: var(--font-paragraph-emphasis-family);
|
|
94
|
+
font-size: var(--font-paragraph-emphasis-size);
|
|
95
|
+
font-weight: var(--font-paragraph-emphasis-weight);
|
|
96
|
+
line-height: var(--font-paragraph-emphasis-line-height);
|
|
97
|
+
letter-spacing: var(--font-paragraph-emphasis-letter-spacing);
|
|
98
|
+
color: var(--color-text-primary);
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
min-width: 0;
|
|
101
|
+
flex-shrink: 1;
|
|
102
|
+
overflow: hidden;
|
|
103
|
+
opacity: 0;
|
|
104
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__logo-text {
|
|
108
|
+
opacity: 1;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.ds-app-sidebar__toggle {
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: center;
|
|
115
|
+
width: 0;
|
|
116
|
+
height: 24px;
|
|
117
|
+
flex-shrink: 0;
|
|
118
|
+
background: none;
|
|
119
|
+
border: none;
|
|
120
|
+
color: var(--color-icon-primary);
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
padding: 0;
|
|
123
|
+
overflow: hidden;
|
|
124
|
+
opacity: 0;
|
|
125
|
+
/* Both widths are explicit (0 and 24px), so the width glides too. */
|
|
126
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard), width var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__toggle {
|
|
130
|
+
width: 24px;
|
|
131
|
+
opacity: 1;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.ds-app-sidebar__toggle .material-symbols-rounded {
|
|
135
|
+
--icon-size: var(--icon-size-600);
|
|
136
|
+
transition: transform var(--motion-duration-slow) var(--motion-ease-standard);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ============================================
|
|
140
|
+
NAV GROUP
|
|
141
|
+
============================================ */
|
|
142
|
+
.ds-app-sidebar__nav {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
gap: var(--gap-100);
|
|
146
|
+
flex-shrink: 0;
|
|
147
|
+
/* Stretch in both states: rows fill the rail and the collapsed icon is
|
|
148
|
+
centred by the row's own padding, so alignment never snaps. */
|
|
149
|
+
align-items: stretch;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Category label — only visible when expanded */
|
|
153
|
+
.ds-app-sidebar__category {
|
|
154
|
+
padding: 0 var(--padding-500);
|
|
155
|
+
font-family: var(--font-paragraph-sm-family);
|
|
156
|
+
font-size: var(--font-paragraph-sm-size);
|
|
157
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
158
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
159
|
+
color: var(--color-text-tertiary);
|
|
160
|
+
white-space: nowrap;
|
|
161
|
+
opacity: 0;
|
|
162
|
+
height: 0;
|
|
163
|
+
overflow: hidden;
|
|
164
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard), height var(--motion-duration-base) var(--motion-ease-standard);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__category {
|
|
168
|
+
opacity: 1;
|
|
169
|
+
height: 20px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ============================================
|
|
173
|
+
NAV BUTTON
|
|
174
|
+
============================================ */
|
|
175
|
+
.ds-app-sidebar__btn {
|
|
176
|
+
display: flex;
|
|
177
|
+
align-items: center;
|
|
178
|
+
justify-content: space-between;
|
|
179
|
+
height: 40px;
|
|
180
|
+
min-width: 0;
|
|
181
|
+
/* The same inset in both states: in the collapsed 64px rail the 12px
|
|
182
|
+
margins leave a 40px row, so the hover pill is a perfect circle clear
|
|
183
|
+
of the rail edges, with the icon centred (12 + 8 + 24 + 8 + 12 = 64);
|
|
184
|
+
expanded, these are the pill's edge inset. Nothing to transition. */
|
|
185
|
+
margin: 0 var(--padding-300);
|
|
186
|
+
padding: var(--padding-200);
|
|
187
|
+
border-radius: var(--radius-pill);
|
|
188
|
+
background: transparent;
|
|
189
|
+
border: none;
|
|
190
|
+
color: var(--color-text-primary);
|
|
191
|
+
cursor: pointer;
|
|
192
|
+
overflow: hidden;
|
|
193
|
+
text-align: left;
|
|
194
|
+
/* The row renders as an <a> when the item carries an href. */
|
|
195
|
+
text-decoration: none;
|
|
196
|
+
transition: background-color var(--motion-duration-fast) var(--motion-ease-standard), padding var(--motion-duration-slow) var(--motion-ease-emphasized), margin var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* Inset via margin + reduced padding (12 + 8 = the 20px the label sat at
|
|
200
|
+
before), so the pill floats off the rail edges while the icon and label
|
|
201
|
+
keep their exact x-positions against the category labels above. */
|
|
202
|
+
|
|
203
|
+
.ds-app-sidebar__btn:hover {
|
|
204
|
+
background-color: var(--color-action-passive-bg-hover);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.ds-app-sidebar__btn--active {
|
|
208
|
+
background-color: var(--color-action-passive-bg-hover);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.ds-app-sidebar__btn-left {
|
|
212
|
+
display: flex;
|
|
213
|
+
align-items: center;
|
|
214
|
+
gap: var(--gap-200);
|
|
215
|
+
min-width: 0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.ds-app-sidebar__btn-icon {
|
|
219
|
+
--icon-size: var(--icon-size-600);
|
|
220
|
+
color: var(--color-icon-primary);
|
|
221
|
+
flex-shrink: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.ds-app-sidebar__btn-label {
|
|
225
|
+
font-family: var(--font-paragraph-emphasis-family);
|
|
226
|
+
font-size: var(--font-paragraph-emphasis-size);
|
|
227
|
+
font-weight: var(--font-paragraph-emphasis-weight);
|
|
228
|
+
line-height: var(--font-paragraph-emphasis-line-height);
|
|
229
|
+
letter-spacing: var(--font-paragraph-emphasis-letter-spacing);
|
|
230
|
+
color: var(--color-text-primary);
|
|
231
|
+
white-space: nowrap;
|
|
232
|
+
min-width: 0;
|
|
233
|
+
flex-shrink: 1;
|
|
234
|
+
overflow: hidden;
|
|
235
|
+
opacity: 0;
|
|
236
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__btn-label {
|
|
240
|
+
opacity: 1;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.ds-app-sidebar__btn-badge {
|
|
244
|
+
font-family: var(--font-caption-family);
|
|
245
|
+
font-size: var(--font-caption-size);
|
|
246
|
+
font-weight: var(--font-paragraph-sm-emphasis-weight);
|
|
247
|
+
line-height: var(--font-caption-line-height);
|
|
248
|
+
color: var(--color-text-secondary);
|
|
249
|
+
background-color: var(--color-bg-container-tertiary);
|
|
250
|
+
border-radius: var(--radius-pill);
|
|
251
|
+
padding: var(--padding-050) var(--padding-200);
|
|
252
|
+
min-width: 0;
|
|
253
|
+
flex-shrink: 1;
|
|
254
|
+
overflow: hidden;
|
|
255
|
+
opacity: 0;
|
|
256
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__btn-badge {
|
|
260
|
+
opacity: 1;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.ds-app-sidebar__btn-chevron {
|
|
264
|
+
font-size: 24px;
|
|
265
|
+
color: var(--color-icon-secondary);
|
|
266
|
+
min-width: 0;
|
|
267
|
+
flex-shrink: 1;
|
|
268
|
+
overflow: hidden;
|
|
269
|
+
transition: transform var(--motion-duration-slow) var(--motion-ease-standard), opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
270
|
+
opacity: 0;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__btn-chevron {
|
|
274
|
+
opacity: 1;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.ds-app-sidebar__btn-chevron--open {
|
|
278
|
+
transform: rotate(90deg);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* ============================================
|
|
282
|
+
SUB-ITEMS (accordion children)
|
|
283
|
+
============================================ */
|
|
284
|
+
.ds-app-sidebar__sub-items {
|
|
285
|
+
display: flex;
|
|
286
|
+
flex-direction: column;
|
|
287
|
+
overflow: hidden;
|
|
288
|
+
max-height: 0;
|
|
289
|
+
transition: max-height var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.ds-app-sidebar__sub-items--open {
|
|
293
|
+
max-height: 500px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.ds-app-sidebar__sub-item {
|
|
297
|
+
display: flex;
|
|
298
|
+
align-items: flex-start;
|
|
299
|
+
height: 40px;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.ds-app-sidebar__sub-line {
|
|
303
|
+
display: flex;
|
|
304
|
+
align-items: center;
|
|
305
|
+
justify-content: center;
|
|
306
|
+
width: 44px;
|
|
307
|
+
height: 100%;
|
|
308
|
+
flex-shrink: 0;
|
|
309
|
+
padding-left: 16px;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.ds-app-sidebar__sub-line::after {
|
|
313
|
+
content: '';
|
|
314
|
+
display: block;
|
|
315
|
+
width: 1px;
|
|
316
|
+
height: 100%;
|
|
317
|
+
background-color: var(--color-bg-container-border);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.ds-app-sidebar__sub-btn {
|
|
321
|
+
display: flex;
|
|
322
|
+
align-items: center;
|
|
323
|
+
gap: 8px;
|
|
324
|
+
height: 40px;
|
|
325
|
+
/* The same edge inset the parent pills get; sub-items only render while
|
|
326
|
+
the rail is expanded, so this needs no state selector. */
|
|
327
|
+
margin-right: var(--padding-300);
|
|
328
|
+
padding: var(--padding-200);
|
|
329
|
+
border-radius: var(--radius-pill);
|
|
330
|
+
background: transparent;
|
|
331
|
+
border: none;
|
|
332
|
+
color: var(--color-text-primary);
|
|
333
|
+
cursor: pointer;
|
|
334
|
+
flex: 1;
|
|
335
|
+
text-align: left;
|
|
336
|
+
overflow: hidden;
|
|
337
|
+
white-space: nowrap;
|
|
338
|
+
/* The row renders as an <a> when the sub-item carries an href. */
|
|
339
|
+
text-decoration: none;
|
|
340
|
+
transition: background-color var(--motion-duration-fast) var(--motion-ease-standard);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.ds-app-sidebar__sub-btn:hover {
|
|
344
|
+
background-color: var(--color-action-passive-bg-hover);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.ds-app-sidebar__sub-btn--active {
|
|
348
|
+
background-color: var(--color-action-passive-bg-hover);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.ds-app-sidebar__sub-label {
|
|
352
|
+
font-family: var(--font-paragraph-emphasis-family);
|
|
353
|
+
font-size: var(--font-paragraph-emphasis-size);
|
|
354
|
+
font-weight: var(--font-paragraph-emphasis-weight);
|
|
355
|
+
line-height: var(--font-paragraph-emphasis-line-height);
|
|
356
|
+
letter-spacing: var(--font-paragraph-emphasis-letter-spacing);
|
|
357
|
+
color: var(--color-text-primary);
|
|
358
|
+
white-space: nowrap;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* ============================================
|
|
362
|
+
CONSUMER SLOTS + BOTTOM WRAPPER
|
|
363
|
+
Slots keep their height in both states so the
|
|
364
|
+
rail's layout never snaps; collapsed they fade
|
|
365
|
+
out and stop taking clicks.
|
|
366
|
+
============================================ */
|
|
367
|
+
.ds-app-sidebar__bottom {
|
|
368
|
+
display: flex;
|
|
369
|
+
flex-direction: column;
|
|
370
|
+
gap: var(--gap-400);
|
|
371
|
+
min-width: 0;
|
|
372
|
+
flex-shrink: 0;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.ds-app-sidebar__top-slot,
|
|
376
|
+
.ds-app-sidebar__footer-slot {
|
|
377
|
+
padding: 0 var(--padding-400);
|
|
378
|
+
min-width: 0;
|
|
379
|
+
overflow: hidden;
|
|
380
|
+
opacity: 0;
|
|
381
|
+
pointer-events: none;
|
|
382
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__top-slot,
|
|
386
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__footer-slot {
|
|
387
|
+
opacity: 1;
|
|
388
|
+
pointer-events: auto;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* ============================================
|
|
392
|
+
PROFILE
|
|
393
|
+
============================================ */
|
|
394
|
+
.ds-app-sidebar__profile {
|
|
395
|
+
display: flex;
|
|
396
|
+
align-items: center;
|
|
397
|
+
justify-content: space-between;
|
|
398
|
+
min-width: 0;
|
|
399
|
+
/* Centres the 40px avatar in the collapsed 64px rail; glides to the
|
|
400
|
+
expanded inset below. */
|
|
401
|
+
padding: 0 var(--padding-300);
|
|
402
|
+
flex-shrink: 0;
|
|
403
|
+
transition: padding var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__profile {
|
|
407
|
+
padding: 0 var(--padding-500);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.ds-app-sidebar__profile-left {
|
|
411
|
+
display: flex;
|
|
412
|
+
align-items: center;
|
|
413
|
+
gap: 10px;
|
|
414
|
+
min-width: 0;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/* The row composes Avatar at `md`, which already carries the 40px footprint,
|
|
418
|
+
the pill radius, the container fill and the image/initials/glyph ladder —
|
|
419
|
+
this rule only holds the seat in the row. */
|
|
420
|
+
.ds-app-sidebar__avatar {
|
|
421
|
+
flex-shrink: 0;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.ds-app-sidebar__profile-info {
|
|
425
|
+
display: flex;
|
|
426
|
+
flex-direction: column;
|
|
427
|
+
min-width: 0;
|
|
428
|
+
flex-shrink: 1;
|
|
429
|
+
overflow: hidden;
|
|
430
|
+
opacity: 0;
|
|
431
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__profile-info {
|
|
435
|
+
opacity: 1;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
.ds-app-sidebar__profile-name {
|
|
439
|
+
font-family: var(--font-paragraph-emphasis-family);
|
|
440
|
+
font-size: var(--font-paragraph-emphasis-size);
|
|
441
|
+
font-weight: var(--font-paragraph-emphasis-weight);
|
|
442
|
+
line-height: var(--font-paragraph-emphasis-line-height);
|
|
443
|
+
letter-spacing: var(--font-paragraph-emphasis-letter-spacing);
|
|
444
|
+
color: var(--color-text-primary);
|
|
445
|
+
white-space: nowrap;
|
|
446
|
+
overflow: hidden;
|
|
447
|
+
text-overflow: ellipsis;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.ds-app-sidebar__profile-email {
|
|
451
|
+
font-family: var(--font-paragraph-family);
|
|
452
|
+
font-size: var(--font-paragraph-size);
|
|
453
|
+
font-weight: var(--font-paragraph-weight);
|
|
454
|
+
line-height: var(--font-paragraph-line-height);
|
|
455
|
+
color: var(--color-text-tertiary);
|
|
456
|
+
white-space: nowrap;
|
|
457
|
+
overflow: hidden;
|
|
458
|
+
text-overflow: ellipsis;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.ds-app-sidebar__profile-more {
|
|
462
|
+
display: flex;
|
|
463
|
+
align-items: center;
|
|
464
|
+
justify-content: center;
|
|
465
|
+
background: none;
|
|
466
|
+
border: none;
|
|
467
|
+
color: var(--color-icon-primary);
|
|
468
|
+
cursor: pointer;
|
|
469
|
+
padding: 0;
|
|
470
|
+
flex-shrink: 0;
|
|
471
|
+
width: 0;
|
|
472
|
+
overflow: hidden;
|
|
473
|
+
opacity: 0;
|
|
474
|
+
/* Both widths are explicit (0 and 24px), so the width glides too. */
|
|
475
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard), width var(--motion-duration-slow) var(--motion-ease-emphasized);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.ds-app-sidebar--expanded .ds-app-sidebar__profile-more {
|
|
479
|
+
width: 24px;
|
|
480
|
+
opacity: 1;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.ds-app-sidebar__profile-more .material-symbols-rounded {
|
|
484
|
+
--icon-size: var(--icon-size-600);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/* ============================================
|
|
488
|
+
RESPONSIVE — the mobile drawer
|
|
489
|
+
Below the mobile breakpoint (768px — design.md's Breakpoints section
|
|
490
|
+
is the authoritative home) the rail leaves the layout entirely and
|
|
491
|
+
the fixed hamburger trigger opens it as a modal overlay drawer. The
|
|
492
|
+
trigger and scrim exist only inside this media query, so the overlay
|
|
493
|
+
behaviors can never activate on wider viewports.
|
|
494
|
+
============================================ */
|
|
495
|
+
.ds-app-sidebar__mobile-trigger {
|
|
496
|
+
display: none;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.ds-app-sidebar__scrim {
|
|
500
|
+
display: none;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
@media (max-width: 768px) {
|
|
504
|
+
.ds-app-sidebar {
|
|
505
|
+
width: 0;
|
|
506
|
+
padding: 0;
|
|
507
|
+
overflow: hidden;
|
|
508
|
+
/* Zero width still paints borders and the floating variant's glass
|
|
509
|
+
edge — a hairline sliver standing where the rail was. Visibility
|
|
510
|
+
hides every painted box in one property, whatever the variant;
|
|
511
|
+
the open drawer below restores it. */
|
|
512
|
+
visibility: hidden;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.ds-app-sidebar__mobile-trigger {
|
|
516
|
+
position: fixed;
|
|
517
|
+
/* One padding step in from the corner, so hosts whose mobile
|
|
518
|
+
content gutter is 16px get a trigger whose centre lines up with
|
|
519
|
+
a 40px header row's. */
|
|
520
|
+
top: var(--padding-400);
|
|
521
|
+
left: var(--padding-400);
|
|
522
|
+
z-index: 80;
|
|
523
|
+
display: flex;
|
|
524
|
+
align-items: center;
|
|
525
|
+
justify-content: center;
|
|
526
|
+
width: 40px;
|
|
527
|
+
height: 40px;
|
|
528
|
+
padding: 0;
|
|
529
|
+
background: var(--color-bg-container-primary);
|
|
530
|
+
border: var(--border-025) solid var(--color-bg-container-border);
|
|
531
|
+
border-radius: var(--radius-pill);
|
|
532
|
+
color: var(--color-text-primary);
|
|
533
|
+
cursor: pointer;
|
|
534
|
+
box-shadow: var(--shadow-floating);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.ds-app-sidebar__scrim {
|
|
538
|
+
display: block;
|
|
539
|
+
position: fixed;
|
|
540
|
+
inset: 0;
|
|
541
|
+
z-index: 90;
|
|
542
|
+
background: var(--color-scrim);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* The drawer: the full expanded rail, fixed over the scrim, sliding
|
|
546
|
+
in from the left on the motion tokens (the reduced-motion guard
|
|
547
|
+
zeroes the duration system-wide). */
|
|
548
|
+
.ds-app-sidebar--mobile-open {
|
|
549
|
+
visibility: visible;
|
|
550
|
+
position: fixed;
|
|
551
|
+
top: 0;
|
|
552
|
+
left: 0;
|
|
553
|
+
bottom: 0;
|
|
554
|
+
z-index: 100;
|
|
555
|
+
width: 280px;
|
|
556
|
+
height: 100dvh;
|
|
557
|
+
padding: var(--padding-500) 0;
|
|
558
|
+
overflow-y: auto;
|
|
559
|
+
background: var(--color-bg-page-primary);
|
|
560
|
+
border-right: var(--border-025) solid var(--color-bg-container-border);
|
|
561
|
+
box-shadow: var(--shadow-modal);
|
|
562
|
+
animation: ds-app-sidebar-slide-in var(--motion-duration-base) var(--motion-ease-standard);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
@keyframes ds-app-sidebar-slide-in {
|
|
567
|
+
from {
|
|
568
|
+
transform: translateX(-100%);
|
|
569
|
+
}
|
|
570
|
+
to {
|
|
571
|
+
transform: translateX(0);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/* Icons take the colour of the text around them. Explicit, not just
|
|
576
|
+
inherited by default: a consumer stylesheet that sets a colour on
|
|
577
|
+
.material-symbols-rounded itself (a common global default) would
|
|
578
|
+
otherwise override inheritance and detach the icon from the state
|
|
579
|
+
colours this component sets on its parents.
|
|
580
|
+
|
|
581
|
+
The two consumer slots are carved out, because inside them the rule
|
|
582
|
+
does the very damage it exists to prevent: a component mounted in a
|
|
583
|
+
slot sets its own icon colours through single-class selectors, and a
|
|
584
|
+
two-class descendant rule outranks every one of them. A SegmentedControl
|
|
585
|
+
in the footer slot lost its active segment's on-action colour that way
|
|
586
|
+
and painted a black glyph on a near-black pill. :where() keeps the
|
|
587
|
+
selector at its original specificity, so nothing else in the cascade
|
|
588
|
+
moves. */
|
|
589
|
+
.ds-app-sidebar
|
|
590
|
+
.material-symbols-rounded:not(:where(.ds-app-sidebar__top-slot *, .ds-app-sidebar__footer-slot *)) {
|
|
591
|
+
color: inherit;
|
|
592
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface AppSidebarSubItem {
|
|
3
|
+
/** Unique key for this sub-item */
|
|
4
|
+
key: string;
|
|
5
|
+
/** Display label */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Click handler — also fires on a link sub-item, so a consumer can route client-side */
|
|
8
|
+
onClick?: () => void;
|
|
9
|
+
/** Renders the sub-item as a real link to this URL instead of a button */
|
|
10
|
+
href?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AppSidebarItem {
|
|
13
|
+
/** Unique key for this item */
|
|
14
|
+
key: string;
|
|
15
|
+
/** Item icon — Material Symbol name (string) or custom element (ReactNode) */
|
|
16
|
+
icon: string | React.ReactNode;
|
|
17
|
+
/** Display label (shown when expanded) */
|
|
18
|
+
label: string;
|
|
19
|
+
/** Click handler — also fires on a link item, so a consumer can route client-side */
|
|
20
|
+
onClick?: () => void;
|
|
21
|
+
/** Renders the item as a real link to this URL instead of a button. Ignored when the item has children, whose row is the accordion toggle */
|
|
22
|
+
href?: string;
|
|
23
|
+
/** Trailing count pill, e.g. unread items; hidden while the rail is collapsed */
|
|
24
|
+
badge?: string | number;
|
|
25
|
+
/** Sub-items — turns this into an accordion */
|
|
26
|
+
children?: AppSidebarSubItem[];
|
|
27
|
+
}
|
|
28
|
+
export interface AppSidebarSection {
|
|
29
|
+
/** Optional category label above the group */
|
|
30
|
+
category?: string;
|
|
31
|
+
/** Nav items in this section */
|
|
32
|
+
items: AppSidebarItem[];
|
|
33
|
+
}
|
|
34
|
+
export interface AppSidebarProfile {
|
|
35
|
+
/** User display name */
|
|
36
|
+
name: string;
|
|
37
|
+
/** User email */
|
|
38
|
+
email: string;
|
|
39
|
+
/** Avatar image URL */
|
|
40
|
+
avatarUrl?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface AppSidebarProps {
|
|
43
|
+
/** Navigation sections */
|
|
44
|
+
sections: AppSidebarSection[];
|
|
45
|
+
/** Profile data for the bottom section */
|
|
46
|
+
profile?: AppSidebarProfile;
|
|
47
|
+
/** Key of the currently active item */
|
|
48
|
+
activeKey?: string;
|
|
49
|
+
/** Key of the currently active sub-item */
|
|
50
|
+
activeSubKey?: string;
|
|
51
|
+
/** Whether sidebar starts expanded */
|
|
52
|
+
defaultExpanded?: boolean;
|
|
53
|
+
/** Controlled expanded state */
|
|
54
|
+
expanded?: boolean;
|
|
55
|
+
/** Callback when expand/collapse changes */
|
|
56
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
57
|
+
/** Callback when profile more button clicked */
|
|
58
|
+
onProfileMore?: () => void;
|
|
59
|
+
/**
|
|
60
|
+
* Floats the rail off the viewport edges as a glass card: inset with
|
|
61
|
+
* rounded corners, the translucent glass fill over a backdrop blur, and
|
|
62
|
+
* the floating shadow. The inset defaults to 20px and is overridable via
|
|
63
|
+
* the --ds-sidebar-float-inset custom property.
|
|
64
|
+
*/
|
|
65
|
+
floating?: boolean;
|
|
66
|
+
/** Rendered under the logo row, above the nav; fades out while collapsed */
|
|
67
|
+
topSlot?: React.ReactNode;
|
|
68
|
+
/** Rendered above the profile block; fades out while collapsed */
|
|
69
|
+
footerSlot?: React.ReactNode;
|
|
70
|
+
/** Additional CSS classes */
|
|
71
|
+
className?: string;
|
|
72
|
+
/** Logo element — defaults to the built-in brand mark */
|
|
73
|
+
logo?: React.ReactNode;
|
|
74
|
+
/** Text shown next to logo when expanded */
|
|
75
|
+
logoText?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Below the mobile breakpoint the rail hides and this fixed hamburger
|
|
78
|
+
* button opens it as an overlay drawer instead. Set false when the
|
|
79
|
+
* host renders its own trigger in the page chrome.
|
|
80
|
+
*/
|
|
81
|
+
showMobileTrigger?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* AppSidebar — a collapsible left-hand navigation rail.
|
|
85
|
+
*
|
|
86
|
+
* **Collapsed** (64 px): icon-only buttons, logo mark, avatar.
|
|
87
|
+
* **Expanded** (280 px): labels, category headings, accordion
|
|
88
|
+
* sub-items with tree-line connectors, and a profile section.
|
|
89
|
+
*/
|
|
90
|
+
export declare const AppSidebar: ({ sections, profile, activeKey, activeSubKey, defaultExpanded, expanded: controlledExpanded, onExpandedChange, onProfileMore, floating, topSlot, footerSlot, className, logo, logoText, showMobileTrigger, }: AppSidebarProps) => React.JSX.Element;
|