@eocrm/design-system 0.0.0-stage → 0.6.18
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/AI-PRIMER.md +341 -0
- package/LICENSE +202 -0
- package/README.md +266 -2
- package/docs/components/Accordion.md +114 -0
- package/docs/components/AgentAvatar.md +58 -0
- package/docs/components/Alert.md +81 -0
- package/docs/components/AppLayout.md +70 -0
- package/docs/components/Avatar.md +49 -0
- package/docs/components/AvatarGroup.md +47 -0
- package/docs/components/Badge.md +60 -0
- package/docs/components/Banner.md +89 -0
- package/docs/components/BrandIcon.md +32 -0
- package/docs/components/Breadcrumb.md +72 -0
- package/docs/components/Button.md +107 -0
- package/docs/components/ButtonGroup.md +78 -0
- package/docs/components/Calendar.md +158 -0
- package/docs/components/Card.md +165 -0
- package/docs/components/CatalogPicker.md +83 -0
- package/docs/components/Chart.md +114 -0
- package/docs/components/ChatBubble.md +55 -0
- package/docs/components/ChatLauncher.md +97 -0
- package/docs/components/Checkbox.md +55 -0
- package/docs/components/CircularProgress.md +53 -0
- package/docs/components/Cluster.md +96 -0
- package/docs/components/Code.md +35 -0
- package/docs/components/CodeBlock.md +67 -0
- package/docs/components/ColorPicker.md +115 -0
- package/docs/components/ConfirmationPopover.md +70 -0
- package/docs/components/Constrain.md +39 -0
- package/docs/components/CurrencySelect.md +57 -0
- package/docs/components/CursorPagination.md +43 -0
- package/docs/components/DashboardCanvas.md +79 -0
- package/docs/components/DashboardWidget.md +131 -0
- package/docs/components/DataTable.md +88 -0
- package/docs/components/DatePicker.md +68 -0
- package/docs/components/DateRangePicker.md +71 -0
- package/docs/components/DateStrip.md +56 -0
- package/docs/components/DefinitionList.md +82 -0
- package/docs/components/Divider.md +57 -0
- package/docs/components/Dot.md +26 -0
- package/docs/components/Drawer.md +94 -0
- package/docs/components/DropdownMenu.md +299 -0
- package/docs/components/EmojiPicker.md +84 -0
- package/docs/components/EmptyState.md +55 -0
- package/docs/components/EntityChip.md +102 -0
- package/docs/components/ErrorState.md +72 -0
- package/docs/components/Field.md +91 -0
- package/docs/components/FileUpload.md +109 -0
- package/docs/components/FilterChip.md +88 -0
- package/docs/components/FlowCanvas.md +108 -0
- package/docs/components/FormRow.md +31 -0
- package/docs/components/FormSection.md +37 -0
- package/docs/components/Grid.md +103 -0
- package/docs/components/Highlight.md +75 -0
- package/docs/components/HighlightedText.md +50 -0
- package/docs/components/IconPicker.md +134 -0
- package/docs/components/IconTile.md +30 -0
- package/docs/components/Image.md +84 -0
- package/docs/components/ImageCrop.md +163 -0
- package/docs/components/Indent.md +31 -0
- package/docs/components/InlineDatePicker.md +58 -0
- package/docs/components/InlineDateRangePicker.md +57 -0
- package/docs/components/Input.md +54 -0
- package/docs/components/Kanban.md +122 -0
- package/docs/components/Kbd.md +41 -0
- package/docs/components/Lightbox.md +105 -0
- package/docs/components/Link.md +65 -0
- package/docs/components/LinkCard.md +41 -0
- package/docs/components/LiquidEditor.md +84 -0
- package/docs/components/List.md +68 -0
- package/docs/components/LiveRegion.md +29 -0
- package/docs/components/LocaleProvider.md +25 -0
- package/docs/components/Logo.md +41 -0
- package/docs/components/Masonry.md +48 -0
- package/docs/components/MediaTile.md +95 -0
- package/docs/components/Modal.md +107 -0
- package/docs/components/MoneyInput.md +62 -0
- package/docs/components/OptionsPicker.md +123 -0
- package/docs/components/OtpInput.md +65 -0
- package/docs/components/Page.md +35 -0
- package/docs/components/PageHeader.md +133 -0
- package/docs/components/Pagination.md +44 -0
- package/docs/components/Palette.md +32 -0
- package/docs/components/PasswordInput.md +45 -0
- package/docs/components/PasswordStrengthMeter.md +27 -0
- package/docs/components/PersonDisplay.md +153 -0
- package/docs/components/PhoneInput.md +54 -0
- package/docs/components/PillMenu.md +91 -0
- package/docs/components/Popover.md +127 -0
- package/docs/components/Progress.md +56 -0
- package/docs/components/QrCode.md +34 -0
- package/docs/components/Radio.md +37 -0
- package/docs/components/RadioGroup.md +56 -0
- package/docs/components/Rail.md +191 -0
- package/docs/components/RelativeDateInput.md +114 -0
- package/docs/components/RichText.md +44 -0
- package/docs/components/RichTextEditor.md +112 -0
- package/docs/components/Screen.md +37 -0
- package/docs/components/ScrollArea.md +39 -0
- package/docs/components/Select.md +131 -0
- package/docs/components/SettingRow.md +98 -0
- package/docs/components/Skeleton.md +68 -0
- package/docs/components/Slider.md +92 -0
- package/docs/components/SlotGrid.md +55 -0
- package/docs/components/SocialButton.md +31 -0
- package/docs/components/Sortable.md +127 -0
- package/docs/components/SortableGroup.md +52 -0
- package/docs/components/Sparkline.md +51 -0
- package/docs/components/Split.md +76 -0
- package/docs/components/Stack.md +59 -0
- package/docs/components/StagePath.md +66 -0
- package/docs/components/StatGroup.md +61 -0
- package/docs/components/StatTile.md +58 -0
- package/docs/components/Sticky.md +69 -0
- package/docs/components/Switch.md +89 -0
- package/docs/components/Table.md +184 -0
- package/docs/components/TableOfContents.md +76 -0
- package/docs/components/Tabs.md +94 -0
- package/docs/components/Text.md +63 -0
- package/docs/components/Textarea.md +59 -0
- package/docs/components/Thread.md +52 -0
- package/docs/components/TimeField.md +70 -0
- package/docs/components/Timeline.md +57 -0
- package/docs/components/Title.md +54 -0
- package/docs/components/ToastViewport.md +61 -0
- package/docs/components/Tooltip.md +63 -0
- package/docs/components/TopBar.md +214 -0
- package/docs/components/Tour.md +85 -0
- package/docs/components/TreeView.md +113 -0
- package/docs/components/VisuallyHidden.md +43 -0
- package/docs/components/WidgetPreview.md +54 -0
- package/docs/components/useBelowBreakpoint.md +11 -0
- package/docs/components/useMonth.md +18 -0
- package/docs/setup.md +51 -0
- package/docs/theming.md +95 -0
- package/docs/tokens.md +123 -0
- package/docs/transient-state.md +56 -0
- package/package.json +86 -4
- package/src/_meta/manifest.ts +293 -0
- package/src/app/AppProvider.tsx +78 -0
- package/src/app/index.ts +3 -0
- package/src/app/themeTokens.ts +95 -0
- package/src/calendar/dateMath.ts +114 -0
- package/src/calendar/formatters.ts +75 -0
- package/src/calendar/index.ts +39 -0
- package/src/calendar/types.ts +36 -0
- package/src/calendar/useAgenda.ts +70 -0
- package/src/calendar/useDay.ts +51 -0
- package/src/calendar/useMonth.ts +82 -0
- package/src/calendar/useWeek.ts +62 -0
- package/src/calendar/weekInfo.ts +83 -0
- package/src/components/Accordion/Accordion.module.scss +304 -0
- package/src/components/Accordion/Accordion.tokens.scss +64 -0
- package/src/components/Accordion/Accordion.tsx +272 -0
- package/src/components/Accordion/AccordionContent.tsx +36 -0
- package/src/components/Accordion/AccordionItem.tsx +66 -0
- package/src/components/Accordion/AccordionTrigger.tsx +121 -0
- package/src/components/Accordion/context.ts +47 -0
- package/src/components/Accordion/index.ts +14 -0
- package/src/components/Alert/Alert.module.scss +92 -0
- package/src/components/Alert/Alert.tokens.scss +60 -0
- package/src/components/Alert/Alert.tsx +136 -0
- package/src/components/Alert/index.ts +2 -0
- package/src/components/AppLayout/AppLayout.module.scss +130 -0
- package/src/components/AppLayout/AppLayout.tokens.scss +27 -0
- package/src/components/AppLayout/AppLayout.tsx +211 -0
- package/src/components/AppLayout/index.ts +2 -0
- package/src/components/Avatar/AgentAvatar.module.scss +117 -0
- package/src/components/Avatar/AgentAvatar.tsx +122 -0
- package/src/components/Avatar/Avatar.module.scss +181 -0
- package/src/components/Avatar/Avatar.tokens.scss +107 -0
- package/src/components/Avatar/Avatar.tsx +210 -0
- package/src/components/Avatar/AvatarGroup.module.scss +128 -0
- package/src/components/Avatar/AvatarGroup.tsx +119 -0
- package/src/components/Avatar/AvatarGroupContext.tsx +20 -0
- package/src/components/Avatar/index.ts +6 -0
- package/src/components/Badge/Badge.module.scss +124 -0
- package/src/components/Badge/Badge.tokens.scss +74 -0
- package/src/components/Badge/Badge.tsx +164 -0
- package/src/components/Badge/index.ts +2 -0
- package/src/components/Banner/Banner.module.scss +73 -0
- package/src/components/Banner/Banner.tokens.scss +51 -0
- package/src/components/Banner/Banner.tsx +138 -0
- package/src/components/Banner/index.ts +2 -0
- package/src/components/BrandIcon/BrandIcon.module.scss +5 -0
- package/src/components/BrandIcon/BrandIcon.tsx +99 -0
- package/src/components/BrandIcon/index.ts +2 -0
- package/src/components/Breadcrumb/Breadcrumb.module.scss +32 -0
- package/src/components/Breadcrumb/Breadcrumb.tokens.scss +9 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +146 -0
- package/src/components/Breadcrumb/index.ts +2 -0
- package/src/components/Button/Button.module.scss +167 -0
- package/src/components/Button/Button.tokens.scss +90 -0
- package/src/components/Button/Button.tsx +205 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/ButtonGroup/ButtonGroup.module.scss +134 -0
- package/src/components/ButtonGroup/ButtonGroup.tokens.scss +42 -0
- package/src/components/ButtonGroup/ButtonGroup.tsx +278 -0
- package/src/components/ButtonGroup/ButtonGroupItem.tsx +74 -0
- package/src/components/ButtonGroup/context.ts +45 -0
- package/src/components/ButtonGroup/index.ts +2 -0
- package/src/components/Calendar/AgendaView.module.scss +231 -0
- package/src/components/Calendar/AgendaView.tsx +214 -0
- package/src/components/Calendar/AllDayBand.module.scss +18 -0
- package/src/components/Calendar/AllDayBand.tsx +75 -0
- package/src/components/Calendar/Calendar.module.scss +23 -0
- package/src/components/Calendar/Calendar.tokens.scss +262 -0
- package/src/components/Calendar/Calendar.tsx +370 -0
- package/src/components/Calendar/DayCell.module.scss +30 -0
- package/src/components/Calendar/DayCell.tsx +50 -0
- package/src/components/Calendar/DayView.module.scss +10 -0
- package/src/components/Calendar/DayView.tsx +163 -0
- package/src/components/Calendar/EventChip.module.scss +171 -0
- package/src/components/Calendar/EventChip.tsx +115 -0
- package/src/components/Calendar/HourGrid.module.scss +123 -0
- package/src/components/Calendar/HourGrid.tsx +381 -0
- package/src/components/Calendar/MonthView.module.scss +99 -0
- package/src/components/Calendar/MonthView.tsx +296 -0
- package/src/components/Calendar/TimedEvent.module.scss +205 -0
- package/src/components/Calendar/TimedEvent.tsx +247 -0
- package/src/components/Calendar/ViewSwitcher.module.scss +3 -0
- package/src/components/Calendar/ViewSwitcher.tsx +47 -0
- package/src/components/Calendar/WeekView.module.scss +10 -0
- package/src/components/Calendar/WeekView.tsx +137 -0
- package/src/components/Calendar/eventColor.ts +60 -0
- package/src/components/Calendar/index.ts +18 -0
- package/src/components/Calendar/types.ts +451 -0
- package/src/components/Calendar/useEventDrag.ts +783 -0
- package/src/components/Calendar/utils.ts +622 -0
- package/src/components/Card/Card.module.scss +264 -0
- package/src/components/Card/Card.tokens.scss +55 -0
- package/src/components/Card/Card.tsx +170 -0
- package/src/components/Card/CardBody.tsx +45 -0
- package/src/components/Card/CardHeader.tsx +113 -0
- package/src/components/Card/CardList.tsx +24 -0
- package/src/components/Card/CardListRow.tsx +24 -0
- package/src/components/Card/index.ts +7 -0
- package/src/components/CatalogPicker/CatalogPicker.module.scss +193 -0
- package/src/components/CatalogPicker/CatalogPicker.tokens.scss +26 -0
- package/src/components/CatalogPicker/CatalogPicker.tsx +339 -0
- package/src/components/CatalogPicker/index.ts +2 -0
- package/src/components/Chart/Chart.module.scss +287 -0
- package/src/components/Chart/Chart.tokens.scss +63 -0
- package/src/components/Chart/Chart.tsx +607 -0
- package/src/components/Chart/ChartLegend.tsx +99 -0
- package/src/components/Chart/ChartTable.tsx +62 -0
- package/src/components/Chart/ChartTooltip.tsx +91 -0
- package/src/components/Chart/chartModel.ts +689 -0
- package/src/components/Chart/index.ts +2 -0
- package/src/components/ChatBubble/ChatBubble.module.scss +93 -0
- package/src/components/ChatBubble/ChatBubble.tokens.scss +17 -0
- package/src/components/ChatBubble/ChatBubble.tsx +61 -0
- package/src/components/ChatBubble/ChatBubbleList.tsx +27 -0
- package/src/components/ChatBubble/index.ts +3 -0
- package/src/components/ChatLauncher/ChatLauncher.module.scss +68 -0
- package/src/components/ChatLauncher/ChatLauncher.tokens.scss +27 -0
- package/src/components/ChatLauncher/ChatLauncher.tsx +202 -0
- package/src/components/ChatLauncher/index.ts +2 -0
- package/src/components/ChatLauncher/isAtBottom.ts +12 -0
- package/src/components/Checkbox/Checkbox.module.scss +147 -0
- package/src/components/Checkbox/Checkbox.tokens.scss +44 -0
- package/src/components/Checkbox/Checkbox.tsx +188 -0
- package/src/components/Checkbox/index.ts +2 -0
- package/src/components/CircularProgress/CircularProgress.module.scss +133 -0
- package/src/components/CircularProgress/CircularProgress.tokens.scss +40 -0
- package/src/components/CircularProgress/CircularProgress.tsx +139 -0
- package/src/components/CircularProgress/index.ts +7 -0
- package/src/components/Cluster/Cluster.module.scss +145 -0
- package/src/components/Cluster/Cluster.tokens.scss +11 -0
- package/src/components/Cluster/Cluster.tsx +215 -0
- package/src/components/Cluster/index.ts +2 -0
- package/src/components/Code/Code.module.scss +28 -0
- package/src/components/Code/Code.tokens.scss +15 -0
- package/src/components/Code/Code.tsx +44 -0
- package/src/components/Code/index.ts +2 -0
- package/src/components/CodeBlock/CodeBlock.module.scss +146 -0
- package/src/components/CodeBlock/CodeBlock.tokens.scss +27 -0
- package/src/components/CodeBlock/CodeBlock.tsx +274 -0
- package/src/components/CodeBlock/highlight.ts +179 -0
- package/src/components/CodeBlock/index.ts +8 -0
- package/src/components/CodeBlock/sampleSync.ts +42 -0
- package/src/components/ColorPicker/ColorPicker.module.scss +286 -0
- package/src/components/ColorPicker/ColorPicker.tokens.scss +60 -0
- package/src/components/ColorPicker/ColorPicker.tsx +367 -0
- package/src/components/ColorPicker/ColorPickerPanel.tsx +265 -0
- package/src/components/ColorPicker/SVSquare.tsx +189 -0
- package/src/components/ColorPicker/colorMath.ts +141 -0
- package/src/components/ColorPicker/index.ts +6 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.module.scss +39 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.tokens.scss +13 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.tsx +395 -0
- package/src/components/ConfirmationPopover/index.ts +2 -0
- package/src/components/Constrain/Constrain.module.scss +99 -0
- package/src/components/Constrain/Constrain.tsx +79 -0
- package/src/components/Constrain/index.ts +2 -0
- package/src/components/CurrencySelect/CurrencySelect.module.scss +7 -0
- package/src/components/CurrencySelect/CurrencySelect.tsx +167 -0
- package/src/components/CurrencySelect/index.ts +3 -0
- package/src/components/CursorPagination/CursorPagination.module.scss +69 -0
- package/src/components/CursorPagination/CursorPagination.tokens.scss +32 -0
- package/src/components/CursorPagination/CursorPagination.tsx +121 -0
- package/src/components/CursorPagination/index.ts +2 -0
- package/src/components/DashboardCanvas/DashboardCanvas.module.scss +360 -0
- package/src/components/DashboardCanvas/DashboardCanvas.tokens.scss +48 -0
- package/src/components/DashboardCanvas/DashboardCanvas.tsx +1270 -0
- package/src/components/DashboardCanvas/DashboardCanvasItem.tsx +140 -0
- package/src/components/DashboardCanvas/DashboardCanvasSection.tsx +174 -0
- package/src/components/DashboardCanvas/engine.ts +363 -0
- package/src/components/DashboardCanvas/index.ts +9 -0
- package/src/components/DashboardWidget/DashboardWidget.module.scss +100 -0
- package/src/components/DashboardWidget/DashboardWidget.tokens.scss +16 -0
- package/src/components/DashboardWidget/DashboardWidget.tsx +188 -0
- package/src/components/DashboardWidget/index.ts +7 -0
- package/src/components/DataTable/BodyRow.tsx +197 -0
- package/src/components/DataTable/ColumnVisibilityTrigger.module.scss +7 -0
- package/src/components/DataTable/ColumnVisibilityTrigger.tsx +105 -0
- package/src/components/DataTable/DataTable.module.scss +511 -0
- package/src/components/DataTable/DataTable.tokens.scss +80 -0
- package/src/components/DataTable/DataTable.tsx +734 -0
- package/src/components/DataTable/HeaderCell.module.scss +215 -0
- package/src/components/DataTable/HeaderCell.tsx +440 -0
- package/src/components/DataTable/columnShift.ts +117 -0
- package/src/components/DataTable/index.ts +23 -0
- package/src/components/DataTable/pinStyle.ts +47 -0
- package/src/components/DataTable/reorderColumns.ts +66 -0
- package/src/components/DataTable/types.ts +289 -0
- package/src/components/DataTable/useColumnDragShift.ts +216 -0
- package/src/components/DataTable/useDataTable.ts +372 -0
- package/src/components/DataTable/useResizeHandle.ts +97 -0
- package/src/components/DatePicker/DatePicker.module.scss +180 -0
- package/src/components/DatePicker/DatePicker.tokens.scss +152 -0
- package/src/components/DatePicker/DatePicker.tsx +664 -0
- package/src/components/DatePicker/DatePickerGrid.module.scss +172 -0
- package/src/components/DatePicker/DatePickerGrid.tsx +341 -0
- package/src/components/DatePicker/InlineDatePicker.module.scss +32 -0
- package/src/components/DatePicker/InlineDatePicker.tsx +201 -0
- package/src/components/DatePicker/index.ts +4 -0
- package/src/components/DatePicker/utils.ts +364 -0
- package/src/components/DateRangePicker/DateRangePicker.module.scss +237 -0
- package/src/components/DateRangePicker/DateRangePicker.tokens.scss +78 -0
- package/src/components/DateRangePicker/DateRangePicker.tsx +720 -0
- package/src/components/DateRangePicker/InlineDateRangePicker.module.scss +94 -0
- package/src/components/DateRangePicker/InlineDateRangePicker.tsx +376 -0
- package/src/components/DateRangePicker/index.ts +5 -0
- package/src/components/DateRangePicker/utils.ts +151 -0
- package/src/components/DateStrip/DateStrip.module.scss +78 -0
- package/src/components/DateStrip/DateStrip.tokens.scss +23 -0
- package/src/components/DateStrip/DateStrip.tsx +205 -0
- package/src/components/DateStrip/index.ts +2 -0
- package/src/components/DefinitionList/DefinitionList.module.scss +102 -0
- package/src/components/DefinitionList/DefinitionList.tokens.scss +29 -0
- package/src/components/DefinitionList/DefinitionList.tsx +198 -0
- package/src/components/DefinitionList/index.ts +9 -0
- package/src/components/Divider/Divider.module.scss +144 -0
- package/src/components/Divider/Divider.tokens.scss +21 -0
- package/src/components/Divider/Divider.tsx +103 -0
- package/src/components/Divider/index.ts +2 -0
- package/src/components/Dot/Dot.module.scss +40 -0
- package/src/components/Dot/Dot.tokens.scss +4 -0
- package/src/components/Dot/Dot.tsx +45 -0
- package/src/components/Dot/index.ts +2 -0
- package/src/components/Drawer/Body.tsx +23 -0
- package/src/components/Drawer/Close.tsx +35 -0
- package/src/components/Drawer/Content.tsx +93 -0
- package/src/components/Drawer/Drawer.module.scss +232 -0
- package/src/components/Drawer/Drawer.tokens.scss +38 -0
- package/src/components/Drawer/Drawer.tsx +23 -0
- package/src/components/Drawer/DrawerRoot.tsx +190 -0
- package/src/components/Drawer/Footer.tsx +24 -0
- package/src/components/Drawer/Header.tsx +64 -0
- package/src/components/Drawer/Overlay.tsx +82 -0
- package/src/components/Drawer/context.ts +44 -0
- package/src/components/Drawer/index.ts +12 -0
- package/src/components/Drawer/useDragToClose.ts +149 -0
- package/src/components/DropdownMenu/CheckboxItem.tsx +144 -0
- package/src/components/DropdownMenu/Content.tsx +419 -0
- package/src/components/DropdownMenu/DropdownMenu.module.scss +280 -0
- package/src/components/DropdownMenu/DropdownMenu.tokens.scss +88 -0
- package/src/components/DropdownMenu/DropdownMenu.tsx +43 -0
- package/src/components/DropdownMenu/Group.tsx +76 -0
- package/src/components/DropdownMenu/Item.tsx +148 -0
- package/src/components/DropdownMenu/ItemIndicator.tsx +30 -0
- package/src/components/DropdownMenu/Radio.tsx +178 -0
- package/src/components/DropdownMenu/Root.tsx +100 -0
- package/src/components/DropdownMenu/Sub.tsx +332 -0
- package/src/components/DropdownMenu/Trigger.tsx +76 -0
- package/src/components/DropdownMenu/context.ts +65 -0
- package/src/components/DropdownMenu/index.ts +20 -0
- package/src/components/EmojiPicker/EmojiPicker.module.scss +84 -0
- package/src/components/EmojiPicker/EmojiPicker.tokens.scss +24 -0
- package/src/components/EmojiPicker/EmojiPicker.tsx +341 -0
- package/src/components/EmojiPicker/emojiData.ts +245 -0
- package/src/components/EmojiPicker/index.ts +3 -0
- package/src/components/EmptyState/EmptyState.module.scss +102 -0
- package/src/components/EmptyState/EmptyState.tokens.scss +28 -0
- package/src/components/EmptyState/EmptyState.tsx +112 -0
- package/src/components/EmptyState/index.ts +7 -0
- package/src/components/EntityChip/EntityChip.module.scss +275 -0
- package/src/components/EntityChip/EntityChip.tokens.scss +66 -0
- package/src/components/EntityChip/EntityChip.tsx +649 -0
- package/src/components/EntityChip/index.ts +10 -0
- package/src/components/ErrorState/ErrorState.module.scss +105 -0
- package/src/components/ErrorState/ErrorState.tokens.scss +32 -0
- package/src/components/ErrorState/ErrorState.tsx +125 -0
- package/src/components/ErrorState/index.ts +8 -0
- package/src/components/Field/Field.module.scss +46 -0
- package/src/components/Field/Field.tsx +185 -0
- package/src/components/Field/index.ts +2 -0
- package/src/components/FileUpload/FileUpload.module.scss +187 -0
- package/src/components/FileUpload/FileUpload.tokens.scss +81 -0
- package/src/components/FileUpload/FileUpload.tsx +569 -0
- package/src/components/FileUpload/formatBytes.ts +34 -0
- package/src/components/FileUpload/iconForFile.ts +40 -0
- package/src/components/FileUpload/index.ts +2 -0
- package/src/components/FilterChip/FilterChip.module.scss +61 -0
- package/src/components/FilterChip/FilterChip.tokens.scss +25 -0
- package/src/components/FilterChip/FilterChip.tsx +208 -0
- package/src/components/FilterChip/index.ts +5 -0
- package/src/components/FlowCanvas/FlowCanvas.module.scss +329 -0
- package/src/components/FlowCanvas/FlowCanvas.tokens.scss +45 -0
- package/src/components/FlowCanvas/FlowCanvas.tsx +1867 -0
- package/src/components/FlowCanvas/FlowControls.tsx +46 -0
- package/src/components/FlowCanvas/FlowEdge.tsx +58 -0
- package/src/components/FlowCanvas/FlowNode.tsx +76 -0
- package/src/components/FlowCanvas/edgePath.ts +85 -0
- package/src/components/FlowCanvas/index.ts +4 -0
- package/src/components/FlowCanvas/layout.ts +148 -0
- package/src/components/FlowCanvas/spatialNav.ts +76 -0
- package/src/components/FlowCanvas/types.ts +59 -0
- package/src/components/FlowCanvas/useViewport.ts +122 -0
- package/src/components/FormRow/FormRow.module.scss +2 -0
- package/src/components/FormRow/FormRow.tsx +37 -0
- package/src/components/FormRow/index.ts +2 -0
- package/src/components/FormSection/FormSection.module.scss +24 -0
- package/src/components/FormSection/FormSection.tsx +46 -0
- package/src/components/FormSection/index.ts +2 -0
- package/src/components/Grid/Grid.module.scss +162 -0
- package/src/components/Grid/Grid.tokens.scss +13 -0
- package/src/components/Grid/Grid.tsx +226 -0
- package/src/components/Grid/GridItem.tsx +77 -0
- package/src/components/Grid/index.ts +11 -0
- package/src/components/Highlight/Highlight.module.scss +43 -0
- package/src/components/Highlight/Highlight.tokens.scss +35 -0
- package/src/components/Highlight/Highlight.tsx +164 -0
- package/src/components/Highlight/HighlightOverlay.tsx +100 -0
- package/src/components/Highlight/index.ts +2 -0
- package/src/components/HighlightedText/HighlightedText.module.scss +11 -0
- package/src/components/HighlightedText/HighlightedText.tokens.scss +9 -0
- package/src/components/HighlightedText/HighlightedText.tsx +50 -0
- package/src/components/HighlightedText/highlightRanges.ts +44 -0
- package/src/components/HighlightedText/index.ts +2 -0
- package/src/components/IconPicker/IconPicker.module.scss +175 -0
- package/src/components/IconPicker/IconPicker.tokens.scss +40 -0
- package/src/components/IconPicker/IconPicker.tsx +629 -0
- package/src/components/IconPicker/index.ts +9 -0
- package/src/components/IconTile/IconTile.module.scss +57 -0
- package/src/components/IconTile/IconTile.tokens.scss +16 -0
- package/src/components/IconTile/IconTile.tsx +91 -0
- package/src/components/IconTile/index.ts +2 -0
- package/src/components/Image/Image.module.scss +266 -0
- package/src/components/Image/Image.tokens.scss +55 -0
- package/src/components/Image/Image.tsx +342 -0
- package/src/components/Image/index.ts +2 -0
- package/src/components/ImageCrop/ImageCrop.module.scss +274 -0
- package/src/components/ImageCrop/ImageCrop.tokens.scss +33 -0
- package/src/components/ImageCrop/ImageCrop.tsx +542 -0
- package/src/components/ImageCrop/cropGeometry.ts +120 -0
- package/src/components/ImageCrop/extractCropBlob.ts +140 -0
- package/src/components/ImageCrop/index.ts +11 -0
- package/src/components/ImageCrop/useCropPreview.ts +161 -0
- package/src/components/Indent/Indent.module.scss +33 -0
- package/src/components/Indent/Indent.tokens.scss +10 -0
- package/src/components/Indent/Indent.tsx +46 -0
- package/src/components/Indent/index.ts +2 -0
- package/src/components/Input/Input.module.scss +99 -0
- package/src/components/Input/Input.tokens.scss +54 -0
- package/src/components/Input/Input.tsx +105 -0
- package/src/components/Input/Suggestions.tsx +260 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/Kanban/Kanban.module.scss +39 -0
- package/src/components/Kanban/Kanban.tokens.scss +15 -0
- package/src/components/Kanban/Kanban.tsx +951 -0
- package/src/components/Kanban/index.ts +7 -0
- package/src/components/Kbd/Kbd.module.scss +47 -0
- package/src/components/Kbd/Kbd.tokens.scss +26 -0
- package/src/components/Kbd/Kbd.tsx +73 -0
- package/src/components/Kbd/index.ts +2 -0
- package/src/components/Lightbox/Lightbox.module.scss +283 -0
- package/src/components/Lightbox/Lightbox.tokens.scss +36 -0
- package/src/components/Lightbox/Lightbox.tsx +506 -0
- package/src/components/Lightbox/index.ts +2 -0
- package/src/components/Link/Link.module.scss +78 -0
- package/src/components/Link/Link.tokens.scss +28 -0
- package/src/components/Link/Link.tsx +114 -0
- package/src/components/Link/index.ts +2 -0
- package/src/components/LinkCard/LinkCard.module.scss +92 -0
- package/src/components/LinkCard/LinkCard.tokens.scss +9 -0
- package/src/components/LinkCard/LinkCard.tsx +72 -0
- package/src/components/LinkCard/index.ts +2 -0
- package/src/components/LiquidEditor/AutocompleteMenu.tsx +133 -0
- package/src/components/LiquidEditor/HighlightLayer.tsx +53 -0
- package/src/components/LiquidEditor/InsertVariableMenu.tsx +81 -0
- package/src/components/LiquidEditor/LiquidEditor.module.scss +339 -0
- package/src/components/LiquidEditor/LiquidEditor.tokens.scss +81 -0
- package/src/components/LiquidEditor/LiquidEditor.tsx +412 -0
- package/src/components/LiquidEditor/PreviewPane.tsx +29 -0
- package/src/components/LiquidEditor/caretCoordinates.ts +97 -0
- package/src/components/LiquidEditor/index.ts +7 -0
- package/src/components/LiquidEditor/liquidFilters.ts +23 -0
- package/src/components/LiquidEditor/liquidTokenizer.ts +235 -0
- package/src/components/LiquidEditor/types.ts +101 -0
- package/src/components/LiquidEditor/useLiquidAutocomplete.ts +178 -0
- package/src/components/List/List.module.scss +105 -0
- package/src/components/List/List.tokens.scss +42 -0
- package/src/components/List/List.tsx +124 -0
- package/src/components/List/index.ts +9 -0
- package/src/components/LiveRegion/LiveRegion.module.scss +3 -0
- package/src/components/LiveRegion/LiveRegion.tsx +116 -0
- package/src/components/LiveRegion/index.ts +2 -0
- package/src/components/Logo/Logo.module.scss +139 -0
- package/src/components/Logo/Logo.tokens.scss +14 -0
- package/src/components/Logo/Logo.tsx +126 -0
- package/src/components/Logo/index.ts +2 -0
- package/src/components/Masonry/Masonry.module.scss +42 -0
- package/src/components/Masonry/Masonry.tokens.scss +8 -0
- package/src/components/Masonry/Masonry.tsx +136 -0
- package/src/components/Masonry/index.ts +2 -0
- package/src/components/Masonry/masonryUtils.ts +42 -0
- package/src/components/MediaTile/MediaTile.module.scss +183 -0
- package/src/components/MediaTile/MediaTile.tokens.scss +60 -0
- package/src/components/MediaTile/MediaTile.tsx +208 -0
- package/src/components/MediaTile/index.ts +8 -0
- package/src/components/Modal/Body.tsx +27 -0
- package/src/components/Modal/Close.tsx +45 -0
- package/src/components/Modal/Content.tsx +98 -0
- package/src/components/Modal/Footer.tsx +28 -0
- package/src/components/Modal/Header.tsx +51 -0
- package/src/components/Modal/Modal.module.scss +262 -0
- package/src/components/Modal/Modal.tokens.scss +50 -0
- package/src/components/Modal/Modal.tsx +23 -0
- package/src/components/Modal/ModalRoot.tsx +299 -0
- package/src/components/Modal/Overlay.tsx +101 -0
- package/src/components/Modal/context.ts +60 -0
- package/src/components/Modal/index.ts +11 -0
- package/src/components/MoneyInput/MoneyInput.module.scss +57 -0
- package/src/components/MoneyInput/MoneyInput.tsx +433 -0
- package/src/components/MoneyInput/index.ts +2 -0
- package/src/components/OptionsPicker/OptionsPicker.module.scss +216 -0
- package/src/components/OptionsPicker/OptionsPicker.tokens.scss +68 -0
- package/src/components/OptionsPicker/OptionsPicker.tsx +936 -0
- package/src/components/OptionsPicker/index.ts +9 -0
- package/src/components/OtpInput/OtpInput.module.scss +69 -0
- package/src/components/OtpInput/OtpInput.tokens.scss +45 -0
- package/src/components/OtpInput/OtpInput.tsx +368 -0
- package/src/components/OtpInput/index.ts +2 -0
- package/src/components/Page/Page.module.scss +30 -0
- package/src/components/Page/Page.tokens.scss +11 -0
- package/src/components/Page/Page.tsx +53 -0
- package/src/components/Page/index.ts +2 -0
- package/src/components/PageHeader/PageHeader.module.scss +197 -0
- package/src/components/PageHeader/PageHeader.tokens.scss +41 -0
- package/src/components/PageHeader/PageHeader.tsx +310 -0
- package/src/components/PageHeader/index.ts +20 -0
- package/src/components/Pagination/Pagination.module.scss +117 -0
- package/src/components/Pagination/Pagination.tokens.scss +54 -0
- package/src/components/Pagination/Pagination.tsx +165 -0
- package/src/components/Pagination/index.ts +4 -0
- package/src/components/Pagination/paginationRange.ts +72 -0
- package/src/components/PasswordInput/PasswordInput.module.scss +120 -0
- package/src/components/PasswordInput/PasswordInput.tokens.scss +44 -0
- package/src/components/PasswordInput/PasswordInput.tsx +210 -0
- package/src/components/PasswordInput/index.ts +2 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.module.scss +80 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tokens.scss +40 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tsx +96 -0
- package/src/components/PasswordStrengthMeter/index.ts +2 -0
- package/src/components/PersonDisplay/PersonDisplay.module.scss +180 -0
- package/src/components/PersonDisplay/PersonDisplay.tokens.scss +35 -0
- package/src/components/PersonDisplay/PersonDisplay.tsx +420 -0
- package/src/components/PersonDisplay/index.ts +10 -0
- package/src/components/PhoneInput/PhoneInput.module.scss +23 -0
- package/src/components/PhoneInput/PhoneInput.tsx +271 -0
- package/src/components/PhoneInput/index.ts +4 -0
- package/src/components/PhoneInput/phone.ts +128 -0
- package/src/components/PillMenu/PillMenu.module.scss +117 -0
- package/src/components/PillMenu/PillMenu.tokens.scss +22 -0
- package/src/components/PillMenu/PillMenu.tsx +324 -0
- package/src/components/PillMenu/index.ts +2 -0
- package/src/components/Popover/Anchor.tsx +37 -0
- package/src/components/Popover/Close.tsx +45 -0
- package/src/components/Popover/Content.tsx +213 -0
- package/src/components/Popover/Heading.tsx +33 -0
- package/src/components/Popover/Popover.module.scss +177 -0
- package/src/components/Popover/Popover.tokens.scss +22 -0
- package/src/components/Popover/Popover.tsx +23 -0
- package/src/components/Popover/PopoverRoot.tsx +75 -0
- package/src/components/Popover/Trigger.tsx +86 -0
- package/src/components/Popover/context.ts +22 -0
- package/src/components/Popover/index.ts +7 -0
- package/src/components/Progress/Progress.module.scss +110 -0
- package/src/components/Progress/Progress.tokens.scss +44 -0
- package/src/components/Progress/Progress.tsx +129 -0
- package/src/components/Progress/index.ts +2 -0
- package/src/components/QrCode/QrCode.module.scss +97 -0
- package/src/components/QrCode/QrCode.tokens.scss +17 -0
- package/src/components/QrCode/QrCode.tsx +233 -0
- package/src/components/QrCode/index.ts +2 -0
- package/src/components/QrCode/qr.ts +161 -0
- package/src/components/Radio/Radio.module.scss +175 -0
- package/src/components/Radio/Radio.tokens.scss +59 -0
- package/src/components/Radio/Radio.tsx +127 -0
- package/src/components/Radio/RadioGroup.module.scss +42 -0
- package/src/components/Radio/RadioGroup.tsx +120 -0
- package/src/components/Radio/RadioGroupContext.tsx +30 -0
- package/src/components/Radio/index.ts +4 -0
- package/src/components/Rail/Rail.module.scss +510 -0
- package/src/components/Rail/Rail.tokens.scss +92 -0
- package/src/components/Rail/Rail.tsx +287 -0
- package/src/components/Rail/RailCollapseToggle.tsx +57 -0
- package/src/components/Rail/RailFooter.tsx +17 -0
- package/src/components/Rail/RailGroup.tsx +728 -0
- package/src/components/Rail/RailGroupContext.ts +9 -0
- package/src/components/Rail/RailHeader.tsx +23 -0
- package/src/components/Rail/RailItem.tsx +119 -0
- package/src/components/Rail/RailSection.tsx +39 -0
- package/src/components/Rail/RailSpacer.tsx +19 -0
- package/src/components/Rail/index.ts +9 -0
- package/src/components/RelativeDateInput/RelativeDateInput.module.scss +15 -0
- package/src/components/RelativeDateInput/RelativeDateInput.tokens.scss +6 -0
- package/src/components/RelativeDateInput/RelativeDateInput.tsx +474 -0
- package/src/components/RelativeDateInput/index.ts +10 -0
- package/src/components/RelativeDateInput/relativeDate.ts +127 -0
- package/src/components/RichText/RichText.module.scss +5 -0
- package/src/components/RichText/RichText.tsx +70 -0
- package/src/components/RichText/RichTextAttachment.module.scss +82 -0
- package/src/components/RichText/RichTextAttachment.tsx +122 -0
- package/src/components/RichText/_prose.scss +79 -0
- package/src/components/RichText/attachmentIcon.tsx +24 -0
- package/src/components/RichText/engine/attachment.ts +154 -0
- package/src/components/RichText/engine/autolink.ts +64 -0
- package/src/components/RichText/engine/blockUnit.ts +174 -0
- package/src/components/RichText/engine/colorMarks.ts +85 -0
- package/src/components/RichText/engine/escape.ts +11 -0
- package/src/components/RichText/engine/fromHtml.ts +353 -0
- package/src/components/RichText/engine/fromMarkdown.ts +20 -0
- package/src/components/RichText/engine/inlines.ts +82 -0
- package/src/components/RichText/engine/listDepths.ts +32 -0
- package/src/components/RichText/engine/marks.ts +80 -0
- package/src/components/RichText/engine/mdToHtml.ts +178 -0
- package/src/components/RichText/engine/model.ts +157 -0
- package/src/components/RichText/engine/position.ts +118 -0
- package/src/components/RichText/engine/renderDoc.tsx +395 -0
- package/src/components/RichText/engine/renderLink.ts +15 -0
- package/src/components/RichText/engine/renderMention.ts +16 -0
- package/src/components/RichText/engine/safeHref.ts +22 -0
- package/src/components/RichText/engine/toHtml.ts +154 -0
- package/src/components/RichText/engine/toMarkdown.ts +97 -0
- package/src/components/RichText/engine/transforms.ts +434 -0
- package/src/components/RichText/imageMaxHeightStyle.ts +10 -0
- package/src/components/RichText/index.ts +31 -0
- package/src/components/RichTextEditor/RichTextAttachmentConfig.tsx +264 -0
- package/src/components/RichTextEditor/RichTextBlockControls.tsx +365 -0
- package/src/components/RichTextEditor/RichTextBlockMenu.tsx +162 -0
- package/src/components/RichTextEditor/RichTextColorMenu.tsx +115 -0
- package/src/components/RichTextEditor/RichTextEditor.module.scss +298 -0
- package/src/components/RichTextEditor/RichTextEditor.tsx +1910 -0
- package/src/components/RichTextEditor/RichTextImageResizer.tsx +131 -0
- package/src/components/RichTextEditor/RichTextLinkEditor.tsx +151 -0
- package/src/components/RichTextEditor/RichTextMentionMenu.tsx +99 -0
- package/src/components/RichTextEditor/RichTextToolbar.tsx +379 -0
- package/src/components/RichTextEditor/autolinkInput.ts +65 -0
- package/src/components/RichTextEditor/blockDrop.ts +9 -0
- package/src/components/RichTextEditor/blockReflow.ts +62 -0
- package/src/components/RichTextEditor/commands.ts +300 -0
- package/src/components/RichTextEditor/history.ts +93 -0
- package/src/components/RichTextEditor/icons.tsx +152 -0
- package/src/components/RichTextEditor/imageSize.ts +70 -0
- package/src/components/RichTextEditor/index.ts +5 -0
- package/src/components/RichTextEditor/input.ts +209 -0
- package/src/components/RichTextEditor/inputRules.ts +71 -0
- package/src/components/RichTextEditor/links.ts +103 -0
- package/src/components/RichTextEditor/mentionContext.ts +37 -0
- package/src/components/RichTextEditor/mentions.ts +28 -0
- package/src/components/RichTextEditor/preventSelectionLoss.ts +15 -0
- package/src/components/RichTextEditor/selection.ts +415 -0
- package/src/components/RichTextEditor/shortcuts.ts +44 -0
- package/src/components/RichTextEditor/useAnchoredFloating.ts +50 -0
- package/src/components/RichTextEditor/useAttachmentConfig.ts +134 -0
- package/src/components/RichTextEditor/useDismissOnOutsidePointerDown.ts +26 -0
- package/src/components/RichTextEditor/useLinkEditor.ts +107 -0
- package/src/components/RichTextEditor/useMention.ts +226 -0
- package/src/components/RichTextEditor/useOverlayRect.ts +73 -0
- package/src/components/RichTextEditor/useUpload.ts +246 -0
- package/src/components/Screen/Screen.module.scss +46 -0
- package/src/components/Screen/Screen.tokens.scss +20 -0
- package/src/components/Screen/Screen.tsx +97 -0
- package/src/components/Screen/index.ts +2 -0
- package/src/components/ScrollArea/ScrollArea.module.scss +39 -0
- package/src/components/ScrollArea/ScrollArea.tokens.scss +15 -0
- package/src/components/ScrollArea/ScrollArea.tsx +154 -0
- package/src/components/ScrollArea/index.ts +2 -0
- package/src/components/Select/Chip.tsx +45 -0
- package/src/components/Select/Empty.tsx +39 -0
- package/src/components/Select/Error.tsx +51 -0
- package/src/components/Select/HiddenInputs.tsx +44 -0
- package/src/components/Select/Listbox.tsx +557 -0
- package/src/components/Select/Loading.tsx +30 -0
- package/src/components/Select/Select.module.scss +512 -0
- package/src/components/Select/Select.tokens.scss +140 -0
- package/src/components/Select/Select.tsx +685 -0
- package/src/components/Select/Trigger.tsx +952 -0
- package/src/components/Select/context.ts +101 -0
- package/src/components/Select/emptyStateText.ts +19 -0
- package/src/components/Select/index.ts +9 -0
- package/src/components/Select/useSelectState.ts +157 -0
- package/src/components/Select/utils-types.ts +7 -0
- package/src/components/Select/utils.ts +122 -0
- package/src/components/SettingRow/SettingRow.module.scss +166 -0
- package/src/components/SettingRow/SettingRow.tokens.scss +37 -0
- package/src/components/SettingRow/SettingRow.tsx +242 -0
- package/src/components/SettingRow/index.ts +7 -0
- package/src/components/Skeleton/Skeleton.module.scss +55 -0
- package/src/components/Skeleton/Skeleton.tokens.scss +17 -0
- package/src/components/Skeleton/Skeleton.tsx +131 -0
- package/src/components/Skeleton/index.ts +4 -0
- package/src/components/Skeleton/useSkeletonVisibility.ts +95 -0
- package/src/components/Slider/Slider.module.scss +293 -0
- package/src/components/Slider/Slider.tokens.scss +98 -0
- package/src/components/Slider/Slider.tsx +624 -0
- package/src/components/Slider/index.ts +9 -0
- package/src/components/SlotGrid/SlotGrid.module.scss +61 -0
- package/src/components/SlotGrid/SlotGrid.tokens.scss +21 -0
- package/src/components/SlotGrid/SlotGrid.tsx +111 -0
- package/src/components/SlotGrid/index.ts +2 -0
- package/src/components/SocialButton/SocialButton.module.scss +4 -0
- package/src/components/SocialButton/SocialButton.tsx +40 -0
- package/src/components/SocialButton/index.ts +2 -0
- package/src/components/Sortable/Sortable.module.scss +177 -0
- package/src/components/Sortable/Sortable.tokens.scss +27 -0
- package/src/components/Sortable/Sortable.tsx +572 -0
- package/src/components/Sortable/containerAwareCollision.ts +125 -0
- package/src/components/Sortable/index.ts +13 -0
- package/src/components/SortableGroup/SortableGroup.module.scss +23 -0
- package/src/components/SortableGroup/SortableGroup.tsx +315 -0
- package/src/components/SortableGroup/index.ts +4 -0
- package/src/components/SortableGroup/moveSortableItem.ts +39 -0
- package/src/components/Sparkline/Sparkline.module.scss +28 -0
- package/src/components/Sparkline/Sparkline.tokens.scss +7 -0
- package/src/components/Sparkline/Sparkline.tsx +133 -0
- package/src/components/Sparkline/index.ts +2 -0
- package/src/components/Sparkline/sparklineModel.ts +119 -0
- package/src/components/Split/Split.module.scss +158 -0
- package/src/components/Split/Split.tokens.scss +10 -0
- package/src/components/Split/Split.tsx +231 -0
- package/src/components/Split/index.ts +2 -0
- package/src/components/Stack/Stack.module.scss +67 -0
- package/src/components/Stack/Stack.tokens.scss +11 -0
- package/src/components/Stack/Stack.tsx +100 -0
- package/src/components/Stack/index.ts +2 -0
- package/src/components/StagePath/StagePath.module.scss +255 -0
- package/src/components/StagePath/StagePath.tokens.scss +43 -0
- package/src/components/StagePath/StagePath.tsx +176 -0
- package/src/components/StagePath/index.ts +2 -0
- package/src/components/StatGroup/StatGroup.module.scss +6 -0
- package/src/components/StatGroup/StatGroup.tsx +70 -0
- package/src/components/StatGroup/StatGroupContext.ts +10 -0
- package/src/components/StatGroup/StatTile.module.scss +99 -0
- package/src/components/StatGroup/StatTile.tokens.scss +35 -0
- package/src/components/StatGroup/StatTile.tsx +143 -0
- package/src/components/StatGroup/index.ts +4 -0
- package/src/components/Sticky/Sticky.module.scss +98 -0
- package/src/components/Sticky/Sticky.tokens.scss +17 -0
- package/src/components/Sticky/Sticky.tsx +103 -0
- package/src/components/Sticky/index.ts +2 -0
- package/src/components/Switch/Switch.module.scss +182 -0
- package/src/components/Switch/Switch.tokens.scss +59 -0
- package/src/components/Switch/Switch.tsx +214 -0
- package/src/components/Switch/index.ts +2 -0
- package/src/components/Table/Table.module.scss +308 -0
- package/src/components/Table/Table.tokens.scss +79 -0
- package/src/components/Table/Table.tsx +381 -0
- package/src/components/Table/index.ts +15 -0
- package/src/components/TableOfContents/TableOfContents.module.scss +83 -0
- package/src/components/TableOfContents/TableOfContents.tokens.scss +26 -0
- package/src/components/TableOfContents/TableOfContents.tsx +192 -0
- package/src/components/TableOfContents/activeSection.ts +18 -0
- package/src/components/TableOfContents/index.ts +2 -0
- package/src/components/Tabs/Tabs.module.scss +359 -0
- package/src/components/Tabs/Tabs.tokens.scss +50 -0
- package/src/components/Tabs/Tabs.tsx +538 -0
- package/src/components/Tabs/index.ts +2 -0
- package/src/components/Text/Text.module.scss +115 -0
- package/src/components/Text/Text.tokens.scss +55 -0
- package/src/components/Text/Text.tsx +197 -0
- package/src/components/Text/index.ts +2 -0
- package/src/components/Textarea/Textarea.module.scss +94 -0
- package/src/components/Textarea/Textarea.tokens.scss +48 -0
- package/src/components/Textarea/Textarea.tsx +246 -0
- package/src/components/Textarea/index.ts +2 -0
- package/src/components/Thread/Thread.module.scss +161 -0
- package/src/components/Thread/Thread.tokens.scss +32 -0
- package/src/components/Thread/Thread.tsx +176 -0
- package/src/components/Thread/index.ts +2 -0
- package/src/components/TimeField/TimeField.module.scss +232 -0
- package/src/components/TimeField/TimeField.tsx +793 -0
- package/src/components/TimeField/index.ts +2 -0
- package/src/components/Timeline/Timeline.module.scss +58 -0
- package/src/components/Timeline/Timeline.tokens.scss +13 -0
- package/src/components/Timeline/Timeline.tsx +53 -0
- package/src/components/Timeline/index.ts +2 -0
- package/src/components/Title/Title.module.scss +84 -0
- package/src/components/Title/Title.tokens.scss +37 -0
- package/src/components/Title/Title.tsx +150 -0
- package/src/components/Title/index.ts +2 -0
- package/src/components/Toast/Toast.module.scss +299 -0
- package/src/components/Toast/Toast.tokens.scss +65 -0
- package/src/components/Toast/Toast.tsx +122 -0
- package/src/components/Toast/ToastViewport.tsx +166 -0
- package/src/components/Toast/api.ts +175 -0
- package/src/components/Toast/index.ts +5 -0
- package/src/components/Toast/store.ts +133 -0
- package/src/components/Toast/useToastTimer.ts +94 -0
- package/src/components/Tooltip/Tooltip.module.scss +99 -0
- package/src/components/Tooltip/Tooltip.tokens.scss +23 -0
- package/src/components/Tooltip/Tooltip.tsx +341 -0
- package/src/components/Tooltip/index.ts +2 -0
- package/src/components/TopBar/TopBar.module.scss +235 -0
- package/src/components/TopBar/TopBar.tokens.scss +79 -0
- package/src/components/TopBar/TopBar.tsx +87 -0
- package/src/components/TopBar/TopBarEnd.tsx +20 -0
- package/src/components/TopBar/TopBarIconButton.tsx +86 -0
- package/src/components/TopBar/TopBarSearch.tsx +319 -0
- package/src/components/TopBar/TopBarSearchPanel.tsx +268 -0
- package/src/components/TopBar/TopBarStart.tsx +20 -0
- package/src/components/TopBar/index.ts +11 -0
- package/src/components/Tour/Spotlight.tsx +121 -0
- package/src/components/Tour/Tour.module.scss +210 -0
- package/src/components/Tour/Tour.tokens.scss +58 -0
- package/src/components/Tour/Tour.tsx +617 -0
- package/src/components/Tour/index.ts +2 -0
- package/src/components/Tour/useTourTarget.ts +115 -0
- package/src/components/TreeView/TreeView.module.scss +268 -0
- package/src/components/TreeView/TreeView.tokens.scss +36 -0
- package/src/components/TreeView/TreeView.tsx +536 -0
- package/src/components/TreeView/index.ts +3 -0
- package/src/components/TreeView/treeModel.ts +224 -0
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +7 -0
- package/src/components/VisuallyHidden/VisuallyHidden.tsx +29 -0
- package/src/components/VisuallyHidden/index.ts +2 -0
- package/src/components/WidgetPreview/WidgetPreview.module.scss +11 -0
- package/src/components/WidgetPreview/WidgetPreview.tokens.scss +26 -0
- package/src/components/WidgetPreview/WidgetPreview.tsx +36 -0
- package/src/components/WidgetPreview/WidgetShape.module.scss +140 -0
- package/src/components/WidgetPreview/WidgetShape.tsx +159 -0
- package/src/components/WidgetPreview/index.ts +2 -0
- package/src/components/_internal/Trend.tsx +27 -0
- package/src/components/_internal/choiceTile.scss +74 -0
- package/src/components/_internal/collapse.scss +10 -0
- package/src/components/_internal/collapse.ts +58 -0
- package/src/components/_internal/currency.ts +257 -0
- package/src/components/_internal/dragAnnouncements.ts +200 -0
- package/src/components/_internal/fieldWiring.ts +225 -0
- package/src/components/_internal/gridSpan.ts +54 -0
- package/src/components/_internal/isoDay.ts +35 -0
- package/src/components/_internal/letterKey.ts +26 -0
- package/src/components/_internal/overlay/focusRestore.ts +21 -0
- package/src/components/_internal/overlay/index.ts +12 -0
- package/src/components/_internal/overlay/tourHold.ts +23 -0
- package/src/components/_internal/overlay/useFocusTrap.ts +120 -0
- package/src/components/_internal/overlay/useInOverlay.ts +81 -0
- package/src/components/_internal/overlay/useOverlayStack.ts +232 -0
- package/src/components/_internal/overlay/useScrollLock.ts +112 -0
- package/src/components/_internal/refs.ts +48 -0
- package/src/components/_internal/statusColor.ts +26 -0
- package/src/components/_internal/timeUtils.ts +23 -0
- package/src/components/_internal/useAsyncOptions.ts +145 -0
- package/src/components/_internal/useClippedTooltip.ts +50 -0
- package/src/components/_internal/useControllableState.ts +50 -0
- package/src/components.manifest.json +1141 -0
- package/src/hooks/useBelowBreakpoint.ts +58 -0
- package/src/i18n/I18nProvider.tsx +52 -0
- package/src/i18n/LocaleProvider.tsx +17 -0
- package/src/i18n/en.ts +648 -0
- package/src/i18n/format.ts +71 -0
- package/src/i18n/index.ts +13 -0
- package/src/i18n/messages.ts +1275 -0
- package/src/i18n/ru.ts +677 -0
- package/src/i18n/useLocale.ts +19 -0
- package/src/i18n/useTranslation.ts +58 -0
- package/src/index.ts +913 -0
- package/src/palette/index.ts +2 -0
- package/src/palette/palette.ts +108 -0
- package/src/styles/dark.scss +4 -0
- package/src/styles/global.scss +7 -0
- package/src/styles/mixins.scss +143 -0
- package/src/styles/reset.scss +78 -0
- package/src/styles/tokens.scss +18 -0
- package/src/styles/typography.scss +44 -0
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
@use '../../styles/mixins' as *;
|
|
2
|
+
@use './Rail.tokens';
|
|
3
|
+
|
|
4
|
+
// ─── Root ───────────────────────────────────────────────────────────────
|
|
5
|
+
// stylelint-disable property-disallowed-list -- Rail is a layout-owning
|
|
6
|
+
// primitive (Hard rule 4 exception). Like <Modal>, <Drawer>, <Page>, the
|
|
7
|
+
// rail owns its OWN width and height: that IS its job as a left-nav layout
|
|
8
|
+
// container. The consumer chooses where to place the rail by styling its
|
|
9
|
+
// parent; the rail itself is a flex column with animated width.
|
|
10
|
+
.rail {
|
|
11
|
+
width: var(--rail-width-expanded);
|
|
12
|
+
height: 100%;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
|
|
16
|
+
// Only the bottom edge here: the top and inline padding move onto .body and
|
|
17
|
+
// .footerWrap so a pinned <Rail.Header> can sit flush at the top and run
|
|
18
|
+
// edge to edge (#650). The resolved geometry of every other child is
|
|
19
|
+
// unchanged.
|
|
20
|
+
padding-bottom: var(--rail-padding-y);
|
|
21
|
+
background: var(--rail-bg);
|
|
22
|
+
border-right: var(--rail-border-width) solid var(--rail-border-color);
|
|
23
|
+
transition: var(--rail-collapse-transition);
|
|
24
|
+
|
|
25
|
+
// Horizontal-only clip — labels disappear during the width transition.
|
|
26
|
+
// The Y-axis scroll lives on .body, not here.
|
|
27
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- horizontal label clip during animation
|
|
28
|
+
overflow-x: hidden;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Scrollable body — holds Header + Sections + Spacer. The .footerWrap is
|
|
32
|
+
// a separate flex child OUTSIDE the scroll area so it always pins at the
|
|
33
|
+
// bottom of the rail without sticky-positioning quirks. With overflow-y
|
|
34
|
+
// here (not on .rail), items below the visible window scroll within this
|
|
35
|
+
// box; the footer sees no scroll and stays put.
|
|
36
|
+
.body {
|
|
37
|
+
flex: 1 1 auto;
|
|
38
|
+
min-height: 0;
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
gap: var(--rail-section-gap);
|
|
42
|
+
padding: var(--rail-padding-y) var(--rail-padding-x) 0;
|
|
43
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- scroll long item lists
|
|
44
|
+
overflow-y: auto;
|
|
45
|
+
|
|
46
|
+
// Y scrolls, X clips — never the other way. Declaring only `overflow-y`
|
|
47
|
+
// leaves X at `visible`, which the spec then computes to `auto` because the
|
|
48
|
+
// other axis isn't visible: the box becomes horizontally scrollable. That
|
|
49
|
+
// bites in collapsed mode, where the 56px rail leaves a ~39px body, the
|
|
50
|
+
// vertical gutter eats ~10px of it, and the remaining ~29px is narrower than
|
|
51
|
+
// an item row's min-content width — so a horizontal scrollbar appears under
|
|
52
|
+
// the icons. Clipping X is also just correct: the rail is a fixed-width nav
|
|
53
|
+
// and labels are meant to be clipped during the collapse transition (.rail
|
|
54
|
+
// clips X for the same reason).
|
|
55
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- horizontal label clip, never a horizontal scroll
|
|
56
|
+
overflow-x: hidden;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Collapsed = icon-only at 56px. A ~10px scroll gutter is a quarter of the
|
|
60
|
+
// body's width there: it shifts every item pill off-center (8px from the rail's
|
|
61
|
+
// left edge, 19px from the right) and crowds the icon column. Hide the bar in
|
|
62
|
+
// this mode only — wheel, keyboard, and scroll-into-view on focus all still
|
|
63
|
+
// work, and the rail expands to a full-width bar the moment it's opened.
|
|
64
|
+
.collapsed .body {
|
|
65
|
+
scrollbar-width: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.collapsed {
|
|
69
|
+
width: var(--rail-width-collapsed);
|
|
70
|
+
}
|
|
71
|
+
// stylelint-enable property-disallowed-list
|
|
72
|
+
|
|
73
|
+
// ─── Header / Footer / Spacer ───────────────────────────────────────────
|
|
74
|
+
// A leading <Rail.Header> is a direct child of .rail (hoisted out of .body by
|
|
75
|
+
// Rail.tsx), so it stays pinned while the item list scrolls and spans the full
|
|
76
|
+
// rail width — its divider meets the rail's border-right. Sized to
|
|
77
|
+
// --rail-header-height (default --topbar-height) with the brand vertically
|
|
78
|
+
// centred, so the divider continues an adjacent TopBar's bottom border.
|
|
79
|
+
// The defaults are var() fallbacks HERE, not :root values, so they resolve on
|
|
80
|
+
// this element (see Rail.tokens.scss).
|
|
81
|
+
// Padding: the inline inset is the sum of the two an item icon sits behind
|
|
82
|
+
// (--rail-padding-x + --rail-item-padding-x), putting the brand mark on the
|
|
83
|
+
// icon column. The top inset equals the divider width, so the brand centres in
|
|
84
|
+
// the FULL header height (window top edge → bottom of the divider). With a 1px
|
|
85
|
+
// divider the content box above it is an odd 55px, which parks an even-height
|
|
86
|
+
// mark on a half pixel (32px → y 11.5); the engine then snaps the image down
|
|
87
|
+
// and the wordmark's baseline up, and the two visibly misalign by ~1px.
|
|
88
|
+
// Centring in the even 56px puts the mark on a whole pixel.
|
|
89
|
+
.header {
|
|
90
|
+
flex-shrink: 0;
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
min-height: var(--rail-header-height, var(--topbar-height));
|
|
94
|
+
padding: var(
|
|
95
|
+
--rail-header-padding,
|
|
96
|
+
var(--rail-header-divider-width) calc(var(--rail-padding-x) + var(--rail-item-padding-x)) 0
|
|
97
|
+
);
|
|
98
|
+
border-bottom: var(--rail-header-divider-width) solid var(--rail-border-color);
|
|
99
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse-mode clip per spec
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// The consumer's children live in this plain block box, so their own flow is
|
|
104
|
+
// exactly what it was before the header became a centring flex container:
|
|
105
|
+
// inline children (`<img/> Acme`) stay on one line, block children stack.
|
|
106
|
+
// stylelint-disable property-disallowed-list -- the inner box fills the header
|
|
107
|
+
// row expanded and shrinks to its content collapsed so it can be centred.
|
|
108
|
+
.headerInner {
|
|
109
|
+
flex: 1 1 auto;
|
|
110
|
+
min-width: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.collapsed .headerInner {
|
|
114
|
+
flex: none;
|
|
115
|
+
}
|
|
116
|
+
// stylelint-enable property-disallowed-list
|
|
117
|
+
|
|
118
|
+
// Collapsed = a 56px icon-only track. Center the brand there so the mark lands
|
|
119
|
+
// within a pixel or two of the item icons' axis. They are not exactly equal, and
|
|
120
|
+
// the whole difference is the icon overflowing its row: the header's content box
|
|
121
|
+
// and the item's content region share a centre at 27.5, but the 18px icon is
|
|
122
|
+
// flex-shrink: 0 inside a 15px region, so it start-aligns at 20 and runs to 38 —
|
|
123
|
+
// centre 29, i.e. (18 − 15) / 2 = 1.5px right. The rail's 1px border-right only
|
|
124
|
+
// narrows that region (16 → 15) and so deepens the same overflow; it is not a
|
|
125
|
+
// separate contributor.
|
|
126
|
+
// Horizontal centering is scoped to the collapsed state on purpose: expanded,
|
|
127
|
+
// the brand is already aligned by --rail-header-padding's horizontal inset and
|
|
128
|
+
// .headerInner fills the row. Collapsed, .headerInner shrinks to its content
|
|
129
|
+
// and that box is what gets centred. (Vertical centering applies in both states.)
|
|
130
|
+
// The horizontal inset is dropped here because it is an *alignment* value for
|
|
131
|
+
// the expanded rail; at 56px it would leave a 15px content box (56 − 1px
|
|
132
|
+
// border-right − 2×20 header inset) that a 32px mark immediately
|
|
133
|
+
// overflows, and the centering would then be measured against the wrong box.
|
|
134
|
+
.collapsed .header {
|
|
135
|
+
justify-content: center;
|
|
136
|
+
padding-inline: 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// `safe` matters: on a brand too wide for the collapsed track, plain `center`
|
|
140
|
+
// overflows both edges and clips the mark itself — the one part a collapsed rail
|
|
141
|
+
// must keep. `safe` start-aligns in exactly that case, so the mark stays visible
|
|
142
|
+
// and only the trailing wordmark is clipped.
|
|
143
|
+
// It has to be a separate @supports rule rather than a second declaration in the
|
|
144
|
+
// block above. A minifier collapses duplicate properties inside one rule, so the
|
|
145
|
+
// usual two-declaration cascade survives review and then dies in the build —
|
|
146
|
+
// verified against this repo's own production bundle, which kept only
|
|
147
|
+
// `justify-content:safe center`. That would leave engines unable to parse `safe`
|
|
148
|
+
// dropping the declaration entirely and falling to flex-start: the mark
|
|
149
|
+
// un-centered in EVERY collapsed rail, a broader regression than the oversized
|
|
150
|
+
// brand this guards against. Across separate rules there is nothing to merge.
|
|
151
|
+
@supports (justify-content: safe center) {
|
|
152
|
+
.collapsed .header {
|
|
153
|
+
justify-content: safe center;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Wrapper around any <Rail.Footer> children — sits as a flex item BELOW
|
|
158
|
+
// the scrollable .body. Because it's outside the scroll container, it
|
|
159
|
+
// always stays visible at the bottom of the rail without sticky tricks.
|
|
160
|
+
.footerWrap {
|
|
161
|
+
flex-shrink: 0;
|
|
162
|
+
display: flex;
|
|
163
|
+
flex-direction: column;
|
|
164
|
+
gap: var(--space-1);
|
|
165
|
+
|
|
166
|
+
// Small top spacing so the footer area visually separates from the last
|
|
167
|
+
// scrolled item without needing a divider; the inline inset is the rail's.
|
|
168
|
+
padding: var(--space-2) var(--rail-padding-x) 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Direct <Rail.Footer> — visual styling only (no sticky now that the
|
|
172
|
+
// .footerWrap is structurally separated from the scroll body).
|
|
173
|
+
.footer {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
gap: var(--space-1);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.spacer {
|
|
180
|
+
flex: 1 1 auto;
|
|
181
|
+
min-height: 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ─── Collapse toggle ────────────────────────────────────────────────────
|
|
185
|
+
// Renders the toggle as a row matching Rail.Item's geometry so the chevron
|
|
186
|
+
// icon aligns with the column of item icons regardless of collapse state.
|
|
187
|
+
// Icon direction flips via React (ChevronsLeft → ChevronsRight) rather than
|
|
188
|
+
// a CSS transform — rotating the whole button would mirror its content and
|
|
189
|
+
// visually jump the icon from row-start to row-end.
|
|
190
|
+
.collapseToggle {
|
|
191
|
+
// Override the default <Button iconOnly> centering: stretch to fill the
|
|
192
|
+
// footer row and left-align the icon at the same X as item icons.
|
|
193
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- match item row width
|
|
194
|
+
width: 100%;
|
|
195
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- align with item icons
|
|
196
|
+
justify-content: flex-start;
|
|
197
|
+
padding: var(--rail-item-padding-y) var(--rail-item-padding-x);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ─── Section ────────────────────────────────────────────────────────────
|
|
201
|
+
.section {
|
|
202
|
+
display: flex;
|
|
203
|
+
flex-direction: column;
|
|
204
|
+
gap: var(--space-1);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.sectionTitle {
|
|
208
|
+
padding: var(--rail-section-title-padding);
|
|
209
|
+
font-size: var(--rail-section-title-font-size);
|
|
210
|
+
font-weight: var(--rail-section-title-font-weight);
|
|
211
|
+
letter-spacing: var(--rail-section-title-letter-spacing);
|
|
212
|
+
text-transform: uppercase;
|
|
213
|
+
color: var(--rail-section-title-fg);
|
|
214
|
+
opacity: var(--rail-label-opacity-visible);
|
|
215
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- multi-prop shorthand for two transitioned props
|
|
216
|
+
transition:
|
|
217
|
+
opacity var(--transition-fast),
|
|
218
|
+
height var(--transition-fast);
|
|
219
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- nowrap clip during collapse
|
|
220
|
+
white-space: nowrap;
|
|
221
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse clip
|
|
222
|
+
overflow: hidden;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.collapsed .sectionTitle {
|
|
226
|
+
opacity: var(--rail-label-opacity-hidden);
|
|
227
|
+
pointer-events: none;
|
|
228
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse-time height zero is intentional
|
|
229
|
+
height: 0;
|
|
230
|
+
padding: 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ─── Item ───────────────────────────────────────────────────────────────
|
|
234
|
+
.item {
|
|
235
|
+
display: flex;
|
|
236
|
+
align-items: center;
|
|
237
|
+
gap: var(--rail-item-gap);
|
|
238
|
+
padding: var(--rail-item-padding-y) var(--rail-item-padding-x);
|
|
239
|
+
color: var(--rail-item-fg);
|
|
240
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- anchor reset
|
|
241
|
+
text-decoration: none;
|
|
242
|
+
border-radius: var(--rail-item-radius);
|
|
243
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- nowrap clip during collapse
|
|
244
|
+
white-space: nowrap;
|
|
245
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse clip
|
|
246
|
+
overflow: hidden;
|
|
247
|
+
cursor: pointer;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.item:hover {
|
|
251
|
+
background: var(--rail-item-bg-hover);
|
|
252
|
+
|
|
253
|
+
// Some consumer global styles (and the modern reset) add `text-decoration:
|
|
254
|
+
// underline` on `<a>:hover`. The rail's items are nav buttons styled as
|
|
255
|
+
// pill rows — they shouldn't underline like body links.
|
|
256
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- anchor underline reset on hover
|
|
257
|
+
text-decoration: none;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Inset: `.item` renders both in the rail body (an overflow scroller) and,
|
|
261
|
+
// portaled, inside a flyout header — its clipping ancestor is `.body` in the
|
|
262
|
+
// rail, `.flyout` when portaled. Either way an outset ring loses a band.
|
|
263
|
+
.item:focus-visible {
|
|
264
|
+
@include focus-ring($offset: calc(-1 * var(--ring-offset)));
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Active-state styling. Two selectors so we catch both shapes:
|
|
268
|
+
// (1) the `.item` element itself carries `aria-current="page"` (e.g. user
|
|
269
|
+
// passed it directly via the polymorphic `as` element).
|
|
270
|
+
// (2) the `.item` wrapper has a descendant with `aria-current="page"` —
|
|
271
|
+
// this is the NavLink case, where the rendered anchor IS the wrapper
|
|
272
|
+
// and react-router sets aria-current on the rendered element directly.
|
|
273
|
+
.item[aria-current='page'],
|
|
274
|
+
.item:has([aria-current='page']) {
|
|
275
|
+
background: var(--rail-item-bg-active);
|
|
276
|
+
color: var(--rail-item-fg-active);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.itemIcon {
|
|
280
|
+
display: inline-flex;
|
|
281
|
+
align-items: center;
|
|
282
|
+
justify-content: center;
|
|
283
|
+
width: var(--rail-item-icon-size);
|
|
284
|
+
height: var(--rail-item-icon-size);
|
|
285
|
+
flex-shrink: 0;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.itemLabel {
|
|
289
|
+
flex: 1 1 auto;
|
|
290
|
+
min-width: 0;
|
|
291
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse clip
|
|
292
|
+
overflow: hidden;
|
|
293
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- truncation marker
|
|
294
|
+
text-overflow: ellipsis;
|
|
295
|
+
transition: var(--rail-label-transition);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.collapsed .itemLabel,
|
|
299
|
+
.collapsed .itemBadge {
|
|
300
|
+
opacity: var(--rail-label-opacity-hidden);
|
|
301
|
+
pointer-events: none;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.itemBadge {
|
|
305
|
+
flex-shrink: 0;
|
|
306
|
+
font-size: var(--font-size-xs);
|
|
307
|
+
transition: var(--rail-label-transition);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// ─── Group ──────────────────────────────────────────────────────────────
|
|
311
|
+
.group {
|
|
312
|
+
display: flex;
|
|
313
|
+
flex-direction: column;
|
|
314
|
+
gap: var(--space-1);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Same shape as .item but rendered as a <button>, so we reset native button
|
|
318
|
+
// chrome (border, background, font inheritance).
|
|
319
|
+
.groupTrigger {
|
|
320
|
+
display: flex;
|
|
321
|
+
align-items: center;
|
|
322
|
+
gap: var(--rail-item-gap);
|
|
323
|
+
padding: var(--rail-item-padding-y) var(--rail-item-padding-x);
|
|
324
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- button-reset, layout fills the rail width
|
|
325
|
+
width: 100%;
|
|
326
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- native button border reset
|
|
327
|
+
border: 0;
|
|
328
|
+
background: transparent;
|
|
329
|
+
border-radius: var(--rail-item-radius);
|
|
330
|
+
color: var(--rail-item-fg);
|
|
331
|
+
cursor: pointer;
|
|
332
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- inherit page font
|
|
333
|
+
font: inherit;
|
|
334
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- match left-anchored items
|
|
335
|
+
text-align: start;
|
|
336
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- nowrap clip during collapse
|
|
337
|
+
white-space: nowrap;
|
|
338
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse clip
|
|
339
|
+
overflow: hidden;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.groupTrigger:hover {
|
|
343
|
+
background: var(--rail-item-bg-hover);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Inset, like `.item` and `.groupChevronButton`. This used to be a SECOND
|
|
347
|
+
// `.groupTrigger:focus-visible` at +2px which, being later at equal
|
|
348
|
+
// specificity, won — and left the correct -2px rule further up dead while the
|
|
349
|
+
// ring clipped against `.body`'s overflow on both sides. One rule now.
|
|
350
|
+
.groupTrigger:focus-visible {
|
|
351
|
+
@include focus-ring($offset: calc(-1 * var(--ring-offset)));
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Parent-active styling: the group's trigger picks up the active accent
|
|
355
|
+
// when any descendant subitem is current. `:has()` walks the .group block,
|
|
356
|
+
// not the trigger, so both inline subitems and popover subitems light up
|
|
357
|
+
// their parent. On a linkable group the chevron button is the trigger's
|
|
358
|
+
// counterpart — the label link already lights up on its own via
|
|
359
|
+
// `.item[aria-current='page']`.
|
|
360
|
+
.group:has([aria-current='page']) .groupTrigger,
|
|
361
|
+
.group:has([aria-current='page']) .groupChevronButton {
|
|
362
|
+
color: var(--rail-item-fg-active);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// ─── Linkable group row (`<Rail.Group as={NavLink}>`) ───────────────────
|
|
366
|
+
// Two hit-targets on one row: the label link (an `.item`, so it inherits
|
|
367
|
+
// every item visual including the active accent) and the chevron button.
|
|
368
|
+
.groupRow {
|
|
369
|
+
display: flex;
|
|
370
|
+
align-items: center;
|
|
371
|
+
gap: var(--rail-group-row-gap);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.groupRow .item {
|
|
375
|
+
flex: 1 1 auto;
|
|
376
|
+
min-width: 0;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Chevron reset — same button-chrome reset as .groupTrigger, sized down to a
|
|
380
|
+
// square affordance that sits beside the link instead of spanning the row.
|
|
381
|
+
.groupChevronButton {
|
|
382
|
+
display: inline-flex;
|
|
383
|
+
align-items: center;
|
|
384
|
+
justify-content: center;
|
|
385
|
+
flex-shrink: 0;
|
|
386
|
+
padding: var(--rail-group-chevron-padding);
|
|
387
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- native button border reset
|
|
388
|
+
border: 0;
|
|
389
|
+
background: transparent;
|
|
390
|
+
border-radius: var(--rail-item-radius);
|
|
391
|
+
color: var(--rail-item-fg);
|
|
392
|
+
cursor: pointer;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.groupChevronButton:hover {
|
|
396
|
+
background: var(--rail-item-bg-hover);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Inset: the rail body is an overflow scroller, so an outset ring loses its
|
|
400
|
+
// outer bands.
|
|
401
|
+
.groupChevronButton:focus-visible {
|
|
402
|
+
@include focus-ring($offset: calc(-1 * var(--ring-offset)));
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.groupChevron {
|
|
406
|
+
flex-shrink: 0;
|
|
407
|
+
transition: var(--rail-chevron-transition);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.groupChevronOpen {
|
|
411
|
+
transform: rotate(90deg);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.subitems {
|
|
415
|
+
display: flex;
|
|
416
|
+
flex-direction: column;
|
|
417
|
+
gap: var(--space-1);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// The `hidden` HTML attribute is set by RailGroup when the group is closed
|
|
421
|
+
// (and the rail is expanded). The UA stylesheet's `[hidden] { display: none }`
|
|
422
|
+
// loses against `.subitems { display: flex }` because class beats attribute
|
|
423
|
+
// selectors. Re-state it explicitly so the closed state actually hides.
|
|
424
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapse closed state
|
|
425
|
+
.subitems[hidden] {
|
|
426
|
+
display: none;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.subitems .item {
|
|
430
|
+
padding-left: var(--rail-subitem-padding-left);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// When the rail is collapsed, inline subitems disappear (they live in the
|
|
434
|
+
// flyout popover instead).
|
|
435
|
+
.collapsed .subitems {
|
|
436
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- collapsed mode hides inline subitems
|
|
437
|
+
display: none;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// ─── Collapsed-mode flyout (Popover content) ────────────────────────────
|
|
441
|
+
.flyout {
|
|
442
|
+
display: flex;
|
|
443
|
+
flex-direction: column;
|
|
444
|
+
min-width: var(--rail-flyout-min-width);
|
|
445
|
+
|
|
446
|
+
// #273: without an explicit z the body-portaled flyout sat at z-auto —
|
|
447
|
+
// below --z-modal AND below any positive-z page content (e.g. Table's
|
|
448
|
+
// sticky header).
|
|
449
|
+
z-index: var(--rail-flyout-z);
|
|
450
|
+
background: var(--rail-flyout-bg);
|
|
451
|
+
border: var(--rail-flyout-border-width) solid var(--rail-flyout-border-color);
|
|
452
|
+
border-radius: var(--rail-flyout-radius);
|
|
453
|
+
box-shadow: var(--rail-flyout-shadow);
|
|
454
|
+
|
|
455
|
+
// Clip child rounded corners (subitems with hover backgrounds) to the
|
|
456
|
+
// flyout's rounded outer edge.
|
|
457
|
+
overflow: hidden;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.flyout[data-in-overlay] {
|
|
461
|
+
// #272-pattern: inside a Modal/Drawer (or another elevated surface) the
|
|
462
|
+
// base z sits below --z-modal — elevate above the host, below toasts.
|
|
463
|
+
z-index: var(--z-overlay-floating);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// #685: the tour's current target is INSIDE this surface — drop just under the
|
|
467
|
+
// scrim (--z-tour) so only the target is lit, not the whole panel.
|
|
468
|
+
.flyout[data-in-overlay]:has([data-tour-current-target]) {
|
|
469
|
+
z-index: calc(var(--z-tour) - 1);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.flyoutHeader {
|
|
473
|
+
padding: var(--rail-flyout-header-padding);
|
|
474
|
+
font-weight: var(--rail-flyout-header-font-weight);
|
|
475
|
+
color: var(--rail-flyout-header-fg);
|
|
476
|
+
border-bottom: var(--border-width) solid var(--rail-flyout-header-border);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// A linkable group's flyout header renders its label as a link to the group's
|
|
480
|
+
// own destination. The padding moves from the wrapper onto the link so the
|
|
481
|
+
// whole header strip is clickable rather than just the text box.
|
|
482
|
+
.flyoutHeader:has(.flyoutHeaderLink) {
|
|
483
|
+
padding: 0;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.flyoutHeaderLink {
|
|
487
|
+
display: block;
|
|
488
|
+
padding: var(--rail-flyout-header-padding);
|
|
489
|
+
color: inherit;
|
|
490
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- anchor reset
|
|
491
|
+
text-decoration: none;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.flyoutHeaderLink:hover {
|
|
495
|
+
color: var(--rail-item-fg-active);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Inset: the flyout is `createPortal(..., document.body)` (RailGroup.tsx), so
|
|
499
|
+
// this link is not a descendant of `.body` — its clipping ancestor is
|
|
500
|
+
// `.flyout` itself, which sets `overflow: hidden`.
|
|
501
|
+
.flyoutHeaderLink:focus-visible {
|
|
502
|
+
@include focus-ring($offset: calc(-1 * var(--ring-offset)));
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.flyoutBody {
|
|
506
|
+
display: flex;
|
|
507
|
+
flex-direction: column;
|
|
508
|
+
gap: var(--rail-flyout-body-gap);
|
|
509
|
+
padding: var(--rail-flyout-body-padding);
|
|
510
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Rail.tokens.scss — Component-scoped tokens for <Rail>. Each token defaults
|
|
2
|
+
// to the primitive that the SCSS would otherwise use directly. Consumers can
|
|
3
|
+
// rebind any of these at a higher level (`.theme-foo :root { --rail-bg: … }`)
|
|
4
|
+
// to retheme the rail without forking its module.scss.
|
|
5
|
+
@use '../TopBar/TopBar.tokens';
|
|
6
|
+
|
|
7
|
+
:root {
|
|
8
|
+
// Width — the rail switches between two fixed widths via `[data-collapsed]`.
|
|
9
|
+
--rail-width-expanded: 240px;
|
|
10
|
+
--rail-width-collapsed: 56px;
|
|
11
|
+
|
|
12
|
+
// Outer chrome
|
|
13
|
+
--rail-padding-y: var(--space-2);
|
|
14
|
+
--rail-padding-x: var(--space-2);
|
|
15
|
+
--rail-bg: var(--color-bg);
|
|
16
|
+
--rail-border-color: var(--color-border);
|
|
17
|
+
--rail-border-width: var(--border-width);
|
|
18
|
+
|
|
19
|
+
// Header (brand area) — a brand block over a header→nav divider by default, so
|
|
20
|
+
// a DS-only consumer matches the mockup rail brand with no raw CSS. Divider
|
|
21
|
+
// color reuses --rail-border-color. Override either token to `0` for a bare
|
|
22
|
+
// header slot.
|
|
23
|
+
// Height and padding are declared `initial` (guaranteed-invalid) on purpose:
|
|
24
|
+
// their real defaults live as var() fallbacks in .header, so they resolve ON
|
|
25
|
+
// the header element. A default written here would resolve once at :root, and
|
|
26
|
+
// a --topbar-height / --rail-padding-x retuned on a theme wrapper, the
|
|
27
|
+
// AppLayout or the rail itself would never reach the header (#650). Setting
|
|
28
|
+
// either token anywhere above the rail still overrides the fallback.
|
|
29
|
+
// Defaults (see .header in Rail.module.scss):
|
|
30
|
+
// --rail-header-height → var(--topbar-height) — a min-height, so the
|
|
31
|
+
// divider continues an adjacent TopBar's bottom border. `auto` = content
|
|
32
|
+
// height. TopBar's tokens are @used above so it resolves without a TopBar.
|
|
33
|
+
// --rail-header-padding → divider-width top, rail + item inline inset, 0
|
|
34
|
+
// bottom — see the .header comment for why.
|
|
35
|
+
--rail-header-height: initial;
|
|
36
|
+
--rail-header-padding: initial;
|
|
37
|
+
--rail-header-divider-width: var(--border-width);
|
|
38
|
+
|
|
39
|
+
// Section grouping
|
|
40
|
+
--rail-section-gap: var(--space-3);
|
|
41
|
+
--rail-section-title-fg: var(--color-fg-muted);
|
|
42
|
+
--rail-section-title-font-size: var(--font-size-xs);
|
|
43
|
+
--rail-section-title-font-weight: var(--font-weight-semibold);
|
|
44
|
+
--rail-section-title-letter-spacing: var(--letter-spacing-caps);
|
|
45
|
+
--rail-section-title-padding: var(--space-2) var(--space-3);
|
|
46
|
+
|
|
47
|
+
// Item visuals
|
|
48
|
+
--rail-item-padding-x: var(--space-3);
|
|
49
|
+
--rail-item-padding-y: var(--space-2);
|
|
50
|
+
--rail-item-gap: var(--space-2);
|
|
51
|
+
--rail-item-radius: var(--radius-sm);
|
|
52
|
+
--rail-item-bg-hover: var(--color-bg-muted);
|
|
53
|
+
--rail-item-fg: var(--color-fg);
|
|
54
|
+
--rail-item-bg-active: var(--color-accent-subtle-bg);
|
|
55
|
+
--rail-item-fg-active: var(--color-accent);
|
|
56
|
+
--rail-item-icon-size: 18px;
|
|
57
|
+
|
|
58
|
+
// Linkable group row (`<Rail.Group as={NavLink}>`) — the gap between the
|
|
59
|
+
// label link and its sibling chevron button, and the chevron's own padding
|
|
60
|
+
// (which sets its hit-target size around the 14px glyph).
|
|
61
|
+
--rail-group-row-gap: var(--space-1);
|
|
62
|
+
--rail-group-chevron-padding: var(--space-2);
|
|
63
|
+
|
|
64
|
+
// Sub-item indent (extra left padding so subitems visually nest under
|
|
65
|
+
// their group icon). No --space-7 (28px) exists, so we use --space-6 (24px).
|
|
66
|
+
--rail-subitem-padding-left: var(--space-6);
|
|
67
|
+
|
|
68
|
+
// Collapsed flyout (the hover popover surface for collapsed groups)
|
|
69
|
+
--rail-flyout-min-width: 200px;
|
|
70
|
+
--rail-flyout-z: var(--z-popover);
|
|
71
|
+
--rail-flyout-bg: var(--color-bg);
|
|
72
|
+
--rail-flyout-border-color: var(--color-border);
|
|
73
|
+
--rail-flyout-border-width: var(--border-width);
|
|
74
|
+
--rail-flyout-radius: var(--radius-md);
|
|
75
|
+
--rail-flyout-shadow: var(--shadow-md);
|
|
76
|
+
--rail-flyout-header-padding: var(--space-2) var(--space-3);
|
|
77
|
+
--rail-flyout-body-padding: var(--space-2);
|
|
78
|
+
--rail-flyout-body-gap: var(--space-1);
|
|
79
|
+
--rail-flyout-header-fg: var(--color-fg);
|
|
80
|
+
--rail-flyout-header-font-weight: var(--font-weight-semibold);
|
|
81
|
+
--rail-flyout-header-border: var(--color-border);
|
|
82
|
+
|
|
83
|
+
// Label / title fade opacities. Bound to the global --opacity-* scale so
|
|
84
|
+
// a theme can retune visibility crossover without forking this file.
|
|
85
|
+
--rail-label-opacity-visible: var(--opacity-visible);
|
|
86
|
+
--rail-label-opacity-hidden: var(--opacity-hidden);
|
|
87
|
+
|
|
88
|
+
// Transitions
|
|
89
|
+
--rail-collapse-transition: width var(--transition-base);
|
|
90
|
+
--rail-label-transition: opacity var(--transition-fast);
|
|
91
|
+
--rail-chevron-transition: transform var(--transition-fast);
|
|
92
|
+
}
|