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,30 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Props owned by LegendTile itself — everything else falls through to the root div. */
|
|
3
|
+
type LegendTileOwnProps = {
|
|
4
|
+
/** The series name shown above the value. Truncates with an ellipsis rather than wrapping. */
|
|
5
|
+
label: string;
|
|
6
|
+
/**
|
|
7
|
+
* The reading for this series. Numbers are formatted with `toLocaleString()`;
|
|
8
|
+
* pass a string when the value carries its own formatting or a unit.
|
|
9
|
+
*/
|
|
10
|
+
value: string | number;
|
|
11
|
+
/**
|
|
12
|
+
* Any CSS colour for the series dot — consumers typically pass a chart
|
|
13
|
+
* palette token, e.g. `var(--color-chart-series-1)`. When omitted, no dot
|
|
14
|
+
* renders.
|
|
15
|
+
*/
|
|
16
|
+
swatch?: string;
|
|
17
|
+
/** Additional CSS classes */
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
export interface LegendTileProps extends LegendTileOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof LegendTileOwnProps> {
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* LegendTile — the labelled value tile that sits under a chart and ties a
|
|
24
|
+
* series to its number. An inset tile one surface step below its panel, with
|
|
25
|
+
* an optional series dot matching the chart's palette. Pure JSX and CSS: no
|
|
26
|
+
* charting library, no hooks, so it renders from a Server Component and a row
|
|
27
|
+
* of them costs nothing under a dense dashboard.
|
|
28
|
+
*/
|
|
29
|
+
export declare const LegendTile: React.ForwardRefExoticComponent<LegendTileProps & React.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./LegendTile.css";
|
|
4
|
+
const LegendTile = React.forwardRef(
|
|
5
|
+
({ label, value, swatch, className = "", style, ...rest }, ref) => {
|
|
6
|
+
const baseClass = "ds-legend-tile";
|
|
7
|
+
const classes = [baseClass, className].filter(Boolean).join(" ");
|
|
8
|
+
const mergedStyle = swatch ? { ...style, "--legend-tile-swatch": swatch } : style;
|
|
9
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, style: mergedStyle, children: [
|
|
10
|
+
/* @__PURE__ */ jsxs("span", { className: `${baseClass}__label`, children: [
|
|
11
|
+
swatch && /* @__PURE__ */ jsx("span", { className: `${baseClass}__dot`, "aria-hidden": "true" }),
|
|
12
|
+
label
|
|
13
|
+
] }),
|
|
14
|
+
/* @__PURE__ */ jsx("span", { className: `${baseClass}__value`, children: typeof value === "number" ? value.toLocaleString() : value })
|
|
15
|
+
] });
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
LegendTile.displayName = "LegendTile";
|
|
19
|
+
export {
|
|
20
|
+
LegendTile
|
|
21
|
+
};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
LIGHTBOX COMPONENT
|
|
3
|
+
Fullscreen media viewer over a frosted scrim
|
|
4
|
+
============================================ */
|
|
5
|
+
|
|
6
|
+
.ds-lightbox {
|
|
7
|
+
position: fixed;
|
|
8
|
+
inset: 0;
|
|
9
|
+
z-index: 100;
|
|
10
|
+
opacity: 0;
|
|
11
|
+
visibility: hidden; /* keeps panel controls out of the tab order when closed */
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
transition:
|
|
14
|
+
opacity var(--motion-duration-base) var(--motion-ease-standard),
|
|
15
|
+
visibility var(--motion-duration-base) var(--motion-ease-standard);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ds-lightbox--open {
|
|
19
|
+
opacity: 1;
|
|
20
|
+
visibility: visible;
|
|
21
|
+
pointer-events: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ============================================
|
|
25
|
+
BACKDROP
|
|
26
|
+
The scrim, frosted: blurring the page behind
|
|
27
|
+
separates the media without a deeper token
|
|
28
|
+
============================================ */
|
|
29
|
+
|
|
30
|
+
.ds-lightbox__backdrop {
|
|
31
|
+
position: absolute;
|
|
32
|
+
inset: 0;
|
|
33
|
+
background-color: var(--color-scrim);
|
|
34
|
+
/* The frost's strength; an effect length with no token family, chosen by
|
|
35
|
+
eye — enough to dissolve page detail behind a full-viewport image. */
|
|
36
|
+
--ds-lightbox-frost: 12px;
|
|
37
|
+
backdrop-filter: blur(var(--ds-lightbox-frost));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* A media viewer wants a deeper floor than the dialogs' scrim: the same
|
|
41
|
+
token laid twice compounds it (≈0.75 light / ≈0.91 dark) while staying
|
|
42
|
+
theme-driven — no literal colour, no second scrim role. */
|
|
43
|
+
.ds-lightbox__backdrop::after {
|
|
44
|
+
content: '';
|
|
45
|
+
position: absolute;
|
|
46
|
+
inset: 0;
|
|
47
|
+
background-color: var(--color-scrim);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* ============================================
|
|
51
|
+
PANEL
|
|
52
|
+
A full-viewport stage: transparent to clicks
|
|
53
|
+
so the backdrop hears them, while the media
|
|
54
|
+
and controls stay interactive
|
|
55
|
+
============================================ */
|
|
56
|
+
|
|
57
|
+
.ds-lightbox__panel {
|
|
58
|
+
position: absolute;
|
|
59
|
+
inset: 0;
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: center;
|
|
63
|
+
padding: var(--padding-1000);
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
outline: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.ds-lightbox__panel > * {
|
|
69
|
+
pointer-events: auto;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* ============================================
|
|
73
|
+
MEDIA
|
|
74
|
+
============================================ */
|
|
75
|
+
|
|
76
|
+
.ds-lightbox__figure {
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: var(--gap-400);
|
|
81
|
+
margin: 0;
|
|
82
|
+
max-width: 100%;
|
|
83
|
+
max-height: 100%;
|
|
84
|
+
transform: scale(0.96);
|
|
85
|
+
transition: transform var(--motion-duration-base) var(--motion-ease-entrance);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.ds-lightbox--open .ds-lightbox__figure {
|
|
89
|
+
transform: scale(1);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ds-lightbox__img {
|
|
93
|
+
display: block;
|
|
94
|
+
max-width: calc(100vw - var(--gap-1000) * 4);
|
|
95
|
+
max-height: calc(100vh - var(--gap-1000) * 4);
|
|
96
|
+
width: auto;
|
|
97
|
+
height: auto;
|
|
98
|
+
border-radius: var(--radius-300);
|
|
99
|
+
box-shadow: var(--shadow-modal);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Custom media (children) takes the same viewport bounds. */
|
|
103
|
+
.ds-lightbox__figure > :not(figcaption) {
|
|
104
|
+
max-width: calc(100vw - var(--gap-1000) * 4);
|
|
105
|
+
max-height: calc(100vh - var(--gap-1000) * 4);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* ============================================
|
|
109
|
+
CAPTION
|
|
110
|
+
A glass chip under the media — legible over
|
|
111
|
+
the scrim in both themes
|
|
112
|
+
============================================ */
|
|
113
|
+
|
|
114
|
+
.ds-lightbox__caption {
|
|
115
|
+
padding: var(--padding-100) var(--padding-400);
|
|
116
|
+
border-radius: var(--radius-pill);
|
|
117
|
+
/* ds-allow(color): on-scrim furniture — the scrim floor is dark in both
|
|
118
|
+
themes, so the caption chip lives in scrim-world, not page-world; a
|
|
119
|
+
theme token would dissolve it into the dark-mode scrim. */
|
|
120
|
+
background-color: rgba(255, 255, 255, 0.12);
|
|
121
|
+
backdrop-filter: blur(var(--ds-lightbox-frost, 12px));
|
|
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
|
+
/* ds-allow(color): white text on the always-dark scrim wash, both themes */
|
|
128
|
+
color: #ffffff;
|
|
129
|
+
text-align: center;
|
|
130
|
+
max-width: calc(100vw - var(--gap-1000) * 4);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* ============================================
|
|
134
|
+
CONTROLS
|
|
135
|
+
Glass icon buttons: close pinned to the
|
|
136
|
+
viewer's corner, chevrons at its edges
|
|
137
|
+
============================================ */
|
|
138
|
+
|
|
139
|
+
.ds-lightbox__control {
|
|
140
|
+
position: absolute;
|
|
141
|
+
z-index: 1; /* above the media — DOM order alone would sink the prev chevron under a full-width image */
|
|
142
|
+
display: inline-flex;
|
|
143
|
+
align-items: center;
|
|
144
|
+
justify-content: center;
|
|
145
|
+
width: var(--icon-size-1200); /* 48px — a viewer-scale target */
|
|
146
|
+
height: var(--icon-size-1200);
|
|
147
|
+
padding: 0;
|
|
148
|
+
border: none;
|
|
149
|
+
border-radius: var(--radius-pill);
|
|
150
|
+
/* ds-allow(color): on-scrim furniture — the scrim floor is dark in both
|
|
151
|
+
themes, so the control wash lives in scrim-world, not page-world; a
|
|
152
|
+
theme token would dissolve the controls into the dark-mode scrim. */
|
|
153
|
+
background-color: rgba(255, 255, 255, 0.12);
|
|
154
|
+
backdrop-filter: blur(var(--ds-lightbox-frost, 12px));
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
transition: background-color var(--motion-duration-base) var(--motion-ease-standard);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.ds-lightbox__control:hover {
|
|
160
|
+
/* ds-allow(color): the same on-scrim wash, one step brighter on hover */
|
|
161
|
+
background-color: rgba(255, 255, 255, 0.24);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.ds-lightbox__control:focus-visible {
|
|
165
|
+
outline: 2px solid var(--color-action-primary-bg);
|
|
166
|
+
outline-offset: 2px;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.ds-lightbox__control-icon {
|
|
170
|
+
--icon-size: var(--icon-size-600);
|
|
171
|
+
line-height: 1;
|
|
172
|
+
/* ds-allow(color): white glyph on the always-dark scrim wash, both themes */
|
|
173
|
+
color: #ffffff;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.ds-lightbox__close {
|
|
177
|
+
top: var(--gap-500);
|
|
178
|
+
right: var(--gap-500);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.ds-lightbox__nav {
|
|
182
|
+
top: 50%;
|
|
183
|
+
transform: translateY(-50%);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.ds-lightbox__nav--prev {
|
|
187
|
+
left: var(--gap-500);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.ds-lightbox__nav--next {
|
|
191
|
+
right: var(--gap-500);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* ============================================
|
|
195
|
+
RESPONSIVE
|
|
196
|
+
Tighter margins on small screens — the
|
|
197
|
+
chevrons overlay the media's edges
|
|
198
|
+
============================================ */
|
|
199
|
+
|
|
200
|
+
@media (max-width: 480px) {
|
|
201
|
+
.ds-lightbox__panel {
|
|
202
|
+
padding: var(--padding-400);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.ds-lightbox__img,
|
|
206
|
+
.ds-lightbox__figure > :not(figcaption),
|
|
207
|
+
.ds-lightbox__caption {
|
|
208
|
+
max-width: calc(100vw - var(--gap-400) * 2);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Props owned by Lightbox itself — everything else falls through to the panel. */
|
|
3
|
+
type LightboxOwnProps = {
|
|
4
|
+
/** Whether the lightbox is open */
|
|
5
|
+
open: boolean;
|
|
6
|
+
/** Callback when the lightbox requests to close */
|
|
7
|
+
onOpenChange: (open: boolean) => void;
|
|
8
|
+
/** The image to show. Omit it when `children` supplies the media. */
|
|
9
|
+
src?: string;
|
|
10
|
+
/** Image alt text — also the panel's accessible name. Required whenever `src` is set. */
|
|
11
|
+
alt?: string;
|
|
12
|
+
/** Optional caption shown in a chip under the media */
|
|
13
|
+
caption?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Custom media instead of `src` — a framework image component, a video, a
|
|
16
|
+
* live embed. Sized by the same viewport bounds the plain image gets.
|
|
17
|
+
*/
|
|
18
|
+
children?: React.ReactNode;
|
|
19
|
+
/** Whether ESC, backdrop click, and the close button can dismiss */
|
|
20
|
+
dismissible?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Steps to the previous item. Providing it renders the previous chevron and
|
|
23
|
+
* arms the Left arrow key — the consumer owns the collection and the index.
|
|
24
|
+
*/
|
|
25
|
+
onPrev?: () => void;
|
|
26
|
+
/** Steps to the next item — the next chevron and the Right arrow key. */
|
|
27
|
+
onNext?: () => void;
|
|
28
|
+
/** Additional CSS classes — applied to the portal container, not the panel */
|
|
29
|
+
className?: string;
|
|
30
|
+
};
|
|
31
|
+
export interface LightboxProps extends LightboxOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof LightboxOwnProps> {
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Lightbox — the fullscreen media viewer: an image (or custom media) centred
|
|
35
|
+
* over a deep frosted scrim, with a caption chip, a close control, and
|
|
36
|
+
* optional previous/next stepping for galleries. Rides the shared overlay
|
|
37
|
+
* behavior layer: Escape routes through the layer stack, focus is trapped
|
|
38
|
+
* and restored with the page inert behind the panel, and the body scroll
|
|
39
|
+
* lock is counted.
|
|
40
|
+
*
|
|
41
|
+
* Renders through a portal into `document.body`. The forwarded ref and any
|
|
42
|
+
* unrecognised props target the **panel** (the `role="dialog"` element).
|
|
43
|
+
*/
|
|
44
|
+
export declare const Lightbox: React.ForwardRefExoticComponent<LightboxProps & React.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { useRef, useEffect } from "react";
|
|
4
|
+
import ReactDOM from "react-dom";
|
|
5
|
+
import "./Lightbox.css";
|
|
6
|
+
import "../../fonts/material-symbols.css";
|
|
7
|
+
import { useMounted } from "../../behaviors/useMounted.js";
|
|
8
|
+
import { useLayer } from "../../behaviors/useLayer.js";
|
|
9
|
+
import { useFocusScope } from "../../behaviors/useFocusScope.js";
|
|
10
|
+
import { useScrollLock } from "../../behaviors/useScrollLock.js";
|
|
11
|
+
const Lightbox = React.forwardRef(
|
|
12
|
+
({
|
|
13
|
+
open,
|
|
14
|
+
onOpenChange,
|
|
15
|
+
src,
|
|
16
|
+
alt,
|
|
17
|
+
caption,
|
|
18
|
+
children,
|
|
19
|
+
dismissible = true,
|
|
20
|
+
onPrev,
|
|
21
|
+
onNext,
|
|
22
|
+
className = "",
|
|
23
|
+
...rest
|
|
24
|
+
}, ref) => {
|
|
25
|
+
const panelRef = useRef(null);
|
|
26
|
+
const baseClass = "ds-lightbox";
|
|
27
|
+
const setPanelRef = (node) => {
|
|
28
|
+
panelRef.current = node;
|
|
29
|
+
if (typeof ref === "function") ref(node);
|
|
30
|
+
else if (ref) ref.current = node;
|
|
31
|
+
};
|
|
32
|
+
const mounted = useMounted();
|
|
33
|
+
useLayer({ open, dismissOnEscape: dismissible, onDismiss: () => onOpenChange(false) });
|
|
34
|
+
useFocusScope(panelRef, { active: open });
|
|
35
|
+
useScrollLock(open);
|
|
36
|
+
const stepRef = useRef({ onPrev, onNext });
|
|
37
|
+
stepRef.current = { onPrev, onNext };
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (!open || !onPrev && !onNext) return;
|
|
40
|
+
const onKey = (e) => {
|
|
41
|
+
if (e.key === "ArrowLeft") stepRef.current.onPrev?.();
|
|
42
|
+
if (e.key === "ArrowRight") stepRef.current.onNext?.();
|
|
43
|
+
};
|
|
44
|
+
document.addEventListener("keydown", onKey);
|
|
45
|
+
return () => document.removeEventListener("keydown", onKey);
|
|
46
|
+
}, [open, onPrev, onNext]);
|
|
47
|
+
const handleBackdropClick = () => {
|
|
48
|
+
if (dismissible) onOpenChange(false);
|
|
49
|
+
};
|
|
50
|
+
const containerClasses = [baseClass, open ? `${baseClass}--open` : "", className].filter(Boolean).join(" ");
|
|
51
|
+
const lightbox = /* @__PURE__ */ jsxs("div", { className: containerClasses, children: [
|
|
52
|
+
/* @__PURE__ */ jsx("div", { className: `${baseClass}__backdrop`, onClick: handleBackdropClick }),
|
|
53
|
+
/* @__PURE__ */ jsxs(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
...rest,
|
|
57
|
+
ref: setPanelRef,
|
|
58
|
+
className: `${baseClass}__panel`,
|
|
59
|
+
role: "dialog",
|
|
60
|
+
"aria-modal": "true",
|
|
61
|
+
"aria-label": alt || caption || "Media viewer",
|
|
62
|
+
tabIndex: -1,
|
|
63
|
+
children: [
|
|
64
|
+
dismissible && /* @__PURE__ */ jsx(
|
|
65
|
+
"button",
|
|
66
|
+
{
|
|
67
|
+
type: "button",
|
|
68
|
+
className: `${baseClass}__control ${baseClass}__close`,
|
|
69
|
+
onClick: () => onOpenChange(false),
|
|
70
|
+
"aria-label": "Close viewer",
|
|
71
|
+
children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__control-icon material-symbols-rounded`, "aria-hidden": "true", children: "close" })
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
onPrev && /* @__PURE__ */ jsx(
|
|
75
|
+
"button",
|
|
76
|
+
{
|
|
77
|
+
type: "button",
|
|
78
|
+
className: `${baseClass}__control ${baseClass}__nav ${baseClass}__nav--prev`,
|
|
79
|
+
onClick: onPrev,
|
|
80
|
+
"aria-label": "Previous",
|
|
81
|
+
children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__control-icon material-symbols-rounded`, "aria-hidden": "true", children: "chevron_left" })
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsxs("figure", { className: `${baseClass}__figure`, children: [
|
|
85
|
+
children ?? (src ? /* @__PURE__ */ jsx("img", { className: `${baseClass}__img`, src, alt: alt ?? "" }) : null),
|
|
86
|
+
caption && /* @__PURE__ */ jsx("figcaption", { className: `${baseClass}__caption`, children: caption })
|
|
87
|
+
] }),
|
|
88
|
+
onNext && /* @__PURE__ */ jsx(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
type: "button",
|
|
92
|
+
className: `${baseClass}__control ${baseClass}__nav ${baseClass}__nav--next`,
|
|
93
|
+
onClick: onNext,
|
|
94
|
+
"aria-label": "Next",
|
|
95
|
+
children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__control-icon material-symbols-rounded`, "aria-hidden": "true", children: "chevron_right" })
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
] });
|
|
102
|
+
if (!mounted) return null;
|
|
103
|
+
return ReactDOM.createPortal(lightbox, document.body);
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
Lightbox.displayName = "Lightbox";
|
|
107
|
+
export {
|
|
108
|
+
Lightbox
|
|
109
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
.ds-link-list {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: var(--gap-500);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.ds-link-list__item {
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: flex-start;
|
|
10
|
+
gap: var(--gap-400);
|
|
11
|
+
text-decoration: none;
|
|
12
|
+
color: inherit;
|
|
13
|
+
transition: opacity var(--motion-duration-base) var(--motion-ease-standard);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ds-link-list__item:hover {
|
|
17
|
+
opacity: 0.8;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.ds-link-list__icon-wrap {
|
|
21
|
+
flex-shrink: 0;
|
|
22
|
+
width: 28px;
|
|
23
|
+
height: 28px;
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.ds-link-list__logo {
|
|
30
|
+
width: 28px;
|
|
31
|
+
height: 28px;
|
|
32
|
+
object-fit: contain;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ds-link-list__symbol {
|
|
36
|
+
font-size: 28px;
|
|
37
|
+
line-height: 1;
|
|
38
|
+
color: var(--color-text-secondary);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.ds-link-list__content {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
gap: 2px;
|
|
45
|
+
min-width: 0;
|
|
46
|
+
flex: 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.ds-link-list__title {
|
|
50
|
+
display: flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: var(--gap-100);
|
|
53
|
+
font-family: var(--font-title-body-family);
|
|
54
|
+
font-size: var(--font-title-body-size);
|
|
55
|
+
font-weight: var(--font-title-body-weight);
|
|
56
|
+
line-height: var(--font-title-body-line-height);
|
|
57
|
+
color: var(--color-text-primary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.ds-link-list__open-icon {
|
|
61
|
+
--icon-size: var(--icon-size-500);
|
|
62
|
+
color: var(--color-text-tertiary);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ds-link-list__sub {
|
|
66
|
+
font-family: var(--font-paragraph-sm-family);
|
|
67
|
+
font-size: var(--font-paragraph-sm-size);
|
|
68
|
+
font-weight: var(--font-paragraph-sm-weight);
|
|
69
|
+
line-height: var(--font-paragraph-sm-line-height);
|
|
70
|
+
color: var(--color-text-tertiary);
|
|
71
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface LinkListItem {
|
|
3
|
+
/** Link destination */
|
|
4
|
+
href: string;
|
|
5
|
+
/** Primary label — shown with the open_in_new icon */
|
|
6
|
+
label: string;
|
|
7
|
+
/** One or more subtitle lines shown below the label */
|
|
8
|
+
sub?: string | string[];
|
|
9
|
+
/** Path to a logo image (preferred over icon when both are set) */
|
|
10
|
+
logo?: string;
|
|
11
|
+
/** Alt text for the logo — defaults to empty string (decorative) */
|
|
12
|
+
logoAlt?: string;
|
|
13
|
+
/** Icon used when no logo is provided — Material Symbol name (string, e.g. "emoji_events") or custom element (ReactNode) */
|
|
14
|
+
icon?: string | React.ReactNode;
|
|
15
|
+
/** Open in a new tab. Defaults to true; set false for links inside the same site, which swaps the open_in_new indicator for arrow_forward. */
|
|
16
|
+
newTab?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface LinkListProps {
|
|
19
|
+
/** Links to render, in display order */
|
|
20
|
+
items: LinkListItem[];
|
|
21
|
+
/** Additional CSS classes */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const LinkList: ({ items, className }: LinkListProps) => React.JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import "./LinkList.css";
|
|
3
|
+
import "../../fonts/material-symbols.css";
|
|
4
|
+
const LinkList = ({ items, className = "" }) => {
|
|
5
|
+
const classes = ["ds-link-list", className].filter(Boolean).join(" ");
|
|
6
|
+
return /* @__PURE__ */ jsx("div", { className: classes, children: items.map((item) => {
|
|
7
|
+
const subs = item.sub ? Array.isArray(item.sub) ? item.sub : [item.sub] : [];
|
|
8
|
+
const newTab = item.newTab ?? true;
|
|
9
|
+
return /* @__PURE__ */ jsxs(
|
|
10
|
+
"a",
|
|
11
|
+
{
|
|
12
|
+
href: item.href,
|
|
13
|
+
target: newTab ? "_blank" : void 0,
|
|
14
|
+
rel: newTab ? "noopener noreferrer" : void 0,
|
|
15
|
+
className: "ds-link-list__item",
|
|
16
|
+
children: [
|
|
17
|
+
/* @__PURE__ */ jsx("span", { className: "ds-link-list__icon-wrap", "aria-hidden": "true", children: item.logo ? /* @__PURE__ */ jsx(
|
|
18
|
+
"img",
|
|
19
|
+
{
|
|
20
|
+
src: item.logo,
|
|
21
|
+
alt: item.logoAlt ?? "",
|
|
22
|
+
className: "ds-link-list__logo",
|
|
23
|
+
width: 28,
|
|
24
|
+
height: 28
|
|
25
|
+
}
|
|
26
|
+
) : typeof item.icon === "string" || item.icon == null ? /* @__PURE__ */ jsx("span", { className: "material-symbols-rounded ds-link-list__symbol", children: item.icon ?? "link" }) : /* @__PURE__ */ jsx("span", { className: "ds-link-list__symbol", children: item.icon }) }),
|
|
27
|
+
/* @__PURE__ */ jsxs("div", { className: "ds-link-list__content", children: [
|
|
28
|
+
/* @__PURE__ */ jsxs("div", { className: "ds-link-list__title", children: [
|
|
29
|
+
/* @__PURE__ */ jsx("span", { children: item.label }),
|
|
30
|
+
/* @__PURE__ */ jsx("span", { className: "material-symbols-rounded ds-link-list__open-icon", "aria-hidden": "true", children: newTab ? "open_in_new" : "arrow_forward" })
|
|
31
|
+
] }),
|
|
32
|
+
subs.map((s, i) => /* @__PURE__ */ jsx("span", { className: "ds-link-list__sub", children: s }, i))
|
|
33
|
+
] })
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
item.href + item.label
|
|
37
|
+
);
|
|
38
|
+
}) });
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
LinkList
|
|
42
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
MAP CALLOUT COMPONENT
|
|
3
|
+
The annotation beside a marker: a name in
|
|
4
|
+
capitals over readout lines in the code face.
|
|
5
|
+
============================================ */
|
|
6
|
+
|
|
7
|
+
/* Base */
|
|
8
|
+
|
|
9
|
+
.ds-map-callout {
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
gap: var(--gap-050);
|
|
13
|
+
font-family: var(--font-family-code);
|
|
14
|
+
color: var(--color-text-primary);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ds-map-callout--start {
|
|
18
|
+
align-items: flex-start;
|
|
19
|
+
text-align: left;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.ds-map-callout--end {
|
|
23
|
+
align-items: flex-end;
|
|
24
|
+
text-align: right;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Parts */
|
|
28
|
+
|
|
29
|
+
/* The overline face on the code family: the metrics and tracking are the
|
|
30
|
+
uppercase-label tokens, the family stays monospace with the readouts. */
|
|
31
|
+
.ds-map-callout__title {
|
|
32
|
+
font-size: var(--font-overline-size);
|
|
33
|
+
font-weight: var(--font-overline-weight);
|
|
34
|
+
line-height: var(--font-overline-line-height);
|
|
35
|
+
letter-spacing: var(--font-overline-letter-spacing);
|
|
36
|
+
text-transform: uppercase;
|
|
37
|
+
color: var(--color-text-primary);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ds-map-callout__line {
|
|
41
|
+
font-size: var(--font-caption-size);
|
|
42
|
+
font-weight: var(--font-caption-weight);
|
|
43
|
+
line-height: var(--font-caption-line-height);
|
|
44
|
+
color: var(--color-text-tertiary);
|
|
45
|
+
font-variant-numeric: tabular-nums;
|
|
46
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Props owned by MapCallout itself — everything else falls through to the root `<div>`. */
|
|
3
|
+
type MapCalloutOwnProps = {
|
|
4
|
+
/**
|
|
5
|
+
* The place's name, set in capitals: "Santiago, CL". Intentionally shadows
|
|
6
|
+
* the native `title` tooltip attribute, which MapCallout does not expose.
|
|
7
|
+
*/
|
|
8
|
+
title: string;
|
|
9
|
+
/** Readout lines under the title, in order: a status, a reading, a route. */
|
|
10
|
+
lines?: React.ReactNode[];
|
|
11
|
+
/**
|
|
12
|
+
* Which way the text ranges. A callout sitting left of its marker ranges
|
|
13
|
+
* right so it hangs off the point; `start` is the ordinary reading order.
|
|
14
|
+
*/
|
|
15
|
+
align?: 'start' | 'end';
|
|
16
|
+
/** Additional CSS classes */
|
|
17
|
+
className?: string;
|
|
18
|
+
};
|
|
19
|
+
export interface MapCalloutProps extends MapCalloutOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof MapCalloutOwnProps | 'children'> {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* MapCallout — the annotation beside a point on a map or globe: the name in
|
|
23
|
+
* capitals, then the readouts beneath it in the code face, so a coordinate
|
|
24
|
+
* and a reading line up digit for digit. Pure markup, no hooks, so it
|
|
25
|
+
* renders from a Server Component; Globe's `renderCallout` is its intended
|
|
26
|
+
* home, where `align` follows the overlay's `data-side`.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MapCallout: React.ForwardRefExoticComponent<MapCalloutProps & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./MapCallout.css";
|
|
4
|
+
const MapCallout = React.forwardRef(
|
|
5
|
+
({ title, lines = [], align = "start", className = "", ...rest }, ref) => {
|
|
6
|
+
const baseClass = "ds-map-callout";
|
|
7
|
+
const classes = [baseClass, `${baseClass}--${align}`, className].filter(Boolean).join(" ");
|
|
8
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
|
|
9
|
+
/* @__PURE__ */ jsx("span", { className: `${baseClass}__title`, children: title }),
|
|
10
|
+
lines.map((line, i) => /* @__PURE__ */ jsx("span", { className: `${baseClass}__line`, children: line }, i))
|
|
11
|
+
] });
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
MapCallout.displayName = "MapCallout";
|
|
15
|
+
export {
|
|
16
|
+
MapCallout
|
|
17
|
+
};
|