@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,102 @@
|
|
|
1
|
+
@use './EmptyState.tokens';
|
|
2
|
+
|
|
3
|
+
.emptyState {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
width: 100%;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.align-center {
|
|
10
|
+
align-items: center;
|
|
11
|
+
text-align: center;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.align-start {
|
|
15
|
+
align-items: flex-start;
|
|
16
|
+
text-align: start;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Size modifiers — gap between stacked children + outer padding.
|
|
20
|
+
.size-sm {
|
|
21
|
+
gap: var(--empty-state-gap-sm);
|
|
22
|
+
padding: var(--empty-state-padding-sm);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.size-md {
|
|
26
|
+
gap: var(--empty-state-gap-md);
|
|
27
|
+
padding: var(--empty-state-padding-md);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.size-lg {
|
|
31
|
+
gap: var(--empty-state-gap-lg);
|
|
32
|
+
padding: var(--empty-state-padding-lg);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Icon — uses --color-fg-muted so it sits visually "behind" the title.
|
|
36
|
+
// Consumer-supplied SVG inherits via currentColor when its `color` prop
|
|
37
|
+
// is omitted (lucide convention).
|
|
38
|
+
.icon {
|
|
39
|
+
display: inline-flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
justify-content: center;
|
|
42
|
+
color: var(--empty-state-icon-fg);
|
|
43
|
+
line-height: var(--empty-state-icon-line-height);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Title — semantic heading. Reset user-agent margins (h1-h6 default to
|
|
47
|
+
// nonzero margin in most browsers) so the gap above is controlled by
|
|
48
|
+
// .emptyState's flex `gap`.
|
|
49
|
+
// stylelint-disable property-disallowed-list -- defensive reset of user-agent <h*> margins; not a layout property on the component box.
|
|
50
|
+
.title {
|
|
51
|
+
margin: 0;
|
|
52
|
+
color: var(--empty-state-title-fg);
|
|
53
|
+
font-weight: var(--empty-state-title-font-weight);
|
|
54
|
+
line-height: var(--empty-state-title-line-height);
|
|
55
|
+
}
|
|
56
|
+
// stylelint-enable property-disallowed-list
|
|
57
|
+
|
|
58
|
+
.size-sm .title {
|
|
59
|
+
font-size: var(--empty-state-title-font-size-sm);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.size-md .title {
|
|
63
|
+
font-size: var(--empty-state-title-font-size-md);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.size-lg .title {
|
|
67
|
+
font-size: var(--empty-state-title-font-size-lg);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// stylelint-disable property-disallowed-list -- `margin: 0` is a defensive
|
|
71
|
+
// reset of the user-agent <p> margin; `max-width: 48ch` is an internal
|
|
72
|
+
// readable-width cap. Neither is a layout property on the component box.
|
|
73
|
+
.description {
|
|
74
|
+
margin: 0;
|
|
75
|
+
color: var(--empty-state-description-fg);
|
|
76
|
+
line-height: var(--empty-state-description-line-height);
|
|
77
|
+
|
|
78
|
+
// Cap the readable line length. Most visible on `size-lg` (the only
|
|
79
|
+
// size that lives inside wide containers), but applied unconditionally
|
|
80
|
+
// so two-paragraph descriptions stay scannable at any size.
|
|
81
|
+
max-width: 48ch;
|
|
82
|
+
}
|
|
83
|
+
// stylelint-enable property-disallowed-list
|
|
84
|
+
|
|
85
|
+
.size-sm .description {
|
|
86
|
+
font-size: var(--empty-state-description-font-size-sm);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.size-md .description,
|
|
90
|
+
.size-lg .description {
|
|
91
|
+
font-size: var(--empty-state-description-font-size-md);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Shrink-to-fit wrapper around the consumer's actions slot. `inline-flex`
|
|
95
|
+
// keeps a lone `<Button>` from stretching to fill the column when
|
|
96
|
+
// `align="start"` is set; vertical-align ensures consistent baseline
|
|
97
|
+
// against any sibling text. The spacing above comes from `.emptyState`'s
|
|
98
|
+
// `gap`, not from any padding here.
|
|
99
|
+
.actions {
|
|
100
|
+
display: inline-flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// EmptyState.tokens.scss — Component-scoped tokens for <EmptyState>. Covers per-size gap + padding, icon/title/description colors + sizes, and title/description line-heights. The internal 48ch description max-width literal is intentional and stays a raw value.
|
|
2
|
+
:root {
|
|
3
|
+
// Size — outer gap + padding
|
|
4
|
+
--empty-state-gap-sm: var(--space-2);
|
|
5
|
+
--empty-state-gap-md: var(--space-3);
|
|
6
|
+
--empty-state-gap-lg: var(--space-4);
|
|
7
|
+
--empty-state-padding-sm: var(--space-3);
|
|
8
|
+
--empty-state-padding-md: var(--space-6);
|
|
9
|
+
--empty-state-padding-lg: var(--space-10);
|
|
10
|
+
|
|
11
|
+
// Icon
|
|
12
|
+
--empty-state-icon-fg: var(--color-fg-muted);
|
|
13
|
+
--empty-state-icon-line-height: var(--line-height-none);
|
|
14
|
+
|
|
15
|
+
// Title
|
|
16
|
+
--empty-state-title-fg: var(--color-fg);
|
|
17
|
+
--empty-state-title-font-weight: var(--font-weight-semibold);
|
|
18
|
+
--empty-state-title-line-height: var(--line-height-tight);
|
|
19
|
+
--empty-state-title-font-size-sm: var(--font-size-sm);
|
|
20
|
+
--empty-state-title-font-size-md: var(--font-size-md);
|
|
21
|
+
--empty-state-title-font-size-lg: var(--font-size-xl);
|
|
22
|
+
|
|
23
|
+
// Description
|
|
24
|
+
--empty-state-description-fg: var(--color-fg-subtle);
|
|
25
|
+
--empty-state-description-line-height: var(--line-height-normal);
|
|
26
|
+
--empty-state-description-font-size-sm: var(--font-size-sm);
|
|
27
|
+
--empty-state-description-font-size-md: var(--font-size-md);
|
|
28
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { createElement, forwardRef, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from './EmptyState.module.scss';
|
|
4
|
+
|
|
5
|
+
/** Visual size. Tracks typography + spacing scale. */
|
|
6
|
+
export type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
7
|
+
|
|
8
|
+
/** Horizontal alignment of the stacked content. */
|
|
9
|
+
export type EmptyStateAlign = 'center' | 'start';
|
|
10
|
+
|
|
11
|
+
/** Valid `<h*>` heading levels. */
|
|
12
|
+
export type EmptyStateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
13
|
+
|
|
14
|
+
export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
15
|
+
/**
|
|
16
|
+
* Icon rendered above the title. Pass a lucide icon, custom SVG, or any
|
|
17
|
+
* ReactNode. Sized by the consumer — recommended: sm=24, md=32, lg=48.
|
|
18
|
+
* Omit for an icon-less empty state.
|
|
19
|
+
*/
|
|
20
|
+
icon?: ReactNode;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Required title. Rendered as a semantic heading (default `<h3>`).
|
|
24
|
+
* Accepts ReactNode so inline emphasis works
|
|
25
|
+
* (e.g., `<>Found <strong>0</strong> results</>`). Keep it short and
|
|
26
|
+
* announceable — AT users hear it via heading navigation.
|
|
27
|
+
*/
|
|
28
|
+
title: ReactNode;
|
|
29
|
+
|
|
30
|
+
/** Optional description rendered below the title. */
|
|
31
|
+
description?: ReactNode;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional action(s) rendered below the description. Typically a
|
|
35
|
+
* `<Button>` or a `<Cluster gap="sm">` of buttons.
|
|
36
|
+
*/
|
|
37
|
+
actions?: ReactNode;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Visual size. Defaults to `'md'`.
|
|
41
|
+
* - `'sm'` — compact for inline / popover use (empty Select results,
|
|
42
|
+
* empty filter chips). Icon target 24px, font-size-sm title.
|
|
43
|
+
* - `'md'` — default for cards / sections (DataTable empty row, inbox
|
|
44
|
+
* empty). Icon target 32px, font-size-md title.
|
|
45
|
+
* - `'lg'` — hero / full-page empty states. Icon target 48px,
|
|
46
|
+
* font-size-xl title.
|
|
47
|
+
*/
|
|
48
|
+
size?: EmptyStateSize;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Horizontal alignment of the stacked content. Defaults to `'center'`.
|
|
52
|
+
* Use `'start'` when the empty state sits in a tight column where
|
|
53
|
+
* centering would look stranded.
|
|
54
|
+
*/
|
|
55
|
+
align?: EmptyStateAlign;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Heading level for the `title`. Defaults to `3` (renders `<h3>`).
|
|
59
|
+
* Set higher (4–6) when the empty state lives deep inside the page's
|
|
60
|
+
* heading hierarchy. Set to `2` when the empty state IS the page's
|
|
61
|
+
* primary content. Values outside `1–6` clamp to `3`.
|
|
62
|
+
*/
|
|
63
|
+
headingLevel?: EmptyStateHeadingLevel;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function clampHeading(level: EmptyStateHeadingLevel | undefined): EmptyStateHeadingLevel {
|
|
67
|
+
if (level === undefined) return 3;
|
|
68
|
+
if (level < 1 || level > 6) return 3;
|
|
69
|
+
return level;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Empty-state container: optional icon, required title heading, optional description and actions, stacked vertically.
|
|
74
|
+
* @see docs/components/EmptyState.md
|
|
75
|
+
*/
|
|
76
|
+
export const EmptyState = forwardRef<HTMLElement, EmptyStateProps>(function EmptyState(
|
|
77
|
+
{
|
|
78
|
+
icon,
|
|
79
|
+
title,
|
|
80
|
+
description,
|
|
81
|
+
actions,
|
|
82
|
+
size = 'md',
|
|
83
|
+
align = 'center',
|
|
84
|
+
headingLevel,
|
|
85
|
+
className,
|
|
86
|
+
...props
|
|
87
|
+
},
|
|
88
|
+
ref,
|
|
89
|
+
) {
|
|
90
|
+
const headingTag = `h${clampHeading(headingLevel)}` as const;
|
|
91
|
+
|
|
92
|
+
// {...props} last so consumer overrides win (Pattern A). className is
|
|
93
|
+
// destructured above and re-injected into clsx() so consumer-supplied
|
|
94
|
+
// class names compose with the component's, rather than replacing them.
|
|
95
|
+
return (
|
|
96
|
+
<section
|
|
97
|
+
ref={ref}
|
|
98
|
+
className={clsx(
|
|
99
|
+
styles.emptyState,
|
|
100
|
+
styles[`size-${size}`],
|
|
101
|
+
styles[`align-${align}`],
|
|
102
|
+
className,
|
|
103
|
+
)}
|
|
104
|
+
{...props}
|
|
105
|
+
>
|
|
106
|
+
{icon != null && <span className={styles.icon}>{icon}</span>}
|
|
107
|
+
{createElement(headingTag, { className: styles.title }, title)}
|
|
108
|
+
{description != null && <p className={styles.description}>{description}</p>}
|
|
109
|
+
{actions != null && <div className={styles.actions}>{actions}</div>}
|
|
110
|
+
</section>
|
|
111
|
+
);
|
|
112
|
+
});
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
@use '../../styles/mixins' as *;
|
|
2
|
+
@use './EntityChip.tokens';
|
|
3
|
+
|
|
4
|
+
.chip {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
align-items: baseline;
|
|
7
|
+
gap: var(--entity-chip-gap);
|
|
8
|
+
|
|
9
|
+
// Equal top/bottom values include the font-metric inset documented in
|
|
10
|
+
// EntityChip.tokens.scss.
|
|
11
|
+
padding: var(--entity-chip-padding-top) var(--entity-chip-padding-x)
|
|
12
|
+
var(--entity-chip-padding-bottom);
|
|
13
|
+
border: none;
|
|
14
|
+
border-radius: var(--entity-chip-radius);
|
|
15
|
+
background: var(--entity-chip-bg);
|
|
16
|
+
color: var(--entity-chip-fg);
|
|
17
|
+
|
|
18
|
+
// Font-size deliberately inherits (no override): the chip text runs at the
|
|
19
|
+
// surrounding text's size, which — with the tight line-height below — makes
|
|
20
|
+
// the padded box bracket the local glyph band symmetrically in any context.
|
|
21
|
+
// A fixed smaller size made the box hang ~4px below 14px body text even
|
|
22
|
+
// with perfect baseline alignment.
|
|
23
|
+
font: inherit;
|
|
24
|
+
line-height: var(--entity-chip-line-height);
|
|
25
|
+
|
|
26
|
+
// Consumer apps ship global link rules (`a:hover { text-decoration: … }`)
|
|
27
|
+
// that out-specify anything the chip can win by selectors alone — the chip
|
|
28
|
+
// must NEVER underline, so assert it unconditionally.
|
|
29
|
+
// stylelint-disable-next-line declaration-no-important -- global consumer link rules out-specify the chip; precedent: Sortable's reduced-motion !important
|
|
30
|
+
text-decoration: none !important;
|
|
31
|
+
vertical-align: baseline;
|
|
32
|
+
|
|
33
|
+
// <a>/<button> renders are the interactive variants and get hover/focus
|
|
34
|
+
// chrome even when loading/unavailable (those are purely visual states on a
|
|
35
|
+
// live link) — only a target-less <span> chip has none.
|
|
36
|
+
&:is(a, button) {
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
|
|
39
|
+
// Hover affordance: bg deepens a step + a brightness dip. Never an
|
|
40
|
+
// underline, never a weight change (a fake-bold text-stroke used to live
|
|
41
|
+
// here — dropped, see #345).
|
|
42
|
+
&:hover {
|
|
43
|
+
background: var(--entity-chip-bg-hover);
|
|
44
|
+
filter: brightness(0.96);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&:focus-visible {
|
|
48
|
+
@include focus-ring;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.icon {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
// stylelint-disable-next-line property-disallowed-list -- internal child of the chip's OWN flex row, opting the icon glyph back to vertical centering while the chip itself aligns on text baseline
|
|
57
|
+
align-self: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.prefix {
|
|
61
|
+
color: var(--entity-chip-prefix-fg);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.label {
|
|
65
|
+
font-weight: var(--entity-chip-label-font-weight);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// `labelWeight="semibold"` (#590): a modifier class on BOTH the prefix and
|
|
69
|
+
// the label (the task-chip design wants key + title both heavier). Compound
|
|
70
|
+
// selectors so the class only takes effect together with the part's own
|
|
71
|
+
// class; the prefix keeps its muted color, only the weight changes.
|
|
72
|
+
.prefix.semibold,
|
|
73
|
+
.label.semibold {
|
|
74
|
+
font-weight: var(--entity-chip-label-font-weight-semibold);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Text that belongs in the accessible name but not on screen. Three jobs now:
|
|
78
|
+
// a loading chip's label (so it isn't announced as just "…"), its loading state
|
|
79
|
+
// word, and an unavailable chip's state word. Both state words exist because
|
|
80
|
+
// the ARIA attribute alone reaches nobody — `aria-disabled` carries no meaning
|
|
81
|
+
// on a non-widget role, and `busy` is not conveyed on a non-live element.
|
|
82
|
+
.hiddenLabel {
|
|
83
|
+
@include visually-hidden;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.ellipsis {
|
|
87
|
+
color: var(--entity-chip-prefix-fg);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.status {
|
|
91
|
+
color: var(--entity-chip-status-fg, currentColor);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Trailing adornments (priority icon, badge): centered on the line like the
|
|
95
|
+
// icon, never shrunk.
|
|
96
|
+
.trailing {
|
|
97
|
+
display: inline-flex;
|
|
98
|
+
flex-shrink: 0;
|
|
99
|
+
align-items: center;
|
|
100
|
+
// stylelint-disable-next-line property-disallowed-list -- internal child of the chip's OWN flex row, centering adornments while the chip itself aligns on text baseline
|
|
101
|
+
align-self: center;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Single-line list-row mode (#565): capped at the container, only the label
|
|
105
|
+
// ellipsizes; every other part keeps its size.
|
|
106
|
+
.truncate {
|
|
107
|
+
max-width: 100%;
|
|
108
|
+
min-width: 0;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
|
|
111
|
+
// Single-line, so centring is safe and keeps the text centred when a
|
|
112
|
+
// trailing adornment is taller than the line. Non-truncate chips keep
|
|
113
|
+
// baseline because their label can wrap.
|
|
114
|
+
align-items: center;
|
|
115
|
+
|
|
116
|
+
> * {
|
|
117
|
+
flex-shrink: 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
> .label {
|
|
121
|
+
flex-shrink: 1;
|
|
122
|
+
min-width: 0;
|
|
123
|
+
|
|
124
|
+
// Clip the inline axis only: the block axis would also be clipped by
|
|
125
|
+
// the hidden keyword, cutting descenders at line-height 1 (#678).
|
|
126
|
+
overflow-x: clip;
|
|
127
|
+
overflow-y: visible;
|
|
128
|
+
text-overflow: ellipsis;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Colored via --entity-chip-status-fg (set on the chip root when `status` is
|
|
133
|
+
// present, see EntityChip.tsx) so the dot reads as one unit with the status
|
|
134
|
+
// label instead of a neutral separator.
|
|
135
|
+
.dot {
|
|
136
|
+
flex-shrink: 0;
|
|
137
|
+
width: var(--entity-chip-dot-size);
|
|
138
|
+
height: var(--entity-chip-dot-size);
|
|
139
|
+
border-radius: var(--radius-full);
|
|
140
|
+
background: currentcolor;
|
|
141
|
+
color: var(--entity-chip-status-fg, currentColor);
|
|
142
|
+
// stylelint-disable-next-line property-disallowed-list -- internal child of the chip's OWN flex row, centering the circle on the line while the chip itself aligns on text baseline
|
|
143
|
+
align-self: center;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Specificity 0,2,0 (.unavailable .status) beats the plain .status rule
|
|
147
|
+
// (0,1,0) so the unavailable muted color wins over any resolved status color.
|
|
148
|
+
.unavailable {
|
|
149
|
+
color: var(--entity-chip-unavailable-fg);
|
|
150
|
+
|
|
151
|
+
.status,
|
|
152
|
+
.dot {
|
|
153
|
+
color: var(--entity-chip-unavailable-fg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Segmented chip (#582): the root is only the rounded clip; the core carries
|
|
158
|
+
// today's fill and padding, and palette segments butt against it. One line:
|
|
159
|
+
// only the core's label gives way.
|
|
160
|
+
.chip.segmented {
|
|
161
|
+
align-items: baseline;
|
|
162
|
+
gap: 0;
|
|
163
|
+
max-width: 100%;
|
|
164
|
+
min-width: 0;
|
|
165
|
+
padding: 0;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
background: none;
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
|
|
170
|
+
&:is(a, button):hover {
|
|
171
|
+
background: none;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.core {
|
|
176
|
+
display: inline-flex;
|
|
177
|
+
align-items: baseline;
|
|
178
|
+
gap: var(--entity-chip-gap);
|
|
179
|
+
padding: var(--entity-chip-padding-top) var(--entity-chip-padding-x)
|
|
180
|
+
var(--entity-chip-padding-bottom);
|
|
181
|
+
background: var(--entity-chip-bg);
|
|
182
|
+
|
|
183
|
+
> * {
|
|
184
|
+
flex-shrink: 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
> .label {
|
|
188
|
+
flex-shrink: 1;
|
|
189
|
+
min-width: 0;
|
|
190
|
+
overflow-x: clip;
|
|
191
|
+
overflow-y: visible;
|
|
192
|
+
text-overflow: ellipsis;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// `.core`'s own shrink/min-width, scoped under `.segmented` so the selector
|
|
197
|
+
// (0,2,0) out-specifies `.truncate > *` (0,1,0, the `*` contributes nothing)
|
|
198
|
+
// regardless of which rule comes later in the stylesheet — `.core` is always
|
|
199
|
+
// a direct child of the `.segmented` root, so this changes nothing visually.
|
|
200
|
+
.segmented > .core {
|
|
201
|
+
flex-shrink: 1;
|
|
202
|
+
min-width: 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.segmented:is(a, button):hover .core {
|
|
206
|
+
background: var(--entity-chip-bg-hover);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.segment {
|
|
210
|
+
display: inline-flex;
|
|
211
|
+
flex-shrink: 0;
|
|
212
|
+
align-items: center;
|
|
213
|
+
// stylelint-disable-next-line property-disallowed-list -- internal child of the chip's OWN flex row: the root aligns on the core's text baseline, segments fill its height
|
|
214
|
+
align-self: stretch;
|
|
215
|
+
padding-top: var(--entity-chip-padding-top);
|
|
216
|
+
padding-bottom: var(--entity-chip-padding-bottom);
|
|
217
|
+
background: var(--entity-chip-segment-bg, transparent);
|
|
218
|
+
color: var(--entity-chip-segment-fg, currentColor);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.segmentIcon {
|
|
222
|
+
padding-inline: var(--entity-chip-segment-padding-x-icon);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// #591: the outer box keeps the chip's OWN font-size and line-height (and the
|
|
226
|
+
// same vertical padding as `.core`, from `.segment` above) so its box and its
|
|
227
|
+
// first-line baseline match the core exactly. `display: block` drops the
|
|
228
|
+
// `.segment` base rule's centring flex layout in favor of a normal block
|
|
229
|
+
// formatting context, so the line box's strut — not `align-items: center` —
|
|
230
|
+
// sets the baseline; `align-self: stretch` (inherited from `.segment`) still
|
|
231
|
+
// spans the row for the fill. The smaller text size lives on the inner
|
|
232
|
+
// `.segmentTextValue` span instead (moved off this element), which then sits
|
|
233
|
+
// on that baseline via ordinary inline layout.
|
|
234
|
+
.segmentText {
|
|
235
|
+
display: block;
|
|
236
|
+
padding-inline: var(--entity-chip-segment-padding-x-text);
|
|
237
|
+
line-height: var(--entity-chip-line-height);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.segmentTextValue {
|
|
241
|
+
font-size: var(--entity-chip-segment-text-size);
|
|
242
|
+
font-weight: var(--entity-chip-label-font-weight);
|
|
243
|
+
|
|
244
|
+
// Contributes no height of its own: `line-height: 1` resolved against this
|
|
245
|
+
// smaller font sticks out of the chip's line box when baseline-aligned
|
|
246
|
+
// (measured: the chip grew 20.5px → 21.09px). At 0 the segment's strut
|
|
247
|
+
// alone sets the line — the same box as the core — and the glyphs still
|
|
248
|
+
// sit on its baseline (#591, measured equal in Chromium).
|
|
249
|
+
line-height: 0;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.segmentGlyph {
|
|
253
|
+
display: inline-flex;
|
|
254
|
+
|
|
255
|
+
> svg {
|
|
256
|
+
width: var(--entity-chip-segment-glyph-size);
|
|
257
|
+
height: var(--entity-chip-segment-glyph-size);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// `labelMaxWidth` (#582): the label alone is capped (max-width set inline in
|
|
262
|
+
// `ch`) and ellipsizes on one line — also on a chip that otherwise wraps.
|
|
263
|
+
.capped {
|
|
264
|
+
overflow-x: clip;
|
|
265
|
+
overflow-y: visible;
|
|
266
|
+
text-overflow: ellipsis;
|
|
267
|
+
white-space: nowrap;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// `labelEllipsis="start"` (#593): overflow — and the ellipsis — falls at the
|
|
271
|
+
// label's start, so its tail stays visible. The inner `dir="ltr"` run in the
|
|
272
|
+
// markup keeps the text order.
|
|
273
|
+
.ellipsisStart {
|
|
274
|
+
direction: rtl;
|
|
275
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// EntityChip.tokens.scss — Component-scoped tokens for <EntityChip>. Chip
|
|
2
|
+
// chrome matches the RichText @mention fill exactly (--color-accent-bg-subtle
|
|
3
|
+
// / --color-accent, see _prose.scss) so a chip and a rendered mention read as
|
|
4
|
+
// the same visual object in both themes — no per-theme tuning needed since
|
|
5
|
+
// the accent tokens are already theme-aware.
|
|
6
|
+
:root {
|
|
7
|
+
--entity-chip-bg: var(--color-accent-bg-subtle);
|
|
8
|
+
--entity-chip-bg-hover: var(--color-accent-bg-subtle);
|
|
9
|
+
--entity-chip-fg: var(--color-accent);
|
|
10
|
+
|
|
11
|
+
// Matches the RichText @mention's own font-weight (_prose.scss) — part of
|
|
12
|
+
// the same "read as one visual object" goal as the bg/fg tokens above.
|
|
13
|
+
--entity-chip-label-font-weight: var(--font-weight-medium);
|
|
14
|
+
|
|
15
|
+
// `labelWeight="semibold"` (#590) — an explicit heavier weight for designs
|
|
16
|
+
// that want it (e.g. the segmented task chip's key + title). Default stays
|
|
17
|
+
// `medium` above, matching a plain chip and the RichText @mention.
|
|
18
|
+
--entity-chip-label-font-weight-semibold: var(--font-weight-semibold);
|
|
19
|
+
--entity-chip-prefix-fg: var(--color-fg-muted);
|
|
20
|
+
--entity-chip-radius: var(--radius-sm);
|
|
21
|
+
--entity-chip-gap: var(--space-1);
|
|
22
|
+
--entity-chip-padding-y: var(--space-05);
|
|
23
|
+
--entity-chip-padding-x: var(--space-2);
|
|
24
|
+
|
|
25
|
+
// At line-height:1 the browser synthesizes the line box's ascent/descent
|
|
26
|
+
// split from the font's own metrics, not from the rendered glyphs — most
|
|
27
|
+
// sans-serif fonts reserve far more headroom above the baseline (room for
|
|
28
|
+
// tall accents) than the descent metric leaves below it (barely enough for
|
|
29
|
+
// 'y'/'p'/'g'). With equal padding-top/padding-bottom that metric skew
|
|
30
|
+
// reads as extra padding on top (see #357). em-relative because the skew
|
|
31
|
+
// scales with the inherited font-size, not a fixed px amount — measured ~3px
|
|
32
|
+
// top/1px bottom ink gap at 14px body size and ~5px/1px at 24px heading
|
|
33
|
+
// size before this correction. Use the corrected inset equally on both
|
|
34
|
+
// edges so the chip's computed top and bottom padding match exactly.
|
|
35
|
+
--entity-chip-padding-y-shift: 0.09em;
|
|
36
|
+
--entity-chip-padding-top: calc(
|
|
37
|
+
var(--entity-chip-padding-y) + var(--entity-chip-padding-y-shift)
|
|
38
|
+
);
|
|
39
|
+
--entity-chip-padding-bottom: calc(
|
|
40
|
+
var(--entity-chip-padding-y) + var(--entity-chip-padding-y-shift)
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// No font-size token: the chip inherits the surrounding text's size by
|
|
44
|
+
// design (see EntityChip.module.scss) — a tight line-height keeps the
|
|
45
|
+
// padded box hugging the glyph band instead of hanging below the baseline.
|
|
46
|
+
--entity-chip-line-height: var(--line-height-none);
|
|
47
|
+
|
|
48
|
+
--entity-chip-unavailable-fg: var(--color-fg-muted);
|
|
49
|
+
|
|
50
|
+
// Status separator dot — DIAMETER of the solid circle rendered between the
|
|
51
|
+
// name and the status (its own flex item, so the chip's gap spaces it
|
|
52
|
+
// symmetrically). A fixed size on purpose: it must not scale with the
|
|
53
|
+
// inherited font and inflate the line box.
|
|
54
|
+
--entity-chip-dot-size: var(--space-1);
|
|
55
|
+
|
|
56
|
+
// Segments (#582): palette-coloured parts butted against the core. The
|
|
57
|
+
// fill/fg come from the segment's PaletteColor at runtime
|
|
58
|
+
// (--entity-chip-segment-bg/-fg), so they're not declared here.
|
|
59
|
+
--entity-chip-segment-padding-x-icon: var(--space-1);
|
|
60
|
+
--entity-chip-segment-padding-x-text: var(--space-2);
|
|
61
|
+
|
|
62
|
+
// Relative to the inherited text size, like the chip itself; a segment's
|
|
63
|
+
// `size` prop overrides them in em.
|
|
64
|
+
--entity-chip-segment-glyph-size: 0.85em;
|
|
65
|
+
--entity-chip-segment-text-size: 0.9em;
|
|
66
|
+
}
|