@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,145 @@
|
|
|
1
|
+
@use './Cluster.tokens';
|
|
2
|
+
|
|
3
|
+
.cluster {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: row;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Opt-in, via the `minWidth0` prop. As a flex or grid ITEM a Cluster keeps the
|
|
9
|
+
// default `min-width: auto`, which floors it at its content's min-content size —
|
|
10
|
+
// so a `<Text truncate>` inside never gets the chance to ellipsize and a clipping
|
|
11
|
+
// ancestor hard-cuts it instead (issue #475).
|
|
12
|
+
// This only means anything while `.cluster`'s overflow is non-scrollable: per CSS
|
|
13
|
+
// Flexbox §4.5 a flex item keeps its automatic minimum size until its computed
|
|
14
|
+
// overflow becomes scrollable. Giving `.cluster` `overflow: hidden`/`auto`/`scroll`
|
|
15
|
+
// would therefore remove the floor by itself and make this prop dead code — but
|
|
16
|
+
// `overflow: clip` would NOT, because clip is non-scrollable and still floors.
|
|
17
|
+
// Measured; do not assume any overflow value will do.
|
|
18
|
+
// Deliberately NOT on the base `.cluster` class: that would let every Cluster in the
|
|
19
|
+
// codebase shrink below its content, changing layout for existing consumers. It
|
|
20
|
+
// was tried and reverted. Measured on the playground Tenants mockup, whose inner
|
|
21
|
+
// filter Cluster sits in a between-justified `wrap={false}` row inside a Card
|
|
22
|
+
// (Card defaults to `overflow: hidden`): forcing `min-width: 0` shrinks that inner
|
|
23
|
+
// Cluster by ~3px at 1920 rising to ~46px at 820, and the Card then clips up to
|
|
24
|
+
// 34px off the trailing button. The buttons themselves never shrink — they
|
|
25
|
+
// overflow the shrunken container and the Card cuts them.
|
|
26
|
+
.minWidth0 {
|
|
27
|
+
min-width: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Opt-in, via `stretchWrapped` (#668). flex-grow distributes free space PER
|
|
31
|
+
// FLEX LINE. On a line shared by several children, the `::before` spacer
|
|
32
|
+
// (grow 999, basis 0) soaks up the slack, so the content-sized children
|
|
33
|
+
// get a negligible share (grow 1 next to 999: at most 1px per 1000px of
|
|
34
|
+
// slack); the spacer sits between the first child (`order: -1`, ahead of it)
|
|
35
|
+
// and the rest, pushing them to the end. A non-first child alone on a wrapped
|
|
36
|
+
// line has no spacer on that line, so its grow 1 takes the whole line.
|
|
37
|
+
// Line breaking still counts the gap before the spacer, so a negative start
|
|
38
|
+
// margin of one gap cancels it: the spacer adds no width, the switch happens
|
|
39
|
+
// exactly when the content stops fitting, and a full-width first child keeps
|
|
40
|
+
// the spacer on its own line instead of pushing it onto the second.
|
|
41
|
+
// Child rules sit in `:where()` (zero specificity) so a child's own `flex`
|
|
42
|
+
// or `max-width` class wins for that child.
|
|
43
|
+
.stretchWrapped {
|
|
44
|
+
&::before {
|
|
45
|
+
content: '';
|
|
46
|
+
flex: 999 1 0;
|
|
47
|
+
/* stylelint-disable-next-line property-disallowed-list -- cancels the gap before the invisible spacer so it adds no width to line breaking; not layout on the component boundary. */
|
|
48
|
+
margin-inline-start: calc(-1 * var(--cluster-gap-current, 0px));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:where(.stretchWrapped > :first-child) {
|
|
53
|
+
order: -1;
|
|
54
|
+
max-width: 100%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
:where(.stretchWrapped > :not(:first-child)) {
|
|
58
|
+
flex: 1 1 auto;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Opt-in, via `maxWidthFull` (#571): an inline (`as="span"`) cluster sizes to
|
|
62
|
+
// its content, and with a nowrap truncating child that content is the full
|
|
63
|
+
// title — so it overflows the line instead of ellipsizing at its edge.
|
|
64
|
+
.maxWidthFull {
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// as="span": phrasing-content contexts (inside <button>, <a>, <label>) need
|
|
69
|
+
// an inline-level box — a block flex container would break inline flow and
|
|
70
|
+
// is invalid HTML there; this is the reason the span variant exists.
|
|
71
|
+
.inline {
|
|
72
|
+
display: inline-flex;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.wrap {
|
|
76
|
+
flex-wrap: wrap;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.gapXs {
|
|
80
|
+
--cluster-gap-current: var(--cluster-gap-xs);
|
|
81
|
+
|
|
82
|
+
gap: var(--cluster-gap-current);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.gapSm {
|
|
86
|
+
--cluster-gap-current: var(--cluster-gap-sm);
|
|
87
|
+
|
|
88
|
+
gap: var(--cluster-gap-current);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.gapMd {
|
|
92
|
+
--cluster-gap-current: var(--cluster-gap-md);
|
|
93
|
+
|
|
94
|
+
gap: var(--cluster-gap-current);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.gapLg {
|
|
98
|
+
--cluster-gap-current: var(--cluster-gap-lg);
|
|
99
|
+
|
|
100
|
+
gap: var(--cluster-gap-current);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.gapXl {
|
|
104
|
+
--cluster-gap-current: var(--cluster-gap-xl);
|
|
105
|
+
|
|
106
|
+
gap: var(--cluster-gap-current);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.gap2xl {
|
|
110
|
+
--cluster-gap-current: var(--cluster-gap-2xl);
|
|
111
|
+
|
|
112
|
+
gap: var(--cluster-gap-current);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.justifyStart {
|
|
116
|
+
justify-content: flex-start;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.justifyCenter {
|
|
120
|
+
justify-content: center;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.justifyEnd {
|
|
124
|
+
justify-content: flex-end;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.justifyBetween {
|
|
128
|
+
justify-content: space-between;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.alignStart {
|
|
132
|
+
align-items: flex-start;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.alignCenter {
|
|
136
|
+
align-items: center;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.alignEnd {
|
|
140
|
+
align-items: flex-end;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.alignBaseline {
|
|
144
|
+
align-items: baseline;
|
|
145
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Cluster.tokens.scss — Component-scoped tokens for <Cluster>. Each token
|
|
2
|
+
// defaults to the primitive the SCSS used before this migration.
|
|
3
|
+
:root {
|
|
4
|
+
// Gap per size
|
|
5
|
+
--cluster-gap-xs: var(--space-1);
|
|
6
|
+
--cluster-gap-sm: var(--space-2);
|
|
7
|
+
--cluster-gap-md: var(--space-3);
|
|
8
|
+
--cluster-gap-lg: var(--space-4);
|
|
9
|
+
--cluster-gap-xl: var(--space-6);
|
|
10
|
+
--cluster-gap-2xl: var(--space-8);
|
|
11
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { forwardRef, type HTMLAttributes, type Ref } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from './Cluster.module.scss';
|
|
4
|
+
|
|
5
|
+
/** Horizontal gap between children. Values in pixels: 4 / 8 / 12 / 16 / 24 / 32. */
|
|
6
|
+
export type ClusterGap = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
7
|
+
|
|
8
|
+
/** Main-axis distribution. `between` is the toolbar pattern. */
|
|
9
|
+
export type ClusterJustify = 'start' | 'center' | 'end' | 'between';
|
|
10
|
+
|
|
11
|
+
/** Cross-axis alignment. */
|
|
12
|
+
export type ClusterAlign = 'start' | 'center' | 'end' | 'baseline';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Rendered element. A small union rather than a fully generic polymorphic
|
|
16
|
+
* `as`, mirroring `TextAs`; details on the `as` prop.
|
|
17
|
+
*/
|
|
18
|
+
export type ClusterAs = 'div' | 'span' | 'section' | 'aside';
|
|
19
|
+
|
|
20
|
+
export interface ClusterProps extends HTMLAttributes<HTMLElement> {
|
|
21
|
+
/**
|
|
22
|
+
* Element to render. Defaults to `'div'`.
|
|
23
|
+
* - `div` (default) — block-level flex container; right for nearly all uses.
|
|
24
|
+
* - `span` — renders `display: inline-flex`, for phrasing-content contexts
|
|
25
|
+
* where a block element is invalid HTML: inside `<button>` (e.g. a
|
|
26
|
+
* `ButtonGroup.Item` icon + label), `<a>`, or `<label>`.
|
|
27
|
+
* - `section` — only for a genuinely standalone, nameable region; pair with
|
|
28
|
+
* `aria-label`/`aria-labelledby` (an unnamed section is just a div to AT).
|
|
29
|
+
* - `aside` — exposes a `complementary` landmark to screen readers; label it,
|
|
30
|
+
* and never use it for mere visual grouping.
|
|
31
|
+
*
|
|
32
|
+
* `span` is the ONLY value valid inside `<button>`/`<a>`/`<label>` —
|
|
33
|
+
* `section` and `aside` are flow content and remain invalid HTML there.
|
|
34
|
+
*/
|
|
35
|
+
as?: ClusterAs;
|
|
36
|
+
/**
|
|
37
|
+
* Gap between children, in pixels:
|
|
38
|
+
* `xs` (4) / `sm` (8) / `md` (12, default) / `lg` (16) / `xl` (24) / `2xl` (32).
|
|
39
|
+
*/
|
|
40
|
+
gap?: ClusterGap;
|
|
41
|
+
/**
|
|
42
|
+
* Horizontal distribution.
|
|
43
|
+
* - `start` (default) — items at the start.
|
|
44
|
+
* - `center` — items centered.
|
|
45
|
+
* - `end` — items at the end. Canonical form-footer pattern.
|
|
46
|
+
* - `between` — first item at start, last at end, gap between. Canonical toolbar pattern (title left, actions right).
|
|
47
|
+
*/
|
|
48
|
+
justify?: ClusterJustify;
|
|
49
|
+
/**
|
|
50
|
+
* Vertical alignment.
|
|
51
|
+
* - `start` / `center` (default) / `end` / `baseline`.
|
|
52
|
+
*/
|
|
53
|
+
align?: ClusterAlign;
|
|
54
|
+
/**
|
|
55
|
+
* Lets the container shrink below its content's intrinsic width
|
|
56
|
+
* (`min-width: 0`), so a `<Text truncate>` inside can ellipsize instead of
|
|
57
|
+
* being hard-cut by a clipping ancestor.
|
|
58
|
+
*
|
|
59
|
+
* Reach for it when this Cluster is an item of a **row** flex container (or a
|
|
60
|
+
* grid item) that clips — a `Calendar` `renderEvent` chip, a `Card.Header`
|
|
61
|
+
* row. Without it the flex default (`min-width: auto`) floors the
|
|
62
|
+
* container at its content's min-content width and the ellipsis never
|
|
63
|
+
* appears. That floor applies because a Cluster sets no `overflow` — per CSS
|
|
64
|
+
* Flexbox §4.5 a flex item keeps its automatic minimum size while its computed
|
|
65
|
+
* `overflow` is non-scrollable (`visible` or `clip`); the scrollable values
|
|
66
|
+
* (`hidden`/`auto`/`scroll`) drop it to `0`. That is why a `<Text truncate>`
|
|
67
|
+
* (overflow hidden) never needs this and a Cluster around it does.
|
|
68
|
+
*
|
|
69
|
+
* It is a **no-op** inside a column `Stack` (the automatic minimum size
|
|
70
|
+
* applies only on the flex MAIN axis, so there is no horizontal floor), and
|
|
71
|
+
* inside a plain block or a table cell (the automatic minimum size applies
|
|
72
|
+
* to flex and grid ITEMS only, so `min-width: auto` is just `0` there). A table cell is
|
|
73
|
+
* a no-op for a different reason than it looks: auto table layout floors the
|
|
74
|
+
* cell at its content's min-content width regardless, so what makes text
|
|
75
|
+
* truncate there is `table-layout: fixed` or a `max-width` on the cell — not
|
|
76
|
+
* this prop.
|
|
77
|
+
*
|
|
78
|
+
* Opt-in rather than the default on purpose: a container that CAN shrink
|
|
79
|
+
* also VOLUNTEERS for shrink, so turning it on where the content is NOT
|
|
80
|
+
* truncatable (buttons, badges, icons) lets that content be clipped
|
|
81
|
+
* instead. Set it on the container whose text should give way, not on one
|
|
82
|
+
* holding controls.
|
|
83
|
+
*
|
|
84
|
+
* Related: `<Constrain flex="grow">` applies the same `min-width: 0` but
|
|
85
|
+
* also forces `flex: 1 1 0`, and renders a `<div>` — reach for this prop
|
|
86
|
+
* when you want only the shrink permission, or when you are inside a
|
|
87
|
+
* `<button>`/`<a>`/`<label>` where a `<div>` is invalid HTML.
|
|
88
|
+
*
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
minWidth0?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Caps the cluster at its container's width (`max-width: 100%`). Meant for
|
|
94
|
+
* `as="span"` inside running text: an inline cluster otherwise sizes to its
|
|
95
|
+
* content, so a `<Text as="span" truncate>` child with a long title makes
|
|
96
|
+
* the cluster overflow the paragraph instead of ellipsizing at the line
|
|
97
|
+
* edge. Combine with `wrap={false}` + a truncating child. The chip is one
|
|
98
|
+
* inline box: if the text before it leaves too little room on the line, the
|
|
99
|
+
* whole chip wraps to the next line, then ellipsizes at the full paragraph
|
|
100
|
+
* width. Phrasing-safe (still a span) — unlike `<Constrain maxWidth>`, which
|
|
101
|
+
* renders a `<div>` that is invalid inside `<p>` (#571).
|
|
102
|
+
*
|
|
103
|
+
* For an entity link row (icon, KEY, title, status, adornments) prefer
|
|
104
|
+
* `<EntityChip truncate trailing={…}>`, which does exactly this.
|
|
105
|
+
*
|
|
106
|
+
* @default false
|
|
107
|
+
*/
|
|
108
|
+
maxWidthFull?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Content-driven switch between one row and stacked. While the children fit
|
|
111
|
+
* on one line they stay content-sized and the free space collects between
|
|
112
|
+
* the first child and the rest (the rest sit at the end). When they no
|
|
113
|
+
* longer fit, every child that wraps onto its own line stretches to fill
|
|
114
|
+
* that line.
|
|
115
|
+
*
|
|
116
|
+
* Canonical case: a status pill plus a `<Grid columns={2}>` of two buttons —
|
|
117
|
+
* pill left and buttons right while there is room, buttons dropping under the
|
|
118
|
+
* pill at full width (equal columns) when there is not. No breakpoint to guess,
|
|
119
|
+
* unlike `Grid collapseBelow`.
|
|
120
|
+
*
|
|
121
|
+
* How: an invisible `::before` spacer soaks up a shared line's slack, so the
|
|
122
|
+
* children there get a negligible share (at most 1px per 1000px of slack); a
|
|
123
|
+
* non-first child alone on a wrapped line takes the whole line. Children
|
|
124
|
+
* wrapped together share it. The spacer cancels its own gap, so it adds no
|
|
125
|
+
* width: the switch happens exactly when the content stops fitting, also
|
|
126
|
+
* with a single child or `as="span"`.
|
|
127
|
+
*
|
|
128
|
+
* Limits: `justify` is inert while this is on (the spacer owns the slack);
|
|
129
|
+
* `wrap={false}` makes it moot (nothing wraps); a consumer `order` on
|
|
130
|
+
* children breaks it — don't. A child's own `flex` (via its `className`)
|
|
131
|
+
* overrides the stretch for that child. "First child" means the first
|
|
132
|
+
* ELEMENT: a leading bare text node is not it — wrap text in an element
|
|
133
|
+
* (e.g. `<Text>`).
|
|
134
|
+
*
|
|
135
|
+
* @default false
|
|
136
|
+
*/
|
|
137
|
+
stretchWrapped?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Whether children wrap to additional lines when the container is narrow.
|
|
140
|
+
* - `true` (default) — natural for toolbars and tag lists.
|
|
141
|
+
* - `false` — use sparingly, when overflow is preferable to wrapping
|
|
142
|
+
* (e.g. inside a narrow table cell with fixed-width action buttons).
|
|
143
|
+
*/
|
|
144
|
+
wrap?: boolean;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const gapClass: Record<ClusterGap, string> = {
|
|
148
|
+
xs: styles.gapXs,
|
|
149
|
+
sm: styles.gapSm,
|
|
150
|
+
md: styles.gapMd,
|
|
151
|
+
lg: styles.gapLg,
|
|
152
|
+
xl: styles.gapXl,
|
|
153
|
+
'2xl': styles.gap2xl,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const justifyClass: Record<ClusterJustify, string> = {
|
|
157
|
+
start: styles.justifyStart,
|
|
158
|
+
center: styles.justifyCenter,
|
|
159
|
+
end: styles.justifyEnd,
|
|
160
|
+
between: styles.justifyBetween,
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
const alignClass: Record<ClusterAlign, string> = {
|
|
164
|
+
start: styles.alignStart,
|
|
165
|
+
center: styles.alignCenter,
|
|
166
|
+
end: styles.alignEnd,
|
|
167
|
+
baseline: styles.alignBaseline,
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Horizontal layout primitive that wraps.
|
|
172
|
+
* @see docs/components/Cluster.md
|
|
173
|
+
*/
|
|
174
|
+
export const Cluster = forwardRef<HTMLElement, ClusterProps>(function Cluster(
|
|
175
|
+
{
|
|
176
|
+
as = 'div',
|
|
177
|
+
gap = 'md',
|
|
178
|
+
justify = 'start',
|
|
179
|
+
align = 'center',
|
|
180
|
+
wrap = true,
|
|
181
|
+
minWidth0 = false,
|
|
182
|
+
stretchWrapped = false,
|
|
183
|
+
maxWidthFull = false,
|
|
184
|
+
className,
|
|
185
|
+
...props
|
|
186
|
+
},
|
|
187
|
+
ref,
|
|
188
|
+
) {
|
|
189
|
+
const Component = as;
|
|
190
|
+
// The rendered element type varies across the union, so the JSX ref slot
|
|
191
|
+
// expects an intersection of the element ref types. Cast like Text does —
|
|
192
|
+
// the runtime type is always correct because Component is exactly `as`.
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
|
+
const domRef = ref as unknown as Ref<any>;
|
|
195
|
+
// className merged via clsx so consumer classes stack with ours;
|
|
196
|
+
// {...props} last so the consumer can override anything (Pattern A).
|
|
197
|
+
return (
|
|
198
|
+
<Component
|
|
199
|
+
ref={domRef}
|
|
200
|
+
className={clsx(
|
|
201
|
+
styles.cluster,
|
|
202
|
+
as === 'span' && styles.inline,
|
|
203
|
+
gapClass[gap],
|
|
204
|
+
justifyClass[justify],
|
|
205
|
+
alignClass[align],
|
|
206
|
+
wrap && styles.wrap,
|
|
207
|
+
minWidth0 && styles.minWidth0,
|
|
208
|
+
stretchWrapped && styles.stretchWrapped,
|
|
209
|
+
maxWidthFull && styles.maxWidthFull,
|
|
210
|
+
className,
|
|
211
|
+
)}
|
|
212
|
+
{...props}
|
|
213
|
+
/>
|
|
214
|
+
);
|
|
215
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@use './Code.tokens';
|
|
2
|
+
|
|
3
|
+
.code {
|
|
4
|
+
font-family: var(--font-family-mono);
|
|
5
|
+
font-size: var(--code-font-size);
|
|
6
|
+
|
|
7
|
+
// stylelint-disable-next-line property-disallowed-list -- inline chip padding (component-internal, not at the boundary)
|
|
8
|
+
padding: 0 var(--code-padding-x);
|
|
9
|
+
border-radius: var(--code-radius);
|
|
10
|
+
background: var(--code-bg);
|
|
11
|
+
color: var(--code-fg);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.toneDefault {
|
|
15
|
+
color: var(--code-fg-default);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.toneMuted {
|
|
19
|
+
color: var(--code-fg-muted);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.toneAccent {
|
|
23
|
+
color: var(--code-fg-accent);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.toneDanger {
|
|
27
|
+
color: var(--code-fg-danger);
|
|
28
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Code.tokens.scss — Component-scoped tokens for <Code>. Covers the inline mono chip's surface + per-tone foreground. --font-family-mono stays primitive per the don't-tokenize list.
|
|
2
|
+
:root {
|
|
3
|
+
// Surface + base typography
|
|
4
|
+
--code-font-size: var(--font-size-code);
|
|
5
|
+
--code-padding-x: var(--space-1);
|
|
6
|
+
--code-radius: var(--radius-sm);
|
|
7
|
+
--code-bg: var(--color-bg-muted);
|
|
8
|
+
--code-fg: var(--color-fg);
|
|
9
|
+
|
|
10
|
+
// Tone — foreground only (background stays muted across tones)
|
|
11
|
+
--code-fg-default: var(--color-fg);
|
|
12
|
+
--code-fg-muted: var(--color-fg-muted);
|
|
13
|
+
--code-fg-accent: var(--color-accent);
|
|
14
|
+
--code-fg-danger: var(--color-danger);
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from './Code.module.scss';
|
|
4
|
+
|
|
5
|
+
/** Color tone. */
|
|
6
|
+
export type CodeTone = 'default' | 'muted' | 'accent' | 'danger';
|
|
7
|
+
|
|
8
|
+
export interface CodeProps extends HTMLAttributes<HTMLElement> {
|
|
9
|
+
/**
|
|
10
|
+
* Color tone for the code text. The chip background stays the same;
|
|
11
|
+
* only the text color changes.
|
|
12
|
+
* - `default` — `--color-fg`
|
|
13
|
+
* - `muted` — `--color-fg-muted`
|
|
14
|
+
* - `accent` — `--color-accent`
|
|
15
|
+
* - `danger` — `--color-danger`
|
|
16
|
+
*/
|
|
17
|
+
tone?: CodeTone;
|
|
18
|
+
/** Code content. */
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const TONE_CLASS: Record<CodeTone, string> = {
|
|
23
|
+
default: styles.toneDefault,
|
|
24
|
+
muted: styles.toneMuted,
|
|
25
|
+
accent: styles.toneAccent,
|
|
26
|
+
danger: styles.toneDanger,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Inline `<code>` primitive: monospace text with a subtle chip background.
|
|
31
|
+
* @see docs/components/Code.md
|
|
32
|
+
*/
|
|
33
|
+
export const Code = forwardRef<HTMLElement, CodeProps>(function Code(
|
|
34
|
+
{ tone = 'default', className, children, ...rest },
|
|
35
|
+
ref,
|
|
36
|
+
) {
|
|
37
|
+
// className merged above via clsx so consumer extensions stack with our classes;
|
|
38
|
+
// {...rest} last so any other consumer-passed attr can override ours (Pattern A).
|
|
39
|
+
return (
|
|
40
|
+
<code ref={ref} className={clsx(styles.code, TONE_CLASS[tone], className)} {...rest}>
|
|
41
|
+
{children}
|
|
42
|
+
</code>
|
|
43
|
+
);
|
|
44
|
+
});
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
@use './CodeBlock.tokens';
|
|
2
|
+
@use '../../styles/mixins' as *;
|
|
3
|
+
|
|
4
|
+
.root {
|
|
5
|
+
border: var(--border-width) solid var(--code-block-border-color);
|
|
6
|
+
border-radius: var(--code-block-radius);
|
|
7
|
+
background: var(--code-block-bg);
|
|
8
|
+
color: var(--code-block-fg);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.header {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: space-between;
|
|
15
|
+
gap: var(--space-2);
|
|
16
|
+
min-height: var(--size-md);
|
|
17
|
+
padding-inline: var(--code-block-padding-x) var(--space-2);
|
|
18
|
+
border-bottom: var(--border-width) solid var(--code-block-border-color);
|
|
19
|
+
border-start-start-radius: inherit;
|
|
20
|
+
border-start-end-radius: inherit;
|
|
21
|
+
background: var(--code-block-header-bg);
|
|
22
|
+
|
|
23
|
+
// The header's own border is the divider; the tab strip's baseline would double it.
|
|
24
|
+
--tabs-border-color: transparent;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Tabs' own scroll wrapper already has min-width: 0, so a long strip scrolls
|
|
28
|
+
// inside the header; the title needs the same to truncate instead of pushing.
|
|
29
|
+
.title {
|
|
30
|
+
@include truncate;
|
|
31
|
+
|
|
32
|
+
min-width: 0;
|
|
33
|
+
font-size: var(--font-size-sm);
|
|
34
|
+
color: var(--color-fg-muted);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.actions {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-shrink: 0;
|
|
40
|
+
gap: var(--space-1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.body {
|
|
44
|
+
overflow-x: auto;
|
|
45
|
+
padding-block: var(--code-block-padding-y);
|
|
46
|
+
font-family: var(--font-family-mono);
|
|
47
|
+
font-size: var(--code-block-font-size);
|
|
48
|
+
line-height: var(--code-block-line-height);
|
|
49
|
+
white-space: pre;
|
|
50
|
+
tab-size: 2;
|
|
51
|
+
|
|
52
|
+
&:focus-visible {
|
|
53
|
+
@include focus-ring($offset: calc(var(--ring-width) * -1));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.wrap {
|
|
58
|
+
white-space: pre-wrap;
|
|
59
|
+
overflow-wrap: anywhere;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// The body's own internal scroll box (like ScrollArea), not outer layout.
|
|
63
|
+
.maxXs {
|
|
64
|
+
max-height: var(--measure-xs);
|
|
65
|
+
overflow-y: auto;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.maxSm {
|
|
69
|
+
max-height: var(--measure-sm);
|
|
70
|
+
overflow-y: auto;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.maxMd {
|
|
74
|
+
max-height: var(--measure-md);
|
|
75
|
+
overflow-y: auto;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.maxLg {
|
|
79
|
+
max-height: var(--measure-lg);
|
|
80
|
+
overflow-y: auto;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.maxXl {
|
|
84
|
+
max-height: var(--measure-xl);
|
|
85
|
+
overflow-y: auto;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// inline-block shrink-wraps to the longest line but never less than the body,
|
|
89
|
+
// so a highlighted line's tint spans the full scroll width, not just the viewport.
|
|
90
|
+
.lines {
|
|
91
|
+
display: inline-block;
|
|
92
|
+
min-width: 100%;
|
|
93
|
+
font: inherit;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Inline-block, not block: block-level lines make innerText add a break on top
|
|
97
|
+
// of the '\n' between them. min-height gives an empty line its line box.
|
|
98
|
+
.line {
|
|
99
|
+
display: inline-block;
|
|
100
|
+
min-width: 100%;
|
|
101
|
+
min-height: 1lh;
|
|
102
|
+
vertical-align: top;
|
|
103
|
+
padding-inline: var(--code-block-padding-x);
|
|
104
|
+
|
|
105
|
+
// Every line reserves the bar so highlighting never shifts text; a logical
|
|
106
|
+
// border (not an inset box-shadow) keeps the bar on the start side in RTL.
|
|
107
|
+
border-inline-start: var(--border-width-strong) solid transparent;
|
|
108
|
+
|
|
109
|
+
&[data-highlighted] {
|
|
110
|
+
border-inline-start-color: var(--code-block-line-highlight-bar);
|
|
111
|
+
background: var(--code-block-line-highlight-bg);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.keyword {
|
|
116
|
+
color: var(--code-block-syntax-keyword);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.string {
|
|
120
|
+
color: var(--code-block-syntax-string);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.number {
|
|
124
|
+
color: var(--code-block-syntax-number);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.comment {
|
|
128
|
+
color: var(--code-block-syntax-comment);
|
|
129
|
+
font-style: italic;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.function {
|
|
133
|
+
color: var(--code-block-syntax-function);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.property {
|
|
137
|
+
color: var(--code-block-syntax-property);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.punctuation {
|
|
141
|
+
color: var(--code-block-syntax-punctuation);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.plain {
|
|
145
|
+
color: var(--code-block-syntax-plain);
|
|
146
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// CodeBlock.tokens.scss — Component-scoped tokens for <CodeBlock>. Surface, highlighted line and the eight syntax colours. `--code-*` belongs to the inline <Code> chip.
|
|
2
|
+
:root {
|
|
3
|
+
// Surface
|
|
4
|
+
--code-block-bg: var(--color-bg-subtle);
|
|
5
|
+
--code-block-border-color: var(--color-border);
|
|
6
|
+
--code-block-radius: var(--radius-md);
|
|
7
|
+
--code-block-header-bg: var(--color-bg);
|
|
8
|
+
--code-block-fg: var(--color-fg);
|
|
9
|
+
--code-block-font-size: var(--font-size-code);
|
|
10
|
+
--code-block-line-height: var(--line-height-normal);
|
|
11
|
+
--code-block-padding-y: var(--space-3);
|
|
12
|
+
--code-block-padding-x: var(--space-4);
|
|
13
|
+
|
|
14
|
+
// Highlighted line
|
|
15
|
+
--code-block-line-highlight-bg: var(--color-accent-bg-subtle);
|
|
16
|
+
--code-block-line-highlight-bar: var(--color-accent);
|
|
17
|
+
|
|
18
|
+
// Syntax — every colour is gated at AA on the surface and the highlighted line
|
|
19
|
+
--code-block-syntax-keyword: var(--color-palette-violet-fg);
|
|
20
|
+
--code-block-syntax-string: var(--color-palette-green-fg);
|
|
21
|
+
--code-block-syntax-number: var(--color-warning-strong);
|
|
22
|
+
--code-block-syntax-comment: var(--color-fg-muted);
|
|
23
|
+
--code-block-syntax-function: var(--color-palette-blue-fg);
|
|
24
|
+
--code-block-syntax-property: var(--color-palette-teal-fg);
|
|
25
|
+
--code-block-syntax-punctuation: var(--color-fg-muted);
|
|
26
|
+
--code-block-syntax-plain: var(--code-block-fg);
|
|
27
|
+
}
|